/*
**  Copyright (C) 1999 Microsoft Corporation. All Rights Reserved.
**
**  File:	CreateDroneAction.cpp
**
**  Author:  
**
**  Description:
**      Implementation of the training library "CreateDroneAction" interface.
**
**  History:
*/
#include    "pch.h"
#include    "CreateDroneAction.h"
#include    "TrainingMission.h"

namespace Training
{
    //------------------------------------------------------------------------------
    // global variabes
    //------------------------------------------------------------------------------
    extern TrainingMission*    g_pMission;

    //------------------------------------------------------------------------------
    // class methods
    //------------------------------------------------------------------------------
    /* void */  CreateDroneAction::CreateDroneAction (const ZString& name, ShipID shipID, HullID hullID, SideID sideID, PilotType pilotType) : 
    m_name (name),
    m_shipID (shipID),
    m_hullID (hullID),
    m_sideID (sideID),
    m_pilotType (pilotType),
    m_sectorID (NA),
    m_position (0.0f, 0.0f, 0.0f),
    m_orientation (Vector (1.0f, 0.0f, 0.0f), Vector (0.0f, 1.0f, 0.0f)),
    m_stationTypeID (NA),
    m_expendableTypeID (NA)
    {
    }

    //------------------------------------------------------------------------------
    /* void */  CreateDroneAction::~CreateDroneAction (void)
    {
    }

    //------------------------------------------------------------------------------
    void        CreateDroneAction::Execute (void)
    {
        if (m_sectorID == NA)
        {
            // figure some default location
        }
        IshipIGC*   pShip = g_pMission->CreateDrone (m_name, m_shipID, m_hullID, m_sideID, m_pilotType);
        pShip->SetPosition (m_position);
        pShip->SetOrientation (m_orientation);
        pShip->SetCluster (trekClient.GetCore ()->GetCluster(m_sectorID));

        if (m_stationTypeID != NA)
            pShip->SetBaseData (trekClient.GetCore ()->GetStationType (m_stationTypeID));
        else if (m_expendableTypeID != NA)
            pShip->SetBaseData (trekClient.GetCore ()->GetExpendableType (m_expendableTypeID));
    }

    //------------------------------------------------------------------------------
    void        CreateDroneAction::SetCreatedLocation (SectorID sectorID, const Vector& position)
    {
        m_sectorID = sectorID;
        m_position = position;
    }

    //------------------------------------------------------------------------------
    void        CreateDroneAction::SetCreatedOrientation (const Vector& forward, const Vector& up)
    {
        m_orientation.Set (forward, up);
    }

    //------------------------------------------------------------------------------
    void        CreateDroneAction::SetStationType (StationTypeID stationTypeID)
    {
        m_stationTypeID = stationTypeID;
    }

    //------------------------------------------------------------------------------
    void        CreateDroneAction::SetExpendableType (ExpendableTypeID expendableTypeID)
    {
        m_expendableTypeID = expendableTypeID;
    }

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