This commit is contained in:
parent
59c8f67f54
commit
023382f336
10 changed files with 274 additions and 25 deletions
|
@ -1,2 +1,2 @@
|
||||||
Roll
|
Static
|
||||||
Stalk
|
Stalk
|
||||||
|
|
|
@ -176,7 +176,6 @@ actors/BALLBLOB.SBK
|
||||||
actors/CATERPILLAR.SBK
|
actors/CATERPILLAR.SBK
|
||||||
actors/CLAM.SBK
|
actors/CLAM.SBK
|
||||||
actors/DUSTDEVIL.SBK
|
actors/DUSTDEVIL.SBK
|
||||||
actors/EYEBALL.SBK
|
|
||||||
actors/FLAMINGSKULL.SBK
|
actors/FLAMINGSKULL.SBK
|
||||||
actors/FLYINGDUTCHMAN.SBK
|
actors/FLYINGDUTCHMAN.SBK
|
||||||
actors/GHOST.SBK
|
actors/GHOST.SBK
|
||||||
|
|
|
@ -110,14 +110,14 @@ ACTOR_DIRS_TO_MAKE := $(ACTOR_MAKEFILE_DIR) $(ACTOR_OUT_DIR)
|
||||||
ACTOR_SPONGEBOB := SpongeBob SpongeBob_CoralBlower SpongeBob_JellyLauncher SpongeBob_Net SpongeBob_Glove SpongeBob_Glasses SpongeBob_JellyFish
|
ACTOR_SPONGEBOB := SpongeBob SpongeBob_CoralBlower SpongeBob_JellyLauncher SpongeBob_Net SpongeBob_Glove SpongeBob_Glasses SpongeBob_JellyFish
|
||||||
ACTOR_NPC := BarnacleBoy Krusty Squidward Gary Sandy Patrick MermaidMan
|
ACTOR_NPC := BarnacleBoy Krusty Squidward Gary Sandy Patrick MermaidMan
|
||||||
|
|
||||||
ACTOR_ENEMY := Anenome BabyOctopus Ballblob Caterpillar clam Dustdevil Eyeball \
|
ACTOR_ENEMY := Anenome BabyOctopus Ballblob Caterpillar clam Dustdevil \
|
||||||
Flamingskull FlyingDutchman Ghost HermitCrab IronDogFish Lrgjellyfish \
|
Flamingskull FlyingDutchman Ghost HermitCrab IronDogFish Lrgjellyfish \
|
||||||
PuffaFish Sharkman Skeletalfish SpiderCrab SpikeyAnenome Stomper \
|
PuffaFish Sharkman Skeletalfish SpiderCrab SpikeyAnenome Stomper \
|
||||||
SharkSub Motherjellyfish SeaSnake
|
SharkSub Motherjellyfish SeaSnake
|
||||||
|
|
||||||
# Boogermonster GiantWorm Jellyfish2 Motherjellyfish Nautilus Neptune SeaSnake SharkSub
|
# Boogermonster GiantWorm Jellyfish2 Motherjellyfish Nautilus Neptune SeaSnake SharkSub
|
||||||
|
|
||||||
ACTOR_SPRITES := Jellyfish1 Squiddart Plankton Butterfly Shell
|
ACTOR_SPRITES := Jellyfish1 Squiddart Plankton Butterfly Shell Eyeball
|
||||||
|
|
||||||
ACTOR_SPR_LIST := $(foreach ACTOR,$(ACTOR_SPRITES), $(ACTOR_IN_DIR)/$(ACTOR)/$(ACTOR_SPRITE_DIR)/$(ACTOR)_*.bmp)
|
ACTOR_SPR_LIST := $(foreach ACTOR,$(ACTOR_SPRITES), $(ACTOR_IN_DIR)/$(ACTOR)/$(ACTOR_SPRITE_DIR)/$(ACTOR)_*.bmp)
|
||||||
ACTOR_SPR_DEP := $(foreach ACTOR,$(ACTOR_SPRITES), $(ACTOR_IN_DIR)/$(ACTOR)/$(ACTOR_SPRITE_DIR)/*)
|
ACTOR_SPR_DEP := $(foreach ACTOR,$(ACTOR_SPRITES), $(ACTOR_IN_DIR)/$(ACTOR)/$(ACTOR_SPRITE_DIR)/*)
|
||||||
|
|
|
@ -31,27 +31,55 @@
|
||||||
#include "projectl\projectl.h"
|
#include "projectl\projectl.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __SPR_SPRITES_H__
|
||||||
|
#include <sprites.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __VID_HEADER_
|
||||||
|
#include "system\vid.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcEyeballEnemy::processEnemyCollision( CThing *thisThing )
|
void CNpcEyeballEnemy::processEnemyCollision( CThing *thisThing )
|
||||||
{
|
{
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcEyeballEnemy::postInit()
|
void CNpcEyeballEnemy::postInit()
|
||||||
{
|
{
|
||||||
return;
|
DVECTOR eyeballPos = Pos;
|
||||||
|
|
||||||
m_fireHeading = m_heading;
|
m_fireHeading = m_heading;
|
||||||
|
m_drawRotation = ( m_heading + 1024 ) & 4095;
|
||||||
|
|
||||||
|
eyeballPos.vx += ( EYEBALL_DIST * rcos( m_heading ) ) >> 12;
|
||||||
|
eyeballPos.vy += ( EYEBALL_DIST * rsin( m_heading ) ) >> 12;
|
||||||
|
|
||||||
CProjectile *projectile;
|
CProjectile *projectile;
|
||||||
projectile = new ( "eyeball projectile" ) CProjectile;
|
projectile = new ( "eyeball projectile" ) CProjectile;
|
||||||
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
|
projectile->init( eyeballPos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
|
||||||
projectile->setLayerCollision( m_layerCollision );
|
projectile->setLayerCollision( m_layerCollision );
|
||||||
|
projectile->setGraphic( FRM_EYEBALL_STATIC );
|
||||||
|
|
||||||
addChild( projectile );
|
addChild( projectile );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEyeballEnemy::shutdown()
|
||||||
|
{
|
||||||
|
deleteAllChild();
|
||||||
|
CNpcEnemy::shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
bool CNpcEyeballEnemy::processSensor()
|
bool CNpcEyeballEnemy::processSensor()
|
||||||
{
|
{
|
||||||
return(false);
|
|
||||||
switch( m_sensorFunc )
|
switch( m_sensorFunc )
|
||||||
{
|
{
|
||||||
case NPC_SENSOR_NONE:
|
case NPC_SENSOR_NONE:
|
||||||
|
@ -73,9 +101,10 @@ return(false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcEyeballEnemy::processClose( int _frames )
|
void CNpcEyeballEnemy::processClose( int _frames )
|
||||||
{
|
{
|
||||||
return;
|
|
||||||
if ( Next )
|
if ( Next )
|
||||||
{
|
{
|
||||||
CProjectile *projectile;
|
CProjectile *projectile;
|
||||||
|
@ -90,12 +119,218 @@ return;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
DVECTOR eyeballPos = Pos;
|
||||||
|
|
||||||
|
eyeballPos.vx += ( EYEBALL_DIST * rcos( m_heading ) ) >> 12;
|
||||||
|
eyeballPos.vy += ( EYEBALL_DIST * rsin( m_heading ) ) >> 12;
|
||||||
|
|
||||||
CProjectile *projectile;
|
CProjectile *projectile;
|
||||||
projectile = new ( "eyeball projectile" ) CProjectile;
|
projectile = new ( "eyeball projectile" ) CProjectile;
|
||||||
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_USER_SEEK, CProjectile::PROJECTILE_INFINITE_LIFE );
|
projectile->init( eyeballPos, m_fireHeading, CProjectile::PROJECTILE_USER_SEEK, CProjectile::PROJECTILE_INFINITE_LIFE );
|
||||||
projectile->setLayerCollision( m_layerCollision );
|
projectile->setLayerCollision( m_layerCollision );
|
||||||
|
projectile->setGraphic( FRM_EYEBALL_STATIC );
|
||||||
projectile->setState( CProjectile::PROJECTILE_ATTACK );
|
projectile->setState( CProjectile::PROJECTILE_ATTACK );
|
||||||
|
|
||||||
addChild( projectile );
|
addChild( projectile );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEyeballEnemy::render()
|
||||||
|
{
|
||||||
|
SprFrame = NULL;
|
||||||
|
|
||||||
|
if ( m_isActive )
|
||||||
|
{
|
||||||
|
CEnemyThing::render();
|
||||||
|
|
||||||
|
if (canRender())
|
||||||
|
{
|
||||||
|
DVECTOR &renderPos=getRenderPos();
|
||||||
|
|
||||||
|
SprFrame = m_spriteBank->printRotatedScaledSprite( FRM_EYEBALL_STALK, renderPos.vx, renderPos.vy, 4096, 4096, m_drawRotation, 10);
|
||||||
|
|
||||||
|
// get xmax, xmin, ymax, ymin
|
||||||
|
|
||||||
|
s32 XMax;
|
||||||
|
s32 XMin;
|
||||||
|
|
||||||
|
s32 YMax;
|
||||||
|
s32 YMin;
|
||||||
|
|
||||||
|
XMin=SprFrame->x0;
|
||||||
|
if (XMin>SprFrame->x1) XMin=SprFrame->x1;
|
||||||
|
if (XMin>SprFrame->x2) XMin=SprFrame->x2;
|
||||||
|
if (XMin>SprFrame->x3) XMin=SprFrame->x3;
|
||||||
|
XMax=SprFrame->x0;
|
||||||
|
if (XMax<SprFrame->x1) XMax=SprFrame->x1;
|
||||||
|
if (XMax<SprFrame->x2) XMax=SprFrame->x2;
|
||||||
|
if (XMax<SprFrame->x3) XMax=SprFrame->x3;
|
||||||
|
YMin=SprFrame->y0;
|
||||||
|
if (YMin>SprFrame->y1) YMin=SprFrame->y1;
|
||||||
|
if (YMin>SprFrame->y2) YMin=SprFrame->y2;
|
||||||
|
if (YMin>SprFrame->y3) YMin=SprFrame->y3;
|
||||||
|
YMax=SprFrame->y0;
|
||||||
|
if (YMax<SprFrame->y1) YMax=SprFrame->y1;
|
||||||
|
if (YMax<SprFrame->y2) YMax=SprFrame->y2;
|
||||||
|
if (YMax<SprFrame->y3) YMax=SprFrame->y3;
|
||||||
|
|
||||||
|
XMax -= renderPos.vx;
|
||||||
|
XMin -= renderPos.vx;
|
||||||
|
YMax -= renderPos.vy;
|
||||||
|
YMin -= renderPos.vy;
|
||||||
|
|
||||||
|
setCollisionSize( ( XMax - XMin ), ( YMax - YMin ) );
|
||||||
|
setCollisionCentreOffset( ( XMax + XMin ) >> 1, ( YMax + YMin ) >> 1 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEyeballEnemy::processEvent( GAME_EVENT evt, CThing *sourceThing )
|
||||||
|
{
|
||||||
|
switch( evt )
|
||||||
|
{
|
||||||
|
case PROJECTILE_RETURNED_TO_SOURCE_EVENT:
|
||||||
|
{
|
||||||
|
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||||
|
m_timerFunc = NPC_TIMER_ATTACK_DONE;
|
||||||
|
m_timerTimer = GameState::getOneSecondInFrames();
|
||||||
|
m_sensorFunc = NPC_SENSOR_NONE;
|
||||||
|
|
||||||
|
//removeChild( sourceThing );
|
||||||
|
//sourceThing->shutdown();
|
||||||
|
//delete sourceThing;
|
||||||
|
|
||||||
|
CProjectile *projectile;
|
||||||
|
projectile = (CProjectile *) sourceThing;
|
||||||
|
projectile->setMovementType( CProjectile::PROJECTILE_FIXED );
|
||||||
|
|
||||||
|
DVECTOR eyeballPos = Pos;
|
||||||
|
|
||||||
|
eyeballPos.vx += ( EYEBALL_DIST * rcos( m_heading ) ) >> 12;
|
||||||
|
eyeballPos.vy += ( EYEBALL_DIST * rsin( m_heading ) ) >> 12;
|
||||||
|
|
||||||
|
projectile->setPosition( eyeballPos );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEyeballEnemy::processShot( int _frames )
|
||||||
|
{
|
||||||
|
switch ( m_state )
|
||||||
|
{
|
||||||
|
case NPC_GENERIC_HIT_CHECK_HEALTH:
|
||||||
|
{
|
||||||
|
if ( CLevel::getCurrentChapter() == 1 && CLevel::getCurrentChapterLevel() == 1 )
|
||||||
|
{
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_START;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_health -= 5;
|
||||||
|
|
||||||
|
if ( m_health < 0 )
|
||||||
|
{
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_START;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_state = 0;
|
||||||
|
m_controlFunc = NPC_CONTROL_MOVEMENT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_GENERIC_HIT_DEATH_START:
|
||||||
|
{
|
||||||
|
m_animPlaying = true;
|
||||||
|
m_animNo = m_data[m_type].dieAnim;
|
||||||
|
m_frame = 0;
|
||||||
|
m_state = NPC_GENERIC_HIT_DEATH_END;
|
||||||
|
|
||||||
|
m_isDying = true;
|
||||||
|
m_speed = -5;
|
||||||
|
|
||||||
|
if (m_data[m_type].skelType)
|
||||||
|
{
|
||||||
|
m_actorGfx->SetOtPos( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Next )
|
||||||
|
{
|
||||||
|
CProjectile *projectile;
|
||||||
|
|
||||||
|
projectile = (CProjectile *) Next;
|
||||||
|
|
||||||
|
if ( projectile->getMovementType() != CProjectile::PROJECTILE_FIXED )
|
||||||
|
{
|
||||||
|
projectile->setMovementType( CProjectile::PROJECTILE_DUMBFIRE );
|
||||||
|
projectile->setLifeTime( CProjectile::PROJECTILE_FINITE_LIFE );
|
||||||
|
|
||||||
|
removeChild( Next );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NPC_GENERIC_HIT_DEATH_END:
|
||||||
|
{
|
||||||
|
m_drawRotation += 64 * _frames;
|
||||||
|
m_drawRotation &= 4095;
|
||||||
|
|
||||||
|
m_heading = m_drawRotation - 1024;
|
||||||
|
m_heading &= 4095;
|
||||||
|
|
||||||
|
Pos.vy += m_speed * _frames;
|
||||||
|
|
||||||
|
if ( m_speed < 5 )
|
||||||
|
{
|
||||||
|
m_speed++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( Next )
|
||||||
|
{
|
||||||
|
CProjectile *projectile;
|
||||||
|
|
||||||
|
projectile = (CProjectile *) Next;
|
||||||
|
|
||||||
|
DVECTOR eyeballPos = Pos;
|
||||||
|
|
||||||
|
eyeballPos.vx += ( EYEBALL_DIST * rcos( m_heading ) ) >> 12;
|
||||||
|
eyeballPos.vy += ( EYEBALL_DIST * rsin( m_heading ) ) >> 12;
|
||||||
|
|
||||||
|
projectile->setPosition( eyeballPos );
|
||||||
|
projectile->setHeading( m_heading );
|
||||||
|
}
|
||||||
|
|
||||||
|
DVECTOR offset = CLevel::getCameraPos();
|
||||||
|
|
||||||
|
if ( Pos.vy - offset.vy > VidGetScrH() )
|
||||||
|
{
|
||||||
|
if ( m_data[m_type].respawning )
|
||||||
|
{
|
||||||
|
m_isActive = false;
|
||||||
|
|
||||||
|
m_timerFunc = NPC_TIMER_RESPAWN;
|
||||||
|
m_timerTimer = 4 * GameState::getOneSecondInFrames();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setToShutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -17,15 +17,23 @@
|
||||||
class CNpcEyeballEnemy : public CNpcEnemy
|
class CNpcEyeballEnemy : public CNpcEnemy
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual void render(){}
|
virtual void render();
|
||||||
|
|
||||||
virtual void postInit();
|
virtual void postInit();
|
||||||
|
virtual void shutdown();
|
||||||
|
virtual int getFrameCount() {return( 1 );}
|
||||||
|
virtual void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
||||||
protected:
|
protected:
|
||||||
virtual void processEnemyCollision( CThing *thisThing );
|
virtual void processEnemyCollision( CThing *thisThing );
|
||||||
virtual bool processSensor();
|
virtual bool processSensor();
|
||||||
virtual void processClose( int _frames );
|
virtual void processClose( int _frames );
|
||||||
|
virtual void processShot( int _frames );
|
||||||
|
|
||||||
s32 m_fireHeading;
|
s32 m_fireHeading;
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
EYEBALL_DIST = 30,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -577,7 +577,7 @@ void CNpcEnemy::setStartPos( s32 xPos, s32 yPos )
|
||||||
|
|
||||||
void CNpcEnemy::setHeading( s32 xPos, s32 yPos )
|
void CNpcEnemy::setHeading( s32 xPos, s32 yPos )
|
||||||
{
|
{
|
||||||
m_heading = ratan2( ( yPos << 4 ) - Pos.vy, ( xPos << 4 ) - Pos.vx );
|
m_heading = ( ratan2( ( yPos << 4 ) - Pos.vy, ( xPos << 4 ) - Pos.vx ) ) & 4095;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -628,6 +628,7 @@ void CNpcEnemy::init()
|
||||||
m_isCaught = false;
|
m_isCaught = false;
|
||||||
m_isBlowerOn = false;
|
m_isBlowerOn = false;
|
||||||
m_speed = m_data[m_type].speed;
|
m_speed = m_data[m_type].speed;
|
||||||
|
m_heading = 0;
|
||||||
|
|
||||||
updateCollisionArea();
|
updateCollisionArea();
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,7 +94,7 @@ public:
|
||||||
virtual u8 canCollideWithEnemy() {return( true );}
|
virtual u8 canCollideWithEnemy() {return( true );}
|
||||||
virtual void think(int _frames);
|
virtual void think(int _frames);
|
||||||
virtual void render();
|
virtual void render();
|
||||||
void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
virtual void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
||||||
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
||||||
void setType( NPC_UNIT_TYPE newType ) {m_type = newType;}
|
void setType( NPC_UNIT_TYPE newType ) {m_type = newType;}
|
||||||
NPC_UNIT_TYPE getType() {return( m_type );}
|
NPC_UNIT_TYPE getType() {return( m_type );}
|
||||||
|
|
|
@ -43,10 +43,6 @@
|
||||||
#include <ACTOR_DUSTDEVIL_ANIM.h>
|
#include <ACTOR_DUSTDEVIL_ANIM.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __ANIM_EYEBALL_HEADER__
|
|
||||||
#include <ACTOR_EYEBALL_ANIM.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __ANIM_FLAMINGSKULL_HEADER__
|
#ifndef __ANIM_FLAMINGSKULL_HEADER__
|
||||||
#include <ACTOR_FLAMINGSKULL_ANIM.h>
|
#include <ACTOR_FLAMINGSKULL_ANIM.h>
|
||||||
#endif
|
#endif
|
||||||
|
@ -574,8 +570,8 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||||
},
|
},
|
||||||
|
|
||||||
{ // NPC_EYEBALL
|
{ // NPC_EYEBALL
|
||||||
ACTORS_EYEBALL_SBK,
|
0,//ACTORS_EYEBALL_SBK,
|
||||||
ANIM_EYEBALL_STALK,
|
0,
|
||||||
NPC_SENSOR_USER_CLOSE,
|
NPC_SENSOR_USER_CLOSE,
|
||||||
NPC_MOVEMENT_STATIC,
|
NPC_MOVEMENT_STATIC,
|
||||||
NPC_CLOSE_NONE,
|
NPC_CLOSE_NONE,
|
||||||
|
|
|
@ -57,8 +57,9 @@ void CProjectile::init()
|
||||||
|
|
||||||
m_spriteBank=new ("projectile sprites") SpriteBank();
|
m_spriteBank=new ("projectile sprites") SpriteBank();
|
||||||
m_spriteBank->load(SPRITES_SPRITES_SPR);
|
m_spriteBank->load(SPRITES_SPRITES_SPR);
|
||||||
|
m_spriteFrame = FRM__SPIKE;
|
||||||
|
|
||||||
m_heading = 0;
|
m_initHeading = m_heading = 0;
|
||||||
m_lifetime = GameState::getOneSecondInFrames() * 2;
|
m_lifetime = GameState::getOneSecondInFrames() * 2;
|
||||||
m_movementType = PROJECTILE_DUMBFIRE;
|
m_movementType = PROJECTILE_DUMBFIRE;
|
||||||
m_lifetimeType = PROJECTILE_FINITE_LIFE;
|
m_lifetimeType = PROJECTILE_FINITE_LIFE;
|
||||||
|
@ -74,7 +75,7 @@ void CProjectile::init( DVECTOR initPos, s16 initHeading )
|
||||||
{
|
{
|
||||||
init();
|
init();
|
||||||
|
|
||||||
m_heading = initHeading;
|
m_initHeading = m_heading = initHeading;
|
||||||
m_initPos = Pos = initPos;
|
m_initPos = Pos = initPos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +101,11 @@ void CProjectile::shutdown()
|
||||||
CEnemyProjectileThing::shutdown();
|
CEnemyProjectileThing::shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CProjectile::setGraphic( int frame )
|
||||||
|
{
|
||||||
|
m_spriteFrame = frame;
|
||||||
|
}
|
||||||
|
|
||||||
bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos )
|
bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos )
|
||||||
{
|
{
|
||||||
s32 moveX = 0, moveY = 0;
|
s32 moveX = 0, moveY = 0;
|
||||||
|
@ -253,9 +259,10 @@ void CProjectile::think(int _frames)
|
||||||
{
|
{
|
||||||
case PROJECTILE_RETURN:
|
case PROJECTILE_RETURN:
|
||||||
{
|
{
|
||||||
if ( processTargetSeek( _frames, Parent->getPos() ) )
|
if ( processTargetSeek( _frames, m_initPos ) )
|
||||||
{
|
{
|
||||||
Parent->processEvent( PROJECTILE_RETURNED_TO_SOURCE_EVENT, this );
|
Parent->processEvent( PROJECTILE_RETURNED_TO_SOURCE_EVENT, this );
|
||||||
|
m_heading = m_initHeading;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -352,7 +359,7 @@ void CProjectile::render()
|
||||||
|
|
||||||
//m_spriteBank->printFT4(FRM__SPIKE,x,y,0,0,0);
|
//m_spriteBank->printFT4(FRM__SPIKE,x,y,0,0,0);
|
||||||
|
|
||||||
frameHdr = m_spriteBank->getFrameHeader(FRM__SPIKE);
|
frameHdr = m_spriteBank->getFrameHeader( m_spriteFrame );
|
||||||
|
|
||||||
m_spriteBank->printRotatedScaledSprite( frameHdr, x, y, 4096, 4096, m_heading, m_ot );
|
m_spriteBank->printRotatedScaledSprite( frameHdr, x, y, 4096, 4096, m_heading, m_ot );
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,7 +49,6 @@ public:
|
||||||
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
|
void init( DVECTOR initPos, s16 initHeading, PROJECTILE_MOVEMENT_TYPE initMoveType, PROJECTILE_LIFETIME_TYPE initLifeType, s32 initLifetime );
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void think(int _frames);
|
void think(int _frames);
|
||||||
void setPos( DVECTOR newPos ) {Pos = newPos;}
|
|
||||||
virtual void render();
|
virtual void render();
|
||||||
void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
void processEvent( GAME_EVENT evt, CThing *sourceThing );
|
||||||
void setMovementType( PROJECTILE_MOVEMENT_TYPE moveType );
|
void setMovementType( PROJECTILE_MOVEMENT_TYPE moveType );
|
||||||
|
@ -57,8 +56,10 @@ public:
|
||||||
void setState( PROJECTILE_STATE newState );
|
void setState( PROJECTILE_STATE newState );
|
||||||
void setLifeTime( PROJECTILE_LIFETIME_TYPE lifeType );
|
void setLifeTime( PROJECTILE_LIFETIME_TYPE lifeType );
|
||||||
void setPosition( DVECTOR newPos );
|
void setPosition( DVECTOR newPos );
|
||||||
|
void setHeading( s16 newHeading ) {m_heading = newHeading;}
|
||||||
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
|
||||||
void setOt( u8 newOt ) {m_ot=newOt;}
|
void setOt( u8 newOt ) {m_ot=newOt;}
|
||||||
|
void setGraphic( int frame );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
class CLayerCollision *m_layerCollision;
|
class CLayerCollision *m_layerCollision;
|
||||||
|
@ -71,6 +72,7 @@ protected:
|
||||||
class SpriteBank *m_spriteBank;
|
class SpriteBank *m_spriteBank;
|
||||||
DVECTOR m_initPos;
|
DVECTOR m_initPos;
|
||||||
s16 m_heading;
|
s16 m_heading;
|
||||||
|
s16 m_initHeading;
|
||||||
s32 m_lifetime;
|
s32 m_lifetime;
|
||||||
s32 m_extension;
|
s32 m_extension;
|
||||||
PROJECTILE_MOVEMENT_TYPE m_movementType;
|
PROJECTILE_MOVEMENT_TYPE m_movementType;
|
||||||
|
@ -78,6 +80,7 @@ protected:
|
||||||
PROJECTILE_STATE m_state;
|
PROJECTILE_STATE m_state;
|
||||||
u16 m_turnSpeed;
|
u16 m_turnSpeed;
|
||||||
u8 m_ot;
|
u8 m_ot;
|
||||||
|
int m_spriteFrame;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue