This commit is contained in:
Paul 2001-01-26 18:20:41 +00:00
parent 76e5b7a4a2
commit be932989e6
6 changed files with 74 additions and 96 deletions

View file

@ -135,6 +135,7 @@ paul_src := paul \
scenesel scenesel
player_src := player \ player_src := player \
pmodes \
psbutt \ psbutt \
pschop \ pschop \
psduck \ psduck \

View file

@ -25,38 +25,6 @@
#include "pad\pads.h" #include "pad\pads.h"
#endif #endif
#ifndef __PLAYER__PSSTATES_H__
#include "player\pstates.h"
#endif
#ifndef __PLAYER__PSJUMP_H__
#include "player\psjump.h"
#endif
#ifndef __PLAYER__PSRUN_H__
#include "player\psrun.h"
#endif
#ifndef __PLAYER__PSFALL_H__
#include "player\psfall.h"
#endif
#ifndef __PLAYER__PSIDLE_H__
#include "player\psidle.h"
#endif
#ifndef __PLAYER__PSBUTT_H__
#include "player\psbutt.h"
#endif
#ifndef __PLAYER__PSCHOP_H__
#include "player\pschop.h"
#endif
#ifndef __PLAYER__PSDUCK_H__
#include "player\psduck.h"
#endif
#ifndef __GAME_GAMESLOT_H__ #ifndef __GAME_GAMESLOT_H__
#include "game\gameslot.h" #include "game\gameslot.h"
#endif #endif
@ -92,54 +60,6 @@
Vars Vars
---- */ ---- */
CPlayerStateIdle stateIdle;
CPlayerStateJump stateJump;
CPlayerStateRun stateRun;
CPlayerStateFall stateFall;
CPlayerStateFallFar stateFallFar;
CPlayerStateButtBounce stateButtBounce;
CPlayerStateButtBounceFall stateButtBounceFall;
CPlayerStateButtBounceLand stateButtBounceLand;
CPlayerStateChop stateChop;
CPlayerStateRunChop stateRunChop;
CPlayerStateAirChop stateAirChop;
CPlayerStateDuck stateDuck;
CPlayerStateSoakUp stateSoackUp;
CPlayerStateGetUp stateGetup;
// Player with karate chop installed
CPlayer::PlayerMode CPlayer::s_modes=
{
{ {
8, // PM__JUMP_VELOCITY
10, // PM__MAX_JUMP_FRAMES
20, // PM__MAX_SAFE_FALL_FRAMES
4, // PM__GRAVITY_VALUE
8, // PM__TERMINAL_VELOCITY
8, // PM__MAX_RUN_VELOCITY
4, // PM__RUN_SPEEDUP
2, // PM__RUN_REVERSESLOWDOWN
1, // PM__RUN_SLOWDOWN
} },
{
&stateIdle, // STATE_IDLE
&stateJump, // STATE_JUMP
&stateRun, // STATE_RUN
&stateFall, // STATE_FALL
&stateFallFar, // STATE_FALLFAR
&stateButtBounce, // STATE_BUTTBOUNCE
&stateButtBounceFall, // STATE_BUTTFALL
&stateButtBounceLand, // STATE_BUTTLAND
&stateChop, // STATE_ATTACK
&stateRunChop, // STATE_RUNATTACK
&stateAirChop, // STATE_AIRATTACK
&stateDuck, // STATE_DUCK
&stateSoackUp, // STATE_SOAKUP
&stateGetup, // STATE_GETUP
}
};
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:
@ -157,6 +77,7 @@ void CPlayer::init()
m_animNo=0; m_animNo=0;
m_animFrame=0; m_animFrame=0;
m_currentMode=PLAYER_MODE_BASICUNARMED;
setState(STATE_IDLE); setState(STATE_IDLE);
m_moveVel.vx=0; m_moveVel.vx=0;
m_moveVel.vy=0; m_moveVel.vy=0;
@ -198,6 +119,7 @@ void CPlayer::shutdown()
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
DVECTOR ofs={-240,-134}; // nearly -256,-128 ;) DVECTOR ofs={-240,-134}; // nearly -256,-128 ;)
int psize=0;
void CPlayer::think(int _frames) void CPlayer::think(int _frames)
{ {
int i; int i;
@ -218,17 +140,17 @@ void CPlayer::think(int _frames)
for(i=0;i<_frames;i++) for(i=0;i<_frames;i++)
{ {
// Think // Think
m_currentState->think(this); m_currentStateClass->think(this);
// Horizontal movement // Horizontal movement
Pos.vx+=m_moveVel.vx>>VELOCITY_SHIFT; Pos.vx+=m_moveVel.vx>>VELOCITY_SHIFT;
if(Pos.vx<350) if(Pos.vx<350)
{ {
if(m_state==STATE_RUN) // if(m_currentState==STATE_RUN)
{ // {
setState(STATE_IDLE); // setState(STATE_IDLE);
setAnimNo(ANIM_PLAYER_ANIM_RUNSTOP); // setAnimNo(ANIM_PLAYER_ANIM_RUNSTOP);
} // }
Pos.vx=350; Pos.vx=350;
m_moveVel.vx=0; m_moveVel.vx=0;
} }
@ -240,11 +162,11 @@ void CPlayer::think(int _frames)
if(m_moveVel.vy) if(m_moveVel.vy)
{ {
// Was falling.. so we've just hit the ground // Was falling.. so we've just hit the ground
if(m_state==STATE_BUTTFALL) if(m_currentState==STATE_BUTTFALL)
{ {
setState(STATE_BUTTLAND); setState(STATE_BUTTLAND);
} }
else if(m_state==STATE_FALLFAR) else if(m_currentState==STATE_FALLFAR)
{ {
setState(STATE_IDLE); setState(STATE_IDLE);
} }
@ -264,7 +186,7 @@ void CPlayer::think(int _frames)
} }
else else
{ {
if(m_state!=STATE_JUMP&&m_state!=STATE_BUTTBOUNCE) if(m_currentState!=STATE_JUMP&&m_currentState!=STATE_BUTTBOUNCE)
{ {
// Fall // Fall
const PlayerMetrics *metrics; const PlayerMetrics *metrics;
@ -372,7 +294,7 @@ DVECTOR CPlayer::getCameraPos()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
const PlayerMetrics *CPlayer::getPlayerMetrics() const PlayerMetrics *CPlayer::getPlayerMetrics()
{ {
return &s_modes.m_metrics; return &s_modes[m_currentMode].m_metrics;
} }
@ -387,9 +309,28 @@ const PlayerMetrics *CPlayer::getPlayerMetrics()
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CPlayer::setState(PLAYER_STATE _state) void CPlayer::setState(PLAYER_STATE _state)
{ {
m_currentState=s_modes.m_states[_state]; CPlayerState *nextState;
m_currentState->enter(this);
m_state=_state; nextState=s_modes[m_currentMode].m_states[_state];
if(nextState)
{
m_currentStateClass=nextState;
m_currentStateClass->enter(this);
m_currentState=_state;
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayer::setMode(PLAYER_MODE _mode)
{
m_currentMode=_mode;
setState(m_currentState);
} }
@ -452,6 +393,10 @@ void CPlayer::setMoveVelocity(DVECTOR *_moveVel)
{ {
m_moveVel=*_moveVel; m_moveVel=*_moveVel;
} }
DVECTOR CPlayer::getPlayerPos()
{
return Pos;
}
int CPlayer::getPadInput() int CPlayer::getPadInput()
{ {
return PadGetHeld(0); return PadGetHeld(0);

View file

@ -62,6 +62,14 @@ typedef enum
NUM_STATES, NUM_STATES,
}PLAYER_STATE; }PLAYER_STATE;
typedef enum
{
PLAYER_MODE_BASICUNARMED,
PLAYER_MODE_FULLUNARMED,
NUM_PLAYERMODES,
}PLAYER_MODE;
enum enum
{ {
FACING_LEFT=+1, FACING_LEFT=+1,
@ -114,6 +122,7 @@ protected:
// State // State
void setState(PLAYER_STATE _state); void setState(PLAYER_STATE _state);
void setMode(PLAYER_MODE _mode);
int getFacing(); int getFacing();
void setFacing(int _facing); void setFacing(int _facing);
int getAnimFrame(); int getAnimFrame();
@ -123,6 +132,7 @@ protected:
void setAnimNo(int _animNo); void setAnimNo(int _animNo);
DVECTOR getMoveVelocity(); DVECTOR getMoveVelocity();
void setMoveVelocity(DVECTOR *_moveVel); void setMoveVelocity(DVECTOR *_moveVel);
DVECTOR getPlayerPos();
virtual int getPadInput(); virtual int getPadInput();
// Collision // Collision
@ -147,11 +157,9 @@ private:
class CPlayerState *m_states[NUM_STATES]; class CPlayerState *m_states[NUM_STATES];
}PlayerMode; }PlayerMode;
static PlayerMode s_modes;
int m_animFrame; int m_animFrame;
int m_animNo; int m_animNo;
PLAYER_STATE m_state;
CSkel m_skel; CSkel m_skel;
DVECTOR m_moveVel; DVECTOR m_moveVel;
@ -165,7 +173,10 @@ private:
}; };
int m_invincibleFrameCount; int m_invincibleFrameCount;
class CPlayerState *m_currentState; static PlayerMode s_modes[NUM_PLAYERMODES];
int m_currentMode;
class CPlayerState *m_currentStateClass;
PLAYER_STATE m_currentState;
int m_lives; int m_lives;

View file

@ -27,6 +27,10 @@
#include "pad\pads.h" #include "pad\pads.h"
#endif #endif
#ifndef __GAME_GAMEBUBS_H__
#include "game\gamebubs.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -90,6 +94,10 @@ void CPlayerStateButtBounce::think(CPlayer *_player)
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
void CPlayerStateButtBounceLand::enter(CPlayer *_player) void CPlayerStateButtBounceLand::enter(CPlayer *_player)
{ {
DVECTOR pos;
pos=getPlayerPos(_player);
CGameBubicleFactory::spawnBubicles(pos.vx,pos.vy,40,10,CGameBubicleFactory::TYPE_MEDIUM);
setAnimNo(_player,ANIM_PLAYER_ANIM_BUTTBOUNCE); setAnimNo(_player,ANIM_PLAYER_ANIM_BUTTBOUNCE);
} }

View file

@ -198,6 +198,18 @@ void CPlayerState::setMoveVelocity(CPlayer *_player,DVECTOR *_moveVel)
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
DVECTOR CPlayerState::getPlayerPos(CPlayer *_player)
{
return _player->getPlayerPos();
}
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
Function: Function:
Purpose: Purpose:

View file

@ -53,6 +53,7 @@ protected:
int retreatAnimFrameAndCheckForEndOfAnim(class CPlayer *_player); int retreatAnimFrameAndCheckForEndOfAnim(class CPlayer *_player);
DVECTOR getMoveVelocity(class CPlayer *_player); DVECTOR getMoveVelocity(class CPlayer *_player);
void setMoveVelocity(class CPlayer *_player,DVECTOR *_moveVel); void setMoveVelocity(class CPlayer *_player,DVECTOR *_moveVel);
DVECTOR getPlayerPos(class CPlayer *_player);
int getPadInput(class CPlayer *_player); int getPadInput(class CPlayer *_player);
int isOnSolidGround(class CPlayer *_player); int isOnSolidGround(class CPlayer *_player);