|
|
@ -481,6 +481,9 @@ void Crawler::PopulateRenderLists(){
|
|
|
|
foregroundEffectsLower.clear();
|
|
|
|
foregroundEffectsLower.clear();
|
|
|
|
foregroundEffectsUpper.clear();
|
|
|
|
foregroundEffectsUpper.clear();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tilePreparationList.clear();
|
|
|
|
|
|
|
|
tileForegroundList.clear();
|
|
|
|
|
|
|
|
|
|
|
|
Player*pl=GetPlayer();
|
|
|
|
Player*pl=GetPlayer();
|
|
|
|
for(auto it=MONSTER_LIST.begin();it!=MONSTER_LIST.end();++it){
|
|
|
|
for(auto it=MONSTER_LIST.begin();it!=MONSTER_LIST.end();++it){
|
|
|
|
Monster&m=*it;
|
|
|
|
Monster&m=*it;
|
|
|
@ -574,6 +577,9 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
pos=player->teleportStartPosition.lerp(player->teleportTarget,(0.35-player->teleportAnimationTimer)/0.35);
|
|
|
|
pos=player->teleportStartPosition.lerp(player->teleportTarget,(0.35-player->teleportAnimationTimer)/0.35);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
view.DrawPartialRotatedDecal(pos+vf2d{0,-player->GetZ()*(std::signbit(scale.y)?-1:1)},player->GetFrame().GetSourceImage()->Decal(),player->GetSpinAngle(),{12,12},player->GetFrame().GetSourceRect().pos,player->GetFrame().GetSourceRect().size,playerScale*scale,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);
|
|
|
|
view.DrawPartialRotatedDecal(pos+vf2d{0,-player->GetZ()*(std::signbit(scale.y)?-1:1)},player->GetFrame().GetSourceImage()->Decal(),player->GetSpinAngle(),{12,12},player->GetFrame().GetSourceRect().pos,player->GetFrame().GetSourceRect().size,playerScale*scale,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);
|
|
|
|
|
|
|
|
if(player->GetState()==State::BLOCK){
|
|
|
|
|
|
|
|
view.DrawDecal(player->GetPos()-vf2d{12,12},GFX["block.png"].Decal());
|
|
|
|
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum class RenderMode{
|
|
|
|
enum class RenderMode{
|
|
|
@ -700,7 +706,7 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
view.DrawDecal(player->GetPos()-vf2d{3,3}*shadowScale/2+vf2d{0,6*player->GetSizeMult()},GFX["circle.png"].Decal(),shadowScale,BLACK);
|
|
|
|
view.DrawDecal(player->GetPos()-vf2d{3,3}*shadowScale/2+vf2d{0,6*player->GetSizeMult()},GFX["circle.png"].Decal(),shadowScale,BLACK);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(Effect*e:backgroundEffectsLower){
|
|
|
|
for(Effect*e:backgroundEffectsLower){
|
|
|
|
e->Draw();
|
|
|
|
e->rendered=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(Monster*m:monstersBeforeLower){
|
|
|
|
for(Monster*m:monstersBeforeLower){
|
|
|
|
m->Draw();
|
|
|
|
m->Draw();
|
|
|
@ -708,17 +714,11 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
if(!player->upperLevel){
|
|
|
|
if(!player->upperLevel){
|
|
|
|
RenderPlayer(player->GetPos(),{1,1});
|
|
|
|
RenderPlayer(player->GetPos(),{1,1});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(player->GetState()==State::BLOCK){
|
|
|
|
|
|
|
|
view.DrawDecal(player->GetPos()-vf2d{12,12},GFX["block.png"].Decal());
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Monster*m:monstersAfterLower){
|
|
|
|
for(Monster*m:monstersAfterLower){
|
|
|
|
m->Draw();
|
|
|
|
m->Draw();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(Effect*e:foregroundEffectsLower){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsLower){
|
|
|
|
for(Bullet*b:bulletsLower){
|
|
|
|
b->Draw();
|
|
|
|
b->rendered=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
auto RenderPrecastTargetingIndicator=[&](){
|
|
|
|
auto RenderPrecastTargetingIndicator=[&](){
|
|
|
|
if(player->GetState()==State::PREP_CAST){
|
|
|
|
if(player->GetState()==State::PREP_CAST){
|
|
|
@ -740,7 +740,8 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
if(!player->OnUpperLevel()){
|
|
|
|
if(!player->OnUpperLevel()){
|
|
|
|
RenderPrecastTargetingIndicator();
|
|
|
|
RenderPrecastTargetingIndicator();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#pragma region Foreground Rendering
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region Foreground Rendering Preparation
|
|
|
|
for(TileGroup&group:foregroundTileGroups){
|
|
|
|
for(TileGroup&group:foregroundTileGroups){
|
|
|
|
if(view.IsRectVisible(group.GetRange().pos,group.GetRange().size)){
|
|
|
|
if(view.IsRectVisible(group.GetRange().pos,group.GetRange().size)){
|
|
|
|
if(geom2d::overlaps(group.GetFadeRange(),player->pos)){
|
|
|
|
if(geom2d::overlaps(group.GetFadeRange(),player->pos)){
|
|
|
@ -751,19 +752,80 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f);
|
|
|
|
group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(TileRenderData&tile:group.GetTiles()){
|
|
|
|
for(TileRenderData&tile:group.GetTiles()){
|
|
|
|
RenderTile(tile,{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
tile.tileOpacity=group.fadeFactor;
|
|
|
|
float distToPlayer=geom2d::line<float>(player->GetPos(),tile.pos+vf2d{12,12}).length();
|
|
|
|
if(tile.tileSheet.tileset->collision.find(tile.tileID)!=tile.tileSheet.tileset->collision.end()){
|
|
|
|
if(distToPlayer<24*3&&group.fadeFactor>0&&tile.tileSheet.tileset->collision.find(tile.tileID)!=tile.tileSheet.tileset->collision.end()){
|
|
|
|
tilePreparationList.push_back(&tile);
|
|
|
|
geom2d::rect<int>collision=tile.tileSheet.tileset->collision[tile.tileID].collision;
|
|
|
|
}else{
|
|
|
|
distToPlayer/=4;
|
|
|
|
tileForegroundList.push_back(&tile);
|
|
|
|
if(distToPlayer<1){distToPlayer=1;}
|
|
|
|
|
|
|
|
view.FillRectDecal(tile.pos+collision.pos,collision.size,{255,0,0,uint8_t(128*group.fadeFactor/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
view.DrawRectDecal(tile.pos+collision.pos,collision.size,{128,0,0,uint8_t(255/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#pragma endregion
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::sort(tilePreparationList.begin(),tilePreparationList.end(),[](TileRenderData*tile1,TileRenderData*tile2){return tile1->pos.y<tile2->pos.y||tile1->pos.y==tile2->pos.y&&tile1->layerID<tile2->layerID;});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region Foreground Rendering w/Depth
|
|
|
|
|
|
|
|
int tilePrevY=0;
|
|
|
|
|
|
|
|
for(TileRenderData*tile:tilePreparationList){
|
|
|
|
|
|
|
|
tilePrevY=tile->pos.y+12;
|
|
|
|
|
|
|
|
#pragma region Depth Ordered Rendering
|
|
|
|
|
|
|
|
for(Effect*e:backgroundEffectsLower){
|
|
|
|
|
|
|
|
if(!e->rendered&&e->pos.y<tilePrevY){
|
|
|
|
|
|
|
|
e->rendered=true;
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsLower){
|
|
|
|
|
|
|
|
if(!b->rendered&&b->pos.y<tilePrevY){
|
|
|
|
|
|
|
|
b->rendered=true;
|
|
|
|
|
|
|
|
b->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
RenderTile(*tile,{255,255,255,uint8_t(255-tile->tileOpacity/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
|
|
|
|
float distToPlayer=geom2d::line<float>(player->GetPos(),tile->pos+vf2d{12,12}).length();
|
|
|
|
|
|
|
|
if(distToPlayer<24*3&&tile->tileOpacity>0&&tile->tileSheet.tileset->collision.find(tile->tileID)!=tile->tileSheet.tileset->collision.end()){
|
|
|
|
|
|
|
|
geom2d::rect<int>collision=tile->tileSheet.tileset->collision[tile->tileID].collision;
|
|
|
|
|
|
|
|
distToPlayer/=4;
|
|
|
|
|
|
|
|
if(distToPlayer<1){distToPlayer=1;}
|
|
|
|
|
|
|
|
view.FillRectDecal(tile->pos+collision.pos,collision.size,{255,0,0,uint8_t(128*tile->tileOpacity/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
view.DrawRectDecal(tile->pos+collision.pos,collision.size,{128,0,0,uint8_t(255/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
#pragma region Remaining Bullet and Effect Rendering
|
|
|
|
|
|
|
|
for(Effect*e:backgroundEffectsLower){
|
|
|
|
|
|
|
|
if(!e->rendered){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsLower){
|
|
|
|
|
|
|
|
if(!b->rendered){
|
|
|
|
|
|
|
|
b->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
#pragma region Permanent Foreground Rendering
|
|
|
|
|
|
|
|
for(TileRenderData*tile:tileForegroundList){
|
|
|
|
|
|
|
|
RenderTile(*tile,{255,255,255,uint8_t(255-tile->tileOpacity/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
|
|
|
|
float distToPlayer=geom2d::line<float>(player->GetPos(),tile->pos+vf2d{12,12}).length();
|
|
|
|
|
|
|
|
if(distToPlayer<24*3&&tile->tileOpacity>0&&tile->tileSheet.tileset->collision.find(tile->tileID)!=tile->tileSheet.tileset->collision.end()){
|
|
|
|
|
|
|
|
geom2d::rect<int>collision=tile->tileSheet.tileset->collision[tile->tileID].collision;
|
|
|
|
|
|
|
|
distToPlayer/=4;
|
|
|
|
|
|
|
|
if(distToPlayer<1){distToPlayer=1;}
|
|
|
|
|
|
|
|
view.FillRectDecal(tile->pos+collision.pos,collision.size,{255,0,0,uint8_t(128*tile->tileOpacity/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
view.DrawRectDecal(tile->pos+collision.pos,collision.size,{128,0,0,uint8_t(255/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
for(Effect*e:foregroundEffectsLower){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tilePreparationList.clear();
|
|
|
|
|
|
|
|
tileForegroundList.clear();
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region Bridge Layer Rendering
|
|
|
|
#pragma region Bridge Layer Rendering
|
|
|
|
if(bridgeLayer!=nullptr){
|
|
|
|
if(bridgeLayer!=nullptr){
|
|
|
|
for (int x = view.GetTopLeftTile().x/24-1; x <= view.GetBottomRightTile().x/24; x++){
|
|
|
|
for (int x = view.GetTopLeftTile().x/24-1; x <= view.GetBottomRightTile().x/24; x++){
|
|
|
@ -792,7 +854,7 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#pragma endregion
|
|
|
|
#pragma endregion
|
|
|
|
for(Effect*e:backgroundEffectsUpper){
|
|
|
|
for(Effect*e:backgroundEffectsUpper){
|
|
|
|
e->Draw();
|
|
|
|
e->rendered=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(Monster*m:monstersBeforeUpper){
|
|
|
|
for(Monster*m:monstersBeforeUpper){
|
|
|
|
m->Draw();
|
|
|
|
m->Draw();
|
|
|
@ -803,18 +865,17 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
for(Monster*m:monstersAfterUpper){
|
|
|
|
for(Monster*m:monstersAfterUpper){
|
|
|
|
m->Draw();
|
|
|
|
m->Draw();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(Effect*e:foregroundEffectsUpper){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsUpper){
|
|
|
|
for(Bullet*b:bulletsUpper){
|
|
|
|
b->Draw();
|
|
|
|
b->rendered=false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(player->OnUpperLevel()){
|
|
|
|
if(player->OnUpperLevel()){
|
|
|
|
RenderPrecastTargetingIndicator();
|
|
|
|
RenderPrecastTargetingIndicator();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#pragma region Upper Foreground Rendering
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region Upper Foreground Rendering Preparation
|
|
|
|
for(TileGroup&group:upperForegroundTileGroups){
|
|
|
|
for(TileGroup&group:upperForegroundTileGroups){
|
|
|
|
if(geom2d::overlaps(group.GetFadeRange(),player->pos)){
|
|
|
|
if(view.IsRectVisible(group.GetRange().pos,group.GetRange().size)){
|
|
|
|
|
|
|
|
if(geom2d::overlaps(group.GetFadeRange(),player->pos)){
|
|
|
|
group.playerBehind=true;
|
|
|
|
group.playerBehind=true;
|
|
|
|
group.fadeFactor=std::min(group.fadeFactor+fElapsedTime,TileGroup::FADE_TIME);
|
|
|
|
group.fadeFactor=std::min(group.fadeFactor+fElapsedTime,TileGroup::FADE_TIME);
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
@ -822,10 +883,77 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|
|
|
group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f);
|
|
|
|
group.fadeFactor=std::max(group.fadeFactor-fElapsedTime,0.f);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
for(TileRenderData&tile:group.GetTiles()){
|
|
|
|
for(TileRenderData&tile:group.GetTiles()){
|
|
|
|
RenderTile(tile,{255,255,255,uint8_t(255-group.fadeFactor/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
tile.tileOpacity=group.fadeFactor;
|
|
|
|
|
|
|
|
if(tile.tileSheet.tileset->collision.find(tile.tileID)!=tile.tileSheet.tileset->collision.end()){
|
|
|
|
|
|
|
|
tilePreparationList.push_back(&tile);
|
|
|
|
|
|
|
|
}else{
|
|
|
|
|
|
|
|
tileForegroundList.push_back(&tile);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
#pragma endregion
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
std::sort(tilePreparationList.begin(),tilePreparationList.end(),[](TileRenderData*tile1,TileRenderData*tile2){return tile1->pos.y<tile2->pos.y||tile1->pos.y==tile2->pos.y&&tile1->layerID<tile2->layerID;});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma region Upper Foreground Rendering w/Depth
|
|
|
|
|
|
|
|
tilePrevY=0;
|
|
|
|
|
|
|
|
for(TileRenderData*tile:tilePreparationList){
|
|
|
|
|
|
|
|
tilePrevY=tile->pos.y+12;
|
|
|
|
|
|
|
|
#pragma region Depth Ordered Upper Rendering
|
|
|
|
|
|
|
|
for(Effect*e:backgroundEffectsUpper){
|
|
|
|
|
|
|
|
if(!e->rendered&&e->pos.y<tilePrevY){
|
|
|
|
|
|
|
|
e->rendered=true;
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsUpper){
|
|
|
|
|
|
|
|
if(!b->rendered&&b->pos.y<tilePrevY){
|
|
|
|
|
|
|
|
b->rendered=true;
|
|
|
|
|
|
|
|
b->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
RenderTile(*tile,{255,255,255,uint8_t(255-tile->tileOpacity/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
|
|
|
|
float distToPlayer=geom2d::line<float>(player->GetPos(),tile->pos+vf2d{12,12}).length();
|
|
|
|
|
|
|
|
if(distToPlayer<24*3&&tile->tileOpacity>0&&tile->tileSheet.tileset->collision.find(tile->tileID)!=tile->tileSheet.tileset->collision.end()){
|
|
|
|
|
|
|
|
geom2d::rect<int>collision=tile->tileSheet.tileset->collision[tile->tileID].collision;
|
|
|
|
|
|
|
|
distToPlayer/=4;
|
|
|
|
|
|
|
|
if(distToPlayer<1){distToPlayer=1;}
|
|
|
|
|
|
|
|
view.FillRectDecal(tile->pos+collision.pos,collision.size,{255,0,0,uint8_t(128*tile->tileOpacity/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
view.DrawRectDecal(tile->pos+collision.pos,collision.size,{128,0,0,uint8_t(255/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
#pragma region Remaining Upper Bullet and Effect Rendering
|
|
|
|
|
|
|
|
for(Effect*e:backgroundEffectsUpper){
|
|
|
|
|
|
|
|
if(!e->rendered){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
for(Bullet*b:bulletsUpper){
|
|
|
|
|
|
|
|
if(!b->rendered){
|
|
|
|
|
|
|
|
b->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
#pragma region Permanent Upper Foreground Rendering
|
|
|
|
|
|
|
|
for(TileRenderData*tile:tileForegroundList){
|
|
|
|
|
|
|
|
RenderTile(*tile,{255,255,255,uint8_t(255-tile->tileOpacity/TileGroup::FADE_TIME*TileGroup::FADE_AMT)});
|
|
|
|
|
|
|
|
float distToPlayer=geom2d::line<float>(player->GetPos(),tile->pos+vf2d{12,12}).length();
|
|
|
|
|
|
|
|
if(distToPlayer<24*3&&tile->tileOpacity>0&&tile->tileSheet.tileset->collision.find(tile->tileID)!=tile->tileSheet.tileset->collision.end()){
|
|
|
|
|
|
|
|
geom2d::rect<int>collision=tile->tileSheet.tileset->collision[tile->tileID].collision;
|
|
|
|
|
|
|
|
distToPlayer/=4;
|
|
|
|
|
|
|
|
if(distToPlayer<1){distToPlayer=1;}
|
|
|
|
|
|
|
|
view.FillRectDecal(tile->pos+collision.pos,collision.size,{255,0,0,uint8_t(128*tile->tileOpacity/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
view.DrawRectDecal(tile->pos+collision.pos,collision.size,{128,0,0,uint8_t(255/sqrt(distToPlayer))});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#pragma endregion
|
|
|
|
|
|
|
|
for(Effect*e:foregroundEffectsUpper){
|
|
|
|
|
|
|
|
e->Draw();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
for(std::vector<std::shared_ptr<DamageNumber>>::iterator it=DAMAGENUMBER_LIST.begin();it!=DAMAGENUMBER_LIST.end();++it){
|
|
|
|
for(std::vector<std::shared_ptr<DamageNumber>>::iterator it=DAMAGENUMBER_LIST.begin();it!=DAMAGENUMBER_LIST.end();++it){
|
|
|
|
DamageNumber*dn=(*it).get();
|
|
|
|
DamageNumber*dn=(*it).get();
|
|
|
|
if(dn->pauseTime>0){
|
|
|
|
if(dn->pauseTime>0){
|
|
|
|