Added level complete window upon completing a stage.
This commit is contained in:
parent
5b28478596
commit
5652741ec0
@ -665,12 +665,14 @@ void Crawler::RenderWorld(float fElapsedTime){
|
|||||||
|
|
||||||
auto RenderZone=[&](geom2d::rect<int>&zone){
|
auto RenderZone=[&](geom2d::rect<int>&zone){
|
||||||
game->SetDecalMode(DecalMode::ADDITIVE);
|
game->SetDecalMode(DecalMode::ADDITIVE);
|
||||||
Pixel ringColor={64,255,64,uint8_t(abs(sin(game->levelTime))*255)};
|
Pixel ringColor={128,128,128,uint8_t(abs(sin(game->levelTime))*255)};
|
||||||
|
Decal*ringDecal=GFX["finishring_green.png"].Decal();
|
||||||
if(!player->IsOutOfCombat()){
|
if(!player->IsOutOfCombat()){
|
||||||
game->SetDecalMode(DecalMode::NORMAL);
|
game->SetDecalMode(DecalMode::NORMAL);
|
||||||
ringColor.r=ringColor.g=ringColor.b=64;
|
ringColor.r=ringColor.g=ringColor.b=64;
|
||||||
|
ringDecal=GFX["finishring.png"].Decal();
|
||||||
}
|
}
|
||||||
view.DrawDecal(zone.pos,GFX["finishring.png"].Decal(),vf2d(zone.size)/vf2d(GFX["finishring.png"].Sprite()->Size()),ringColor);
|
view.DrawDecal(zone.pos,ringDecal,vf2d(zone.size)/vf2d(GFX["finishring.png"].Sprite()->Size()),ringColor);
|
||||||
game->SetDecalMode(DecalMode::NORMAL);
|
game->SetDecalMode(DecalMode::NORMAL);
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1094,17 +1096,24 @@ Player*Crawler::GetPlayer(){
|
|||||||
void Crawler::RenderHud(){
|
void Crawler::RenderHud(){
|
||||||
RenderCooldowns();
|
RenderCooldowns();
|
||||||
|
|
||||||
if(GetPlayer()->GetCastInfo().castTimer>0){
|
auto RenderCastbar=[&](const CastInfo&cast){
|
||||||
FillRectDecal(vf2d{ScreenWidth()/2-92.f,ScreenHeight()-90.f},{184,20},BLACK);
|
FillRectDecal(vf2d{ScreenWidth()/2-92.f,ScreenHeight()-90.f},{184,20},BLACK);
|
||||||
FillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{180,16},DARK_GREY);
|
FillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{180,16},DARK_GREY);
|
||||||
float timer=GetPlayer()->GetCastInfo().castTimer;
|
float timer=cast.castTimer;
|
||||||
float totalTime=GetPlayer()->GetCastInfo().castTotalTime;
|
float totalTime=cast.castTotalTime;
|
||||||
std::string castText=GetPlayer()->GetCastInfo().name;
|
std::string castText=cast.name;
|
||||||
GradientFillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{(timer/totalTime)*180,16},{247,125,37},{247,125,37},{247,184,37},{247,184,37});
|
GradientFillRectDecal(vf2d{ScreenWidth()/2-90.f,ScreenHeight()-88.f},{(timer/totalTime)*180,16},{247,125,37},{247,125,37},{247,184,37},{247,184,37});
|
||||||
std::stringstream castTimeDisplay;
|
std::stringstream castTimeDisplay;
|
||||||
castTimeDisplay<<std::fixed<<std::setprecision(1)<<timer;
|
castTimeDisplay<<std::fixed<<std::setprecision(1)<<timer;
|
||||||
DrawShadowStringPropDecal(vf2d{ScreenWidth()/2+90.f,ScreenHeight()-80.f}-vf2d{float(GetTextSizeProp(castTimeDisplay.str()).x),0},castTimeDisplay.str(),WHITE,BLACK);
|
DrawShadowStringPropDecal(vf2d{ScreenWidth()/2+90.f,ScreenHeight()-80.f}-vf2d{float(GetTextSizeProp(castTimeDisplay.str()).x),0},castTimeDisplay.str(),WHITE,BLACK);
|
||||||
DrawShadowStringPropDecal(vf2d{ScreenWidth()/2.f-GetTextSizeProp(castText).x*2/2,ScreenHeight()-64.f},castText,WHITE,BLACK,{2,3},2.f);
|
DrawShadowStringPropDecal(vf2d{ScreenWidth()/2.f-GetTextSizeProp(castText).x*2/2,ScreenHeight()-64.f},castText,WHITE,BLACK,{2,3},2.f);
|
||||||
|
};
|
||||||
|
|
||||||
|
if(GetPlayer()->GetCastInfo().castTimer>0){
|
||||||
|
RenderCastbar(GetPlayer()->GetCastInfo());
|
||||||
|
}else
|
||||||
|
if(GetPlayer()->GetEndZoneStandTime()>0){
|
||||||
|
RenderCastbar(CastInfo{"Exiting Level...",GetPlayer()->GetEndZoneStandTime(),"Player.End Zone Wait Time"_F});
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawDecal({2,2},GFX["heart.png"].Decal());
|
DrawDecal({2,2},GFX["heart.png"].Decal());
|
||||||
|
|||||||
@ -342,6 +342,7 @@
|
|||||||
<ClCompile Include="Item.cpp" />
|
<ClCompile Include="Item.cpp" />
|
||||||
<ClCompile Include="ItemLoadoutWindow.cpp" />
|
<ClCompile Include="ItemLoadoutWindow.cpp" />
|
||||||
<ClCompile Include="Key.cpp" />
|
<ClCompile Include="Key.cpp" />
|
||||||
|
<ClCompile Include="LevelCompleteWindow.cpp" />
|
||||||
<ClCompile Include="LightningBolt.cpp" />
|
<ClCompile Include="LightningBolt.cpp" />
|
||||||
<ClCompile Include="LightningBoltEmitter.cpp" />
|
<ClCompile Include="LightningBoltEmitter.cpp" />
|
||||||
<ClCompile Include="MainMenuWindow.cpp" />
|
<ClCompile Include="MainMenuWindow.cpp" />
|
||||||
|
|||||||
@ -392,9 +392,6 @@
|
|||||||
<ClCompile Include="ClassSelectionWindow.cpp">
|
<ClCompile Include="ClassSelectionWindow.cpp">
|
||||||
<Filter>Source Files\Interface</Filter>
|
<Filter>Source Files\Interface</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="MainMenuWindow.cpp">
|
|
||||||
<Filter>Source Files\Interface</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="MenuAnimatedIconButton.h">
|
<ClCompile Include="MenuAnimatedIconButton.h">
|
||||||
<Filter>Header Files\Interface</Filter>
|
<Filter>Header Files\Interface</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -422,6 +419,12 @@
|
|||||||
<ClCompile Include="Test.cpp">
|
<ClCompile Include="Test.cpp">
|
||||||
<Filter>Source Files</Filter>
|
<Filter>Source Files</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="MainMenuWindow.cpp">
|
||||||
|
<Filter>Source Files</Filter>
|
||||||
|
</ClCompile>
|
||||||
|
<ClCompile Include="LevelCompleteWindow.cpp">
|
||||||
|
<Filter>Source Files\Interface</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="cpp.hint" />
|
<None Include="cpp.hint" />
|
||||||
|
|||||||
@ -49,6 +49,8 @@ SUCH DAMAGE.
|
|||||||
#define DO_NOTHING [](MenuFuncData data){return true;}
|
#define DO_NOTHING [](MenuFuncData data){return true;}
|
||||||
#define INCLUDE_LEVEL_NAMES extern safemap<std::string,MapName>LEVEL_NAMES;
|
#define INCLUDE_LEVEL_NAMES extern safemap<std::string,MapName>LEVEL_NAMES;
|
||||||
|
|
||||||
|
#define INCLUDE_CENTERED extern const vf2d Menu::CENTERED;
|
||||||
|
|
||||||
#define ACCESS_PLAYER Player*p=game->GetPlayer();
|
#define ACCESS_PLAYER Player*p=game->GetPlayer();
|
||||||
|
|
||||||
#define VARIANTS float,int,std::string,bool,vf2d
|
#define VARIANTS float,int,std::string,bool,vf2d
|
||||||
|
|||||||
10
Crawler/LevelCompleteWindow.cpp
Normal file
10
Crawler/LevelCompleteWindow.cpp
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
#include "Menu.h"
|
||||||
|
#include "Crawler.h"
|
||||||
|
|
||||||
|
INCLUDE_game
|
||||||
|
|
||||||
|
void Menu::InitializeLevelCompleteWindow(){
|
||||||
|
Menu*levelCompleteWindow=Menu::CreateMenu(LEVEL_COMPLETE,{0,0},game->GetScreenSize());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@ -88,6 +88,7 @@ void Menu::InitializeMenus(){
|
|||||||
InitializeMainMenuWindow();
|
InitializeMainMenuWindow();
|
||||||
InitializeOverworldMapLevelWindow();
|
InitializeOverworldMapLevelWindow();
|
||||||
InitializeItemLoadoutWindow();
|
InitializeItemLoadoutWindow();
|
||||||
|
InitializeLevelCompleteWindow();
|
||||||
|
|
||||||
for(MenuType type=TEST;type<MenuType::ENUM_END;type=MenuType(int(type+1))){
|
for(MenuType type=TEST;type<MenuType::ENUM_END;type=MenuType(int(type+1))){
|
||||||
if(menus.count(type)==0){
|
if(menus.count(type)==0){
|
||||||
|
|||||||
@ -49,6 +49,7 @@ enum MenuType{
|
|||||||
MAIN_MENU,
|
MAIN_MENU,
|
||||||
OVERWORLD_LEVEL_SELECT,
|
OVERWORLD_LEVEL_SELECT,
|
||||||
ITEM_LOADOUT,
|
ITEM_LOADOUT,
|
||||||
|
LEVEL_COMPLETE,
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
/*DO NOT REMOVE!!*/ENUM_END////////////////////////////////
|
/*DO NOT REMOVE!!*/ENUM_END////////////////////////////////
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -115,6 +116,7 @@ private:
|
|||||||
void CheckClickAndPerformMenuSelect(Crawler*game);
|
void CheckClickAndPerformMenuSelect(Crawler*game);
|
||||||
//Mandatory before any menu operations! This creates and sets up the menu in memory.
|
//Mandatory before any menu operations! This creates and sets up the menu in memory.
|
||||||
static Menu*CreateMenu(MenuType type,vf2d pos,vf2d size);
|
static Menu*CreateMenu(MenuType type,vf2d pos,vf2d size);
|
||||||
|
|
||||||
static void InitializeTestMenu();
|
static void InitializeTestMenu();
|
||||||
static void InitializeTestSubMenu();
|
static void InitializeTestSubMenu();
|
||||||
static void InitializeConsumableInventoryWindow();
|
static void InitializeConsumableInventoryWindow();
|
||||||
@ -123,6 +125,7 @@ private:
|
|||||||
static void InitializeMainMenuWindow();
|
static void InitializeMainMenuWindow();
|
||||||
static void InitializeOverworldMapLevelWindow();
|
static void InitializeOverworldMapLevelWindow();
|
||||||
static void InitializeItemLoadoutWindow();
|
static void InitializeItemLoadoutWindow();
|
||||||
|
static void InitializeLevelCompleteWindow();
|
||||||
//X (0-2), Y (0-2) for specific 9-patch tile (tiled version).
|
//X (0-2), Y (0-2) for specific 9-patch tile (tiled version).
|
||||||
static Renderable&GetPatchPart(int x,int y);
|
static Renderable&GetPatchPart(int x,int y);
|
||||||
|
|
||||||
|
|||||||
@ -224,6 +224,9 @@ void Player::Update(float fElapsedTime){
|
|||||||
blockTimer=std::max(0.f,blockTimer-fElapsedTime);
|
blockTimer=std::max(0.f,blockTimer-fElapsedTime);
|
||||||
lastCombatTime=lastCombatTime+fElapsedTime;
|
lastCombatTime=lastCombatTime+fElapsedTime;
|
||||||
manaTickTimer-=fElapsedTime;
|
manaTickTimer-=fElapsedTime;
|
||||||
|
|
||||||
|
CheckEndZoneCollision();
|
||||||
|
|
||||||
if(castInfo.castTimer>0){
|
if(castInfo.castTimer>0){
|
||||||
castInfo.castTimer-=fElapsedTime;
|
castInfo.castTimer-=fElapsedTime;
|
||||||
if(castInfo.castTimer<=0){
|
if(castInfo.castTimer<=0){
|
||||||
@ -759,4 +762,23 @@ void Player::ResetLastCombatTime(){
|
|||||||
|
|
||||||
bool Player::IsOutOfCombat(){
|
bool Player::IsOutOfCombat(){
|
||||||
return lastCombatTime>="Player.Out of Combat Time"_F;
|
return lastCombatTime>="Player.Out of Combat Time"_F;
|
||||||
|
}
|
||||||
|
|
||||||
|
float Player::GetEndZoneStandTime(){
|
||||||
|
return endZoneStandTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Player::CheckEndZoneCollision(){
|
||||||
|
if(IsOutOfCombat()){
|
||||||
|
for(ZoneData&zone:game->MAP_DATA[game->GetCurrentLevel()].ZoneData.at("EndZone")){
|
||||||
|
if(zone.isUpper==upperLevel&&geom2d::overlaps(GetPos(),zone.zone)){
|
||||||
|
endZoneStandTime+=game->GetElapsedTime();
|
||||||
|
if(endZoneStandTime>="Player.End Zone Wait Time"_F){
|
||||||
|
Menu::OpenMenu(LEVEL_COMPLETE);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
endZoneStandTime=0;
|
||||||
}
|
}
|
||||||
@ -127,6 +127,7 @@ protected:
|
|||||||
std::vector<vf2d>ghostPositions;
|
std::vector<vf2d>ghostPositions;
|
||||||
float rapidFireTimer=0;
|
float rapidFireTimer=0;
|
||||||
int remainingRapidFireShots=0;
|
int remainingRapidFireShots=0;
|
||||||
|
float endZoneStandTime=0;
|
||||||
const float RAPID_FIRE_SHOOT_DELAY="Ranger.Ability 1.ArrowDelay"_F;
|
const float RAPID_FIRE_SHOOT_DELAY="Ranger.Ability 1.ArrowDelay"_F;
|
||||||
const int RAPID_FIRE_SHOOT_AMOUNT="Ranger.Ability 1.ArrowCount"_I;
|
const int RAPID_FIRE_SHOOT_AMOUNT="Ranger.Ability 1.ArrowCount"_I;
|
||||||
public:
|
public:
|
||||||
@ -192,6 +193,7 @@ public:
|
|||||||
bool OnUpperLevel();
|
bool OnUpperLevel();
|
||||||
void ResetLastCombatTime();
|
void ResetLastCombatTime();
|
||||||
bool IsOutOfCombat();
|
bool IsOutOfCombat();
|
||||||
|
float GetEndZoneStandTime();
|
||||||
//Triggers when the player has moved.
|
//Triggers when the player has moved.
|
||||||
void Moved();
|
void Moved();
|
||||||
virtual ~Player()=default;
|
virtual ~Player()=default;
|
||||||
@ -213,6 +215,8 @@ public:
|
|||||||
virtual std::string&GetIdleSAnimation()=0;
|
virtual std::string&GetIdleSAnimation()=0;
|
||||||
virtual std::string&GetIdleWAnimation()=0;
|
virtual std::string&GetIdleWAnimation()=0;
|
||||||
|
|
||||||
|
void CheckEndZoneCollision();
|
||||||
|
|
||||||
CastInfo&GetCastInfo();
|
CastInfo&GetCastInfo();
|
||||||
void SetAnimationBasedOnTargetingDirection(float targetDirection);
|
void SetAnimationBasedOnTargetingDirection(float targetDirection);
|
||||||
|
|
||||||
|
|||||||
@ -33,7 +33,7 @@ SUCH DAMAGE.
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 1
|
#define VERSION_PATCH 1
|
||||||
#define VERSION_BUILD 2920
|
#define VERSION_BUILD 2930
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
|||||||
@ -15,6 +15,9 @@ Player
|
|||||||
# How many seconds must pass before the player is considered out of combat (meaning they can exit a level)
|
# How many seconds must pass before the player is considered out of combat (meaning they can exit a level)
|
||||||
Out of Combat Time = 5.0
|
Out of Combat Time = 5.0
|
||||||
|
|
||||||
|
# How long the player must stand in the end zone before leaving the level.
|
||||||
|
End Zone Wait Time = 5.0
|
||||||
|
|
||||||
# Each attack will have _N,_E,_S,_W appended to them once read in-game.
|
# Each attack will have _N,_E,_S,_W appended to them once read in-game.
|
||||||
PLAYER_ANIMATION[0] = WARRIOR_WALK
|
PLAYER_ANIMATION[0] = WARRIOR_WALK
|
||||||
PLAYER_ANIMATION[1] = WARRIOR_IDLE
|
PLAYER_ANIMATION[1] = WARRIOR_IDLE
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user