示例#1
0
        /// <summary>
        /// </summary>
        /// <param name="buttonTemplate"> </param>
        /// <param name="lineTemplate"> </param>
        /// <param name="pos"> </param>
        /// <param name="prevComponent"> </param>
        /// <param name="nextComponent"> </param>
        public CurveHandle(ButtonGenerator buttonTemplate, LineGenerator lineTemplate, Vector2 pos, Vector2 prevComponent, Vector2 nextComponent)
        {
            buttonTemplate = new ButtonGenerator("HullEditorHandle.json");
            buttonTemplate.Identifier = (int) HandleType.Center;
            buttonTemplate.X = pos.X;
            buttonTemplate.Y = pos.Y;

            _centerButton = buttonTemplate.GenerateButton();
            _centerButton.GetComponent<DraggableComponent>().DragMovementDispatcher += TranslateToLinks;
            _centerButton.GetComponent<DraggableComponent>().DragMovementClamp += ClampHandleMovement;

            buttonTemplate.Identifier = (int) HandleType.Prev;
            buttonTemplate.X = prevComponent.X + pos.X;
            buttonTemplate.Y = prevComponent.Y + pos.Y;
            _prevButton = buttonTemplate.GenerateButton();
            _prevButton.GetComponent<DraggableComponent>().DragMovementDispatcher += TranslateToLinks;
            _prevButton.GetComponent<DraggableComponent>().DragMovementClamp += ClampHandleMovement;

            buttonTemplate.Identifier = (int) HandleType.Next;
            buttonTemplate.X = nextComponent.X + pos.X;
            buttonTemplate.Y = nextComponent.Y + pos.Y;
            _nextButton = buttonTemplate.GenerateButton();
            _nextButton.GetComponent<DraggableComponent>().DragMovementDispatcher += TranslateToLinks;
            _nextButton.GetComponent<DraggableComponent>().DragMovementClamp += ClampHandleMovement;

            _prevLine = lineTemplate.GenerateLine();
            _nextLine = lineTemplate.GenerateLine();

            _prevLine.OriginPoint = _centerButton.CentPosition;
            _prevLine.DestPoint = _prevButton.CentPosition;

            _nextLine.OriginPoint = _centerButton.CentPosition;
            _nextLine.DestPoint = _nextButton.CentPosition;

            _nextButton.GetComponent<FadeComponent>().ForceFadeout();
            _prevButton.GetComponent<FadeComponent>().ForceFadeout();
            _centerButton.GetComponent<FadeComponent>().ForceFadeout();

            _prevLine.GetComponent<FadeComponent>().ForceFadeout();
            _nextLine.GetComponent<FadeComponent>().ForceFadeout();

            _nextButton.GetComponent<FadeComponent>().ForceFadeout();
            _prevButton.GetComponent<FadeComponent>().ForceFadeout();
            _centerButton.GetComponent<FadeComponent>().ForceFadeout();

            _prevLine.GetComponent<FadeComponent>().ForceFadeout();
            _nextLine.GetComponent<FadeComponent>().ForceFadeout();

            InterlinkButtonEvents();
        }
示例#2
0
    public void NewGame(bool reset = true)
    {
        // Reset some stuff
        if (reset)
        {
            score        = 0;
            livesCurrent = livesMax;
        }

        // Set these to active (only useful on first start)
        elapsedGameTimeText.SetActive(true);
        scoreText.SetActive(true);
        livesText.SetActive(true);

        // Fake
        float screenLeftEdge   = -30;
        float screenRightEdge  = 30;
        float screenTopEdge    = 20;
        float screenBottomEdge = -10;
        // float screenWidth = Mathf.Abs(screenLeftEdge - screenRightEdge);
        float screenHeight = Mathf.Abs(screenTopEdge - screenBottomEdge);

        Debug.Log("New Game");
        EndGame();  // Deletes everything and sets up our scene again
        elapsedGameTime = 0f;
        gameInProgress  = true;
        if (paused)
        {
            Pause();
        }

        // Instantiate Terrain
        // Done first so we know heights for the laser base and landing pad
        Vector3 terrainPosition = new Vector3(0, 0, 0);

        terrain = Instantiate(terrainPrefab, terrainPosition, Quaternion.identity);

        // Adjust terrain settings
        LineGenerator lineGenerator = terrain.GetComponent <LineGenerator>();

        lineGenerator.offset = Random.Range(5, 500);
        // Tuned so that there is 1 segment per unit (makes the landing pad and laser height calculations easer)
        lineGenerator.leftEdge  = -1000;
        lineGenerator.rightEdge = 1000;
        lineGenerator.segments  = 2000;
        lineGenerator.GenerateLine();
        var vertices = lineGenerator.edgeVertices.ToArray();
        // Heights is reused for setting the landing pad and laser heights
        List <float> heights = new List <float>();

        for (int i = 0; i < vertices.Length; i++)
        {
            heights.Add(vertices[i].y);
        }
        float maxHeight = Mathf.Max(heights.ToArray());

        // float minHeight = Mathf.Min(heights.ToArray());

        terrain.transform.position = new Vector3(0, maxHeight * -1, 0.2f);

        // Instantiate Lander
        float   landerX        = Random.Range(screenLeftEdge / 2, screenRightEdge / 2);
        float   landerY        = Random.Range(screenTopEdge - screenHeight / 10, screenTopEdge);
        Vector3 landerPosition = new Vector3(landerX, landerY, 0);

        lander = Instantiate(landerPrefab, landerPosition, Quaternion.identity);

        // Base random position
        float baseX = Random.Range(screenLeftEdge, screenRightEdge);

        // Instantiate Landing Pad
        float landingPadX = baseX;
        int   landingPadTerrainVertexIndex = Mathf.RoundToInt(landingPadX - lineGenerator.leftEdge);

        Debug.Log(landingPadTerrainVertexIndex);
        int   landingPadWidth      = 8;
        int   landingPadHeight     = 10;
        float landingPadTerrainSum = 0f;

        for (int i = landingPadWidth * -1 / 2; i < landingPadWidth / 2; i++)
        {
            landingPadTerrainSum += heights[landingPadTerrainVertexIndex + i];
        }
        float   landingPadTerrainAverage = landingPadTerrainSum / landingPadWidth;
        float   landingPadY        = landingPadTerrainAverage + maxHeight * -1 + landingPadHeight / 2;
        Vector3 landingPadPosition = new Vector3(landingPadX, landingPadY, 0);

        landingPad = Instantiate(landingPadPrefab, landingPadPosition, Quaternion.identity);
        // Instantiate Laser Base
        float laserOffset = Random.Range(15f, 50f);

        // Randomize side laser is on
        if (Random.Range(0, 1) < 0.5f)
        {
            laserOffset *= -1;
        }
        // Make sure laser doesn't go off screen
        if (laserOffset + baseX < screenLeftEdge || laserOffset + baseX > screenRightEdge)
        {
            laserOffset *= -1;
        }
        float laserBaseX = baseX + laserOffset;
        int   laserBaseTerrainVertexIndex = Mathf.RoundToInt(laserBaseX - lineGenerator.leftEdge);

        Debug.Log(laserBaseTerrainVertexIndex);
        int   laserBaseWidth      = 14;
        int   laserBaseHeight     = 10;
        float laserBaseTerrainSum = 0f;

        for (int i = laserBaseWidth * -1 / 2; i < laserBaseWidth / 2; i++)
        {
            laserBaseTerrainSum += heights[laserBaseTerrainVertexIndex + i];
        }
        float   laserBaseTerrainAverage = laserBaseTerrainSum / laserBaseWidth;
        float   laserBaseY        = laserBaseTerrainAverage + maxHeight * -1 + laserBaseHeight / 2;
        Vector3 laserBasePosition = new Vector3(laserBaseX, laserBaseY, 0);

        laserBase = Instantiate(laserBasePrefab, laserBasePosition, Quaternion.identity);
    }