Upper level and lower level rendering handled properly.
This commit is contained in:
parent
6a8954b2bc
commit
53243e6871
@ -115,6 +115,7 @@ bool Crawler::OnUserCreate(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Crawler::OnUserUpdate(float fElapsedTime){
|
bool Crawler::OnUserUpdate(float fElapsedTime){
|
||||||
|
fElapsedTime=std::min(1/60.f,fElapsedTime);
|
||||||
HandleUserInput(fElapsedTime);
|
HandleUserInput(fElapsedTime);
|
||||||
UpdateEffects(fElapsedTime);
|
UpdateEffects(fElapsedTime);
|
||||||
player.Update(fElapsedTime);
|
player.Update(fElapsedTime);
|
||||||
@ -733,7 +734,7 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|||||||
for(LayerTag&layer:MAP_DATA[currentLevel].LayerData){
|
for(LayerTag&layer:MAP_DATA[currentLevel].LayerData){
|
||||||
if(IsBridgeLayer(layer)){
|
if(IsBridgeLayer(layer)){
|
||||||
bridgeLayer=&layer;
|
bridgeLayer=&layer;
|
||||||
if(!bridgeLayerFade){
|
if(!bridgeLayerFade&&!player.upperLevel){
|
||||||
int tileID=layer.tiles[y][x]-1;
|
int tileID=layer.tiles[y][x]-1;
|
||||||
if(tileID!=-1){
|
if(tileID!=-1){
|
||||||
int playerXTruncated=int(player.GetPos().x)/24;
|
int playerXTruncated=int(player.GetPos().x)/24;
|
||||||
@ -782,24 +783,30 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|||||||
e.Draw();
|
e.Draw();
|
||||||
}
|
}
|
||||||
for(Monster&m:monstersBefore){
|
for(Monster&m:monstersBefore){
|
||||||
|
if(!m.OnUpperLevel()){
|
||||||
m.Draw();
|
m.Draw();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
vf2d playerScale=vf2d(player.GetSizeMult(),player.GetSizeMult());
|
vf2d playerScale=vf2d(player.GetSizeMult(),player.GetSizeMult());
|
||||||
vf2d playerPosition=player.GetPos();
|
vf2d playerPosition=player.GetPos();
|
||||||
#define RENDER_PLAYER view.DrawPartialRotatedDecal(playerPosition+vf2d{0,-player.GetZ()},player.GetFrame().GetSourceImage()->Decal(),player.GetSpinAngle(),{12,12},player.GetFrame().GetSourceRect().pos,player.GetFrame().GetSourceRect().size,playerScale,player.GetBuffs(BuffType::ATTACK_UP).size()>0?Pixel{255,uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration))),uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration)))}:WHITE);
|
#define RENDER_PLAYER \
|
||||||
if(player.teleportAnimationTimer>0){
|
if(player.teleportAnimationTimer>0){ \
|
||||||
playerScale.x=120*abs(pow(player.teleportAnimationTimer-0.175,3));
|
playerScale.x=120*abs(pow(player.teleportAnimationTimer-0.175,3)); \
|
||||||
playerPosition=player.teleportStartPosition.lerp(player.teleportTarget,(0.35-player.teleportAnimationTimer)/0.35);
|
playerPosition=player.teleportStartPosition.lerp(player.teleportTarget,(0.35-player.teleportAnimationTimer)/0.35); \
|
||||||
RENDER_PLAYER
|
view.DrawPartialRotatedDecal(playerPosition+vf2d{0,-player.GetZ()},player.GetFrame().GetSourceImage()->Decal(),player.GetSpinAngle(),{12,12},player.GetFrame().GetSourceRect().pos,player.GetFrame().GetSourceRect().size,playerScale,player.GetBuffs(BuffType::ATTACK_UP).size()>0?Pixel{255,uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration))),uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration)))}:WHITE); \
|
||||||
} else {
|
} else {view.DrawPartialRotatedDecal(playerPosition+vf2d{0,-player.GetZ()},player.GetFrame().GetSourceImage()->Decal(),player.GetSpinAngle(),{12,12},player.GetFrame().GetSourceRect().pos,player.GetFrame().GetSourceRect().size,playerScale,player.GetBuffs(BuffType::ATTACK_UP).size()>0?Pixel{255,uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration))),uint8_t(255*abs(sin(1.4*player.GetBuffs(BuffType::ATTACK_UP)[0].duration)))}:WHITE);}
|
||||||
|
//define end
|
||||||
|
if(!player.upperLevel){
|
||||||
RENDER_PLAYER
|
RENDER_PLAYER
|
||||||
}
|
}
|
||||||
if(player.GetState()==State::BLOCK){
|
if(player.GetState()==State::BLOCK){
|
||||||
view.DrawDecal(player.GetPos()-vf2d{12,12},GFX_BLOCK_BUBBLE.Decal());
|
view.DrawDecal(player.GetPos()-vf2d{12,12},GFX_BLOCK_BUBBLE.Decal());
|
||||||
}
|
}
|
||||||
for(Monster&m:monstersAfter){
|
for(Monster&m:monstersAfter){
|
||||||
|
if(!m.OnUpperLevel()){
|
||||||
m.Draw();
|
m.Draw();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for(Effect&e:foregroundEffects){
|
for(Effect&e:foregroundEffects){
|
||||||
e.Draw();
|
e.Draw();
|
||||||
}
|
}
|
||||||
@ -848,6 +855,19 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
for(Monster&m:monstersBefore){
|
||||||
|
if(m.OnUpperLevel()){
|
||||||
|
m.Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(player.upperLevel){
|
||||||
|
RENDER_PLAYER
|
||||||
|
}
|
||||||
|
for(Monster&m:monstersAfter){
|
||||||
|
if(m.OnUpperLevel()){
|
||||||
|
m.Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
#pragma region Upper Foreground Rendering
|
#pragma region Upper Foreground Rendering
|
||||||
for(TileGroup&group:upperForegroundTileGroups){
|
for(TileGroup&group:upperForegroundTileGroups){
|
||||||
if(geom2d::overlaps(group.GetRange(),player.pos)){
|
if(geom2d::overlaps(group.GetRange(),player.pos)){
|
||||||
@ -1087,7 +1107,7 @@ bool Crawler::IsBridgeLayer(LayerTag&layer){
|
|||||||
geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos,bool upperLevel){
|
geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos,bool upperLevel){
|
||||||
if(pos.x<0||pos.y<0||pos.x>=WORLD_SIZE.x*24||pos.y>=WORLD_SIZE.y*24)return NO_COLLISION;
|
if(pos.x<0||pos.y<0||pos.x>=WORLD_SIZE.x*24||pos.y>=WORLD_SIZE.y*24)return NO_COLLISION;
|
||||||
for(LayerTag&layer:MAP_DATA[map].LayerData){
|
for(LayerTag&layer:MAP_DATA[map].LayerData){
|
||||||
auto HasNoClass=[&](){return layer.tag.data.find("class")==layer.tag.data.end();};
|
auto HasNoClass=[&](){return layer.tag.data.find("class")==layer.tag.data.end()&&!upperLevel;};
|
||||||
auto BridgeCollisionIsActivated=[&](){return (IsBridgeLayer(layer)&&upperLevel);};
|
auto BridgeCollisionIsActivated=[&](){return (IsBridgeLayer(layer)&&upperLevel);};
|
||||||
if(HasNoClass()||BridgeCollisionIsActivated()){
|
if(HasNoClass()||BridgeCollisionIsActivated()){
|
||||||
int tileID=layer.tiles[int(pos.y)/24][int(pos.x)/24]-1;
|
int tileID=layer.tiles[int(pos.y)/24][int(pos.x)/24]-1;
|
||||||
|
@ -327,6 +327,10 @@ void MonsterSpawner::SetTriggered(bool trigger,bool spawnMonsters){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Monster::OnUpperLevel(){
|
||||||
|
return upperLevel;
|
||||||
|
}
|
||||||
|
|
||||||
void Monster::AddBuff(BuffType type,float duration,float intensity){
|
void Monster::AddBuff(BuffType type,float duration,float intensity){
|
||||||
buffList.push_back(Buff{type,duration,intensity});
|
buffList.push_back(Buff{type,duration,intensity});
|
||||||
}
|
}
|
||||||
|
@ -110,6 +110,7 @@ protected:
|
|||||||
bool SetY(float y);
|
bool SetY(float y);
|
||||||
void PerformJumpAnimation();
|
void PerformJumpAnimation();
|
||||||
void PerformShootAnimation();
|
void PerformShootAnimation();
|
||||||
|
bool OnUpperLevel();
|
||||||
|
|
||||||
void AddBuff(BuffType type,float duration,float intensity);
|
void AddBuff(BuffType type,float duration,float intensity);
|
||||||
std::vector<Buff>GetBuffs(BuffType buff);
|
std::vector<Buff>GetBuffs(BuffType buff);
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
#define VERSION_BUILD 498
|
#define VERSION_BUILD 503
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user