aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/CMakeLists.txt1
-rw-r--r--game/GameScene.cpp3
-rw-r--r--game/hud/HudConfig.h8
-rw-r--r--game/hud/HudScript.cpp7
-rw-r--r--game/hud/HudSubScene.cpp17
-rw-r--r--game/hud/SpeedScript.cpp28
-rw-r--r--game/hud/SpeedScript.h13
7 files changed, 65 insertions, 12 deletions
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index 50c9b4d..e14e132 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -37,6 +37,7 @@ add_executable(main
coins/CoinScript.cpp
hud/HudSubScene.cpp
hud/HudScript.cpp
+ hud/SpeedScript.cpp
)
target_link_libraries(main PUBLIC crepe)
diff --git a/game/GameScene.cpp b/game/GameScene.cpp
index 2073a1e..57cb8c4 100644
--- a/game/GameScene.cpp
+++ b/game/GameScene.cpp
@@ -10,6 +10,7 @@
#include "background/BackgroundSubScene.h"
#include "hud/HudScript.h"
#include "hud/HudSubScene.h"
+#include "hud/SpeedScript.h"
#include <cmath>
#include <crepe/api/Animator.h>
@@ -43,6 +44,8 @@ void GameScene::load_scene() {
camera.add_component<BehaviorScript>().set_script<MoveCameraManualyScript>();
camera.add_component<BehaviorScript>().set_script<CoinSystemScript>();
camera.add_component<BehaviorScript>().set_script<HudScript>();
+ camera.add_component<BehaviorScript>().set_script<SpeedScript>();
+
camera.add_component<Rigidbody>(Rigidbody::Data{});
PlayerSubScene player(*this);
diff --git a/game/hud/HudConfig.h b/game/hud/HudConfig.h
index 91e3bfa..983a557 100644
--- a/game/hud/HudConfig.h
+++ b/game/hud/HudConfig.h
@@ -1,7 +1,7 @@
#pragma once
#include "types.h"
-static constexpr crepe::vec2 TOP_LEFT = {-500,-380};
+static constexpr crepe::vec2 TOP_LEFT = {-530,-380};
static constexpr const char* HUD_DISTANCE = "hud_distance";
static constexpr const char* HUD_BEST = "hud_best";
static constexpr const char* HUD_COINS = "hud_coins";
@@ -10,19 +10,19 @@ static constexpr const char* HUD_COINS = "hud_coins";
static constexpr const char* DISTANCE_PLACEHOLDER = "0000m";
static constexpr const char* DISTANCE_UNIT = "m";
static constexpr int DISTANCE_LENGTH = 5;
-static constexpr float DISTANCE_WIDTH = 60;
+static constexpr float DISTANCE_CHAR_WIDTH = 12;
static constexpr float STEP_SIZE_DISTANCE = 100;
// BEST
static constexpr const char* BEST = "BEST:";
static constexpr int BEST_LENGTH = 5;
-static constexpr float BEST_WIDTH = 40;
+static constexpr float BEST_CHAR_WIDTH = 10;
static constexpr crepe::vec2 BEST_OFFSET = {0,25};
// COINS
static constexpr const char* COINS = "0000";
static constexpr int COINS_LENGTH = 4;
-static constexpr float COINS_WIDTH = 40;
+static constexpr float COINS_CHAR_WIDTH = 10;
static constexpr crepe::vec2 COINS_OFFSET = {0,50};
\ No newline at end of file
diff --git a/game/hud/HudScript.cpp b/game/hud/HudScript.cpp
index 42ff118..deeea14 100644
--- a/game/hud/HudScript.cpp
+++ b/game/hud/HudScript.cpp
@@ -4,6 +4,7 @@
#include "manager/SaveManager.h"
#include "../Config.h"
#include "HudConfig.h"
+#include <climits>
using namespace crepe;
using namespace std;
@@ -14,6 +15,8 @@ void HudScript::init() {
Text & txt = this->get_components_by_name<Text>(HUD_BEST).front();
string record = BEST+to_string(savemgr->get<int>(DISTANCE_GAME,0).get())+DISTANCE_UNIT;
txt.text = record;
+ txt.dimensions = {BEST_CHAR_WIDTH*record.size(),(BEST_CHAR_WIDTH)*2};
+ txt.offset = TOP_LEFT+FONTOFFSET+BEST_OFFSET + vec2{record.size() * BEST_CHAR_WIDTH/2,0};
}
void HudScript::frame_update(crepe::duration_t dt) {
@@ -25,9 +28,13 @@ void HudScript::frame_update(crepe::duration_t dt) {
Transform & tf = this->get_components_by_name<Transform>(PLAYER_NAME).front();
string distance = to_string(static_cast<int>(tf.position.x/STEP_SIZE_DISTANCE)) + DISTANCE_UNIT;
txt_dt.text = distance;
+ txt_dt.dimensions = {DISTANCE_CHAR_WIDTH*distance.size(),(DISTANCE_CHAR_WIDTH)*2};
+ txt_dt.offset = TOP_LEFT+FONTOFFSET + vec2{distance.size() * DISTANCE_CHAR_WIDTH/2,0};
// Coins
Text & txt_co = this->get_components_by_name<Text>(HUD_COINS).front();
string amount_of_coins = to_string(savemgr->get<int>(TOTAL_COINS_RUN,0).get());
txt_co.text = amount_of_coins;
+ txt_co.dimensions = {COINS_CHAR_WIDTH*amount_of_coins.size(),(COINS_CHAR_WIDTH)*2};
+ txt_co.offset = TOP_LEFT+FONTOFFSET+COINS_OFFSET + vec2{amount_of_coins.size() * COINS_CHAR_WIDTH/2,0};
}
diff --git a/game/hud/HudSubScene.cpp b/game/hud/HudSubScene.cpp
index e76623d..126f933 100644
--- a/game/hud/HudSubScene.cpp
+++ b/game/hud/HudSubScene.cpp
@@ -11,25 +11,26 @@ void HudSubScene::create(Scene & scn){
// Distance
GameObject hud_dis = scn.new_object(HUD_DISTANCE);
- crepe::vec2 size_distance = {DISTANCE_WIDTH,(DISTANCE_WIDTH/DISTANCE_LENGTH)*2};
+
+ crepe::vec2 size_distance = {DISTANCE_CHAR_WIDTH*DISTANCE_LENGTH,(DISTANCE_CHAR_WIDTH)*2};
hud_dis.add_component<Text>(size_distance, FONT,Text::Data{
.world_space = false,
.text_color = Color::WHITE,
- }, TOP_LEFT+FONTOFFSET, DISTANCE_PLACEHOLDER);
+ }, TOP_LEFT+FONTOFFSET + vec2{DISTANCE_LENGTH * DISTANCE_CHAR_WIDTH/2,0}, DISTANCE_PLACEHOLDER);
// Best
GameObject hud_best = scn.new_object(HUD_BEST);
- crepe::vec2 size_best = {BEST_WIDTH,(BEST_WIDTH/BEST_LENGTH)*2};
+ crepe::vec2 size_best = {BEST_CHAR_WIDTH*BEST_LENGTH,(BEST_CHAR_WIDTH)*2};
hud_best.add_component<Text>(size_best, FONT,Text::Data{
.world_space = false,
- .text_color = Color::WHITE,
- }, TOP_LEFT+FONTOFFSET+BEST_OFFSET, BEST);
+ .text_color = Color::GREY,
+ }, TOP_LEFT+FONTOFFSET+BEST_OFFSET + vec2{BEST_LENGTH * BEST_CHAR_WIDTH/2,0}, BEST);
// Coins
GameObject hud_coin = scn.new_object(HUD_COINS);
- crepe::vec2 size = {COINS_WIDTH,(COINS_WIDTH/COINS_LENGTH)*2};
+ crepe::vec2 size = {COINS_CHAR_WIDTH*COINS_LENGTH,(COINS_CHAR_WIDTH)*2};
hud_coin.add_component<Text>(size, FONT,Text::Data{
.world_space = false,
- .text_color = Color::WHITE,
- }, TOP_LEFT+FONTOFFSET+COINS_OFFSET, COINS);
+ .text_color = Color::YELLOW,
+ }, TOP_LEFT+FONTOFFSET+COINS_OFFSET + vec2{COINS_LENGTH * COINS_CHAR_WIDTH/2,0}, COINS);
}
diff --git a/game/hud/SpeedScript.cpp b/game/hud/SpeedScript.cpp
new file mode 100644
index 0000000..c0d927c
--- /dev/null
+++ b/game/hud/SpeedScript.cpp
@@ -0,0 +1,28 @@
+#include "SpeedScript.h"
+#include "api/KeyCodes.h"
+#include "manager/LoopTimerManager.h"
+
+using namespace crepe;
+using namespace std;
+
+void SpeedScript::fixed_update(crepe::duration_t dt){
+ LoopTimerManager & lp = this->get_loop_timer();
+ if(this->get_key_state(Keycode::HOME)){
+ if(toggle)
+ {
+ this->timescale = lp.get_time_scale();
+ lp.set_time_scale(0);
+ toggle = false;
+ }
+ else {
+ lp.set_time_scale(this->timescale);
+ toggle = true;
+ }
+ }
+ if(this->get_key_state(Keycode::PAGE_UP)){
+ lp.set_time_scale(lp.get_time_scale()+0.1);
+ }
+ if(this->get_key_state(Keycode::PAGE_DOWN)){
+ lp.set_time_scale(lp.get_time_scale()-0.1);
+ }
+}
diff --git a/game/hud/SpeedScript.h b/game/hud/SpeedScript.h
new file mode 100644
index 0000000..1cc4368
--- /dev/null
+++ b/game/hud/SpeedScript.h
@@ -0,0 +1,13 @@
+#pragma once
+
+#include "api/Script.h"
+#include "manager/SaveManager.h"
+
+class SpeedScript : public crepe::Script {
+public:
+ void fixed_update(crepe::duration_t dt) override;
+private:
+ crepe::SaveManager* savemgr;
+ bool toggle = true;
+ float timescale = 1;
+};