示例#1
0
 public void TaskProgresing(Type_Worker worker)
 {
     if (workerTask.Count > 0)
     {
         foreach (var item in workerTask)
         {
             switch (item.Value.taskType)
             {
             case Task.TaskType.resourceGathering:
                 if (item.Key == worker)
                 {
                     ResourceContainer mainResources = item.Value.taskTarget.GetComponent <ResourceContainer>();
                     if (mainResources != null)
                     {
                         if (mainResources.balance > 0)
                         {
                             item.Value.taskProgress = (100 / mainResources.maxBalance) * (mainResources.maxBalance - mainResources.balance);
                         }
                         else
                         {
                             item.Value.taskProgress = 100;
                             FinishTask(item.Value);
                         }
                     }
                 }
                 break;
             }
         }
     }
 }
示例#2
0
    private void SetWorkerTaskInQueue(Type_Worker freeWorker)
    {
        if (!isHasFreeTask())
        {
            return;
        }
        Task newTask = taskInQueue.Dequeue();

        freeWorker.haveTask = true;
        workerTask.Add(freeWorker, newTask);
        freeWorker.SetTask(newTask);
    }
示例#3
0
 public void RemoveWorker(Type_Worker worker)
 {
     workers.Remove(worker);
     foreach (var item in workerTask)
     {
         if (item.Key == worker)
         {
             ChangeWorker(worker);
             return;
         }
     }
 }
示例#4
0
    private void ChangeWorker(Type_Worker currentWorker)
    {
        Task task = null;

        foreach (var item in workerTask)
        {
            if (item.Key == currentWorker)
            {
                task = item.Value;
            }
        }
        workerTask.Remove(currentWorker);
        AddTask(task);
    }
示例#5
0
    private void AddTask(Task newTask)
    {
        Type_Worker freeWorker = FindFreeWorker();

        if (freeWorker != null)
        {
            freeWorker.haveTask = true;
            workerTask.Add(freeWorker, newTask);
            freeWorker.SetTask(newTask);
        }
        else
        {
            taskInQueue.Enqueue(newTask);
        }
    }
示例#6
0
    private void FinishTask(Task task)
    {
        Type_Worker worker = null;

        foreach (var item in workerTask)
        {
            if (item.Value == task)
            {
                item.Value.isCompleted = true;
                worker = item.Key;
                outlineListener.RemoveFromOutline(item.Value.taskTarget);
                item.Key.RemoveTask();
            }
        }
        if (worker != null)
        {
            workerTask.Remove(worker);
        }
        else
        {
            Debug.LogError("Can't finish task");
        }
    }
示例#7
0
 public void AddWorker(Type_Worker worker)
 {
     workers.Add(worker);
 }