This commit is contained in:
Charles 2001-04-27 15:09:10 +00:00
parent 5c2faa793b
commit 02eafd0a46
15 changed files with 160 additions and 273 deletions

View file

@ -41,7 +41,6 @@
#include "game\convo.h"
#endif
#include "Gfx\actor.h"
#ifndef __VID_HEADER_
@ -179,131 +178,6 @@
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Friend NPCs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcFriend::init()
{
CNpcThing::init();
Pos.vx = 100;
Pos.vy = 100;
m_extension = EXTEND_RIGHT;
// temporary
m_actorGfx=CActorPool::GetActor(ACTORS_CLAM_SBK);
//m_animPlaying = true;
m_animNo = 0;
m_frame = 0;
m_reversed = false;
DVECTOR ofs = getCollisionSize();
m_drawOffset.vx = 0;
m_drawOffset.vy = -( ofs.vy >> 1 );
setCollisionCentreOffset( 0, -( ofs.vy >> 1 ) );
//m_spriteBank=new ("enemy sprites") SpriteBank();
//m_spriteBank->load(UI_UIGFX_SPR);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcFriend::shutdown()
{
//m_spriteBank->dump(); delete m_spriteBank;
delete m_actorGfx;
CNpcThing::shutdown();
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcFriend::think(int _frames)
{
CNpcThing::think(_frames);
switch( m_data[m_type].movementFunc )
{
case NPC_FRIEND_MOVEMENT_GARY:
processGaryMovement( _frames );
break;
case NPC_FRIEND_MOVEMENT_STATIC:
default:
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcFriend::render()
{
CNpcThing::render();
// Render
DVECTOR renderPos;
DVECTOR offset = CLevel::getCameraPos();
renderPos.vx = Pos.vx - offset.vx;
renderPos.vy = Pos.vy - offset.vy;
if ( renderPos.vx >= 0 && renderPos.vx <= VidGetScrW() )
{
if ( renderPos.vy >= 0 && renderPos.vy <= VidGetScrH() )
{
m_actorGfx->Render(renderPos,m_animNo,m_frame,m_reversed);
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void CNpcFriend::processEvent( GAME_EVENT evt, CThing *sourceThing )
{
switch( evt )
{
case USER_REQUEST_TALK_EVENT:
{
if ( m_data[this->m_type].canTalk )
{
DVECTOR sourcePos;
s32 xDiffSqr, yDiffSqr;
// check talk distance
sourcePos = sourceThing->getPos();
xDiffSqr = this->Pos.vx - sourcePos.vx;
xDiffSqr *= xDiffSqr;
yDiffSqr = this->Pos.vy - sourcePos.vy;
yDiffSqr *= yDiffSqr;
if ( xDiffSqr + yDiffSqr < 10000 )
{
if( !CConversation::isActive() )
{
CConversation::trigger( SCRIPTS_SPEECHTEST_DAT );
}
}
}
break;
}
default:
// ignore
break;
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Enemy NPCs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@ -313,7 +187,6 @@ s32 CNpcEnemy::playerYDist;
s32 CNpcEnemy::playerXDistSqr;
s32 CNpcEnemy::playerYDistSqr;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::getTypeFromMapEdit( u16 newType )
@ -322,6 +195,7 @@ CNpcEnemy::NPC_UNIT_TYPE CNpcEnemy::getTypeFromMapEdit( u16 newType )
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
CNpcEnemy *CNpcEnemy::Create(sThingActor *ThisActor)
{
CNpcEnemy *enemy;

View file

@ -37,77 +37,6 @@
/*****************************************************************************/
class CNpcFriend : public CNpcThing
{
public:
enum NPC_FRIEND_UNIT_TYPE
{
NPC_FRIEND_SANDY_CHEEKS = 0,
NPC_FRIEND_GARY = 1,
NPC_FRIEND_UNIT_TYPE_MAX,
};
void init();
void shutdown();
void think(int _frames);
void render();
void processEvent( GAME_EVENT evt, CThing *sourceThing );
void setLayerCollision( class CLayerCollision *_layer ) {m_layerCollision=_layer;}
void setType( NPC_FRIEND_UNIT_TYPE newType ) {m_type = newType;}
private:
class CLayerCollision *m_layerCollision;
protected:
enum NPC_FRIEND_MOVEMENT_FUNC
{
NPC_FRIEND_MOVEMENT_STATIC = 0,
NPC_FRIEND_MOVEMENT_GARY = 1,
};
typedef struct NPC_FRIEND_DATA_TYPE
{
//NPC_FRIEND_INIT_FUNC initFunc;
//NPC_FRIEND_SENSOR_FUNC sensorFunc;
NPC_FRIEND_MOVEMENT_FUNC movementFunc;
//NPC_FRIEND_CLOSE_FUNC closeFunc;
//NPC_FRIEND_TIMER_FUNC timerFunc;
bool canTalk;
u8 speed;
u16 turnSpeed;
bool detectCollision;
DAMAGE_TYPE damageToUserType;
}
NPC_FRIEND_DATA;
// gary functions
void processGaryMovement( int _frames );
// data
static NPC_FRIEND_DATA m_data[NPC_FRIEND_UNIT_TYPE_MAX];
// class SpriteBank *m_spriteBank;
enum
{
EXTEND_RIGHT = true,
EXTEND_LEFT = false,
};
// internal variables
NPC_FRIEND_UNIT_TYPE m_type;
s32 m_extension;
int m_frame;
int m_animNo;
CActorGfx *m_actorGfx;
DVECTOR m_drawOffset;
bool m_reversed;
};
class CNpcEnemy : public CEnemyThing
{
public:

View file

@ -108,37 +108,6 @@
//#endif
CNpcFriend::NPC_FRIEND_DATA CNpcFriend::m_data[NPC_FRIEND_UNIT_TYPE_MAX] =
{
{ // NPC_SANDY_CHEEKS
//NPC_FRIEND_INIT_DEFAULT,
//NPC_FRIEND_SENSOR_NONE,
NPC_FRIEND_MOVEMENT_STATIC,
//NPC_FRIEND_MOVEMENT_MODIFIER_NONE,
//NPC_FRIEND_CLOSE_NONE,
//NPC_FRIEND_TIMER_NONE,
true,
3,
128,
false,
DAMAGE__HIT_ENEMY,
},
{ // NPC_GARY
//NPC_FRIEND_INIT_DEFAULT,
//NPC_FRIEND_SENSOR_NONE,
NPC_FRIEND_MOVEMENT_GARY,
//NPC_FRIEND_MOVEMENT_MODIFIER_NONE,
//NPC_FRIEND_CLOSE_NONE,
//NPC_FRIEND_TIMER_NONE,
false,
3,
2048,
false,
DAMAGE__HIT_ENEMY,
},
};
CNpcEnemy::NPC_DATA CNpcEnemy::m_data[NPC_UNIT_TYPE_MAX] =
{
/*{ // NPC_FALLING_ITEM