private SelectGameObject selectGameObject; // объект, отвечающий за выделение объектов(юнитов) на экране #endregion // Use this for initialization void Start() { sceneCamera = Camera.main; // указываем на главную камеру сцены basicCameraRotation = sceneCamera.transform.rotation; // запоминаем углы камеры CalcMoveAngles(); // вычисляем перемещение по сторонам относительно угла поворота камеры selectGameObject = GetComponent <SelectGameObject>(); // получаем объект SelectGameObject GameParams.GamePlayState = GamePlayState.Play; // устанавливаем состояние игры на Play }
// Update is called once per frame /// <summary> /// Отслеживание состояний соревнования. /// </summary> void Update() { if ((GameParams.GamePlayState == GamePlayState.SelectStart || GameParams.GamePlayState == GamePlayState.SelectFinish) && Input.GetMouseButtonDown(1)) { RaycastHit hit = SelectGameObject.GetHitFromCursor(); if (hit.transform == null || hit.transform.tag != "Terrain") { return; } Vector2Int spawnPos = new Vector2Int(Mathf.RoundToInt(hit.point.x), Mathf.RoundToInt(hit.point.z)); // получение координат по щелчку мыши if (TerrainNavGrid.Instance.IsCellUsed(spawnPos)) { return; } if (GameParams.GamePlayState == GamePlayState.SelectStart) // если состояние - выбор старта { SpawnStart(spawnPos); // спавн объекта зоны старта } else // если состояние - выбор финиша { float distance = Vector2Int.Distance(StartGridPosition, spawnPos); if (distance <= GameConstants.MaxDistance) { TipsControls.Instance.SetTipsText("Слишком близко к зоне старта!"); return; } PathFinder finder = new PathFinder(StartGridPosition, spawnPos, GameConstants.PathFindMinHeight); finder.FindPath(); if (!finder.IsPathFound) { TipsControls.Instance.SetTipsText("Невозможно найти путь между стартом и финишом!"); return; } SpawnFinish(spawnPos); // спавн объекта зоны финиша } GameParams.GamePlayState = GamePlayState.SelectParams; TipsControls.Instance.SetTipsText(""); } }
void Update() { if (GameParams.GamePlayState != GamePlayState.Spawn || !Input.GetMouseButton(1)) { return; } RaycastHit hit = SelectGameObject.GetHitFromCursor(); if (hit.transform == null || hit.transform.tag != "Terrain") { return; } Vector2Int spawnPos = new Vector2Int(Mathf.RoundToInt(hit.point.x), Mathf.RoundToInt(hit.point.z)); if (TerrainNavGrid.Instance.IsCellUsed(spawnPos)) { return; } GameObject target; if (UnitButtonState == ButtonKeyStates.Checked) { if (GameParams.GameMode == GameModes.Competitions && Vector2Int.Distance(spawnPos, CompetitionMenuContols.StartGridPosition) > GameConstants.FlagRadius) { TipsControls.Instance.SetTipsText("Невозможно спавнить юнита за пределами зоны старта!"); } else { target = Instantiate(UnitPrefab, new Vector3(spawnPos.x, 0, spawnPos.y), new Quaternion()) as GameObject; IsPlayerSpawnUnit = GameParams.GameMode == GameModes.Competitions; } } else { target = Instantiate(BuildPrefab, new Vector3(spawnPos.x, 0, spawnPos.y), new Quaternion()) as GameObject; IsPlayerSpawnBuild = GameParams.GameMode == GameModes.Competitions; } if (GameParams.GameMode == GameModes.Competitions) { ResetButtonsStates(); } }
private void OnDestroy() { instance = null; }
private void Awake() { instance = this; }