mirror of
https://github.com/sigonasr2/hamster.git
synced 2025-04-18 22:49:41 -05:00
Added a radar.
This commit is contained in:
parent
7eda510317
commit
766eba4444
BIN
assets/radaricons.png
Normal file
BIN
assets/radaricons.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
@ -63,6 +63,9 @@ void Checkpoint::UpdateCheckpoints(const float fElapsedTime){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::sort(checkpoints.begin(),checkpoints.end(),[](const Checkpoint&c1,const Checkpoint&c2){
|
||||||
|
return geom2d::line<float>(Hamster::GetPlayer().GetPos(),c1.pos).length()>geom2d::line<float>(Hamster::GetPlayer().GetPos(),c2.pos).length();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
void Checkpoint::DrawCheckpoints(TransformedView&tv){
|
void Checkpoint::DrawCheckpoints(TransformedView&tv){
|
||||||
for(Checkpoint&checkpoint:checkpoints){
|
for(Checkpoint&checkpoint:checkpoints){
|
||||||
|
@ -579,3 +579,13 @@ const bool Hamster::CollectedAllCheckpoints()const{
|
|||||||
const bool Hamster::HasCollectedCheckpoint(const Checkpoint&cp)const{
|
const bool Hamster::HasCollectedCheckpoint(const Checkpoint&cp)const{
|
||||||
return checkpointsCollected.contains(cp);
|
return checkpointsCollected.contains(cp);
|
||||||
}
|
}
|
||||||
|
const std::vector<Hamster>&Hamster::GetHamsters(){
|
||||||
|
return HAMSTER_LIST;
|
||||||
|
}
|
||||||
|
const Hamster::HamsterState&Hamster::GetState()const{
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool Hamster::BurnedOrDrowned()const{
|
||||||
|
return GetState()==WAIT;
|
||||||
|
}
|
@ -159,4 +159,7 @@ public:
|
|||||||
void SetState(const HamsterState state);
|
void SetState(const HamsterState state);
|
||||||
const bool CollectedAllCheckpoints()const;
|
const bool CollectedAllCheckpoints()const;
|
||||||
const bool HasCollectedCheckpoint(const Checkpoint&cp)const;
|
const bool HasCollectedCheckpoint(const Checkpoint&cp)const;
|
||||||
|
static const std::vector<Hamster>&GetHamsters();
|
||||||
|
const HamsterState&GetState()const;
|
||||||
|
const bool BurnedOrDrowned()const;
|
||||||
};
|
};
|
@ -34,7 +34,7 @@ bool HamsterGame::OnUserCreate(){
|
|||||||
std::vector<vf2d>radarCircle;
|
std::vector<vf2d>radarCircle;
|
||||||
for(int i=360;i>=0;i-=4){
|
for(int i=360;i>=0;i-=4){
|
||||||
float angle=util::degToRad(float(i))-geom2d::pi/2;
|
float angle=util::degToRad(float(i))-geom2d::pi/2;
|
||||||
if(i==360){radarCircle.push_back(vf2d{cos(angle),sin(angle)}*42+43);}
|
if(i==360){radarCircle.push_back(vf2d{cos(angle),sin(angle)}*43+vf2d{43,44});}
|
||||||
radarCircle.push_back(vf2d{cos(angle),sin(angle)}*43+vf2d{43,44});
|
radarCircle.push_back(vf2d{cos(angle),sin(angle)}*43+vf2d{43,44});
|
||||||
}
|
}
|
||||||
radar=ViewPort{radarCircle,{5.f,8.f}};
|
radar=ViewPort{radarCircle,{5.f,8.f}};
|
||||||
@ -66,6 +66,7 @@ void HamsterGame::LoadGraphics(){
|
|||||||
_LoadImage("speedometer_overlay.png");
|
_LoadImage("speedometer_overlay.png");
|
||||||
_LoadImage("radar.png");
|
_LoadImage("radar.png");
|
||||||
_LoadImage("checkpoint_arrow.png");
|
_LoadImage("checkpoint_arrow.png");
|
||||||
|
_LoadImage("radaricons.png");
|
||||||
UpdateMatrixTexture();
|
UpdateMatrixTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -161,6 +162,13 @@ void HamsterGame::LoadLevel(const std::string&mapName){
|
|||||||
void HamsterGame::UpdateGame(const float fElapsedTime){
|
void HamsterGame::UpdateGame(const float fElapsedTime){
|
||||||
vEye.z+=(Hamster::GetPlayer().GetZ()+zoom-vEye.z)*fLazyFollowRate*fElapsedTime;
|
vEye.z+=(Hamster::GetPlayer().GetZ()+zoom-vEye.z)*fLazyFollowRate*fElapsedTime;
|
||||||
speedometerDisplayAmt+=(Hamster::GetPlayer().GetSpeed()-speedometerDisplayAmt)*fLazyFollowRate*fElapsedTime;
|
speedometerDisplayAmt+=(Hamster::GetPlayer().GetSpeed()-speedometerDisplayAmt)*fLazyFollowRate*fElapsedTime;
|
||||||
|
|
||||||
|
if(GetMouseWheel()>0){
|
||||||
|
radarScale=std::clamp(radarScale/2.f,6.f,96.f);
|
||||||
|
}else if(GetMouseWheel()<0){
|
||||||
|
radarScale=std::clamp(radarScale*2.f,6.f,96.f);
|
||||||
|
}
|
||||||
|
|
||||||
UpdateMatrixTexture();
|
UpdateMatrixTexture();
|
||||||
UpdateWaterTexture();
|
UpdateWaterTexture();
|
||||||
cloudOffset+=cloudSpd*fElapsedTime;
|
cloudOffset+=cloudSpd*fElapsedTime;
|
||||||
@ -255,8 +263,8 @@ void HamsterGame::DrawGame(){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
DrawStringDecal(SCREEN_FRAME.pos+SCREEN_FRAME.size-speedometerStrSize-vf2d{4.f,4.f},speedometerStr,speedometerCol);
|
DrawStringDecal(SCREEN_FRAME.pos+SCREEN_FRAME.size-speedometerStrSize-vf2d{4.f,4.f},speedometerStr,speedometerCol);
|
||||||
radar.FillRectDecal({},{128,128},GREEN);
|
|
||||||
DrawDecal({2.f,4.f},GetGFX("radar.png").Decal());
|
DrawDecal({2.f,4.f},GetGFX("radar.png").Decal());
|
||||||
|
DrawRadar();
|
||||||
}
|
}
|
||||||
|
|
||||||
const Terrain::TerrainType HamsterGame::GetTerrainTypeAtPos(const vf2d pos)const{
|
const Terrain::TerrainType HamsterGame::GetTerrainTypeAtPos(const vf2d pos)const{
|
||||||
@ -492,6 +500,58 @@ const float HamsterGame::GetCameraZ()const{
|
|||||||
return vEye.z;
|
return vEye.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HamsterGame::DrawRadar(){
|
||||||
|
const vf2d radarOffset{43.f,44.f};
|
||||||
|
const auto WorldToRadar=[this,&radarOffset](const vf2d&pos){
|
||||||
|
vf2d relativeWorldPos{pos-Hamster::GetPlayer().GetPos()};
|
||||||
|
return relativeWorldPos/radarScale+radarOffset+vf2d{5.f,8.f}/radarScale;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum IconType{
|
||||||
|
CHECKPOINT,
|
||||||
|
WHEEL,
|
||||||
|
GRASS,
|
||||||
|
SAND,
|
||||||
|
SWAMP,
|
||||||
|
LAVA,
|
||||||
|
FOREST,
|
||||||
|
ICE,
|
||||||
|
JET,
|
||||||
|
HAMSTER,
|
||||||
|
};
|
||||||
|
|
||||||
|
const std::unordered_map<IconType,geom2d::rect<float>>icon{
|
||||||
|
{CHECKPOINT,{{16.f*0,0.f},{16.f,16.f}}},
|
||||||
|
{WHEEL,{{16.f*1,0.f},{16.f,16.f}}},
|
||||||
|
{GRASS,{{16.f*2,0.f},{16.f,16.f}}},
|
||||||
|
{SAND,{{16.f*3,0.f},{16.f,16.f}}},
|
||||||
|
{SWAMP,{{16.f*4,0.f},{16.f,16.f}}},
|
||||||
|
{LAVA,{{16.f*5,0.f},{16.f,16.f}}},
|
||||||
|
{FOREST,{{16.f*6,0.f},{16.f,16.f}}},
|
||||||
|
{ICE,{{16.f*7,0.f},{16.f,16.f}}},
|
||||||
|
{JET,{{16.f*8,0.f},{16.f,16.f}}},
|
||||||
|
{HAMSTER,{{16.f*9,0.f},{16.f,16.f}}},
|
||||||
|
};
|
||||||
|
|
||||||
|
for(const Powerup&powerup:Powerup::GetPowerups()){
|
||||||
|
IconType powerupIcon{IconType(int(powerup.GetType())+1)};
|
||||||
|
uint8_t iconAlpha{255U};
|
||||||
|
if(Hamster::GetPlayer().HasPowerup(powerup.GetType()))iconAlpha=64U;
|
||||||
|
radar.DrawPartialRotatedDecal(WorldToRadar(powerup.GetPos()),GetGFX("radaricons.png").Decal(),0.f,{8.f,8.f},icon.at(powerupIcon).pos,icon.at(powerupIcon).size,{1.f,1.f},{255,255,255,iconAlpha});
|
||||||
|
}
|
||||||
|
for(const Checkpoint&cp:Checkpoint::GetCheckpoints()){
|
||||||
|
uint8_t iconAlpha{255U};
|
||||||
|
if(Hamster::GetPlayer().HasCollectedCheckpoint(cp))iconAlpha=64U;
|
||||||
|
radar.DrawPartialRotatedDecal(WorldToRadar(cp.GetPos()),GetGFX("radaricons.png").Decal(),0.f,{8.f,8.f},icon.at(CHECKPOINT).pos,icon.at(CHECKPOINT).size,{1.f,1.f},{255,255,255,iconAlpha});
|
||||||
|
}
|
||||||
|
for(const Hamster&h:Hamster::GetHamsters()){
|
||||||
|
if(&h==&Hamster::GetPlayer())continue;
|
||||||
|
uint8_t iconAlpha{255U};
|
||||||
|
if(h.BurnedOrDrowned())iconAlpha=64U;
|
||||||
|
radar.DrawPartialRotatedDecal(WorldToRadar(h.GetPos()),GetGFX("radaricons.png").Decal(),0.f,{8.f,8.f},icon.at(HAMSTER).pos,icon.at(HAMSTER).size,{1.f,1.f},{255,255,255,iconAlpha});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
HamsterGame game("Project Hamster");
|
HamsterGame game("Project Hamster");
|
||||||
|
@ -115,4 +115,6 @@ private:
|
|||||||
vf2d cloudOffset{};
|
vf2d cloudOffset{};
|
||||||
float speedometerDisplayAmt{0.f};
|
float speedometerDisplayAmt{0.f};
|
||||||
ViewPort radar;
|
ViewPort radar;
|
||||||
|
void DrawRadar();
|
||||||
|
float radarScale{48.f};
|
||||||
};
|
};
|
@ -107,6 +107,9 @@ void Powerup::UpdatePowerups(const float fElapsedTime){
|
|||||||
if(powerup.spinSpd>=3.f)powerup.spinSpd=0.f;
|
if(powerup.spinSpd>=3.f)powerup.spinSpd=0.f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
std::sort(powerupList.begin(),powerupList.end(),[](const Powerup&p1,const Powerup&p2){
|
||||||
|
return geom2d::line<float>(Hamster::GetPlayer().GetPos(),p1.pos).length()>geom2d::line<float>(Hamster::GetPlayer().GetPos(),p2.pos).length();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Powerup::DrawPowerups(TransformedView&tv){
|
void Powerup::DrawPowerups(TransformedView&tv){
|
||||||
|
Loading…
x
Reference in New Issue
Block a user