示例#1
0
    public virtual void WorkTask()
    {
        TaskBlockage status = TaskDoable();

        if (status == TaskBlockage.doable)
        {
            taskTimer += TaskRatio() * Time.deltaTime;
        }
        else
        {
            CancelTask(status);
        }

        if (taskTimer > taskSpeed)
        {
            DoTask();
        }
    }
示例#2
0
文件: GoToTask.cs 项目: Nounka/LD48
    public override void WorkTask()
    {
        List <Vector2Int> listPosition;

        listPosition = ClosePosition();
        foreach (Vector2Int vect in unavailablePosition)
        {
            if (listPosition.Contains(vect))
            {
                listPosition.Remove(vect);
            }
        }
        listPosition = CleanOutside(listPosition);
        if (listPosition.Count > 0)
        {
            destination = ChooseDestination(listPosition);
            TaskBlockage status = TaskDoable();

            switch (status)
            {
            case (TaskBlockage.doable):
                if (destination != actor.position)
                {
                    Map map = GameState.instance.map;
                    if (secondaryTask != null)
                    {
                        if (secondaryTask.pathToFollow != null)
                        {
                            if (secondaryTask.pathToFollow.waypoints[0] != null)
                            {
                                if (secondaryTask.pathToFollow.waypoints[0].relatedTile.position != destination)
                                {
                                    secondaryTask       = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y)));
                                    secondaryTask.actor = actor;
                                }
                                else
                                {
                                    /*secondaryTask = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y)));
                                     * secondaryTask.actor = actor;*/
                                }
                            }
                            else
                            {
                                unavailablePosition.Add(destination);
                                WorkTask();
                            }
                        }
                        else
                        {
                            secondaryTask.pathToFollow = map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y));
                            if (secondaryTask.pathToFollow == null)
                            {
                                unavailablePosition.Add(destination);
                                WorkTask();
                            }
                        }

                        secondaryTask.WorkTask();
                        taskTimer = 0;
                    }
                    else
                    {
                        secondaryTask       = new MoveTask(map.GetPath(map.GetTile(actor.position.x, actor.position.y), map.GetTile(destination.x, destination.y)));
                        secondaryTask.actor = actor;
                    }
                }
                else
                {
                    taskTimer += Time.deltaTime * TaskRatio();

                    DoMainTask();
                    if (taskTimer > taskSpeed)
                    {
                        DoTask();
                    }
                }
                break;

            default:
                CancelTask(status);
                break;
            }
        }
        else
        {
            CancelTask(TaskBlockage.noPath);
        }
    }
示例#3
0
 public virtual void CancelTask(TaskBlockage _status)
 {
     actor.RemoveTask(this, _status);
 }