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; } } } } }