#ifndef __AGCSite_h__
#define __AGCSite_h__
#include <igc.h>
template <class T>
class CAGCSite : public T
{
public:
void DestroySideEvent(IsideIGC* pIsideIGC)
{
GetAGCGlobal()->RemoveAGCObject(pIsideIGC, true);
T::DestroySideEvent(pIsideIGC);
}
void TerminateModelEvent(ImodelIGC* model)
{
GetAGCGlobal()->RemoveAGCObject(model, true);
T::TerminateModelEvent(model);
}
void TerminateMissionEvent(ImissionIGC* pMission)
{
GetAGCGlobal()->RemoveAGCObject(pMission, true);
T::TerminateMissionEvent(pMission);
}
void ChangeCluster(IshipIGC* pship,
IclusterIGC* pclusterOld,
IclusterIGC* pclusterNew)
{
LPCSTR pszShip = pship ? pship->GetName () : "";
AGCUniqueID shipID = pship ? pship->GetUniqueID() : -1;
AGCUniqueID newClusterID = pclusterOld ? pclusterOld->GetUniqueID() : -1;
AGCUniqueID oldClusterID = pclusterNew ? pclusterNew->GetUniqueID() : -1;
LPCSTR pszClusterOld = pclusterOld ? pclusterOld->GetName() : "";
LPCSTR pszClusterNew = pclusterNew ? pclusterNew->GetName() : "";
LPCSTR pszContext = pship ? pship->GetMission()->GetContextName() : NULL;
_AGCModule.TriggerContextEvent(NULL, EventID_ShipChangesSectors, pszContext,
pszShip, shipID, newClusterID, oldClusterID, 4,
"New Sector" , VT_I4 , newClusterID,
"Old Sector" , VT_I4 , oldClusterID,
"New Sector Name", VT_LPSTR, pszClusterNew,
"Old Sector Name", VT_LPSTR, pszClusterOld);
T::ChangeCluster(pship, pclusterOld, pclusterNew);
}
void KillShipEvent(Time now, IshipIGC* ship, ImodelIGC* launcher,
float amount, const Vector& p1, const Vector& p2)
{
LPCSTR pszShip = ship ? ship->GetName () : "";
AGCUniqueID shipID = ship ? ship->GetUniqueID() : -1;
AGCUniqueID launcherID = launcher ? launcher->GetUniqueID() : -1;
LPCSTR pszLauncher = launcher ? GetModelName(launcher) : "";
HAGCLISTENERS hListeners = GetAGCGlobal()->EventListeners(
EventID_ShipKilled, shipID, -1, -1);
if (hListeners)
{
IAGCVectorPtr spVector1, spVector2;
_SVERIFYE(GetAGCGlobal()->MakeAGCVector(&p1, &spVector1));
_SVERIFYE(GetAGCGlobal()->MakeAGCVector(&p2, &spVector2));
int IsLifepod = 0;
IhullTypeIGC* pht = ship->GetBaseHullType();
if (pht != NULL)
{
if (pht->HasCapability(c_habmLifepod)) IsLifepod = 1;
}
LPCSTR pszContext = ship ? ship->GetMission()->GetContextName() : NULL;
_AGCModule.TriggerContextEvent(hListeners, EventID_ShipKilled, pszContext,
pszShip, shipID, -1, -1, 7, "Launcher" , VT_I4 , launcherID,
"LauncherName" , VT_LPSTR , pszLauncher,
"Amount" , VT_R4 , amount,
"MissionID" , VT_I4 , ship->GetMission()->GetMissionID(), "Vector1" , VT_DISPATCH, (IAGCVector*)spVector1,
"Vector2" , VT_DISPATCH, (IAGCVector*)spVector2,
"zLifepod" , VT_I4 , IsLifepod); }
T::KillShipEvent(now, ship, launcher, amount, p1, p2);
}
bool UseRipcord(IshipIGC* pship, ImodelIGC* pmodel)
{
LPCSTR pszShip = pship ? pship->GetName () : "";
AGCUniqueID shipID = pship ? pship->GetUniqueID() : -1;
AGCUniqueID modelID = pmodel ? pmodel->GetUniqueID() : -1;
LPCSTR pszModel = pmodel ? GetModelName(pmodel) : "";
HAGCLISTENERS hListeners = GetAGCGlobal()->EventListeners(
EventID_ShipUsesRipcord, shipID, -1, -1);
if (hListeners)
{
LPCSTR pszContext = pship ? pship->GetMission()->GetContextName() : NULL;
_AGCModule.TriggerContextEvent(hListeners, EventID_ShipUsesRipcord,
pszContext, pszShip, shipID, -1, -1, 2,
"Model" , VT_I4 , modelID,
"ModelName" , VT_LPSTR , pszModel);
}
return T::UseRipcord(pship, pmodel);
}
};
#endif