/*
**  Copyright (C) 1999 Microsoft Corporation. All Rights Reserved.
**
**  File:	GetCommandCondition.cpp
**
**  Author:  
**
**  Description:
**      Implementation of the training library "GetCommandCondition" interface.
**
**  History:
*/

#include    "pch.h"
#include    "GetCommandCondition.h"
#include    "TypeIDTarget.h"

namespace Training
{
    //------------------------------------------------------------------------------
    // class methods
    //------------------------------------------------------------------------------
    /* void */  GetCommandCondition::GetCommandCondition (IshipIGC* pShip, CommandID command) :
    m_pShip (new TypeIDTarget (OT_ship, pShip->GetObjectID ())),
    m_command (command)
    {
    }

    //------------------------------------------------------------------------------
    /* void */  GetCommandCondition::GetCommandCondition (ObjectID shipID, CommandID command) :
    m_pShip (new TypeIDTarget (OT_ship, shipID)),
    m_command (command)
    {
    }

    //------------------------------------------------------------------------------
    /* void */  GetCommandCondition::~GetCommandCondition (void)
    {
        delete m_pShip;
    }

    //------------------------------------------------------------------------------
    bool        GetCommandCondition::Evaluate (void)
    {
        IshipIGC*   pShip = static_cast<IshipIGC*> (static_cast<ImodelIGC*> (*m_pShip));
        // check that the ship is present
        if (pShip)
        {
            // the ship is there, so we return true if it has a command like the one we 
            // are checking for.
            return ((pShip->GetCommandID (c_cmdAccepted) == m_command) or (pShip->GetCommandID (c_cmdCurrent) == m_command)) ? true : false;
        }
        // the ship wasn't there for some reason, so we assume that this condition is true
        return true;
    }

    //------------------------------------------------------------------------------
}