#ifndef __PROJECTILEIGC_H_
#define __PROJECTILEIGC_H_
#include "modelIGC.h"
class CprojectileIGC : public TmodelIGC<IprojectileIGC>
{
public:
CprojectileIGC(void);
~CprojectileIGC(void);
public:
virtual HRESULT Initialize(ImissionIGC* pMission, Time now, const void* data, int dataSize);
virtual void Terminate(void);
virtual void Update(Time now);
virtual int Export(void* data);
virtual ObjectType GetObjectType(void) const
{
return OT_projectile;
}
virtual void SetCluster(IclusterIGC* cluster)
{
AddRef();
{
IclusterIGC* c = GetCluster();
if (c)
c->DeleteModel(this);
}
TmodelIGC<IprojectileIGC>::SetCluster(cluster);
if (cluster)
cluster->AddModel(this);
Release();
}
virtual void HandleCollision(Time timeCollision,
float tCollision,
const CollisionEntry& entry,
ImodelIGC* pModel);
virtual IprojectileTypeIGC* GetProjectileType(void) const
{
return m_projectileType;
}
virtual ImodelIGC* GetLauncher(void) const
{
return m_launcher;
}
virtual void SetLauncher(ImodelIGC* newVal)
{
assert (!m_launcher); assert (newVal);
newVal->AddRef();
m_launcher = newVal;
GetHitTest()->SetNoHit(m_launcher->GetHitTest());
SetSide(m_launcher->GetSide());
}
virtual void SetGunner(IshipIGC* newVal)
{
assert (!m_launcher); assert (newVal);
newVal->AddRef();
m_launcher = newVal;
GetHitTest()->SetNoHit(newVal->GetParentShip()->GetHitTest());
SetSide(m_launcher->GetSide());
}
private:
IprojectileTypeIGC* m_projectileType;
ImodelIGC* m_launcher;
ExplosionData* m_pExplosionData;
Time m_timeExpire;
};
#endif