/*========================================================================= pmcoral.cpp Author: PKG Created: Project: Spongebob Purpose: Copyright (c) 2001 Climax Development Ltd ===========================================================================*/ /*---------------------------------------------------------------------- Includes -------- */ #include "player\pmcoral.h" /* Std Lib ------- */ /* Data ---- */ #ifndef __ANIM_SPONGEBOB_HEADER__ #include #endif /*---------------------------------------------------------------------- Tyepdefs && Defines ------------------- */ /*---------------------------------------------------------------------- Structure defintions -------------------- */ /*---------------------------------------------------------------------- Function Prototypes ------------------- */ /*---------------------------------------------------------------------- Vars ---- */ static PlayerMetrics s_playerMetrics= { { DEFAULT_PLAYER_JUMP_VELOCITY/2, // PM__JUMP_VELOCITY DEFAULT_PLAYER_MAX_JUMP_FRAMES/2, // PM__MAX_JUMP_FRAMES DEFAULT_PLAYER_MAX_SAFE_FALL_FRAMES, // PM__MAX_SAFE_FALL_FRAMES DEFAULT_PLAYER_MAX_RUN_VELOCITY/3, // PM__MAX_RUN_VELOCITY DEFAULT_PLAYER_RUN_SPEEDUP/2, // PM__RUN_SPEEDUP DEFAULT_PLAYER_RUN_REVERSESLOWDOWN, // PM__RUN_REVERSESLOWDOWN DEFAULT_PLAYER_RUN_SLOWDOWN, // PM__RUN_SLOWDOWN DEFAULT_PLAYER_PLAYER_GRAVITY, // PM__GRAVITY DEFAULT_PLAYER_TERMINAL_VELOCITY, // PM__TERMINAL_VELOCITY } }; /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CPlayerModeCoralBlower::enter() { m_chopping=false; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CPlayerModeCoralBlower::think() { // If we're chopping then restore the 'real' anim number/frame before // doing the think so that the rest of the code doesn't know what // is going on ;) if(m_chopping) { setAnimNo(m_savedAnimNo); setAnimFrame(m_savedAnimFrame); } CPlayerModeBase::think(); // Start to chop? if(!m_chopping&&getPadInputDown()&PI_ACTION&&canAttackFromThisState()) { m_chopFrame=0; m_chopping=true; } // Chopping? if(m_chopping) { m_player->setAnimNo(ANIM_SPONGEBOB_KARATE); m_player->setAnimFrame(m_chopFrame); m_chopFrame++; if(m_chopFrame>=m_player->getAnimFrameCount()) { PAUL_DBGMSG("restore %d,%d",m_savedAnimNo,m_savedAnimFrame); m_player->setAnimNo(m_savedAnimNo); m_player->setAnimFrame(m_savedAnimFrame); m_chopping=false; } } } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ const struct PlayerMetrics *CPlayerModeCoralBlower::getPlayerMetrics() { return &s_playerMetrics; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ void CPlayerModeCoralBlower::setAnimNo(int _animNo) { CPlayerModeBase::setAnimNo(_animNo); m_savedAnimNo=_animNo; } void CPlayerModeCoralBlower::setAnimFrame(int _animFrame) { CPlayerModeBase::setAnimFrame(_animFrame); m_savedAnimFrame=_animFrame; } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ int CPlayerModeCoralBlower::isInAttackState() { return m_chopping||CPlayerModeBase::isInAttackState(); } /*---------------------------------------------------------------------- Function: Purpose: Params: Returns: ---------------------------------------------------------------------- */ int CPlayerModeCoralBlower::canAttackFromThisState() { int ret=false; switch(getState()) { case STATE_IDLE: case STATE_IDLETEETER: case STATE_JUMP: case STATE_RUN: case STATE_FALL: ret=true; break; case STATE_FALLFAR: case STATE_BUTTBOUNCE: case STATE_BUTTFALL: case STATE_BUTTLAND: case STATE_DUCK: case STATE_SOAKUP: case STATE_GETUP: break; } return ret; } /*=========================================================================== end */