Serious-Engine/Sources/EntitiesMP/Bullet.cpp
2016-03-11 15:57:17 +02:00

414 lines
17 KiB
C++

/*
* This file is generated by Entity Class Compiler, (c) CroTeam 1997-98
*/
#line 4 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
#include "StdH.h"
#include <EntitiesMP/Bullet.h>
#include <EntitiesMP/Bullet_tables.h>
CEntityEvent *EBulletInit::MakeCopy(void) { CEntityEvent *peeCopy = new EBulletInit(*this); return peeCopy;}
EBulletInit::EBulletInit() : CEntityEvent(EVENTCODE_EBulletInit) {;
ClearToDefault(penOwner);
ClearToDefault(fDamage);
};
#line 18 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet_OnPrecache(CDLLEntityClass *pdec, INDEX iUser)
{
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINSTONE);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINSAND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINREDSAND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINWATER);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINSTONENOSOUND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINSANDNOSOUND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINREDSANDNOSOUND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETSTAINWATERNOSOUND);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BLOODSPILL);
pdec->PrecacheClass(CLASS_BASIC_EFFECT, BET_BULLETTRAIL);
}
void CBullet::SetDefaultProperties(void) {
m_penOwner = NULL;
m_fDamage = 0.0f;
m_vTarget = FLOAT3D(0 , 0 , 0);
m_vTargetCopy = FLOAT3D(0 , 0 , 0);
m_vHitPoint = FLOAT3D(0 , 0 , 0);
m_iBullet = 0;
m_EdtDamage = DMT_BULLET ;
m_fBulletSize = 0.0f;
CEntity::SetDefaultProperties();
}
#line 58 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::SetDamage(FLOAT fDamage) {
#line 59 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_fDamage = fDamage ;
#line 60 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 63 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::CalcTarget(FLOAT fRange) {
#line 65 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
AnglesToDirectionVector (GetPlacement () . pl_OrientationAngle , m_vTarget );
#line 66 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget *= fRange ;
#line 67 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget += GetPlacement () . pl_PositionVector ;
#line 68 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTargetCopy = m_vTarget ;
#line 69 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 71 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::CalcTarget(CEntity * pen,FLOAT fRange) {
#line 72 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vTarget ;
#line 75 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
EntityInfo * peiTarget = (EntityInfo *) (pen -> GetEntityInfo ());
#line 76 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
GetEntityInfoPosition (pen , peiTarget -> vTargetCenter , vTarget );
#line 79 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget = (vTarget - GetPlacement () . pl_PositionVector ) . Normalize ();
#line 80 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget *= fRange ;
#line 81 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget += GetPlacement () . pl_PositionVector ;
#line 82 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTargetCopy = m_vTarget ;
#line 83 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 86 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::CalcJitterTarget(FLOAT fR) {
#line 87 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vJitter ;
#line 98 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fZ = FRnd () * 2.0f - 1.0f;
#line 99 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fA = FRnd () * 360.0f;
#line 100 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fT = Sqrt (1 - (fZ * fZ ));
#line 101 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vJitter (1) = fT * CosFast (fA );
#line 102 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vJitter (2) = fT * SinFast (fA );
#line 103 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vJitter (3) = fZ ;
#line 104 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vJitter = vJitter * fR * FRnd ();
#line 107 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget = m_vTargetCopy + vJitter ;
#line 108 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 111 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::CalcJitterTargetFixed(FLOAT fX,FLOAT fY,FLOAT fJitter) {
#line 112 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fRndX = FRnd () * 2.0f - 1.0f;
#line 113 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fRndY = FRnd () * 2.0f - 1.0f;
#line 114 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vX , vY ;
#line 115 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
const FLOATmatrix3D & m = GetRotationMatrix ();
#line 116 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vX (1) = m (1 , 1);vX (2) = m (2 , 1);vX (3) = m (3 , 1);
#line 117 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vY (1) = m (1 , 2);vY (2) = m (2 , 2);vY (3) = m (3 , 2);
#line 119 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vTarget = m_vTargetCopy + (vX * (fX + fRndX * fJitter )) + (vY * (fY + fRndY * fJitter ));
#line 120 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 123 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::LaunchBullet(BOOL bSound,BOOL bTrail,BOOL bHitFX)
#line 124 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 126 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CCastRay crRay (m_penOwner , GetPlacement () . pl_PositionVector , m_vTarget );
#line 127 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_bHitPortals = TRUE ;
#line 128 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_bHitTranslucentPortals = TRUE ;
#line 129 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_ttHitModels = CCastRay :: TT_COLLISIONBOX ;
#line 130 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_bPhysical = FALSE ;
#line 131 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_fTestR = m_fBulletSize ;
#line 132 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vHitDirection ;
#line 133 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
AnglesToDirectionVector (GetPlacement () . pl_OrientationAngle , vHitDirection );
#line 135 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
INDEX ctCasts = 0;
#line 136 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
while(ctCasts < 10)
#line 137 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 138 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(ctCasts == 0)
#line 139 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 141 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
GetWorld () -> CastRay (crRay );
#line 142 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 143 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
else
#line 144 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 146 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
GetWorld () -> ContinueCast (crRay );
#line 147 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 148 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ctCasts ++;
#line 151 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(crRay . cr_penHit == NULL )
#line 152 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 153 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
break ;
#line 154 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 156 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
const FLOAT fDamageMul = GetSeriousDamageMultiplier (m_penOwner );
#line 157 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
InflictDirectDamage (crRay . cr_penHit , m_penOwner , m_EdtDamage , m_fDamage * fDamageMul ,
#line 158 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_vHit , vHitDirection );
#line 160 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_vHitPoint = crRay . cr_vHit ;
#line 163 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(crRay . cr_penHit -> GetRenderType () == RT_BRUSH && crRay . cr_pbpoBrushPolygon != NULL )
#line 164 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 165 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CBrushPolygon * pbpo = crRay . cr_pbpoBrushPolygon ;
#line 166 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vHitNormal = FLOAT3D (pbpo -> bpo_pbplPlane -> bpl_plAbsolute );
#line 168 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
INDEX iSurfaceType = pbpo -> bpo_bppProperties . bpp_ubSurfaceType ;
#line 169 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
BulletHitType bhtType = BHT_BRUSH_STONE ;
#line 171 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
INDEX iContent = pbpo -> bpo_pbscSector -> GetContentType ();
#line 172 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CContentType & ct = GetWorld () -> wo_actContentTypes [ iContent ];
#line 174 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
bhtType = (BulletHitType ) GetBulletHitTypeForSurface (iSurfaceType );
#line 176 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(ct . ct_ulFlags & CTF_BREATHABLE_GILLS )
#line 177 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 179 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(iSurfaceType == SURFACE_WATER )
#line 180 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 181 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vHitNormal = - vHitNormal ;
#line 183 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
bhtType = BHT_BRUSH_WATER ;
#line 184 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 186 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
else
#line 187 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 188 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
bhtType = BHT_BRUSH_UNDER_WATER ;
#line 189 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 190 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 192 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
BOOL bPassable = pbpo -> bpo_ulFlags & (BPOF_PASSABLE | BPOF_SHOOTTHRU );
#line 193 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(! bPassable || iSurfaceType == SURFACE_WATER ){
#line 194 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SpawnHitTypeEffect (this , bhtType , bSound , vHitNormal , crRay . cr_vHit , vHitDirection , FLOAT3D (0.0f , 0.0f , 0.0f));
#line 195 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 196 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(! bPassable ){
#line 197 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
break ;
#line 198 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 200 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}else {
#line 203 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(crRay . cr_penHit -> GetEntityInfo () != NULL ){
#line 204 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(((EntityInfo *) crRay . cr_penHit -> GetEntityInfo ()) -> Eeibt == EIBT_FLESH )
#line 205 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 206 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CEntity * penOfFlesh = crRay . cr_penHit ;
#line 207 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vHitNormal = (GetPlacement () . pl_PositionVector - m_vTarget ) . Normalize ();
#line 208 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vOldHitPos = crRay . cr_vHit ;
#line 209 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vDistance ;
#line 212 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
GetWorld () -> ContinueCast (crRay );
#line 213 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(crRay . cr_penHit != NULL && crRay . cr_pbpoBrushPolygon != NULL &&
#line 214 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
crRay . cr_penHit -> GetRenderType () == RT_BRUSH )
#line 215 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 216 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vDistance = crRay . cr_vHit - vOldHitPos ;
#line 217 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vHitNormal = FLOAT3D (crRay . cr_pbpoBrushPolygon -> bpo_pbplPlane -> bpl_plAbsolute );
#line 218 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 219 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
else
#line 220 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 221 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vDistance = FLOAT3D (0.0f , 0.0f , 0.0f);
#line 222 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vHitNormal = FLOAT3D (0 , 0 , 0);
#line 223 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 225 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(IsOfClass (penOfFlesh , "Gizmo") ||
#line 226 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
IsOfClass (penOfFlesh , "Beast"))
#line 227 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 229 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SpawnHitTypeEffect (this , BHT_ACID , bSound , vHitNormal , crRay . cr_vHit , vHitDirection , vDistance );
#line 230 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 231 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
else
#line 232 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 234 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SpawnHitTypeEffect (this , BHT_FLESH , bSound , vHitNormal , crRay . cr_vHit , vHitDirection , vDistance );
#line 235 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 236 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
break ;
#line 237 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 238 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 241 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
break ;
#line 242 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 243 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 245 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(bTrail )
#line 246 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 247 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SpawnTrail ();
#line 248 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 249 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 252 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::DestroyBullet(void) {
#line 253 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
Destroy ();
#line 254 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 262 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
void CBullet::SpawnTrail(void)
#line 263 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
{
#line 265 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
const FLOAT3D & v0 = GetPlacement () . pl_PositionVector ;
#line 266 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
const FLOAT3D & v1 = m_vHitPoint ;
#line 268 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vD = v1 - v0 ;
#line 269 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fD = vD . Length ();
#line 271 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(fD < 1.0f){
#line 273 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
return ;
#line 274 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 277 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT fLen = Min (20.0f , fD );
#line 279 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vPos ;
#line 280 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
if(fLen < fD ){
#line 281 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vPos = Lerp (v0 , v1 , FRnd () * (fD - fLen ) / fD );
#line 282 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}else {
#line 283 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vPos = v0 ;
#line 284 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
#line 286 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ESpawnEffect ese ;
#line 287 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
UBYTE ubRndH = UBYTE (8 + FRnd () * 32);
#line 288 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
UBYTE ubRndS = UBYTE (8 + FRnd () * 32);
#line 289 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
UBYTE ubRndV = UBYTE (224 + FRnd () * 32);
#line 290 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
UBYTE ubRndA = UBYTE (32 + FRnd () * 128);
#line 291 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ese . colMuliplier = HSVToColor (ubRndH , ubRndS , ubRndV ) | ubRndA ;
#line 292 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ese . betType = BET_BULLETTRAIL ;
#line 293 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ese . vNormal = vD / fD ;
#line 294 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ese . vStretch = FLOAT3D (0.1f , fLen , 1.0f);
#line 297 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
FLOAT3D vBulletIncommingDirection ;
#line 298 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
vBulletIncommingDirection = (m_vTarget - GetPlacement () . pl_PositionVector ) . Normalize ();
#line 299 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CPlacement3D plHit = CPlacement3D (vPos - vBulletIncommingDirection * 0.1f , GetPlacement () . pl_OrientationAngle );
#line 300 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
CEntityPointer penHit = CreateEntity (plHit , CLASS_BASIC_EFFECT );
#line 301 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
penHit -> Initialize (ese );
#line 302 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
}
BOOL CBullet::
#line 306 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
Main(const CEntityEvent &__eeInput) {
#undef STATE_CURRENT
#define STATE_CURRENT STATE_CBullet_Main
ASSERTMSG(__eeInput.ee_slEvent==EVENTCODE_EBulletInit, "CBullet::Main expects 'EBulletInit' as input!"); const EBulletInit &eInit = (const EBulletInit &)__eeInput;
#line 309 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
ASSERT (eInit . penOwner != NULL );
#line 310 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_penOwner = eInit . penOwner ;
#line 311 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_fDamage = eInit . fDamage ;
#line 313 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
InitAsVoid ();
#line 314 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SetPhysicsFlags (EPF_MODEL_IMMATERIAL );
#line 315 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
SetCollisionFlags (ECF_IMMATERIAL );
#line 318 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
m_iBullet = 0;
#line 319 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
Return(STATE_CURRENT,EVoid());
#line 319 "D:/SE1_GPL/Sources/EntitiesMP/Bullet.es"
return TRUE; ASSERT(FALSE); return TRUE;};