This commit is contained in:
parent
14289f447b
commit
37852c12a2
7 changed files with 84 additions and 11 deletions
|
@ -31,6 +31,19 @@
|
||||||
void CNpcEnemy::processCloseEyeballAttack( int _frames )
|
void CNpcEnemy::processCloseEyeballAttack( int _frames )
|
||||||
{
|
{
|
||||||
if ( Next )
|
if ( Next )
|
||||||
|
{
|
||||||
|
CProjectile *projectile;
|
||||||
|
|
||||||
|
projectile = (CProjectile *) Next;
|
||||||
|
|
||||||
|
if ( projectile->getMovementType() == CProjectile::PROJECTILE_FIXED )
|
||||||
|
{
|
||||||
|
projectile->setMovementType( CProjectile::PROJECTILE_USER_SEEK );
|
||||||
|
projectile->setState( CProjectile::PROJECTILE_ATTACK );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*if ( Next )
|
||||||
{
|
{
|
||||||
// already have child, ignore
|
// already have child, ignore
|
||||||
}
|
}
|
||||||
|
@ -40,8 +53,8 @@ void CNpcEnemy::processCloseEyeballAttack( int _frames )
|
||||||
|
|
||||||
CProjectile *projectile;
|
CProjectile *projectile;
|
||||||
projectile = new ( "test projectile" ) CProjectile;
|
projectile = new ( "test projectile" ) CProjectile;
|
||||||
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_USER_SEEK, CProjectile::PROJECTILE_INFINITE_LIFE );
|
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
|
||||||
|
|
||||||
addChild( projectile );
|
addChild( projectile );
|
||||||
}
|
}*/
|
||||||
}
|
}
|
|
@ -52,6 +52,10 @@
|
||||||
#include "system\vid.h"
|
#include "system\vid.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PROJECTL_PROJECTL_H__
|
||||||
|
#include "projectl\projectl.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Friend NPCs
|
// Friend NPCs
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -274,7 +278,12 @@ void CNpcEnemy::init()
|
||||||
setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) );
|
setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) );
|
||||||
|
|
||||||
m_positionHistory = NULL;
|
m_positionHistory = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcEnemy::postInit()
|
||||||
|
{
|
||||||
switch ( m_data[this->m_type].initFunc )
|
switch ( m_data[this->m_type].initFunc )
|
||||||
{
|
{
|
||||||
case NPC_INIT_DEFAULT:
|
case NPC_INIT_DEFAULT:
|
||||||
|
@ -426,6 +435,17 @@ void CNpcEnemy::init()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case NPC_INIT_EYEBALL:
|
||||||
|
{
|
||||||
|
CProjectile *projectile;
|
||||||
|
projectile = new ( "eyeball projectile" ) CProjectile;
|
||||||
|
projectile->init( Pos, m_fireHeading, CProjectile::PROJECTILE_FIXED, CProjectile::PROJECTILE_INFINITE_LIFE );
|
||||||
|
|
||||||
|
addChild( projectile );
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case NPC_INIT_CIRCULAR_PLATFORM:
|
case NPC_INIT_CIRCULAR_PLATFORM:
|
||||||
{
|
{
|
||||||
Pos.vx = 300;
|
Pos.vx = 300;
|
||||||
|
@ -557,9 +577,9 @@ void CNpcEnemy::think(int _frames)
|
||||||
{
|
{
|
||||||
int frameCount = m_actorGfx->getFrameCount(m_animNo);
|
int frameCount = m_actorGfx->getFrameCount(m_animNo);
|
||||||
|
|
||||||
if ( frameCount - m_frame > _frames )
|
if ( frameCount - m_frame > _frames >> 1 )
|
||||||
{
|
{
|
||||||
m_frame += _frames;
|
m_frame += _frames >> 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1400,9 +1420,14 @@ void CNpcEnemy::processEvent( GAME_EVENT evt, CThing *sourceThing )
|
||||||
m_timerTimer = GameState::getOneSecondInFrames();
|
m_timerTimer = GameState::getOneSecondInFrames();
|
||||||
m_sensorFunc = NPC_SENSOR_NONE;
|
m_sensorFunc = NPC_SENSOR_NONE;
|
||||||
|
|
||||||
removeChild( sourceThing );
|
//removeChild( sourceThing );
|
||||||
sourceThing->shutdown();
|
//sourceThing->shutdown();
|
||||||
delete sourceThing;
|
//delete sourceThing;
|
||||||
|
|
||||||
|
CProjectile *projectile;
|
||||||
|
projectile = (CProjectile *) sourceThing;
|
||||||
|
projectile->setMovementType( CProjectile::PROJECTILE_FIXED );
|
||||||
|
projectile->setPosition( Pos );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,6 +158,7 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
|
void postInit();
|
||||||
void shutdown();
|
void shutdown();
|
||||||
void think(int _frames);
|
void think(int _frames);
|
||||||
void render();
|
void render();
|
||||||
|
@ -200,6 +201,7 @@ protected:
|
||||||
NPC_INIT_PARASITIC_WORM,
|
NPC_INIT_PARASITIC_WORM,
|
||||||
NPC_INIT_PARASITIC_WORM_SEGMENT,
|
NPC_INIT_PARASITIC_WORM_SEGMENT,
|
||||||
NPC_INIT_HERMIT_CRAB,
|
NPC_INIT_HERMIT_CRAB,
|
||||||
|
NPC_INIT_EYEBALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum NPC_CONTROL_FUNC
|
enum NPC_CONTROL_FUNC
|
||||||
|
@ -554,7 +556,6 @@ protected:
|
||||||
};
|
};
|
||||||
|
|
||||||
CNpcPositionHistory *m_positionHistory;
|
CNpcPositionHistory *m_positionHistory;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -616,7 +616,7 @@ CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
|
||||||
{ // NPC_EYEBALL
|
{ // NPC_EYEBALL
|
||||||
ACTORS_EYEBALL_SBK,
|
ACTORS_EYEBALL_SBK,
|
||||||
ANIM_EYEBALL_STALK,
|
ANIM_EYEBALL_STALK,
|
||||||
NPC_INIT_DEFAULT,
|
NPC_INIT_EYEBALL,
|
||||||
NPC_SENSOR_EYEBALL_USER_CLOSE,
|
NPC_SENSOR_EYEBALL_USER_CLOSE,
|
||||||
NPC_MOVEMENT_STATIC,
|
NPC_MOVEMENT_STATIC,
|
||||||
NPC_MOVEMENT_MODIFIER_NONE,
|
NPC_MOVEMENT_MODIFIER_NONE,
|
||||||
|
|
|
@ -309,6 +309,8 @@ void CGameScene::initLevel()
|
||||||
enemy->addWaypoint( newXPos, newYPos );
|
enemy->addWaypoint( newXPos, newYPos );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enemy->postInit();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Song is loaded/dumped by the level, and played from here. This just gives some
|
// Song is loaded/dumped by the level, and played from here. This just gives some
|
||||||
|
|
|
@ -190,12 +190,39 @@ bool CProjectile::processTargetSeek( int _frames, DVECTOR targetPos )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CProjectile::setMovementType( PROJECTILE_MOVEMENT_TYPE moveType )
|
||||||
|
{
|
||||||
|
m_movementType = moveType;
|
||||||
|
}
|
||||||
|
|
||||||
|
CProjectile::PROJECTILE_MOVEMENT_TYPE CProjectile::getMovementType()
|
||||||
|
{
|
||||||
|
return( m_movementType );
|
||||||
|
}
|
||||||
|
|
||||||
|
void CProjectile::setState( PROJECTILE_STATE newState )
|
||||||
|
{
|
||||||
|
m_state = newState;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CProjectile::setPosition( DVECTOR newPos )
|
||||||
|
{
|
||||||
|
Pos = newPos;
|
||||||
|
}
|
||||||
|
|
||||||
void CProjectile::think(int _frames)
|
void CProjectile::think(int _frames)
|
||||||
{
|
{
|
||||||
CEnemyProjectileThing::think( _frames );
|
CEnemyProjectileThing::think( _frames );
|
||||||
|
|
||||||
switch( m_movementType )
|
switch( m_movementType )
|
||||||
{
|
{
|
||||||
|
case PROJECTILE_FIXED:
|
||||||
|
{
|
||||||
|
// don't move at all
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case PROJECTILE_USER_SEEK:
|
case PROJECTILE_USER_SEEK:
|
||||||
{
|
{
|
||||||
switch( m_state )
|
switch( m_state )
|
||||||
|
|
|
@ -25,8 +25,9 @@ class CProjectile : public CEnemyProjectileThing
|
||||||
public:
|
public:
|
||||||
enum PROJECTILE_MOVEMENT_TYPE
|
enum PROJECTILE_MOVEMENT_TYPE
|
||||||
{
|
{
|
||||||
PROJECTILE_DUMBFIRE = 0,
|
PROJECTILE_FIXED = 0,
|
||||||
PROJECTILE_USER_SEEK = 1,
|
PROJECTILE_DUMBFIRE = 1,
|
||||||
|
PROJECTILE_USER_SEEK,
|
||||||
PROJECTILE_GAS_CLOUD,
|
PROJECTILE_GAS_CLOUD,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -50,6 +51,10 @@ public:
|
||||||
void think(int _frames);
|
void think(int _frames);
|
||||||
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 );
|
||||||
|
PROJECTILE_MOVEMENT_TYPE getMovementType();
|
||||||
|
void setState( PROJECTILE_STATE newState );
|
||||||
|
void setPosition( DVECTOR newPos );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
DVECTOR getScreenOffset();
|
DVECTOR getScreenOffset();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue