/// <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(); }
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); }