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); } }
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); } } }