This commit is contained in:
Paul 2001-02-12 17:55:01 +00:00
parent 12e8907ece
commit bdc2cc0a7a
6 changed files with 75 additions and 14 deletions

View file

@ -184,32 +184,33 @@ void CPlayer::init()
TPLoadTex(ACTORS_SPONGEBOB_TEX);
m_skel.setAnimDatabase(CAnimDB::GetPlayerAnimBank());
#ifdef __USER_paul__
m_respawnPos.vx=23*16;
m_respawnPos.vy=10*16;
#else
m_respawnPos.vx=10;
m_respawnPos.vy=10;
#endif
m_animNo=0;
m_animFrame=0;
m_currentMode=PLAYER_MODE_BASICUNARMED;
setState(STATE_IDLE);
m_moveVel.vx=0;
m_moveVel.vy=0;
setFacing(FACING_RIGHT);
respawn();
m_lives=CGameSlotManager::getSlotData().m_lives;
m_invincibleFrameCount=INVIBCIBLE_FRAMES__START;
#ifdef __USER_paul__
Pos.vx=23*16;
Pos.vy=10*16;
#else
Pos.vx=10;
Pos.vy=10;
#endif
m_cameraOffset.vx=0;
m_cameraOffset.vy=0;
m_lastPadInput=m_padInput=PI_NONE;
s_health=5;
s_screenPos=128;
m_skel.setAng(512);
@ -932,6 +933,29 @@ void CPlayer::fall()
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayer::respawn()
{
setState(STATE_IDLE);
// Strip any items that the player might be holding
if(m_currentMode!=PLAYER_MODE_BASICUNARMED)
{
setMode(PLAYER_MODE_FULLUNARMED);
}
s_health=5;
m_invincibleFrameCount=INVIBCIBLE_FRAMES__START;
Pos=m_respawnPos;
}
/*----------------------------------------------------------------------
Function:
Purpose:
@ -939,7 +963,7 @@ void CPlayer::fall()
Returns:
---------------------------------------------------------------------- */
#ifdef __VERSION_DEBUG__
int invincibleSponge=false; // NB: This is for debugging purposes only
int invincibleSponge=false; // NB: This is for debugging purposes only so don't try and use it for a permenant cheat mode..
#endif
void CPlayer::takeDamage(DAMAGE_TYPE _damage)
{

View file

@ -195,6 +195,8 @@ protected:
void jump();
void fall();
void respawn();
void takeDamage(DAMAGE_TYPE _damage);
friend class CPlayerState;
@ -263,6 +265,7 @@ private:
// Various info about the current map
class CLayerCollision *m_layerCollision;
DVECTOR m_mapCameraEdges;
DVECTOR m_respawnPos;
};

View file

@ -22,6 +22,10 @@
#include "player\player.h"
#endif
#ifndef __SYSTEM_GSTATE_H__
#include "system\gstate.h"
#endif
/* Std Lib
------- */
@ -59,6 +63,8 @@
void CPlayerStateDead::enter(CPlayer *_player)
{
setAnimNo(_player,ANIM_PLAYER_ANIM_DEATHSPIN);
m_deadCounter=0;
}
@ -70,11 +76,22 @@ void CPlayerStateDead::enter(CPlayer *_player)
---------------------------------------------------------------------- */
void CPlayerStateDead::think(CPlayer *_player)
{
if(advanceAnimFrameAndCheckForEndOfAnim(_player))
if(!m_deadCounter)
{
setState(_player,STATE_IDLE);
if(advanceAnimFrameAndCheckForEndOfAnim(_player))
{
retreatAnimFrameAndCheckForEndOfAnim(_player);
m_deadCounter=1;
}
}
else
{
if(++m_deadCounter>10*GameState::getOneSecondInFrames()||
getPadInputDown(_player)&PI_ACTION)
{
respawn(_player);
}
}
}

View file

@ -38,6 +38,9 @@ public:
virtual void enter(class CPlayer *_player);
virtual void think(class CPlayer *_player);
private:
int m_deadCounter;
};

View file

@ -310,5 +310,17 @@ void CPlayerState::fall(CPlayer *_player)
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayerState::respawn(CPlayer *_player)
{
_player->respawn();
}
/*===========================================================================
end */

View file

@ -68,6 +68,8 @@ protected:
void jump(class CPlayer *_player);
void fall(class CPlayer *_player);
void respawn(class CPlayer *_player);
};