This commit is contained in:
Charles 2001-04-12 16:33:48 +00:00
parent c050e9fb83
commit 8538d72b10
9 changed files with 187 additions and 29 deletions

View File

@ -186,6 +186,8 @@ void CNpcEnemy::processCloseAnemone2Attack( int _frames )
nextThing = nextThing->getNext();
}
removeAllChild();
// attach new spikes
for ( fireLoop = 0 ; fireLoop < 5 ; fireLoop++ )

View File

@ -248,6 +248,7 @@ void CNpcEnemy::init()
m_heading = m_fireHeading = 0;
m_movementTimer = 0;
m_timerTimer = 0;
m_attackTimer = 0;
m_velocity = 0;
m_extension = 0;
m_rotation = 0;
@ -577,6 +578,7 @@ void CNpcEnemy::reinit()
m_heading = m_fireHeading = 0;
m_movementTimer = 0;
m_timerTimer = 0;
m_attackTimer = 0;
m_velocity = 0;
m_extension = 0;
m_rotation = 0;
@ -622,6 +624,19 @@ void CNpcEnemy::shutdown()
m_positionHistory = NULL;
delete m_actorGfx;
// remove child elements
CThing *List = this->getNext();
while ( List )
{
CThing *Next = List->getNext();
List->shutdown();
List = Next;
}
CEnemyThing::shutdown();
}
@ -709,7 +724,7 @@ void CNpcEnemy::collidedWith( CThing *_thisThing )
{
case TYPE_PLAYER:
{
if ( m_controlFunc != NPC_CONTROL_COLLISION )
if ( m_controlFunc != NPC_CONTROL_COLLISION && m_attackTimer == 0 )
{
// only detect collision if one isn't already happening
@ -1288,6 +1303,7 @@ void CNpcEnemy::processMovementModifier(int _frames, s32 distX, s32 distY, s32 d
void CNpcEnemy::hasBeenAttacked()
{
m_controlFunc = NPC_CONTROL_SHOT;
m_state = NPC_GENERIC_HIT_CHECK_HEALTH;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -1352,7 +1368,17 @@ void CNpcEnemy::processShot()
{
if ( !m_animPlaying )
{
this->shutdown();
if ( m_data[m_type].respawning )
{
m_isActive = false;
m_timerFunc = NPC_TIMER_RESPAWN;
m_timerTimer = 4 * GameState::getOneSecondInFrames();
}
else
{
shutdown();
}
}
break;
@ -1512,10 +1538,12 @@ void CNpcEnemy::processCollision()
{
CPlayer *player = GameScene.getPlayer();
//player->takeDamage( m_data[m_type].damageToUserType );
player->takeDamage( m_data[m_type].damageToUserType );
m_controlFunc = m_oldControlFunc;
m_attackTimer = GameState::getOneSecondInFrames();
break;
}
@ -1532,6 +1560,16 @@ void CNpcEnemy::processCollision()
void CNpcEnemy::processTimer(int _frames)
{
if ( m_attackTimer > 0 )
{
m_attackTimer -= _frames;
if ( m_attackTimer < 0 )
{
m_attackTimer = 0;
}
}
if ( m_timerTimer > 0 )
{
m_timerTimer -= _frames;
@ -1663,11 +1701,18 @@ bool CNpcEnemy::canBeCaughtByNet()
void CNpcEnemy::caughtWithNet()
{
if ( m_isActive )
if ( m_data[m_type].respawning )
{
m_isActive = false;
if ( m_isActive )
{
m_isActive = false;
m_timerFunc = NPC_TIMER_RESPAWN;
m_timerTimer = 4 * GameState::getOneSecondInFrames();
m_timerFunc = NPC_TIMER_RESPAWN;
m_timerTimer = 4 * GameState::getOneSecondInFrames();
}
}
else
{
shutdown();
}
}

View File

@ -435,6 +435,7 @@ protected:
u16 recoilAnim;
NPC_COLLISION_FUNC collisionFunc;
bool canBeNetted;
bool respawning;
}
NPC_DATA;
@ -601,6 +602,7 @@ protected:
bool m_reversed;
s32 m_health;
bool m_isActive;
s32 m_attackTimer;
s32 m_frame;
int m_animNo;

View File

@ -336,6 +336,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_FISH_HOOK
@ -359,6 +360,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_DUST_DEVIL
@ -382,6 +384,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_PENDULUM
@ -405,6 +408,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_FIREBALL
@ -428,6 +432,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SAW_BLADE
@ -451,6 +456,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SMALL_JELLYFISH_1
@ -465,7 +471,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__SHOCK_ENEMY,
16,
ANIM_JELLYFISH1_SWIM,
@ -474,6 +480,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_JELLYFISH1_SWIM,
NPC_COLLISION_GENERIC,
true,
true,
},
{ // NPC_SMALL_JELLYFISH_2
@ -488,7 +495,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__SHOCK_ENEMY,
32,
0,
@ -497,6 +504,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
true,
},
{ // NPC_ANEMONE_1
@ -520,6 +528,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_ANEMONE_2
@ -543,6 +552,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_ANEMONE_3
@ -566,6 +576,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SKELETAL_FISH
@ -580,7 +591,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
2048,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__BITE_ENEMY,
0,
ANIM_SKELETALFISH_SWIM,
@ -589,6 +600,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_SKELETALFISH_GETHIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_CLAM_JUMP
@ -603,7 +615,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
0,
128,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__HIT_ENEMY,
0,
0,
@ -612,6 +624,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_CLAM_STATIC
@ -626,7 +639,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
0,
128,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__HIT_ENEMY,
0,
0,
@ -635,6 +648,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SQUID_DART
@ -649,7 +663,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
5,
256,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
16,
ANIM_SQUIDDART_SWIM,
@ -658,6 +672,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_FISH_FOLK
@ -681,6 +696,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_PRICKLY_BUG
@ -695,7 +711,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
1,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__POISON_ENEMY,
48,
ANIM_CATERPILLAR_CRAWL,
@ -704,6 +720,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_CATERPILLAR_GETHIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SEA_SNAKE
@ -718,7 +735,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
256,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__SHOCK_ENEMY,
56,
0,
@ -727,6 +744,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_PUFFA_FISH
@ -741,7 +759,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
2,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
64,
ANIM_PUFFAFISH_SWIM,
@ -750,6 +768,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_ANGLER_FISH
@ -773,6 +792,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_HERMIT_CRAB
@ -787,7 +807,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
2,
128,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__HIT_ENEMY,
32,
ANIM_HERMITCRAB_SCUTTLE,
@ -796,6 +816,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_HERMITCRAB_GETHIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_MINE
@ -810,7 +831,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
0,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
0,
0,
@ -819,6 +840,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_BOOGER_MONSTER
@ -833,7 +855,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
0,
128,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__BITE_ENEMY,
0,
0,
@ -842,6 +864,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SPIDER_CRAB
@ -865,6 +888,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_SPIDERCRAB_HIT,
NPC_COLLISION_SPIDER_CRAB_BITE,
false,
false,
},
{ // NPC_EYEBALL
@ -888,6 +912,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_BABY_OCTOPUS
@ -902,7 +927,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
2,
512,
DETECT_NO_COLLISION,
DETECT_ATTACK_COLLISION_GENERIC,
DAMAGE__HIT_ENEMY,
32,
ANIM_BABYOCTOPUS_SWIM,
@ -911,6 +936,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_BABYOCTOPUS_HIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_ZOMBIE_FISH_FOLK
@ -925,7 +951,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
2,
2048,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
16,
0,
@ -934,6 +960,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_NINJA_STARFISH
@ -948,7 +975,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
64,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
16,
0,
@ -957,6 +984,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_GHOST
@ -971,7 +999,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
2,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
0,
ANIM_GHOST_MOVE,
@ -980,6 +1008,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_GHOST_PIRATE
@ -994,7 +1023,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
0,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
160,
0,
@ -1003,6 +1032,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_FLAMING_SKULL
@ -1017,7 +1047,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__BURN_ENEMY,
16,
ANIM_FLAMINGSKULL_MOVE,
@ -1026,6 +1056,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SHARK_MAN
@ -1040,7 +1071,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
2048,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__BITE_ENEMY,
16,
ANIM_SHARKMAN_RUN,
@ -1049,6 +1080,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_SHARKMAN_BLOCK,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_OIL_BLOB
@ -1063,7 +1095,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
64,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__HIT_ENEMY,
0,
0,
@ -1072,6 +1104,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SKULL_STOMPER
@ -1086,7 +1119,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
5,
2048,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__SQUASH_ENEMY,
0,
ANIM_STOMPER_CRUSH,
@ -1095,6 +1128,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_MOTHER_JELLYFISH
@ -1118,6 +1152,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_SUB_SHARK
@ -1141,6 +1176,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_PARASITIC_WORM
@ -1164,6 +1200,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_FLYING_DUTCHMAN
@ -1187,6 +1224,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_FLYINGDUTCHMAN_GETHIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_IRON_DOGFISH
@ -1210,6 +1248,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
ANIM_IRONDOGFISH_GETHIT,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_PARASITIC_WORM_SEGMENT
@ -1233,6 +1272,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
{ // NPC_BALL_BLOB
@ -1247,7 +1287,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
false,
3,
128,
DETECT_NO_COLLISION,
DETECT_ALL_COLLISION,
DAMAGE__BURN_ENEMY,
16,
ANIM_BALLBLOB_WOBBLE,
@ -1256,6 +1296,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
0,
NPC_COLLISION_GENERIC,
false,
false,
},
};

View File

@ -290,6 +290,7 @@ void CPlayerModeJellyLauncher::launchProjectile()
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
5*60);
projectile->setLayerCollision( m_player->getLayerCollision() );
fireHeading+=512;
m_player->useOneJelly();
}
@ -304,6 +305,7 @@ void CPlayerModeJellyLauncher::launchProjectile()
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
5*60);
projectile->setLayerCollision( m_player->getLayerCollision() );
m_player->useOneJelly();
}
}

View File

@ -168,6 +168,7 @@ void CPlayerModeNet::think()
CPlayerProjectile::PLAYER_PROJECTILE_DUMBFIRE,
CPlayerProjectile::PLAYER_PROJECTILE_FINITE_LIFE,
5*60);
projectile->setLayerCollision( m_player->getLayerCollision() );
m_netState=NET_STATE__JUST_LAUNCHED_SOMETHING;
}

View File

@ -43,6 +43,10 @@
#include "player\player.h"
#endif
#ifndef __ENEMY_NPC_H__
#include "enemy\npc.h"
#endif
/*****************************************************************************/
@ -356,6 +360,28 @@ void CProjectile::processEvent( GAME_EVENT evt, CThing *sourceThing )
{
}
void CProjectile::collidedWith(CThing *_thisThing)
{
switch(_thisThing->getThingType())
{
case TYPE_PLAYER:
{
CPlayer *player = (CPlayer *) _thisThing;
player->takeDamage( DAMAGE__HIT_ENEMY );
shutdown();
delete this;
break;
}
default:
ASSERT(0);
break;
}
}
/*****************************************************************************/
void CPlayerProjectile::init()
@ -492,4 +518,23 @@ void CPlayerProjectile::processEvent( GAME_EVENT evt, CThing *sourceThing )
{
}
void CPlayerProjectile::collidedWith(CThing *_thisThing)
{
switch(_thisThing->getThingType())
{
case TYPE_ENEMY:
{
CNpcEnemy *enemy = (CNpcEnemy *) _thisThing;
enemy->hasBeenAttacked();
break;
}
default:
ASSERT(0);
break;
}
}
/*****************************************************************************/

View File

@ -64,6 +64,7 @@ private:
protected:
DVECTOR getScreenOffset();
bool processTargetSeek( int _frames, DVECTOR targetPos );
void collidedWith( CThing *_thisThing );
class SpriteBank *m_spriteBank;
DVECTOR m_initPos;
@ -111,6 +112,7 @@ private:
protected:
DVECTOR getScreenOffset();
void collidedWith( CThing *_thisThing );
class SpriteBank *m_spriteBank;
DVECTOR m_initPos;

View File

@ -198,6 +198,24 @@ void CThingManager::thinkAllThings(int _frames)
thing1=thing1->m_nextThing;
}
// Enemy -> Player projectile collision
thing1=s_thingLists[CThing::TYPE_PLAYERPROJECTILE];
thing2=s_thingLists[CThing::TYPE_ENEMY];
while(thing1)
{
while(thing2)
{
if(thing1->canCollide()&&
thing2->canCollide()&&
thing1->checkCollisionAgainst(thing2, _frames))
{
thing1->collidedWith(thing2);
}
thing2=thing2->m_nextThing;
}
thing1=thing1->m_nextThing;
}
}
/*----------------------------------------------------------------------