Add powerup tips fix a billion things. Yes.
@ -1 +1 @@
|
||||
41481 54006 53138 73057 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 1 0.6 OneLoneHam Black
|
||||
38582 54006 53138 73057 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 2147483647 1 0.6 OneLoneHam Black
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.9 KiB |
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 7.0 KiB |
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 6.9 KiB |
BIN
assets/highlight_smallbutton3.png
Normal file
After Width: | Height: | Size: 787 B |
Before Width: | Height: | Size: 8.2 KiB After Width: | Height: | Size: 7.2 KiB |
BIN
assets/smallbutton3.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
assets/sounds/new_record.wav
Normal file
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 7.2 KiB |
@ -320,6 +320,7 @@ void Hamster::MoveHamstersToSpawn(const geom2d::rect<int>startingLoc){
|
||||
for(HamsterPersistentData&data:persistentData){
|
||||
Hamster&newHamster{HAMSTER_LIST.emplace_back(vf2d{},data.colorFilename,data.IsPlayerControlled)};
|
||||
newHamster.points=data.points;
|
||||
newHamster.aiLevel=data.aiLevel;
|
||||
}
|
||||
|
||||
for(Hamster&hamster:HAMSTER_LIST){
|
||||
@ -418,6 +419,13 @@ void Hamster::DrawOverlay(){
|
||||
}
|
||||
HamsterGame::Game().DrawShadowStringDecal(HamsterGame::SCREEN_FRAME.pos+vf2d{3*16.f+8.f,HamsterGame::SCREEN_FRAME.size.y-12.f},"\"R\" - BOOST",YELLOW,fmod(HamsterGame::Game().GetRuntime(),2.f)<1.f?RED:BLACK);
|
||||
}
|
||||
|
||||
if(HamsterGame::Game().collectedPowerupTimer>0.f){
|
||||
vf2d powerupInfoStrSize{HamsterGame::Game().GetTextSizeProp(HamsterGame::Game().powerupHelpDisplay)};
|
||||
uint8_t alpha{255U};
|
||||
if(HamsterGame::Game().collectedPowerupTimer<1.f)alpha=uint8_t(util::lerp(0,255,HamsterGame::Game().collectedPowerupTimer));
|
||||
HamsterGame::Game().DrawShadowRotatedStringPropDecal(HamsterGame::SCREEN_FRAME.middle()+vf2d{0.f,-HamsterGame::SCREEN_FRAME.size.y/2+powerupInfoStrSize.y+4.f},HamsterGame::Game().powerupHelpDisplay,0.f,powerupInfoStrSize/2,{255,255,255,alpha},{0,0,0,alpha});
|
||||
}
|
||||
}
|
||||
|
||||
const Animate2D::Frame&Hamster::GetCurrentAnimation()const{
|
||||
@ -542,6 +550,10 @@ void Hamster::HandleCollision(){
|
||||
if(powerup.GetType()==Powerup::JET)HamsterGame::PlaySFX(pos,"obtain_jet.wav");
|
||||
else HamsterGame::PlaySFX(pos,"collect_powerup.wav");
|
||||
powerup.OnPowerupObtain(*this);
|
||||
if(IsPlayerControlled){
|
||||
HamsterGame::Game().collectedPowerupTimer=5.f;
|
||||
HamsterGame::Game().powerupHelpDisplay=Powerup::powerupInfo[powerup.GetType()];
|
||||
}
|
||||
}
|
||||
}
|
||||
for(Checkpoint&checkpoint:Checkpoint::GetCheckpoints()){
|
||||
@ -1051,3 +1063,7 @@ const int Hamster::GetFinishedTime()const{
|
||||
const std::string&Hamster::GetHamsterImage()const{
|
||||
return colorFilename;
|
||||
}
|
||||
|
||||
void Hamster::ClearHamsters(){
|
||||
HAMSTER_LIST.clear();
|
||||
}
|
@ -194,4 +194,5 @@ public:
|
||||
PlayerControlled IsPlayerControlled;
|
||||
const int GetFinishedTime()const;
|
||||
const std::string&GetHamsterImage()const;
|
||||
static void ClearHamsters();
|
||||
};
|
@ -165,6 +165,8 @@ void HamsterGame::LoadGraphics(){
|
||||
_LoadImage("smallhighlight_button.png");
|
||||
_LoadImage("trackselectbutton.png");
|
||||
_LoadImage("highlight_trackselectbutton.png");
|
||||
_LoadImage("smallbutton3.png");
|
||||
_LoadImage("highlight_smallbutton3.png");
|
||||
}
|
||||
|
||||
void HamsterGame::LoadAnimations(){
|
||||
@ -254,6 +256,7 @@ void HamsterGame::UpdateGame(const float fElapsedTime){
|
||||
}
|
||||
vEye.z+=(Hamster::GetPlayer().GetZ()+zoom-vEye.z)*fLazyFollowRate*fElapsedTime;
|
||||
speedometerDisplayAmt+=(Hamster::GetPlayer().GetSpeed()-speedometerDisplayAmt)*fLazyFollowRate*fElapsedTime;
|
||||
collectedPowerupTimer-=fElapsedTime;
|
||||
|
||||
if(GetMouseWheel()>0){
|
||||
radarScale=std::clamp(radarScale/2.f,9.f,144.f);
|
||||
@ -652,6 +655,7 @@ void HamsterGame::SavePB(const std::string&mapName,int ms){
|
||||
file<<Game().bgmVol<<" "<<Game().sfxVol<<" "<<Game().playerName<<" "<<Game().hamsterColor;
|
||||
file.close();
|
||||
#endif
|
||||
self->obtainedNewPB=true;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -130,6 +130,8 @@ public:
|
||||
static void PlaySFX(const std::string&filename);
|
||||
static void PlaySFX(vf2d pos,const std::string&filename);
|
||||
const float GetPlayerDifferentialTime()const;
|
||||
float collectedPowerupTimer{};
|
||||
std::string powerupHelpDisplay;
|
||||
private:
|
||||
void UpdateGame(const float fElapsedTime);
|
||||
void DrawGame();
|
||||
@ -169,10 +171,12 @@ private:
|
||||
GameMode mode{GameMode::SINGLE_RACE};
|
||||
HamsterNet net;
|
||||
float countdownTimer{};
|
||||
bool obtainedNewPB{false};
|
||||
using Points=int;
|
||||
using HamsterInd=size_t;
|
||||
using FinishTime=int;
|
||||
std::vector<std::pair<Points,HamsterInd>>grandPrixPoints;
|
||||
std::unordered_map<HamsterInd,Points>grandPrixPoints;
|
||||
std::vector<std::pair<Points,HamsterInd>>pointsList;
|
||||
std::vector<std::pair<FinishTime,HamsterInd>>racerList;
|
||||
#ifndef __EMSCRIPTEN__
|
||||
#ifndef __DEBUG__
|
||||
|
@ -223,6 +223,12 @@ void HamsterJet::DrawOverlay()const{
|
||||
float meterHeight{meterEndY-meterStartY};
|
||||
HamsterGame::Game().DrawPartialDecal(HamsterGame::SCREEN_FRAME.pos+vf2d{0,222}-vf2d{0,(fallSpd/5.f)*meterHeight},HamsterGame::GetGFX("fallometer.png").Decal(),vf2d{0,223}-vf2d{0,(fallSpd/5.f)*meterHeight},vf2d{float(HamsterGame::GetGFX("fallometer.png").Sprite()->width),(fallSpd/5.f)*meterHeight});
|
||||
}
|
||||
if(state==HAMSTER_CONTROL){
|
||||
const vf2d jetDisplayOffset{HamsterGame::SCREEN_FRAME.pos+vf2d{HamsterGame::SCREEN_FRAME.size.x,0.f}};
|
||||
const std::string launchText{"(SPACE)x2\nto Land!"};
|
||||
const vi2d launchTextSize{HamsterGame::Game().GetTextSize(launchText)};
|
||||
HamsterGame::Game().DrawShadowRotatedStringDecal(jetDisplayOffset+vf2d{48.f,224.f},launchText,0.f,launchTextSize/2,WHITE,BLACK);
|
||||
}
|
||||
}
|
||||
|
||||
void HamsterJet::SetPos(const vf2d pos){
|
||||
|
116
src/Menu.cpp
@ -135,59 +135,123 @@ std::vector<Menu::Button>Menu::GetMenuButtons(const MenuType type){
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,64.f},"Quit","button.png","highlight_button.png",Pixel{165,208,96},Pixel{37,134,139},[this](Button&self){Transition(SHIFT_DOWN,QUIT,0.5f);});
|
||||
}break;
|
||||
case GRAND_PRIX:{
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.pos+vf2d{60.f,HamsterGame::SCREEN_FRAME.size.y/2-36.f},"Grand Prix I - ","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.pos+vf2d{60.f,HamsterGame::SCREEN_FRAME.size.y/2-36.f},"Grand Prix I (4 courses)","button3.png","highlight_button3.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageI.tmx";
|
||||
HamsterGame::Game().mode=HamsterGame::GameMode::GRAND_PRIX_1;
|
||||
std::queue<std::string>mapList;
|
||||
mapList.emplace("StageII.tmx");
|
||||
mapList.emplace("StageIII.tmx");
|
||||
mapList.emplace("StageIV.tmx");
|
||||
HamsterGame::Game().SetMapSetList(mapList);
|
||||
HamsterGame::Game().grandPrixPoints.clear();
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(vf2d{54.f,HamsterGame::SCREEN_FRAME.size.y-24.f},"< Back","button3.png","highlight_button3.png",Pixel{145,199,255},Pixel{145,199,255},[this](Button&self){Transition(SHIFT_RIGHT,MAIN_MENU,0.5f);});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.pos+vf2d{60.f,HamsterGame::SCREEN_FRAME.size.y/2.f},"Grand Prix II (4 courses)","button3.png","highlight_button3.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageV.tmx";
|
||||
HamsterGame::Game().mode=HamsterGame::GameMode::GRAND_PRIX_2;
|
||||
std::queue<std::string>mapList;
|
||||
mapList.emplace("StageVI.tmx");
|
||||
mapList.emplace("StageVII.tmx");
|
||||
mapList.emplace("StageVIII.tmx");
|
||||
HamsterGame::Game().SetMapSetList(mapList);
|
||||
HamsterGame::Game().grandPrixPoints.clear();
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.pos+vf2d{60.f,HamsterGame::SCREEN_FRAME.size.y/2+36.f},"Grand Prix III (4 courses)","button3.png","highlight_button3.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageIX.tmx";
|
||||
HamsterGame::Game().mode=HamsterGame::GameMode::GRAND_PRIX_3;
|
||||
std::queue<std::string>mapList;
|
||||
mapList.emplace("StageX.tmx");
|
||||
mapList.emplace("StageXI.tmx");
|
||||
mapList.emplace("StageXII.tmx");
|
||||
HamsterGame::Game().SetMapSetList(mapList);
|
||||
HamsterGame::Game().grandPrixPoints.clear();
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.pos+vf2d{60.f,HamsterGame::SCREEN_FRAME.size.y/2+72.f},"Marathon (12 courses)","button3.png","highlight_button3.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageI.tmx";
|
||||
HamsterGame::Game().mode=HamsterGame::GameMode::MARATHON;
|
||||
std::queue<std::string>mapList;
|
||||
mapList.emplace("StageII.tmx");
|
||||
mapList.emplace("StageIII.tmx");
|
||||
mapList.emplace("StageIV.tmx");
|
||||
mapList.emplace("StageV.tmx");
|
||||
mapList.emplace("StageVI.tmx");
|
||||
mapList.emplace("StageVII.tmx");
|
||||
mapList.emplace("StageVIII.tmx");
|
||||
mapList.emplace("StageIX.tmx");
|
||||
mapList.emplace("StageX.tmx");
|
||||
mapList.emplace("StageXI.tmx");
|
||||
mapList.emplace("StageXII.tmx");
|
||||
HamsterGame::Game().SetMapSetList(mapList);
|
||||
HamsterGame::Game().grandPrixPoints.clear();
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(vf2d{54.f,HamsterGame::SCREEN_FRAME.size.y-24.f},"< Back","smallbutton3.png","highlight_smallbutton3.png",Pixel{145,199,255},Pixel{145,199,255},[this](Button&self){Transition(SHIFT_RIGHT,MAIN_MENU,0.5f);});
|
||||
}break;
|
||||
case SINGLE_RACE:{
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f},"I - Welcome to Hamster Planet!","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageI.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*1},"II - Splitting Hairs","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageII.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*2},"III - The Stranger Lands","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageIII.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*3},"IV - Jet Jet Go!","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageIV.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*4},"V - Run Run Run!","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageV.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*5},"VI - A Twisty Maze","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageVI.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*6},"VII - Dunescape","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageVII.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*7},"VIII - Swamps of Travesty","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageVIII.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*8},"IX - Wide Chasm","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageIX.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*9},"X - Hamster Island","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageX.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*10},"XI - Lava Panic!","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageXI.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,-132.f+22.f*11},"XII - The Great Plunge","longbutton2.png","longhighlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){
|
||||
selectedMap="StageXII.tmx";
|
||||
Hamster::ClearHamsters();
|
||||
Transition(FADE_OUT,LOADING,0.5f);
|
||||
});
|
||||
buttons.emplace_back(vf2d{54.f,HamsterGame::SCREEN_FRAME.size.y-12.f},"< Back","button4.png","highlight_button4.png",Pixel{220,185,155},Pixel{180,140,152},[this](Button&self){Transition(SHIFT_DOWN,MAIN_MENU,0.5f);});
|
||||
@ -254,8 +318,6 @@ std::vector<Menu::Button>Menu::GetMenuButtons(const MenuType type){
|
||||
buttons.emplace_back(vf2d{54.f,HamsterGame::SCREEN_FRAME.size.y-24.f},"< Back","button2.png","highlight_button2.png",Pixel{114,109,163},Pixel{79,81,128},[this](Button&self){Transition(SHIFT_LEFT,MAIN_MENU,0.5f);});
|
||||
}break;
|
||||
case GAMEPLAY_RESULTS:{
|
||||
switch(HamsterGame::Game().GetGameMode()){
|
||||
case HamsterGame::GameMode::SINGLE_RACE:{
|
||||
int MAX_SIMULATION_COUNT{10000};
|
||||
HamsterGame::Game().playerDifferentialTime=0.f;
|
||||
while(MAX_SIMULATION_COUNT>0){
|
||||
@ -275,13 +337,19 @@ std::vector<Menu::Button>Menu::GetMenuButtons(const MenuType type){
|
||||
ind++;
|
||||
}
|
||||
std::sort(HamsterGame::Game().racerList.begin(),HamsterGame::Game().racerList.end(),[](const std::pair<HamsterGame::FinishTime,HamsterGame::HamsterInd>&hamster1,const std::pair<HamsterGame::FinishTime,HamsterGame::HamsterInd>&hamster2){return hamster1.first<hamster2.first;});
|
||||
|
||||
if(HamsterGame::Game().mapSetList.size()>0){
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,HamsterGame::SCREEN_FRAME.size.y/2-24.f},"Continue","trackselectbutton.png","highlight_trackselectbutton.png",Pixel{165,208,96},Pixel{37,134,139},[this](Button&self){
|
||||
selectedMap=HamsterGame::Game().mapSetList.front();
|
||||
HamsterGame::Game().mapSetList.pop();
|
||||
Transition(FADE_OUT,LOADING,1.f);
|
||||
});
|
||||
}else
|
||||
if(HamsterGame::Game().GetGameMode()==HamsterGame::GameMode::SINGLE_RACE){
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,HamsterGame::SCREEN_FRAME.size.y/2-40.f},"Track Select","trackselectbutton.png","highlight_trackselectbutton.png",Pixel{165,208,96},Pixel{37,134,139},[this](Button&self){Transition(FADE_OUT,SINGLE_RACE,1.f);});
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,HamsterGame::SCREEN_FRAME.size.y/2-16.f},"Retry","button.png","highlight_button.png",Pixel{165,208,96},Pixel{37,134,139},[this](Button&self){Transition(FADE_OUT,LOADING,1.f);});
|
||||
}break;
|
||||
default:{
|
||||
//Show the points.
|
||||
|
||||
}
|
||||
}else{
|
||||
buttons.emplace_back(HamsterGame::SCREEN_FRAME.size/2+vf2d{0.f,HamsterGame::SCREEN_FRAME.size.y/2-40.f},"Grand Prix Select","trackselectbutton.png","highlight_trackselectbutton.png",Pixel{165,208,96},Pixel{37,134,139},[this](Button&self){Transition(FADE_OUT,GRAND_PRIX,1.f);});
|
||||
}
|
||||
}break;
|
||||
}
|
||||
@ -294,10 +362,23 @@ void Menu::OnMenuTransition(){
|
||||
menuButtons=GetMenuButtons(currentMenu);
|
||||
if(currentMenu!=GAMEPLAY&¤tMenu!=GAMEPLAY_RESULTS&¤tMenu!=AFTER_RACE_MENU)HamsterGame::Game().audio.Play(HamsterGame::Game().bgm["Trevor Lentz - Guinea Pig Hero.ogg"]);
|
||||
switch(currentMenu){
|
||||
case GAMEPLAY_RESULTS:{
|
||||
const std::vector<int>pointTable{10,7,5,3,2,1};
|
||||
for(size_t ind{0};const auto&[finishTime,hamsterInd]:HamsterGame::Game().racerList){
|
||||
HamsterGame::Game().grandPrixPoints[hamsterInd]+=pointTable[ind];
|
||||
ind++;
|
||||
}
|
||||
HamsterGame::Game().pointsList.clear();
|
||||
for(const auto&[hamsterInd,points]:HamsterGame::Game().grandPrixPoints){
|
||||
HamsterGame::Game().pointsList.emplace_back(std::pair<HamsterGame::Points,HamsterGame::HamsterInd>{points,hamsterInd});
|
||||
}
|
||||
std::sort(HamsterGame::Game().pointsList.begin(),HamsterGame::Game().pointsList.end(),[](const std::pair<HamsterGame::Points,HamsterGame::HamsterInd>&ham1,const std::pair<HamsterGame::Points,HamsterGame::HamsterInd>&ham2){return ham1.first>ham2.first;});
|
||||
}break;
|
||||
case LOADING:{
|
||||
colorNumb=util::random()%8+1;
|
||||
loading=true;
|
||||
loadingPct=0.f;
|
||||
HamsterGame::Game().operationsProgress=0;
|
||||
HamsterGame::Game().LoadRace(selectedMap);
|
||||
}break;
|
||||
case QUIT:{
|
||||
@ -429,15 +510,30 @@ void Menu::Draw(HamsterGame&game,const MenuType menu,const vi2d pos){
|
||||
}
|
||||
}break;
|
||||
case GAMEPLAY_RESULTS:{
|
||||
const std::vector<int>pointTable{10,7,5,3,2,1};
|
||||
for(size_t ind{0};const auto&[finishTime,hamsterInd]:HamsterGame::Game().racerList){
|
||||
const Hamster&hamster{Hamster::GetHamsters()[hamsterInd]};
|
||||
if(hamster.IsPlayerControlled)game.FillRectDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2-100.f+ind*16}-2.f,{164.f,12.f},{DARK_YELLOW.r,DARK_YELLOW.g,DARK_YELLOW.b,160});
|
||||
game.DrawShadowStringDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2-100.f+ind*16},std::format("{}.",ind+1));
|
||||
game.DrawPartialRotatedDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f+24.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2-100.f+ind*16+6.f},game.GetGFX(hamster.GetHamsterImage()).Decal(),0.f,{8.f,6.f},{64.f,64.f},{16.f,12.f});
|
||||
std::string timeStr{util::timerStr(finishTime)};
|
||||
vf2d timeStrSize{game.GetTextSize(timeStr)};
|
||||
game.DrawShadowStringDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2+64.f-timeStrSize.x,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2-100.f+ind*16},timeStr);
|
||||
game.DrawShadowStringDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2+72.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2-100.f+ind*16},std::format("+{}",pointTable[ind]),YELLOW);
|
||||
ind++;
|
||||
}
|
||||
if(HamsterGame::Game().GetGameMode()!=HamsterGame::GameMode::SINGLE_RACE){
|
||||
for(size_t ind{0};const auto&[points,hamsterInd]:HamsterGame::Game().pointsList){
|
||||
const Hamster&hamster{Hamster::GetHamsters()[hamsterInd]};
|
||||
if(hamster.IsPlayerControlled)game.FillRectDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2+12.f+ind*16}-2.f,{132.f,12.f},{DARK_YELLOW.r,DARK_YELLOW.g,DARK_YELLOW.b,160});
|
||||
game.DrawShadowStringDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2+12.f+ind*16},std::format("{}.",ind+1));
|
||||
game.DrawPartialRotatedDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2-64.f+24.f,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2+12.f+ind*16+6.f},game.GetGFX(hamster.GetHamsterImage()).Decal(),0.f,{8.f,6.f},{64.f,64.f},{16.f,12.f});
|
||||
std::string pointsStr{std::to_string(points)};
|
||||
vf2d pointsStrSize{game.GetTextSize(pointsStr)};
|
||||
game.DrawShadowStringDecal(vf2d{game.SCREEN_FRAME.pos.x+game.SCREEN_FRAME.size.x/2+64.f-pointsStrSize.x,game.SCREEN_FRAME.pos.y+game.SCREEN_FRAME.size.y/2+12.f+ind*16},pointsStr,CYAN);
|
||||
ind++;
|
||||
}
|
||||
}
|
||||
DrawButtons(pos);
|
||||
}break;
|
||||
case AFTER_RACE_MENU:{
|
||||
@ -466,7 +562,7 @@ void Menu::Draw(HamsterGame&game,const MenuType menu,const vi2d pos){
|
||||
|
||||
void Menu::OnLevelLoaded(){
|
||||
loading=false;
|
||||
|
||||
HamsterGame::Game().obtainedNewPB=false;
|
||||
HamsterGame::Game().mapImage.Decal()->Update();
|
||||
|
||||
Powerup::Initialize(HamsterGame::Game().mapPowerupsTemp);
|
||||
|
@ -43,6 +43,16 @@ All rights reserved.
|
||||
std::vector<Powerup>Powerup::powerupList;
|
||||
std::unordered_map<int,std::pair<Powerup::PowerupType,Powerup::TileType>>Powerup::powerupIds;
|
||||
const vf2d Powerup::POWERUP_TILESET_STARTING_POS{144.f,816.f};
|
||||
std::unordered_map<Powerup::PowerupType,std::string>Powerup::powerupInfo{
|
||||
{WHEEL,"Vroom Vroom! Use R to boost!"},
|
||||
{GRASS,"Speed up through Grass"},
|
||||
{SAND,"Speed up through Sand"},
|
||||
{SWAMP,"Cross Swamps without drowning!"},
|
||||
{LAVA,"Walking on fire!"},
|
||||
{FOREST,"Speed through trees"},
|
||||
{ICE,"Less slippery, more speedy"},
|
||||
{JET," Take off! Use <Space> x2. \n Watch your fuel! \nArrow Keys to control landing speed."},
|
||||
};
|
||||
std::unordered_map<Powerup::PowerupType,std::string>Powerup::powerupNames{
|
||||
{WHEEL,"WHEEL"},
|
||||
{GRASS,"GRASS"},
|
||||
|
@ -84,4 +84,5 @@ public:
|
||||
static void DrawPowerups(TransformedView&tv);
|
||||
static const geom2d::rect<float>GetPowerupSubimageRect(const PowerupType powerupType);
|
||||
void OnPowerupObtain(Hamster&pickupHamster);
|
||||
static std::unordered_map<PowerupType,std::string>powerupInfo;
|
||||
};
|