Example #1
0
    void SpringBehaviour()
    {
        if (_greenMobs.Length >= _locationGenerator.Size * 1.5)
        {
            _timeToBreeding = 20f;
        }

        if (_timeToBreeding > 0f)
        {
            _timeToBreeding = _timeToBreeding - Time.deltaTime;
        }
        else
        {
            _timeToBreeding = 0;
        }

        if (_way == WayPoint.Going)
        {
            if (_timeToBreeding <= 0f)
            {
                foreach (var t in _greenMobs)
                {
                    if (Math.Abs(t.transform.position.x - gameObject.transform.position.x) < 4f &&
                        Math.Abs(t.transform.position.y - gameObject.transform.position.y) < 4f)
                    {
                        if (_foodNeeds.ReturnFood() > 50 && _waterNeeds.ReturnWater() > 50)
                        {
                            _way = WayPoint.Breeding;
                        }
                    }
                }
            }


            if (gameObject.transform.position.x > _target.x - 0.5f &&
                gameObject.transform.position.x <= _target.x + 0.5f &&
                gameObject.transform.position.y > _target.y - 0.5f &&
                gameObject.transform.position.y <= _target.y + 2.7f)
            {
                _way = WayPoint.Choose;
            }
        }

        if (_way == WayPoint.Choose)
        {
            if (_timeManager.NameOfTime == TimeManager.TimeName.Night)
            {
                _seeker.CancelCurrentPathRequest();
            }
            else
            {
                if (_waterNeeds.ReturnWater() < _foodNeeds.ReturnFood())
                {
                    _way = _waterNeeds.ReturnWater() < 85 ? WayPoint.Water : WayPoint.Walking;
                }
                else
                {
                    _way = _foodNeeds.ReturnFood() < 85 ? WayPoint.Food : WayPoint.Walking;
                }
            }
        }

        if (_way == WayPoint.Breeding)
        {
            _timeToBreeding = 15f;
            Instantiate(GreenMobPrefab,
                        new Vector3(gameObject.transform.position.x + 0.3f, gameObject.transform.position.y + 0.3f,
                                    gameObject.transform.position.z), Quaternion.identity);
            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Food)
        {
            int number   = 0;
            var distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                     _locationGenerator.LongOfGrassBlock / 2) +
                            Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                     _locationGenerator.LongOfGrassBlock / 2));

            for (int i = 0; i < _foods.Length; i++)
            {
                var need = _foods[i].GetComponent <FoodHave>();
                if (need.ReturnFood() > _foodNeeds.ReturnFoodNeeds())
                {
                    if ((Math.Abs(_foods[i].transform.position.x - gameObject.transform.position.x -
                                  _locationGenerator.LongOfGrassBlock / 2) +
                         Math.Abs(_foods[i].transform.position.y - gameObject.transform.position.y +
                                  _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                    {
                        number = i;

                        distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                             _locationGenerator.LongOfGrassBlock / 2) +
                                    Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                             _locationGenerator.LongOfGrassBlock / 2));
                    }
                }
            }

            _target = _foods[number].transform.position;
            _seeker.StartPath(transform.position, _target + new Vector3(0f, 1.7f, 0), OnPathComplete);
            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Water)
        {
            int number = 0;

            var distance = (Math.Abs(_waters[number].transform.position.x - gameObject.transform.position.x -
                                     _locationGenerator.LongOfGrassBlock / 2) +
                            Math.Abs(_waters[number].transform.position.y - gameObject.transform.position.y +
                                     _locationGenerator.LongOfGrassBlock / 2));

            for (int i = 0; i < _waters.Length; i++)
            {
                var need = _waters[i].GetComponent <WaterHave>();
                if (need.ReturnWater() > _waterNeeds.ReturnWaterNeed())
                {
                    if ((Math.Abs(_foods[i].transform.position.x - gameObject.transform.position.x -
                                  _locationGenerator.LongOfGrassBlock / 2) +
                         Math.Abs(_foods[i].transform.position.y - gameObject.transform.position.y +
                                  _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                    {
                        number   = i;
                        distance = (Math.Abs(_waters[number].transform.position.x - gameObject.transform.position.x -
                                             _locationGenerator.LongOfGrassBlock / 2) +
                                    Math.Abs(_waters[number].transform.position.y - gameObject.transform.position.y +
                                             _locationGenerator.LongOfGrassBlock / 2));
                    }
                }
            }

            _target = _waters[number].transform.position;
            _seeker.StartPath(transform.position, _target + new Vector3(0f, 2.5f, 0), OnPathComplete);

            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Walking)
        {
            _goingTarget = new Vector3(
                _locationGenerator.Size *
                _locationGenerator.Rand.Next(0, (int)_locationGenerator.LongOfGrassBlock * 9 / 10),
                -_locationGenerator.Size *
                _locationGenerator.Rand.Next(0, (int)_locationGenerator.HeightOfGrassBlock / 2), 0f);
            _target = _goingTarget;

            _seeker.StartPath(transform.position, _target, OnPathComplete);
            _way = WayPoint.Going;
        }
    }
    void Way()
    {
        if (_way == WayPoint.Going)
        {
            if (_timeToBreeding <= 0f)
            {
                for (int i = 0; i < _redMobs.Length; i++)
                {
                    if (Math.Abs(_redMobs[i].transform.position.x - gameObject.transform.position.x) < 4f && Math.Abs(_redMobs[i].transform.position.y - gameObject.transform.position.y) < 4f)
                    {
                        if (_foodNeeds.ReturnFood() > 85)
                        {
                            if (_waterNeeds.ReturnWater() > 85)
                            {
                                _way = WayPoint.Breeding;
                            }
                        }
                    }
                }
            }

            for (int i = 0; i < _greenMobs.Length; i++)
            {
                if (Math.Abs(_greenMobs[i].transform.position.x - gameObject.transform.position.x) < 4f && Math.Abs(_greenMobs[i].transform.position.y - gameObject.transform.position.y) < 4f)
                {
                    _way = WayPoint.Devouring;
                }
            }


            if (gameObject.transform.position.x > _target.x - 0.5f &&
                gameObject.transform.position.x <= _target.x + 0.5f &&
                gameObject.transform.position.y > _target.y - 0.5f &&
                gameObject.transform.position.y <= _target.y + 2.7f)
            {
                //print("Done!");
                _way = WayPoint.Choose;
            }
        }

        if (_way == WayPoint.Breeding)
        {
            _timeToBreeding = 15f;
            Instantiate(RedMobPrefab,
                        new Vector3(gameObject.transform.position.x + 0.3f, gameObject.transform.position.y + 0.3f,
                                    gameObject.transform.position.z), Quaternion.identity);
            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Devouring)
        {
            if (_timeManager.NowSeason == TimeManager.Season.Summer & _waterNeeds.ReturnWater() < 75f & _foodNeeds.ReturnFood() < 75f)
            {
                for (int i = 0; i < _greenMobs.Length; i++)
                {
                    if (Math.Abs(_greenMobs[i].transform.position.x - gameObject.transform.position.x) < 4f &&
                        Math.Abs(_greenMobs[i].transform.position.y - gameObject.transform.position.y) < 4f)
                    {
                        //print("OM NOM NOM!!!");
                        Destroy(_greenMobs[i]);
                    }
                }

                _waterNeeds.AddWater(100f);
                _foodNeeds.AddFood(100f);
            }

            if (_waterNeeds.ReturnWater() < 60f || _foodNeeds.ReturnFood() < 60f)
            {
                for (int i = 0; i < _greenMobs.Length; i++)
                {
                    if (Math.Abs(_greenMobs[i].transform.position.x - gameObject.transform.position.x) < 4f &&
                        Math.Abs(_greenMobs[i].transform.position.y - gameObject.transform.position.y) < 4f)
                    {
                        //print("OM NOM NOM!!!");
                        Destroy(_greenMobs[i]);
                    }
                }

                _waterNeeds.AddWater(100f);
                _foodNeeds.AddFood(100f);
            }
            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Food)
        {
            if (_timeManager.NowSeason == TimeManager.Season.Summer)
            {
                int number = 0;
                if (_greenMobs.Length > 0)
                {
                    float distance = (Math.Abs(_greenMobs[number].transform.position.x -
                                               gameObject.transform.position.x -
                                               _locationGenerator.LongOfGrassBlock / 2) +
                                      Math.Abs(_greenMobs[number].transform.position.y -
                                               gameObject.transform.position.y +
                                               _locationGenerator.LongOfGrassBlock / 2));


                    for (int i = 0; i < _greenMobs.Length; i++)
                    {
                        if ((Math.Abs(_greenMobs[i].transform.position.x - gameObject.transform.position.x -
                                      _locationGenerator.LongOfGrassBlock / 2) +
                             Math.Abs(_greenMobs[i].transform.position.y - gameObject.transform.position.y +
                                      _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                        {
                            number = i;

                            distance = (Math.Abs(_greenMobs[number].transform.position.x -
                                                 gameObject.transform.position.x -
                                                 _locationGenerator.LongOfGrassBlock / 2) +
                                        Math.Abs(_greenMobs[number].transform.position.y -
                                                 gameObject.transform.position.y +
                                                 _locationGenerator.LongOfGrassBlock / 2));
                        }
                    }

                    _target = _greenMobs[number].transform.position;
                    _seeker.StartPath(transform.position, _target + new Vector3(0f, 1.7f, 0), OnPathComplete);
                    _way = WayPoint.Going;
                }
                else
                {
                    var distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                             _locationGenerator.LongOfGrassBlock / 2) +
                                    Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                             _locationGenerator.LongOfGrassBlock / 2));

                    for (int i = 0; i < _foods.Length; i++)
                    {
                        var need = _foods[i].GetComponent <FoodHave>();
                        if (need.ReturnFood() > _foodNeeds.ReturnFoodNeeds())
                        {
                            if ((Math.Abs(_foods[i].transform.position.x - gameObject.transform.position.x -
                                          _locationGenerator.LongOfGrassBlock / 2) +
                                 Math.Abs(_foods[i].transform.position.y - gameObject.transform.position.y +
                                          _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                            {
                                number = i;

                                distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                                     _locationGenerator.LongOfGrassBlock / 2) +
                                            Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                                     _locationGenerator.LongOfGrassBlock / 2));
                            }
                        }
                    }

                    _target = _foods[number].transform.position;
                    _seeker.StartPath(transform.position, _target + new Vector3(0f, 1.7f, 0), OnPathComplete);
                    _way = WayPoint.Going;
                }
            }
            else
            {
                int number = 0;

                var distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                         _locationGenerator.LongOfGrassBlock / 2) +
                                Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                         _locationGenerator.LongOfGrassBlock / 2));

                for (int i = 0; i < _foods.Length; i++)
                {
                    var need = _foods[i].GetComponent <FoodHave>();
                    if (need.ReturnFood() > _foodNeeds.ReturnFoodNeeds())
                    {
                        if ((Math.Abs(_foods[i].transform.position.x - gameObject.transform.position.x -
                                      _locationGenerator.LongOfGrassBlock / 2) +
                             Math.Abs(_foods[i].transform.position.y - gameObject.transform.position.y +
                                      _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                        {
                            number = i;

                            distance = (Math.Abs(_foods[number].transform.position.x - gameObject.transform.position.x -
                                                 _locationGenerator.LongOfGrassBlock / 2) +
                                        Math.Abs(_foods[number].transform.position.y - gameObject.transform.position.y +
                                                 _locationGenerator.LongOfGrassBlock / 2));
                        }
                    }
                }

                _target = _foods[number].transform.position;
                _seeker.StartPath(transform.position, _target + new Vector3(0f, 1.7f, 0), OnPathComplete);
                _way = WayPoint.Going;
            }
        }

        if (_way == WayPoint.Water)
        {
            //print("water");
            WaterHave need;
            int       number = 0;

            //WaterNeeds waterNeeds = GetComponent<WaterNeeds>();

            float distance;

            distance = (Math.Abs(_waters[number].transform.position.x - gameObject.transform.position.x -
                                 _locationGenerator.LongOfGrassBlock / 2) +
                        Math.Abs(_waters[number].transform.position.y - gameObject.transform.position.y +
                                 _locationGenerator.LongOfGrassBlock / 2));

            for (int i = 0; i < _waters.Length; i++)
            {
                need = _waters[i].GetComponent <WaterHave>();
                if (need.ReturnWater() > _waterNeeds.ReturnWaterNeed())
                {
                    if ((Math.Abs(_foods[i].transform.position.x - gameObject.transform.position.x -
                                  _locationGenerator.LongOfGrassBlock / 2) +
                         Math.Abs(_foods[i].transform.position.y - gameObject.transform.position.y +
                                  _locationGenerator.HeightOfGrassBlock / 2)) < distance)
                    {
                        number   = i;
                        distance = (Math.Abs(_waters[number].transform.position.x - gameObject.transform.position.x -
                                             _locationGenerator.LongOfGrassBlock / 2) +
                                    Math.Abs(_waters[number].transform.position.y - gameObject.transform.position.y +
                                             _locationGenerator.LongOfGrassBlock / 2));
                    }
                }
            }

            _target = _waters[number].transform.position;
            _seeker.StartPath(transform.position, _target + new Vector3(0f, 2.5f, 0), OnPathComplete);

            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Walking)
        {
            var seeker = GetComponent <Seeker>();

            _goingTarget = new Vector3(
                _locationGenerator.Size *
                _locationGenerator.Rand.Next(0, (int)_locationGenerator.LongOfGrassBlock * 9 / 10),
                -_locationGenerator.Size *
                _locationGenerator.Rand.Next(0, (int)_locationGenerator.HeightOfGrassBlock / 2), 0f);
            _target = _goingTarget;
            // _target = GameObject.Find("Player").transform.position;

            seeker.StartPath(transform.position, _target, OnPathComplete);
            _way = WayPoint.Going;
        }

        if (_way == WayPoint.Choose)
        {
            if (_timeManager.NameOfTime == TimeManager.TimeName.Morning)
            {
                _seeker.CancelCurrentPathRequest();
            }
            else
            {
                WaterNeeds water = GetComponent <WaterNeeds>();
                FoodNeeds  food  = GetComponent <FoodNeeds>();

                if (water.ReturnWater() < food.ReturnFood())
                {
                    if (water.ReturnWater() < 85)
                    {
                        _way = WayPoint.Water;
                    }
                    else
                    {
                        _way = WayPoint.Walking;
                        ;
                    }
                }
                else
                {
                    if (food.ReturnFood() < 85)
                    {
                        _way = WayPoint.Food;
                    }
                    else
                    {
                        _way = WayPoint.Walking;
                    }
                }
            }
        }
    }