Code: Select all
class CSeasBigCannon inherit CTower
var CObjHndl m_xBirdie;
var bool m_bActivated;
export proc void OnInit(bool p_bLoad)
super.OnInit(p_bLoad);
if(!p_bLoad)then
m_bActivated=false;
SetTurretLink("we");
SetTurret("seas_hq_big_cannon_rotator");
m_sTurretAttackAnim="attack_front";
endif;
endproc;
export proc void Load(^CUOFReaderNode p_pxReaderNode)
if(p_pxReaderNode^.GetType()=="SBig")then
var ^CArc pxArc=^(p_pxReaderNode^.GetArc());
m_xBirdie.DoKArc(pxArc^);
pxArc^ << m_bActivated;
else
super.Load(p_pxReaderNode);
endif;
endproc;
export proc void Save(^CUOFWriterNode p_pxWriterNode)
super.Save(p_pxWriterNode);
var CFourCC xBase="SBig";
var ^CUOFWriterNode pxWalk=p_pxWriterNode^.AddSubChunk(xBase,1);
var ^CArc pxArc=^(pxWalk^.GetArc());
m_xBirdie.DoKArc(pxArc^);
pxArc^ << m_bActivated;
pxWalk^.Close();
endproc;
export proc void AbortTask()
if(!m_bActivated)then
m_bActivated=true;
var ^CGameObj pxO=CSrvWrap.GetObjMgr()^.CreateObj("seas_hq_big_cannon_cannon", GetOwner());
AddGroupedChildren(pxO^.GetGuid());
var CFourCC xLink="we";
pxO^.LinkAction(m_xTurret,xLink);
m_xBirdie=pxO^.GetHandle();
endif;
endproc;
export proc bool CreateBuildingCorpse()
var ^CBuildingCorpse pxGameObj = cast<CBuildingCorpse>(CSrvWrap.GetObjMgr()^.CreateObj("BuildingCorpse",GetOwner(),GetPos(),GetRotation()));
if(pxGameObj!=null)then
pxGameObj^.SetSource(m_xTurret.GetObj());
pxGameObj^.Init("seas_hq_big_cannon_rotator", GetName(), 8.0, GetAge());
if(m_xTurret.IsValid())then
pxGameObj^.SetRot(m_xTurret.GetObj()^.GetRot());
pxGameObj^.SecRotAction(m_xTurret.GetObj()^.GetAdditionalRot(),0.0);
m_xTurret.GetObj()^.Delete();
endif;
endif;
pxGameObj = cast<CBuildingCorpse>(CSrvWrap.GetObjMgr()^.CreateObj("BuildingCorpse",GetOwner(),GetPos(),GetRotation()));
if(pxGameObj!=null)then
pxGameObj^.SetSource(this);
pxGameObj^.Init("seas_hq_big_cannon", GetName(), 8.0, GetAge());
endif;
return true;
endproc;
export proc void Delete()
if(m_xBirdie.IsValid())then m_xBirdie.GetObj()^.Delete(); endif;
super.Delete();
endproc;
export proc bool AttackEnemy(^CFightingObj p_pxEnemy, vec3 p_vTarget, ref bool p_rbRotated)
if(!m_bActivated)then return false; endif;
var bool bReturned=super.AttackEnemy(p_pxEnemy,p_vTarget,p_rbRotated);
var ^CGameObj pxBuildUp=m_xBirdie.GetObj();
if(pxBuildUp!=null && !p_rbRotated)then
pxBuildUp^.SetAnim("attack_front",1);
endif;
return bReturned;
endproc;
endclass;
This code make the cannon rotation possible
Code: Select all
export proc void OnInit(bool p_bLoad)
super.OnInit(p_bLoad);
if(!p_bLoad)then
m_bActivated=false;
SetTurretLink("we");
SetTurret("seas_hq_big_cannon_rotator");
m_sTurretAttackAnim="attack_front";
endif;
endproc;
pxArc^ << m_bActivated;
Code: Select all
export proc void Load(^CUOFReaderNode p_pxReaderNode)
if(p_pxReaderNode^.GetType()=="SBig")then
var ^CArc pxArc=^(p_pxReaderNode^.GetArc());
m_xBirdie.DoKArc(pxArc^);
pxArc^ << m_bActivated;
else
super.Load(p_pxReaderNode);
endif;
endproc;
export proc void Save(^CUOFWriterNode p_pxWriterNode)
super.Save(p_pxWriterNode);
var CFourCC xBase="SBig";
var ^CUOFWriterNode pxWalk=p_pxWriterNode^.AddSubChunk(xBase,1);
var ^CArc pxArc=^(pxWalk^.GetArc());
m_xBirdie.DoKArc(pxArc^);
pxArc^ << m_bActivated;
pxWalk^.Close();
endproc;
This is the trigger that the ClassName need to work: so if AbortTask is actived enable "seas_hq_big_cannon_cannon"
Code: Select all
export proc void AbortTask()
if(!m_bActivated)then
m_bActivated=true;
var ^CGameObj pxO=CSrvWrap.GetObjMgr()^.CreateObj("seas_hq_big_cannon_cannon", GetOwner());
AddGroupedChildren(pxO^.GetGuid());
var CFourCC xLink="we";
pxO^.LinkAction(m_xTurret,xLink);
m_xBirdie=pxO^.GetHandle();
endif;
endproc;
Code: Select all
export proc bool CreateBuildingCorpse()
var ^CBuildingCorpse pxGameObj = cast<CBuildingCorpse>(CSrvWrap.GetObjMgr()^.CreateObj("BuildingCorpse",GetOwner(),GetPos(),GetRotation()));
if(pxGameObj!=null)then
pxGameObj^.SetSource(m_xTurret.GetObj());
pxGameObj^.Init("seas_hq_big_cannon_rotator", GetName(), 8.0, GetAge());
if(m_xTurret.IsValid())then
pxGameObj^.SetRot(m_xTurret.GetObj()^.GetRot());
pxGameObj^.SecRotAction(m_xTurret.GetObj()^.GetAdditionalRot(),0.0);
m_xTurret.GetObj()^.Delete();
endif;
endif;
pxGameObj = cast<CBuildingCorpse>(CSrvWrap.GetObjMgr()^.CreateObj("BuildingCorpse",GetOwner(),GetPos(),GetRotation()));
if(pxGameObj!=null)then
pxGameObj^.SetSource(this);
pxGameObj^.Init("seas_hq_big_cannon", GetName(), 8.0, GetAge());
endif;
return true;
endproc;
export proc void Delete()
if(m_xBirdie.IsValid())then m_xBirdie.GetObj()^.Delete(); endif;
super.Delete();
endproc;
export proc bool AttackEnemy(^CFightingObj p_pxEnemy, vec3 p_vTarget, ref bool p_rbRotated)
if(!m_bActivated)then return false; endif;
var bool bReturned=super.AttackEnemy(p_pxEnemy,p_vTarget,p_rbRotated);
var ^CGameObj pxBuildUp=m_xBirdie.GetObj();
if(pxBuildUp!=null && !p_rbRotated)then
pxBuildUp^.SetAnim("attack_front",1);
endif;
return bReturned;
endproc;
endclass;