Beispiel #1
0
 public void AddCommand(UnitCommands.UnitCommand command, bool clearQueue = false)
 {
     if (clearQueue)
     {
         m_commandsQueue.Clear();
     }
     m_commandsQueue.Enqueue(command);
 }
Beispiel #2
0
 public void AttackPositionImmediate(Vector3 position)
 {
     UnitCommands.UnitCommand command = new UnitCommands.UnitCommand
     {
         type       = UnitCommands.UnitCommandType.AttackPoint,
         parameters = position
     };
     AddCommand(command, true);
 }
Beispiel #3
0
    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();
        }
    }