Exemple #1
0
    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) });
    }
Exemple #2
0
    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();
        }
    }