This commit is contained in:
parent
f108a3aab2
commit
d95c3a1178
5 changed files with 100 additions and 16 deletions
|
@ -75,7 +75,7 @@ public:
|
||||||
|
|
||||||
virtual void init();
|
virtual void init();
|
||||||
virtual void setGraphic( sThingHazard *ThisHazard );
|
virtual void setGraphic( sThingHazard *ThisHazard );
|
||||||
void shutdown();
|
virtual void shutdown();
|
||||||
virtual void think(int _frames);
|
virtual void think(int _frames);
|
||||||
virtual void render();
|
virtual void render();
|
||||||
virtual void setWaypoints( sThingHazard *ThisHazard );
|
virtual void setWaypoints( sThingHazard *ThisHazard );
|
||||||
|
|
|
@ -27,6 +27,10 @@
|
||||||
#include "game\game.h"
|
#include "game\game.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __VID_HEADER_
|
||||||
|
#include "system\vid.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
@ -39,20 +43,45 @@ void CNpcCheckpointHazard::init()
|
||||||
m_spriteFrame = 0; // Change by dave cos the checkpoint gfx aint there no more
|
m_spriteFrame = 0; // Change by dave cos the checkpoint gfx aint there no more
|
||||||
m_timer = 0;
|
m_timer = 0;
|
||||||
m_flick = false;
|
m_flick = false;
|
||||||
|
|
||||||
|
m_scalableFont=new ("CheckpointFont") ScalableFontBank();
|
||||||
|
m_scalableFont->initialise(&standardFont);
|
||||||
|
m_scalableFont->setColour(255,255,255);
|
||||||
|
m_scalableFont->setScale(511);
|
||||||
|
|
||||||
|
if ( CLevel::getCurrentCheckpoint() == this )
|
||||||
|
{
|
||||||
|
m_triggered = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
void CNpcCheckpointHazard::think(int _frames)
|
void CNpcCheckpointHazard::think(int _frames)
|
||||||
{
|
{
|
||||||
|
if ( m_flick )
|
||||||
|
{
|
||||||
m_timer -= _frames;
|
m_timer -= _frames;
|
||||||
|
|
||||||
if ( m_timer <= 0 )
|
if ( m_timer <= 0 )
|
||||||
{
|
{
|
||||||
m_flick = !m_flick;
|
m_flick = false;
|
||||||
|
|
||||||
m_timer = GameState::getOneSecondInFrames();
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_scalableFont->setJustification(FontBank::JUST_CENTRE);
|
||||||
|
m_scalableFont->print( 256, 50, "Checkpoint!" );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
void CNpcCheckpointHazard::shutdown()
|
||||||
|
{
|
||||||
|
m_scalableFont->dump(); delete m_scalableFont;
|
||||||
|
|
||||||
|
CNpcHazard::shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -72,21 +101,54 @@ void CNpcCheckpointHazard::render()
|
||||||
|
|
||||||
m_modelGfx->Render(renderPos);
|
m_modelGfx->Render(renderPos);
|
||||||
|
|
||||||
if ( m_triggered )
|
if ( CLevel::getCurrentCheckpoint() == this )
|
||||||
{
|
{
|
||||||
int x,y;
|
int scrnWidth = VidGetScrW();
|
||||||
|
int scrnHeight = VidGetScrH();
|
||||||
|
|
||||||
DVECTOR const &offset = CLevel::getCameraPos();
|
sBBox boundingBox = m_modelGfx->GetBBox();
|
||||||
|
|
||||||
int spriteWidth = CGameScene::getSpriteBank()->getFrameWidth(m_spriteFrame);
|
CRECT polyArea;
|
||||||
int spriteHeight = CGameScene::getSpriteBank()->getFrameHeight(m_spriteFrame);
|
|
||||||
|
|
||||||
x = Pos.vx - offset.vx - ( spriteWidth >> 1 );
|
polyArea.x1 = boundingBox.XMin + renderPos.vx;
|
||||||
y = Pos.vy - 100 - offset.vy - ( spriteHeight >> 1 );
|
polyArea.y1 = boundingBox.YMin + renderPos.vy;
|
||||||
|
polyArea.x2 = boundingBox.XMax + renderPos.vx;
|
||||||
|
polyArea.y2 = boundingBox.YMax + renderPos.vy;
|
||||||
|
|
||||||
frameHdr = CGameScene::getSpriteBank()->getFrameHeader( m_spriteFrame );
|
if ( polyArea.x1 < 0 )
|
||||||
Ft4 = CGameScene::getSpriteBank()->printFT4( frameHdr, x, y, 0, 0, 10 );
|
{
|
||||||
setSemiTrans( Ft4, m_flick );
|
polyArea.x1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( polyArea.y1 < 0 )
|
||||||
|
{
|
||||||
|
polyArea.y1 = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( polyArea.x1 > scrnWidth )
|
||||||
|
{
|
||||||
|
polyArea.x1 = scrnWidth;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( polyArea.y1 > scrnHeight )
|
||||||
|
{
|
||||||
|
polyArea.y1 = scrnHeight;
|
||||||
|
}
|
||||||
|
|
||||||
|
POLY_F4 *coverPoly;
|
||||||
|
coverPoly = GetPrimF4();
|
||||||
|
coverPoly->x0 = polyArea.x1;
|
||||||
|
coverPoly->y0 = polyArea.y1;
|
||||||
|
coverPoly->x1 = polyArea.x2;
|
||||||
|
coverPoly->y1 = polyArea.y1;
|
||||||
|
coverPoly->x2 = polyArea.x1;
|
||||||
|
coverPoly->y2 = polyArea.y2;
|
||||||
|
coverPoly->x3 = polyArea.x2;
|
||||||
|
coverPoly->y3 = polyArea.y2;
|
||||||
|
|
||||||
|
setRGB0( coverPoly, 255, 255, 0 );
|
||||||
|
|
||||||
|
AddPrimToList( coverPoly, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -108,6 +170,9 @@ void CNpcCheckpointHazard::collidedWith(CThing *_thisThing)
|
||||||
respawnPos.vy=collisionArea.y2;
|
respawnPos.vy=collisionArea.y2;
|
||||||
((CPlayer*)_thisThing)->setRespawnPosAndRingTelephone(respawnPos);
|
((CPlayer*)_thisThing)->setRespawnPosAndRingTelephone(respawnPos);
|
||||||
m_triggered = true;
|
m_triggered = true;
|
||||||
|
m_timer = GameState::getOneSecondInFrames();
|
||||||
|
m_flick = true;
|
||||||
|
CLevel::setCurrentCheckpoint( this );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,12 +18,19 @@
|
||||||
#include "hazard\hazard.h"
|
#include "hazard\hazard.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef __GFX_FONT_H__
|
||||||
|
#include "gfx\font.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class CNpcCheckpointHazard : public CNpcHazard
|
class CNpcCheckpointHazard : public CNpcHazard
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void init();
|
void init();
|
||||||
void render();
|
void render();
|
||||||
void think(int _frames);
|
void think(int _frames);
|
||||||
|
void shutdown();
|
||||||
|
bool alwaysThink() {return(m_flick);}
|
||||||
protected:
|
protected:
|
||||||
void collidedWith(CThing *_thisThing);
|
void collidedWith(CThing *_thisThing);
|
||||||
|
|
||||||
|
@ -31,6 +38,7 @@ protected:
|
||||||
int m_spriteFrame;
|
int m_spriteFrame;
|
||||||
int m_timer;
|
int m_timer;
|
||||||
u8 m_flick;
|
u8 m_flick;
|
||||||
|
class ScalableFontBank *m_scalableFont;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -192,6 +192,7 @@ sLevelHdr *CLevel::LevelHdr;
|
||||||
|
|
||||||
u8 CLevel::m_isBossRespawn;
|
u8 CLevel::m_isBossRespawn;
|
||||||
s32 CLevel::m_bossHealth;
|
s32 CLevel::m_bossHealth;
|
||||||
|
CNpcCheckpointHazard *CLevel::m_checkpoint;
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
CLevel::CLevel()
|
CLevel::CLevel()
|
||||||
|
@ -253,6 +254,7 @@ sLvlTab *lvlTab=&LvlTable[LevelNo];
|
||||||
initLayers();
|
initLayers();
|
||||||
|
|
||||||
m_isBossRespawn = false;
|
m_isBossRespawn = false;
|
||||||
|
m_checkpoint = NULL;
|
||||||
m_bossHealth = 0;
|
m_bossHealth = 0;
|
||||||
|
|
||||||
int level=GameScene.getLevelNumber();
|
int level=GameScene.getLevelNumber();
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
#include "level/layertile.h"
|
#include "level/layertile.h"
|
||||||
#include "level/layercollision.h"
|
#include "level/layercollision.h"
|
||||||
|
|
||||||
|
#ifndef __HAZARD_HCHECK_H__
|
||||||
|
#include "hazard\hcheck.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
struct sLvlTab
|
struct sLvlTab
|
||||||
{
|
{
|
||||||
|
@ -84,6 +88,9 @@ static s32 getBossHealth() {return m_bossHealth;}
|
||||||
static void setIsBossRespawn( u8 newIsBossRespawn) {m_isBossRespawn=newIsBossRespawn;}
|
static void setIsBossRespawn( u8 newIsBossRespawn) {m_isBossRespawn=newIsBossRespawn;}
|
||||||
static void setBossHealth( s32 newBossHealth ) {m_bossHealth=newBossHealth;}
|
static void setBossHealth( s32 newBossHealth ) {m_bossHealth=newBossHealth;}
|
||||||
|
|
||||||
|
static CNpcCheckpointHazard *getCurrentCheckpoint() {return( m_checkpoint );}
|
||||||
|
static void setCurrentCheckpoint( CNpcCheckpointHazard *newCheckpoint ) {m_checkpoint = newCheckpoint;}
|
||||||
|
|
||||||
static void DisplayLoadingScreen(int LevelNo=25);
|
static void DisplayLoadingScreen(int LevelNo=25);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -122,6 +129,8 @@ static DVECTOR s_playerSpawnPos;
|
||||||
static u8 m_isBossRespawn;
|
static u8 m_isBossRespawn;
|
||||||
static s32 m_bossHealth;
|
static s32 m_bossHealth;
|
||||||
|
|
||||||
|
static CNpcCheckpointHazard *m_checkpoint;
|
||||||
|
|
||||||
// Level Repair stuff
|
// Level Repair stuff
|
||||||
void CreateTileStore();
|
void CreateTileStore();
|
||||||
void ApplyTileStore();
|
void ApplyTileStore();
|
||||||
|
|
Loading…
Add table
Reference in a new issue