Esempio n. 1
0
    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());
    }
Esempio n. 2
0
    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
    }
Esempio n. 3
0
    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)));
    }