This commit is contained in:
Paul 2001-05-13 19:28:48 +00:00
parent 72e5da1ff6
commit 1a606c048d
9 changed files with 90 additions and 15 deletions

View File

@ -514,6 +514,16 @@ static s8 s_animMapNet[NUM_PLAYER_ADDONS][NUM_ANIM_SPONGEBOB]=
// -------------------------------------------------------------------------------
int m_cameraXScrollDir;
int m_cameraXScrollPos;
int CAMERA_SCROLLLIMIT=8; // SB is this many tiles off centre at most
//int CAMERA_SCROLLTHRESHOLD=6; // If SB moves when more than this many tiles off-centre, the camera will *always* scroll
int CAMERA_STARTMOVETHRESHOLD=20; // If SB moves faster than this then the camera starts scrolling
int CAMERA_STOPMOVETHRESHOLD=10; // If SB moves slower than this then the camera stops scrolling
int CAMERA_SCROLLSPEED=1000; // Speed of the scroll
int CAMERA_ACCURACYSHIFT=8;
const int CAMERA_TILESIZE=16;
/*----------------------------------------------------------------------
@ -712,6 +722,32 @@ if(newmode!=-1)
m_invincibleFrameCount--;
}
// Camera scroll..
if(m_cameraXScrollDir==-1)
{
if(m_cameraXScrollPos>-(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT)
{
m_cameraXScrollPos-=CAMERA_SCROLLSPEED;
if(m_cameraXScrollPos<-(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT)
{
m_cameraXScrollPos=-(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT;
m_cameraXScrollDir=0;
}
}
}
else if(m_cameraXScrollDir==+1)
{
if(m_cameraXScrollPos<((CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT))
{
m_cameraXScrollPos+=CAMERA_SCROLLSPEED;
if(m_cameraXScrollPos>(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT)
{
m_cameraXScrollPos=(CAMERA_SCROLLLIMIT*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT;
m_cameraXScrollDir=0;
}
}
}
// Stop the player vanishing off the edge of the telly..
if(Pos.vx<m_playerPosLimitBox.x1) Pos.vx=m_playerPosLimitBox.x1;
else if(Pos.vx>m_playerPosLimitBox.x2) Pos.vx=m_playerPosLimitBox.x2;
@ -845,12 +881,6 @@ if(newmode!=-1)
m_lastLedgeLookAhead=m_ledgeLookAhead;
m_ledgeLookAhead=0;
// Left/right scroll as SB moves left/right
int max=scmax*scspeed;
m_leftRightScrollPosition+=m_moveVelocity.vx;
if(m_leftRightScrollPosition<-max)m_leftRightScrollPosition=-max;
else if(m_leftRightScrollPosition>max)m_leftRightScrollPosition=max;
// Camera focus point stuff
calcCameraFocusPointTarget();
for(i=0;i<_frames;i++)
@ -1042,13 +1072,14 @@ for(int i=0;i<NUM_LASTPOS;i++)
m_spriteBank->printFT4(fh,x-2,y-2,0,0,0);
itemX+=COLLECTEDITEM_GAP;
}
/*
if(isWearingDivingHelmet())
{
sFrameHdr *fh=m_spriteBank->getFrameHeader(FRM__HELMET);
m_spriteBank->printFT4(fh,itemX-(fh->W/2),COLLECTEDITEM_BASEY-(fh->H/2),0,0,0);
itemX+=COLLECTEDITEM_GAP;
}
*/
}
@ -1290,7 +1321,6 @@ void CPlayer::teleportTo(int _x,int _y)
setPos(pos);
setRespawnPos(pos);
m_leftRightScrollPosition=0;
calcCameraFocusPointTarget();
m_currentCamFocusPoint=m_currentCamFocusPointTarget;
}
@ -1367,7 +1397,7 @@ void CPlayer::playAnimFrameSfx(int _animNo,int _animFrame)
---------------------------------------------------------------------- */
void CPlayer::calcCameraFocusPointTarget()
{
m_currentCamFocusPointTarget.vx=Pos.vx+MAP2D_CENTRE_X+(m_leftRightScrollPosition/scspeed);
m_currentCamFocusPointTarget.vx=Pos.vx+MAP2D_CENTRE_X-(m_cameraXScrollPos>>CAMERA_ACCURACYSHIFT);
m_currentCamFocusPointTarget.vy=Pos.vy+MAP2D_CENTRE_Y;
}
@ -1400,7 +1430,8 @@ void CPlayer::respawn()
m_cameraLookOffset=0;
m_lockCamera=false;
m_leftRightScrollPosition=0;
m_cameraXScrollDir=0;
m_cameraXScrollPos=0;
calcCameraFocusPointTarget();
m_currentCamFocusPoint=m_currentCamFocusPointTarget;
m_cameraPos.vx=m_currentCamFocusPoint.vx;
@ -1909,6 +1940,42 @@ void CPlayer::shove( DVECTOR move )
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayer::moveLeft()
{
if(m_moveVelocity.vx<-CAMERA_STARTMOVETHRESHOLD)//||m_cameraXScrollPos<-(CAMERA_SCROLLTHRESHOLD*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT)
{
m_cameraXScrollDir=+1;
}
else if(m_moveVelocity.vx>-CAMERA_STOPMOVETHRESHOLD)
{
m_cameraXScrollDir=0;
}
}
void CPlayer::moveRight()
{
if(m_moveVelocity.vx>CAMERA_STARTMOVETHRESHOLD)//||m_cameraXScrollPos>(CAMERA_SCROLLTHRESHOLD*CAMERA_TILESIZE)<<CAMERA_ACCURACYSHIFT)
{
m_cameraXScrollDir=-1;
}
else if(m_moveVelocity.vx<CAMERA_STOPMOVETHRESHOLD)
{
m_cameraXScrollDir=0;
}
}
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
void CPlayer::setPlatform(CThing *_newPlatform)
{
m_platform=_newPlatform;

View File

@ -188,6 +188,8 @@ public:
virtual void think(int _frames);
virtual void render();
virtual void shove(DVECTOR move);
void moveLeft(); // This is only for camera scroll right now..
void moveRight(); // " " " " "
virtual int moveVertical(int _moveDistance);
virtual int moveHorizontal(int _moveDistance);
virtual void setHasPlatformCollided( bool newVal );
@ -288,7 +290,6 @@ private:
int m_ledgeLookAhead,m_lastLedgeLookAhead;
int m_ledgeLookOffset;
int m_ledgeLookTimer;
int m_leftRightScrollPosition;
enum

View File

@ -65,6 +65,7 @@
---------------------------------------------------------------------- */
void CPlayerModeBubbleMixture::enter()
{
CPlayerModeBase::enter();
CSoundMediator::playSfx(CSoundMediator::SFX_BUBBLE_WAND);
m_blowing=false;
m_bubbleDelay=0;

View File

@ -53,6 +53,7 @@
---------------------------------------------------------------------- */
void CPlayerModeChop::enter()
{
CPlayerModeBase::enter();
m_chopping=false;
}

View File

@ -150,6 +150,7 @@ static PlayerMetrics s_playerMetrics=
---------------------------------------------------------------------- */
void CPlayerModeCoralBlower::enter()
{
CPlayerModeBase::enter();
m_blowerState=BLOWER_STATE__EMPTY;
CSoundMediator::playSfx(CSoundMediator::SFX_ITEM__CORAL_BLOWER);
}

View File

@ -73,6 +73,7 @@
---------------------------------------------------------------------- */
void CPlayerModeJellyLauncher::enter()
{
CPlayerModeBase::enter();
m_firingState=FIRING_STATE__NONE;
m_player->giveJellyAmmo();
}

View File

@ -86,6 +86,7 @@ int npsize=40;
---------------------------------------------------------------------- */
void CPlayerModeNet::enter()
{
CPlayerModeBase::enter();
m_netState=NET_STATE__INERT;
m_jellyfishHeld=0;
}

View File

@ -537,6 +537,7 @@ void CPlayerModeBase::moveLeft()
moveVel.vx-=metrics->m_metric[PM__RUN_REVERSESLOWDOWN];
}
setMoveVelocity(&moveVel);
m_player->moveLeft();
}
void CPlayerModeBase::moveRight()
@ -560,6 +561,7 @@ void CPlayerModeBase::moveRight()
moveVel.vx+=metrics->m_metric[PM__RUN_REVERSESLOWDOWN];
}
setMoveVelocity(&moveVel);
m_player->moveRight();
}
int CPlayerModeBase::slowdown()
{

View File

@ -117,10 +117,10 @@ void CPlayerStateJump::think(CPlayerModeBase *_playerMode)
_playerMode->slowdown();
}
if(controlDown&PI_DOWN)
{
_playerMode->setState(STATE_BUTTBOUNCE);
}
// if(controlDown&PI_DOWN)
// {
// _playerMode->setState(STATE_BUTTBOUNCE);
// }
}