public void Spawn() { isPlanterWaiting = true; List<Hexagon> emptyHex = new List<Hexagon>(); //1:Looking for a spot: for (int i = 0; i < Map.instance.Hexagons.Length; i++) { if ((Map.instance.Hexagons [i].HexState == HexagonState.Empty || Map.instance.Hexagons [i].HexState == HexagonState.CutTree) && !Map.instance.Hexagons [i].isTarget) { int amountOfFungiAroundHex = 0; foreach (var hex in Map.instance.Hexagons [i].SurroundingHexagons) { if (hex.HasFungi) { ++amountOfFungiAroundHex; } } for (int j = 0; j < (amountOfFungiAroundHex*4)+1; ++j) { emptyHex.Add(Map.instance.Hexagons [i]); } } } if (emptyHex.Count == 0) { Destroy(gameObject); _targetHex.ShowOverTile(false, new Color()); return; } _targetHex = emptyHex [Random.Range(0, emptyHex.Count)]; _targetHex.isTarget = true; _targetTr = _targetHex.transform; //Highlight the hexgon _targetHex.StartCoroutine(_targetHex.FlashHexagon(new Color32(1, 71, 99, 255))); //2:Looking for the spawn hexagon _spawnHex = Map.instance.HexBorders [Random.Range(0, Map.instance.HexBorders.Length)]; //4:Enable the movement transform.position = _spawnHex.transform.position; _targetHex.StartCoroutine(MovePlanter()); }
public IEnumerator PlaceNGO(Hexagon hex) { _targetHex.isTarget = false; _targetHex.ngo = null; hex.isTarget = true; hex.ngo = this; isNGOWaiting = false; ProtectionSelection = false; _targetHex.StartCoroutine(hex.FlashHexagon(new Color32(100, 116, 0, 255))); #region 1:Moving Vector3 newPosition; float sqrRemainingDistance; if (hex != _targetHex) { sqrRemainingDistance = (_thisTransform.position - hex.transform.position).sqrMagnitude; while (sqrRemainingDistance > 1e-6) { newPosition = Vector3.MoveTowards(_rb.position, hex.transform.position, MoveTime * Time.deltaTime); _rb.MovePosition(newPosition); sqrRemainingDistance = (_thisTransform.position - hex.transform.position).sqrMagnitude; yield return null; } } #endregion #region 2:ProtectHexagon GetComponent<SpriteRenderer>().sprite = PickupSprite; yield return new WaitForSeconds(ProtectActionTime / 2); GetComponent<SpriteRenderer>().sprite = PickupWithFungiSprite; yield return new WaitForSeconds(ProtectActionTime / 2); GetComponent<SpriteRenderer>().sprite = NormalSprite; #endregion #region 3:Moving out the map float dist = 500f; Hexagon _exitHex = null; for (int i = 0; i < Map.instance.HexBorders.Length; i++) { if (Vector3.Distance(_thisTransform.position, Map.instance.HexBorders[i].transform.position) < dist) { _exitHex = Map.instance.HexBorders[i]; dist = Vector3.Distance(_thisTransform.position, Map.instance.HexBorders[i].transform.position); } } if (_exitHex != null) { sqrRemainingDistance = (transform.position - _exitHex.transform.position).sqrMagnitude; while (sqrRemainingDistance > 1e-6) { newPosition = Vector3.MoveTowards(_rb.position, _exitHex.transform.position, MoveTime * Time.deltaTime); _rb.MovePosition(newPosition); sqrRemainingDistance = (_thisTransform.position - _exitHex.transform.position).sqrMagnitude; yield return null; } } #endregion #region 4:HideNGO GetComponent<SpriteRenderer>().enabled = false; yield return new WaitForSeconds(ProtectionTime); #endregion #region 4:Destroy the NGO hex.isTarget = false; hex.ngo = null; hex.HexagonRenderer.material = ResourcesManager.instance.HexNormalMaterial; isNGOWaiting = false; Destroy(gameObject); #endregion }
private void SelectTarget() { if (_targetHex != null && _targetHex.ngo == null) _targetHex.isTarget = false; /*if(_targetHex.ngo != null) _targetHex.StopBlink*/ List<Hexagon> fullHex = new List<Hexagon>(); //1:Looking for a spot: for (int i = 0; i < Map.instance.Hexagons.Length; i++) { if (Map.instance.Hexagons[i].HexTree != null && !Map.instance.Hexagons[i].isTarget && Map.instance.Hexagons[i].Type != TreeType.Sapling && Map.instance.Hexagons[i].Type != TreeType.DeadTree) fullHex.Add(Map.instance.Hexagons[i]); } if (fullHex.Count == 0) { Destroy(gameObject); _targetHex.ShowOverTile(false, new Color()); } _targetHex = fullHex[Random.Range(0, fullHex.Count)]; _targetHex.isTarget = true; _targetTr = _targetHex.transform; StartCoroutine(_targetHex.FlashHexagon(new Color32(99,1,78,255))); }