This commit is contained in:
parent
f04edb8544
commit
c616369ec5
Binary file not shown.
Binary file not shown.
@ -72,41 +72,68 @@ void CNpcCartPlatform::processMovement( int _frames )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for vertical movement
|
if ( m_inJump )
|
||||||
|
|
||||||
s32 checkDist = yMovement + 50;
|
|
||||||
|
|
||||||
groundHeight = CGameScene::getCollision()->getHeightFromGround( Pos.vx + moveX, Pos.vy, checkDist );
|
|
||||||
|
|
||||||
if ( groundHeight < checkDist )
|
|
||||||
{
|
{
|
||||||
// groundHeight <= yMovement indicates either just above ground or on or below ground
|
m_vertSpeed += 64;
|
||||||
|
|
||||||
moveY = groundHeight;
|
if ( m_vertSpeed > ( 5 << 8 ) )
|
||||||
|
{
|
||||||
|
m_vertSpeed = 5 << 8;
|
||||||
|
}
|
||||||
|
else if ( m_vertSpeed < -( 6 << 8 ) )
|
||||||
|
{
|
||||||
|
m_vertSpeed = -( 6 << 8 );
|
||||||
|
}
|
||||||
|
|
||||||
|
moveY = ( m_vertSpeed >> 8 ) * _frames;
|
||||||
|
|
||||||
|
groundHeight = CGameScene::getCollision()->getHeightFromGround( Pos.vx + moveX, Pos.vy + moveY, 16 );
|
||||||
|
|
||||||
|
if ( groundHeight < 0 )
|
||||||
|
{
|
||||||
|
// have touched down
|
||||||
|
|
||||||
|
m_inJump = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// fall
|
// check for vertical movement
|
||||||
|
|
||||||
moveY = yMovement;
|
s32 checkDist = yMovement + 50;
|
||||||
}
|
|
||||||
|
|
||||||
if ( moveY < 0 )
|
groundHeight = CGameScene::getCollision()->getHeightFromGround( Pos.vx + moveX, Pos.vy, checkDist );
|
||||||
{
|
|
||||||
m_carSpeed -= 20;
|
|
||||||
|
|
||||||
if ( m_carSpeed < ( 2 << 8 ) )
|
if ( groundHeight < checkDist )
|
||||||
{
|
{
|
||||||
m_carSpeed = ( 2 << 8 );
|
// groundHeight <= yMovement indicates either just above ground or on or below ground
|
||||||
|
|
||||||
|
moveY = groundHeight;
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else if ( moveY > 0 )
|
|
||||||
{
|
|
||||||
m_carSpeed += 20;
|
|
||||||
|
|
||||||
if ( m_carSpeed > ( 6 << 8 ) )
|
|
||||||
{
|
{
|
||||||
m_carSpeed = ( 6 << 8 );
|
// fall
|
||||||
|
|
||||||
|
moveY = yMovement;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( moveY < 0 )
|
||||||
|
{
|
||||||
|
m_carSpeed -= 1;
|
||||||
|
|
||||||
|
if ( m_carSpeed < ( 2 << 8 ) )
|
||||||
|
{
|
||||||
|
m_carSpeed = ( 2 << 8 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ( moveY > 0 )
|
||||||
|
{
|
||||||
|
m_carSpeed += 20;
|
||||||
|
|
||||||
|
if ( m_carSpeed > ( 6 << 8 ) )
|
||||||
|
{
|
||||||
|
m_carSpeed = ( 6 << 8 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,3 +227,14 @@ void CNpcCartPlatform::render()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcCartPlatform::jump()
|
||||||
|
{
|
||||||
|
if ( !m_inJump )
|
||||||
|
{
|
||||||
|
m_inJump = true;
|
||||||
|
m_vertSpeed = -6 << 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -23,11 +23,15 @@ class CNpcCartPlatform : public CNpcPlatform
|
|||||||
public:
|
public:
|
||||||
virtual void postInit();
|
virtual void postInit();
|
||||||
virtual void render();
|
virtual void render();
|
||||||
|
virtual u8 isCart() {return( true );}
|
||||||
|
virtual void jump();
|
||||||
protected:
|
protected:
|
||||||
virtual void processMovement( int _frames );
|
virtual void processMovement( int _frames );
|
||||||
|
|
||||||
s32 m_carSpeed;
|
s32 m_carSpeed;
|
||||||
u8 m_isActivated;
|
u8 m_isActivated;
|
||||||
|
u8 m_inJump;
|
||||||
|
s32 m_vertSpeed;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
@ -121,6 +121,8 @@ public:
|
|||||||
void setGraphic( u8 graphicNum );
|
void setGraphic( u8 graphicNum );
|
||||||
virtual void setWaypoints( sThingPlatform *ThisPlatform );
|
virtual void setWaypoints( sThingPlatform *ThisPlatform );
|
||||||
virtual void trigger() {;}
|
virtual void trigger() {;}
|
||||||
|
virtual u8 isCart() {return( false );}
|
||||||
|
virtual void jump() {;}
|
||||||
|
|
||||||
static NPC_PLATFORM_UNIT_TYPE getTypeFromMapEdit( u16 newType );
|
static NPC_PLATFORM_UNIT_TYPE getTypeFromMapEdit( u16 newType );
|
||||||
static CNpcPlatform *Create(int Type);
|
static CNpcPlatform *Create(int Type);
|
||||||
|
@ -728,18 +728,29 @@ if(newmode!=-1)
|
|||||||
platform=isOnPlatform();
|
platform=isOnPlatform();
|
||||||
if(platform)
|
if(platform)
|
||||||
{
|
{
|
||||||
DVECTOR posDelta;
|
if ( ( (CNpcPlatform *) platform )->isCart() )
|
||||||
posDelta=platform->getPosDelta();
|
|
||||||
posDelta.vy = 0;
|
|
||||||
shove(posDelta);
|
|
||||||
|
|
||||||
int platformOffset = ( ( CNpcPlatform* ) platform )->getHeightFromPlatformAtPosition( Pos.vx, Pos.vy );
|
|
||||||
int height=CGameScene::getCollision()->getHeightFromGround(Pos.vx,Pos.vy,16);
|
|
||||||
|
|
||||||
if ( platformOffset < height )
|
|
||||||
{
|
{
|
||||||
|
Pos.vx = platform->getPos().vx;
|
||||||
|
Pos.vy = platform->getPos().vy;
|
||||||
|
|
||||||
|
int platformOffset = ( ( CNpcPlatform* ) platform )->getHeightFromPlatformAtPosition( Pos.vx, Pos.vy );
|
||||||
Pos.vy += platformOffset;
|
Pos.vy += platformOffset;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DVECTOR posDelta;
|
||||||
|
posDelta=platform->getPosDelta();
|
||||||
|
posDelta.vy = 0;
|
||||||
|
shove(posDelta);
|
||||||
|
|
||||||
|
int platformOffset = ( ( CNpcPlatform* ) platform )->getHeightFromPlatformAtPosition( Pos.vx, Pos.vy );
|
||||||
|
int height=CGameScene::getCollision()->getHeightFromGround(Pos.vx,Pos.vy,16);
|
||||||
|
|
||||||
|
if ( platformOffset < height )
|
||||||
|
{
|
||||||
|
Pos.vy += platformOffset;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -70,6 +70,10 @@
|
|||||||
#include "player\psspring.h"
|
#include "player\psspring.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __PLATFORM_PLATFORM_H__
|
||||||
|
#include "platform\platform.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "game/game.h"
|
#include "game/game.h"
|
||||||
/* Std Lib
|
/* Std Lib
|
||||||
------- */
|
------- */
|
||||||
@ -195,7 +199,19 @@ void CPlayerModeBase::think()
|
|||||||
{
|
{
|
||||||
getStateTable()[m_currentState]->think(this);
|
getStateTable()[m_currentState]->think(this);
|
||||||
thinkVerticalMovement();
|
thinkVerticalMovement();
|
||||||
thinkHorizontalMovement();
|
|
||||||
|
if ( m_player->isOnPlatform() )
|
||||||
|
{
|
||||||
|
CNpcPlatform *platform = (CNpcPlatform *) m_player->isOnPlatform();
|
||||||
|
if ( !platform->isCart() )
|
||||||
|
{
|
||||||
|
thinkHorizontalMovement();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
thinkHorizontalMovement();
|
||||||
|
}
|
||||||
|
|
||||||
// Teeter if on an edge
|
// Teeter if on an edge
|
||||||
if(canTeeter()&&isOnEdge())
|
if(canTeeter()&&isOnEdge())
|
||||||
@ -618,6 +634,24 @@ int CPlayerModeBase::slowdown()
|
|||||||
}
|
}
|
||||||
void CPlayerModeBase::jump()
|
void CPlayerModeBase::jump()
|
||||||
{
|
{
|
||||||
|
CNpcPlatform *platform;
|
||||||
|
platform = (CNpcPlatform *) m_player->isOnPlatform();
|
||||||
|
if(platform)
|
||||||
|
{
|
||||||
|
if ( platform->isCart() )
|
||||||
|
{
|
||||||
|
/*Pos.vx = platform->getPos().vx;
|
||||||
|
Pos.vy = platform->getPos().vy;
|
||||||
|
|
||||||
|
int platformOffset = ( ( CNpcPlatform* ) platform )->getHeightFromPlatformAtPosition( Pos.vx, Pos.vy );
|
||||||
|
Pos.vy += platformOffset;*/
|
||||||
|
|
||||||
|
platform->jump();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DVECTOR moveVel;
|
DVECTOR moveVel;
|
||||||
moveVel=*m_player->getMoveVelocity();
|
moveVel=*m_player->getMoveVelocity();
|
||||||
moveVel.vy=-getPlayerMetrics()->m_metric[PM__JUMP_VELOCITY]<<VELOCITY_SHIFT;
|
moveVel.vy=-getPlayerMetrics()->m_metric[PM__JUMP_VELOCITY]<<VELOCITY_SHIFT;
|
||||||
|
Loading…
Reference in New Issue
Block a user