public FishTask[] GetNewTask(Fish fish) { if (fish.satiation < 0.5f && storages[(int)type].Resource > 0) { return(new[] { new FishTask(fish, storages[(int)type].transform, FishTaskType.EatFood, storages[(int)type]) }); } var fishRoute = GetFishRoute(fish); if (_cityCreator != null && _cityCreator.neededFish > 0) { fishRoute?.RemoveFish(fish); var task = new FishTask(fish, _cityCreator.transform, FishTaskType.CreateCity); task.cityCreator = _cityCreator; return(new[] { task }); } if (fishRoute != null) { if (fishRoute.WorkersAmount >= fishRoute.workers.Count) { var tasks = fishRoute.GetTasks(fish); if (tasks == null) { fishRoute.Destroy(); return(new [] { new FishTask(fish, transform, FishTaskType.Move) }); } return(tasks); } else { fishRoute.RemoveFish(fish); return(new [] { new FishTask(fish, transform, FishTaskType.Move) }); } } else { var vacantRoute = GetVacantRoute(); if (vacantRoute != null) { vacantRoute.AssignFish(fish); var tasks = vacantRoute.GetTasks(fish); if (tasks == null) { vacantRoute.Destroy(); return(new [] { new FishTask(fish, transform, FishTaskType.Move) }); } return(tasks); } } return(new [] { new FishTask(fish, transform, FishTaskType.Move) }); }
void DoTaskAction(FishTask task) { switch (task.type) { case FishTaskType.Move: break; case FishTaskType.TakeFood: if (task.storage != null && task.storage.TakeFood(fish)) { break; } fish.taskManager.ClearTasks(); break; case FishTaskType.DepositFood: if (fish.carriedFood != null && task.storage != null) { task.storage.PutFood(fish, fish.carriedFood); } break; case FishTaskType.EatFood: if (task.storage != null) { task.storage.TakeFood(fish); } fish.EatFood(); break; case FishTaskType.CreateCity: task.cityCreator.AddFish(fish); break; default: throw new ArgumentOutOfRangeException(); } }