aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--game/CMakeLists.txt2
-rw-r--r--game/Config.h7
-rw-r--r--game/Random.cpp28
-rw-r--r--game/Random.h11
-rw-r--r--game/main.cpp7
-rw-r--r--game/prefab/ZapperPoolScript.cpp9
6 files changed, 57 insertions, 7 deletions
diff --git a/game/CMakeLists.txt b/game/CMakeLists.txt
index 48844b7..5c7bb6b 100644
--- a/game/CMakeLists.txt
+++ b/game/CMakeLists.txt
@@ -4,7 +4,6 @@ set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
set(CMAKE_BUILD_TYPE Debug)
-
project(game C CXX)
add_subdirectory(../src crepe)
@@ -45,6 +44,7 @@ target_sources(main PUBLIC
hud/HudSubScene.cpp
hud/HudScript.cpp
hud/SpeedScript.cpp
+ Random.cpp
)
add_subdirectory(background)
diff --git a/game/Config.h b/game/Config.h
index 8c27226..95846d2 100644
--- a/game/Config.h
+++ b/game/Config.h
@@ -31,11 +31,12 @@ static constexpr int COLL_LAY_ZAPPER = 6; // Only for GameScene
static constexpr int COLL_LAY_LASER = 7; // Only for GameScene
static constexpr int COLL_LAY_MISSILE = 8; // Only for GameScene
-static constexpr int GAME_HEIGHT = 800; // In game units
+static constexpr float GAME_HEIGHT = 800; // In game units
+static constexpr float HALLWAY_HEIGHT = 475; // In game units
-static constexpr int VIEWPORT_X = 1100; // In game units
+static constexpr float VIEWPORT_X = 1100; // In game units
// 'GAME_HEIGHT' (below) should be replaced by '500' when game development is finished
-static constexpr int VIEWPORT_Y = 500; // In game units
+static constexpr float VIEWPORT_Y = 500; // In game units
// Font settings
static constexpr const char* FONT = "Jetpackia";
diff --git a/game/Random.cpp b/game/Random.cpp
new file mode 100644
index 0000000..59be3c5
--- /dev/null
+++ b/game/Random.cpp
@@ -0,0 +1,28 @@
+#include <cstdlib>
+
+#include "Random.h"
+
+float Random::f(float upper, float lower) {
+ float range = upper - lower;
+ float x = ((float) rand() / (float) (RAND_MAX)) * range;
+ return x + lower;
+}
+
+double Random::d(double upper, double lower) {
+ double range = upper - lower;
+ double x = ((double) rand() / (double) (RAND_MAX)) * range;
+ return x + lower;
+}
+
+int Random::i(int upper, int lower) {
+ int range = upper - lower;
+ int x = rand() % range;
+ return x + lower;
+}
+
+unsigned Random::u(unsigned upper, unsigned lower) {
+ unsigned range = upper - lower;
+ unsigned x = rand() % range;
+ return x + lower;
+}
+
diff --git a/game/Random.h b/game/Random.h
new file mode 100644
index 0000000..cf05e87
--- /dev/null
+++ b/game/Random.h
@@ -0,0 +1,11 @@
+#pragma once
+
+class Random {
+public:
+ static float f(float upper = 1.0, float lower = 0.0);
+ static double d(double upper = 1.0, double lower = 0.0);
+ static int i(int upper, int lower = 0);
+ static unsigned u(unsigned upper, unsigned lower = 0);
+
+};
+
diff --git a/game/main.cpp b/game/main.cpp
index bd5ca93..b6458b8 100644
--- a/game/main.cpp
+++ b/game/main.cpp
@@ -1,3 +1,5 @@
+#include <cstdlib>
+
#include <crepe/api/Engine.h>
#include <crepe/api/Script.h>
@@ -6,16 +8,17 @@
#include "menus/mainmenu/MainMenuScene.h"
#include "menus/shop/ShopMenuScene.h"
-
using namespace crepe;
int main() {
+ srand(time(NULL));
+
Config::get_instance() = ENGINE_CONFIG;
Engine gameloop;
+ gameloop.add_scene<GameScene>();
gameloop.add_scene<MainMenuScene>();
gameloop.add_scene<ShopMenuScene>();
- gameloop.add_scene<GameScene>();
return gameloop.main();
}
diff --git a/game/prefab/ZapperPoolScript.cpp b/game/prefab/ZapperPoolScript.cpp
index e42adc9..c6ce1e7 100644
--- a/game/prefab/ZapperPoolScript.cpp
+++ b/game/prefab/ZapperPoolScript.cpp
@@ -1,9 +1,11 @@
#include <crepe/api/Camera.h>
#include "../Config.h"
+#include "../Random.h"
#include "ZapperPoolScript.h"
#include "ZapperPoolSubScene.h"
+#include "util/OptionalRef.h"
using namespace crepe;
using namespace std;
@@ -24,9 +26,14 @@ void ZapperPoolScript::fixed_update(crepe::duration_t) {
}
void ZapperPoolScript::spawn_random() {
+ OptionalRef<ZapperObject> zapper = pool.get_next_zapper();
+ if (!zapper) return; // pool exhausted
+
vec2 pos = this->get_camera_pos();
- logf(Log::DEBUG, "Spawning random zapper at {}", pos);
+ pos.y = Random::f(0.5, -0.5) * HALLWAY_HEIGHT;
+ zapper->place(pos, 0, Random::f(400, 200));
+ logf(Log::DEBUG, "Spawning random zapper at {}", pos);
}
vec2 ZapperPoolScript::get_camera_pos() {