예제 #1
0
    public void AutoDeterminedPointCommand(Vector3 point)
    {
        Vector3   followPoint;
        Transform target = GetObjectInPoint(point, out followPoint);

        if (target != null)
        {
            if (_player.EnemyMask.IsLayerInLayerMask(target.gameObject.layer))//если цель - враг
            {
                var message = new TaskDataMessage {
                    TaskData = new FollowToTargetForAttack_Task.FollowToTargetForAttack_TaskData(target, false),
                    NewQueue = true
                };

                SendCommand(ObjectCommand.AddTask, message);
            }
            //else {} //иначе отправить команду "следовать за объектом"
        }
        else
        {
            var message = new TaskDataMessage {
                TaskData = new FollowToPoint_Task.FollowToPoint_TaskData(followPoint),
                NewQueue = true
            };

            SendCommand(ObjectCommand.AddTask, message);
        }
    }
예제 #2
0
    public void AddTask(TaskDataMessage message)
    {
        if (/*_tasks != null &&*/ _tasks.AllowedTasks != null && _tasks.AllowedTaskTypes != null)
        {
            var taskTypeFromMessage = message.TaskData.GetTaskType();

            for (int i = 0; i < _tasks.AllowedTasks.Length; i++)
            {
                if (_tasks.AllowedTaskTypes[i] == taskTypeFromMessage)
                {
                    if (message.NewQueue)
                    {
                        _tasks.TaskDataQueue.Clear();
                    }

                    _tasks.TaskDataQueue.Enqueue(new TaskDataItem {
                        TaskData = message.TaskData, TaskNumber = i
                    });                                                                                            //добавление задачи  в конец очереди

                    if (_tasks.CurrentTask != null)
                    {
                        _tasks.CurrentTask.CompleteTask();//в задаче после ее завершения вызывается DequeueTask()
                    }
                    else
                    {
                        DequeueTask();
                    }
                    break;
                }
            }
        }
    }
    public override void OnCompPlayerClick(List <Transform> commandReceivers)
    {
        base.OnCompPlayerClick(commandReceivers);

        if (_target != null)
        {
            var message = new TaskDataMessage
            {
                TaskData = new FollowToTargetForAttack_Task.FollowToTargetForAttack_TaskData(_target, true),
                NewQueue = true
            };
            foreach (Transform receiver in commandReceivers)
            {
                receiver.SendMessage(ObjectCommand.AddTask.ToString(), message, SendMessageOptions.DontRequireReceiver);
            }
        }
    }