This commit is contained in:
parent
d79fba5228
commit
c3f2c27e6d
6 changed files with 64 additions and 40 deletions
|
@ -812,7 +812,7 @@ void CGameScene::initLevel()
|
||||||
{
|
{
|
||||||
m_player->setCanExitLevelNow();
|
m_player->setCanExitLevelNow();
|
||||||
}
|
}
|
||||||
DVECTOR mapSize=Level.getMapSize();
|
DVECTOR const &mapSize=Level.getMapSize();
|
||||||
CPlayer::CameraBox camBox={0,0,mapSize.vx<<4,mapSize.vy<<4};
|
CPlayer::CameraBox camBox={0,0,mapSize.vx<<4,mapSize.vy<<4};
|
||||||
m_player->setCameraBox(camBox);
|
m_player->setCameraBox(camBox);
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ sItem *item=ItemList;
|
||||||
int mapHeight;
|
int mapHeight;
|
||||||
|
|
||||||
CLayerCollision *ColLayer=CGameScene::getCollision();
|
CLayerCollision *ColLayer=CGameScene::getCollision();
|
||||||
mapHeight=GameScene.GetLevel().getMapSize().vy*16;
|
mapHeight=GameScene.GetLevel().getMapHeight16();
|
||||||
|
|
||||||
for (int i=0; i<ITEM_MAX; i++)
|
for (int i=0; i<ITEM_MAX; i++)
|
||||||
{
|
{
|
||||||
|
|
|
@ -381,6 +381,10 @@ void CLevel::initLayers()
|
||||||
CLayerTile *NewLayer=new ("Action Layer") CLayerTile3d(LevelHdr,Layer,m_RGBMap,m_RGBTable);
|
CLayerTile *NewLayer=new ("Action Layer") CLayerTile3d(LevelHdr,Layer,m_RGBMap,m_RGBTable);
|
||||||
NewLayer->init(MapPos,0);
|
NewLayer->init(MapPos,0);
|
||||||
TileLayers[CLayerTile::LAYER_TILE_TYPE_ACTION]=NewLayer;
|
TileLayers[CLayerTile::LAYER_TILE_TYPE_ACTION]=NewLayer;
|
||||||
|
MapSize.vx=Layer->Width;
|
||||||
|
MapSize.vy=Layer->Height;
|
||||||
|
MapSize16.vx=Layer->Width*16;
|
||||||
|
MapSize16.vy=Layer->Height*16;
|
||||||
}
|
}
|
||||||
// Collision
|
// Collision
|
||||||
|
|
||||||
|
@ -726,6 +730,7 @@ void CLevel::think(int _frames)
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
/*
|
||||||
DVECTOR CLevel::getMapSize()
|
DVECTOR CLevel::getMapSize()
|
||||||
{
|
{
|
||||||
DVECTOR size;
|
DVECTOR size;
|
||||||
|
@ -737,7 +742,7 @@ sLayerHdr *layer;
|
||||||
|
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -78,7 +78,14 @@ static CFmaScene::FMA_SCRIPT_NUMBER getFMAToFollow() {return LvlTable[s_glo
|
||||||
sThingHazard **getHazardList() {return HazardList;}
|
sThingHazard **getHazardList() {return HazardList;}
|
||||||
|
|
||||||
CLayerCollision *getCollisionLayer() {return CollisionLayer;}
|
CLayerCollision *getCollisionLayer() {return CollisionLayer;}
|
||||||
DVECTOR getMapSize();
|
|
||||||
|
DVECTOR const &getMapSize() {return(MapSize);}
|
||||||
|
int getMapWidth() {return(MapSize.vx);}
|
||||||
|
int getMapHeight() {return(MapSize.vy);}
|
||||||
|
|
||||||
|
DVECTOR const &getMapSize16() {return(MapSize16);}
|
||||||
|
int getMapWidth16() {return(MapSize16.vx);}
|
||||||
|
int getMapHeight16() {return(MapSize16.vy);}
|
||||||
|
|
||||||
bool GetNextLevel(int &Lvl);
|
bool GetNextLevel(int &Lvl);
|
||||||
|
|
||||||
|
@ -132,6 +139,7 @@ static int s_playerFacing;
|
||||||
static u8 m_isBossRespawn;
|
static u8 m_isBossRespawn;
|
||||||
static s32 m_bossHealth;
|
static s32 m_bossHealth;
|
||||||
|
|
||||||
|
DVECTOR MapSize,MapSize16;
|
||||||
static CNpcCheckpointHazard *m_checkpoint;
|
static CNpcCheckpointHazard *m_checkpoint;
|
||||||
|
|
||||||
// Level Repair stuff
|
// Level Repair stuff
|
||||||
|
|
|
@ -124,7 +124,7 @@ void CPlayerModeDead::think()
|
||||||
m_player->setAnimFrame(frame);
|
m_player->setAnimFrame(frame);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(m_player->getPos().vy<(GameScene.GetLevel().getMapSize().vy+4)*16)
|
if(m_player->getPos().vy<(GameScene.GetLevel().getMapHeight()+4)*16)
|
||||||
{
|
{
|
||||||
m_player->moveVertical(5);
|
m_player->moveVertical(5);
|
||||||
}
|
}
|
||||||
|
|
|
@ -440,6 +440,8 @@ DVECTOR const &CamPos=CLevel::getCameraPos();
|
||||||
m_ThinkBBox.XMax=s_ThinkBBoxX1+CamPos.vx;
|
m_ThinkBBox.XMax=s_ThinkBBoxX1+CamPos.vx;
|
||||||
m_ThinkBBox.YMin=s_ThinkBBoxY0+CamPos.vy;
|
m_ThinkBBox.YMin=s_ThinkBBoxY0+CamPos.vy;
|
||||||
m_ThinkBBox.YMax=s_ThinkBBoxY1+CamPos.vy;
|
m_ThinkBBox.YMax=s_ThinkBBoxY1+CamPos.vy;
|
||||||
|
CLevel &Lvl=GameScene.GetLevel();
|
||||||
|
DVECTOR const &MapSize=Lvl.getMapSize16();
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
CThing *thing;
|
CThing *thing;
|
||||||
|
@ -456,43 +458,52 @@ DVECTOR const &CamPos=CLevel::getCameraPos();
|
||||||
CRECT const *ThingRect= thing->getThinkBBox();
|
CRECT const *ThingRect= thing->getThinkBBox();
|
||||||
int lastFlag=thing->getThinkFlag()<<1;
|
int lastFlag=thing->getThinkFlag()<<1;
|
||||||
int Flag=1;
|
int Flag=1;
|
||||||
// Will speed this up
|
DVECTOR const &ThingPos=thing->getPos();
|
||||||
if (!thing->alwaysThink())
|
|
||||||
{
|
|
||||||
if (ThingRect->x2<m_ThinkBBox.XMin || ThingRect->x1>m_ThinkBBox.XMax) Flag=0;
|
|
||||||
if (ThingRect->y2<m_ThinkBBox.YMin || ThingRect->y1>m_ThinkBBox.YMax) Flag=0;
|
|
||||||
}
|
|
||||||
thing->setThinkFlag(Flag);
|
|
||||||
// Is in think zone
|
|
||||||
if (Flag)
|
|
||||||
{
|
|
||||||
thing->think(_frames);
|
|
||||||
// thing->updateCollisionArea();
|
|
||||||
if (thing->canCollide())
|
|
||||||
{
|
|
||||||
CThingManager::addToCollisionList(thing);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Flag|=lastFlag;
|
|
||||||
// Handle enter/leave states (not sure of viabilty now)
|
|
||||||
switch (Flag)
|
|
||||||
{ // Last This
|
|
||||||
case 0: // 0 0
|
|
||||||
break;
|
|
||||||
case 1: // 0 1
|
|
||||||
// thing->enterThinkZone(_frames);
|
|
||||||
break;
|
|
||||||
case 2: // 1 0
|
|
||||||
thing->leftThinkZone(_frames);
|
|
||||||
break;
|
|
||||||
case 3: // 1 1
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
ASSERT("Invalid Think State");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Will speed this up
|
||||||
|
if (ThingPos.vx<0 || ThingPos.vx>=MapSize.vx || ThingPos.vy<0 || ThingPos.vy>=MapSize.vy)
|
||||||
|
{
|
||||||
|
thing->setToShutdown();
|
||||||
|
SYSTEM_DBGMSG("ThingOffMap: T:%i S:%i TXY%i %i, MWH%i %i\n",(int)thing->getThingType(),(int)thing->getThingSubType(),ThingPos.vx,ThingPos.vy,MapSize.vx,MapSize.vy);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!thing->alwaysThink())
|
||||||
|
{
|
||||||
|
if (ThingRect->x2<m_ThinkBBox.XMin || ThingRect->x1>m_ThinkBBox.XMax) Flag=0;
|
||||||
|
if (ThingRect->y2<m_ThinkBBox.YMin || ThingRect->y1>m_ThinkBBox.YMax) Flag=0;
|
||||||
|
}
|
||||||
|
thing->setThinkFlag(Flag);
|
||||||
|
// Is in think zone
|
||||||
|
if (Flag)
|
||||||
|
{
|
||||||
|
thing->think(_frames);
|
||||||
|
// thing->updateCollisionArea();
|
||||||
|
if (thing->canCollide())
|
||||||
|
{
|
||||||
|
CThingManager::addToCollisionList(thing);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Flag|=lastFlag;
|
||||||
|
// Handle enter/leave states (not sure of viabilty now)
|
||||||
|
switch (Flag)
|
||||||
|
{ // Last This
|
||||||
|
case 0: // 0 0
|
||||||
|
break;
|
||||||
|
case 1: // 0 1
|
||||||
|
// thing->enterThinkZone(_frames);
|
||||||
|
break;
|
||||||
|
case 2: // 1 0
|
||||||
|
thing->leftThinkZone(_frames);
|
||||||
|
break;
|
||||||
|
case 3: // 1 1
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
ASSERT("Invalid Think State");
|
||||||
|
}
|
||||||
/* THIS WILL NOT STAY HERE, THINGS MUST BE INITIALISED CORRECTLY */
|
/* THIS WILL NOT STAY HERE, THINGS MUST BE INITIALISED CORRECTLY */
|
||||||
thing->updateCollisionArea();
|
thing->updateCollisionArea();
|
||||||
|
}
|
||||||
thing=thing->m_nextListThing;
|
thing=thing->m_nextListThing;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue