public void AddCommand(UnitCommands.UnitCommand command, bool clearQueue = false) { if (clearQueue) { m_commandsQueue.Clear(); } m_commandsQueue.Enqueue(command); }
public void AttackPositionImmediate(Vector3 position) { UnitCommands.UnitCommand command = new UnitCommands.UnitCommand { type = UnitCommands.UnitCommandType.AttackPoint, parameters = position }; AddCommand(command, true); }
virtual protected void ResolveCommandsQueue() { if (m_commandsQueue.Count == 0) { Unit closestFoe = ScanClosest(~m_faction, m_scanRange); AttackUnit(closestFoe); return; } UnitCommands.UnitCommand currentCommand = m_commandsQueue.Peek(); bool currentCommandResolved = false; switch (currentCommand.type) { case UnitCommands.UnitCommandType.AttackArea: currentCommandResolved = AttackArea((Rect)currentCommand.parameters); break; case UnitCommands.UnitCommandType.AttackPoint: currentCommandResolved = AttackPoint((Vector3)currentCommand.parameters); break; case UnitCommands.UnitCommandType.AttackUnit: currentCommandResolved = AttackUnit((Unit)currentCommand.parameters); break; case UnitCommands.UnitCommandType.Stop: currentCommandResolved = true; break; case UnitCommands.UnitCommandType.Wait: currentCommandResolved = Wait((float)currentCommand.parameters); break; case UnitCommands.UnitCommandType.WaitForCondition: currentCommandResolved = ((UnitCommands.WaitForConditionDelegate)currentCommand.parameters)(); break; } if (currentCommandResolved) { m_navMeshAgent.Stop(); m_commandsQueue.Dequeue(); } }