// Forcibly selects the miner closest to a location, even if its busy
    Miner NextMinerForTask(Vector3 location, MinerTask task)
    {
        Miner retMiner = null;

        retMiner = NextAvailableMinerForTask(location, task);
        if (retMiner)
        {
            return(retMiner);
        }
        foreach (Miner miner in minerList)
        {
            if (task.CanMinerDo(miner))
            {
                if (retMiner != null)
                {
                    // TODO: experiment with using AStar distance calcs instead
                    if (Vector3.Distance(miner.transform.position, location) < Vector3.Distance(retMiner.transform.position, location))
                    {
                        retMiner = miner;
                    }
                }
                else
                {
                    retMiner = miner;
                }
            }
        }
        return(retMiner);
    }
Esempio n. 2
0
 public void CompleteTask()
 {
     MinerManager.instance.CompleteTask(currentTask);
     currentTask.DestroySelf();
     currentTask = null;
     StopAllCoroutines();
     DropHaulables();
 }
Esempio n. 3
0
 public void StartTask(MinerTask newTask)
 {
     if (newTask != null && newTask.target)
     {
         newTask.StartTaskCoroutine(this);
         currentTask       = newTask;
         currentTask.owner = this;
         EventManager.TriggerEvent("TaskStarted", currentTask.target);
     }
 }
Esempio n. 4
0
    public void PrioritizeAction()
    {
        MinerTask minerTask = taskable.currentTask.GetComponent <MinerTask>();

        if (minerTask)
        {
            MinerManager.instance.DoTaskNow(minerTask);
        }
        // Factory tasks can't be prioritized
    }
 // Forcible removes the task early
 public void CancelTask(MinerTask task)
 {
     if (queuedTaskList.Contains(task))
     {
         queuedTaskList.Remove(task);
         task.Cancel();
     }
     else if (selectedTaskList.Contains(task))
     {
         task.owner.CompleteTask();
         task.Cancel();
     }
 }
 public void DeselectTask(MinerTask task)
 {
     if (selectedTaskList.Contains(task))
     {
         selectedTaskList.Remove(task);
         queuedTaskList.Add(task);
     }
     if (!queuedTaskList.Contains(task))
     {
         queuedTaskList.Insert(0, task);
     }
     task.Unqueue();
 }
 // Returns the next task and moves it from the queue to selected
 public MinerTask GrabNextTask(Miner miner)
 {
     foreach (MinerTask task in queuedTaskList)
     {
         if (task.CanMinerDo(miner))
         {
             MinerTask nextTask = queuedTaskList[0];
             queuedTaskList.Remove(nextTask);
             selectedTaskList.Add(nextTask);
             return(nextTask);
         }
     }
     return(null);
 }
Esempio n. 8
0
    public void CancelAction()
    {
        MinerTask   minerTask   = taskable.currentTask.GetComponent <MinerTask>();
        FactoryTask factoryTask = taskable.currentTask.GetComponent <FactoryTask>();

        if (minerTask)
        {
            MinerManager.instance.CancelTask(minerTask);
        }
        else if (factoryTask)
        {
            factoryTask.owner.GetComponent <FactoryBase>().CancelTask();
        }
    }
Esempio n. 9
0
    public void RefreshUI()
    {
        if (taskable.currentTask)
        {
            taskImage.sprite = taskable.currentTask.spriteRenderer.sprite;
            taskName.text    = taskable.currentTask.taskName;
            prioritizeButton.interactable = false;

            MinerTask minerTask = taskable.currentTask.GetComponent <MinerTask>();
            if (minerTask && !minerTask.owner)
            {
                prioritizeButton.interactable = true;
            }
        }
        else
        {
            Destroy(this.gameObject);
        }
    }
Esempio n. 10
0
 public void ForceTask(MinerTask task, Miner miner)
 {
     if (miner)
     {
         if (miner.currentTask)
         {
             DeselectTask(miner.currentTask);
         }
         task.Queue();
         miner.SwapTask(task);
         if (queuedTaskList.Contains(task))
         {
             queuedTaskList.Remove(task);
         }
         if (!selectedTaskList.Contains(task))
         {
             selectedTaskList.Add(task);
         }
     }
     else
     {
         //TODO: notify user that no workers can do this task
     }
 }
Esempio n. 11
0
 // Removes the completed task from the selected list
 public void CompleteTask(MinerTask completedTask)
 {
     selectedTaskList.Remove(completedTask);
     completedTask.DestroySelf();
 }
Esempio n. 12
0
 // Forcibly schedules a new task and throws the old current task to the front of the queue
 // TODO select a unit to perform the task right now better
 public void DoTaskNow(MinerTask task)
 {
     ForceTask(task, NextMinerForTask(task.TargetLocation(), task));
 }
Esempio n. 13
0
 public void AddTaskToStartOfQueue(MinerTask task)
 {
     queuedTaskList.Insert(0, task);
     task.Queue();
 }
Esempio n. 14
0
 public void AddTaskToQueue(MinerTask task)
 {
     queuedTaskList.Add(task);
     task.Queue();
 }
Esempio n. 15
0
 // Prematurely stop work on a task
 public void UnqueueTask()
 {
     currentTask = null;
     StopAllCoroutines();
     DropHaulables();
 }
Esempio n. 16
0
 public void SwapTask(MinerTask task)
 {
     UnqueueTask();
     StartTask(task);
 }