2 @Copyright Looking Glass Studios, Inc.
3 1996,1997,1998,1999,2000 Unpublished Work.
6 ///////////////////////////////////////
7 // $Header: r:/t2repos/thief2/src/shock/shkaicbr.cpp,v 1.2 1999/05/29 21:43:54 JON Exp $
41 // Must be last header
44 ///////////////////////////////////////
46 STDMETHODIMP_(void) cAIShockRangedSubcombat::Init()
50 SetNotifications(kAICN_BeginFrame
|
51 kAICN_ActionProgress
|
57 sAIRangedCombatProp
*pRangedProp
= AIGetRangedCombat(GetID());
60 m_pCurrentLocation
= new cAIRangedLocation(this, *m_pAIState
->GetPortalLocation());
62 // create modes, if we were cool, these would be installed like components
63 // @TODO: dont add modes if applicability is too low
65 m_pModes
[m_numberModes
++] = new cAIRangedIdle(this);
66 m_pModes
[m_numberModes
++] = new cAIRangedShoot(this);
67 m_pModes
[m_numberModes
++] = new cAIRangedClose(this);
68 m_pModes
[m_numberModes
++] = new cAIShockRangedBackup(this);
69 m_pModes
[m_numberModes
++] = new cAIRangedWound(this);
70 m_pModes
[m_numberModes
++] = new cAIRangedStepRight(this);
71 m_pModes
[m_numberModes
++] = new cAIRangedStepLeft(this);
72 m_pModes
[m_numberModes
++] = new cAIRangedFlee(this);
75 m_pRangedCombatProp
= AIGetRangedCombat(GetID());
76 m_pRanges
= AIGetRangedRanges(GetID());
79 // @TODO: prop listener or something
80 m_rangesSq
.m_ranges
[0] = m_pRanges
->m_ranges
[0]*m_pRanges
->m_ranges
[0];
81 m_rangesSq
.m_ranges
[1] = m_pRanges
->m_ranges
[1]*m_pRanges
->m_ranges
[1];
82 m_rangesSq
.m_ranges
[2] = m_pRanges
->m_ranges
[2]*m_pRanges
->m_ranges
[2];
83 m_rangesSq
.m_ranges
[3] = m_pRanges
->m_ranges
[3]*m_pRanges
->m_ranges
[3];
88 ///////////////////////////////////////////////////////
90 // Shock physcast callback for ranged combat ability
93 BOOL
ShockRangedPhyscastCallback(ObjID objID
, const cPhysModel
* pModel
, sAIRangedCombatPhyscastData
* pData
)
95 // ignore myself & my target
96 if ((objID
== (pData
)->sourceID
) || (objID
== (pData
)->targetID
))
99 // ignore edge triggers
100 if ((pModel
->GetType(0) == kPMT_OBB
) && ((cPhysOBBModel
*)pModel
)->IsEdgeTrigger())
103 // ignore destroyable objects
105 if (ObjGetHitPoints(objID
, &hp
))
107 // except, don't ignore other AIs that are team-mates
108 AutoAppIPtr(AIManager
);
110 if ((pAI
= pAIManager
->GetAI(objID
)) != NULL
)
112 BOOL friendlyFire
= (AITeamCompare(AIGetTeam(pData
->sourceID
), AIGetTeam(objID
)) == kAI_Teammates
);