Skip to content

Commit

Permalink
[WIP] Restructure into separate levels
Browse files Browse the repository at this point in the history
  • Loading branch information
justindriggers committed Feb 1, 2024
1 parent 89ac3b7 commit bb56c59
Show file tree
Hide file tree
Showing 38 changed files with 1,544 additions and 432 deletions.
3 changes: 2 additions & 1 deletion alfredo/src/platform/MacSaveManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,12 @@ class MacSaveManager : public SaveManager {

protected:
void load() override {
_points = 0;
_level = 1;
_isMusicEnabled = true;
_isSoundEffectsEnabled = true;
_isScreenShakeEnabled = true;
_handedness = Handedness::Right;
_stars = {};
}

void save() override {}
Expand Down
6 changes: 5 additions & 1 deletion linguine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,20 @@ add_library(linguine
src/renderer/features/FeatureRenderer.cpp
src/scenes/GameOverScene.cpp
src/scenes/InfiniteRunnerScene.cpp
src/scenes/LevelCompletedScene.cpp
src/scenes/LevelSelectionScene.cpp
src/scenes/NewPlayerScene.cpp
src/scenes/OptionsScene.cpp
src/scenes/TitleScene.cpp
src/scenes/levels/LevelNineScene.cpp
src/scenes/levels/RunnerScene.cpp
src/systems/AttachmentSystem.cpp
src/systems/ButtonSystem.cpp
src/systems/CameraFollowSystem.cpp
src/systems/CameraSystem.cpp
src/systems/CastSystem.cpp
src/systems/CollisionSystem.cpp
src/systems/CompletionSystem.cpp
src/systems/CooldownProgressSystem.cpp
src/systems/DialogSystem.cpp
src/systems/DirectionalMovementSystem.cpp
Expand All @@ -45,7 +50,6 @@ add_library(linguine
src/systems/GridPositionSystem.cpp
src/systems/HealthProgressSystem.cpp
src/systems/HudSystem.cpp
src/systems/LevelTrackingSystem.cpp
src/systems/LivenessSystem.cpp
src/systems/OrbitSystem.cpp
src/systems/ParticleSystem.cpp
Expand Down
38 changes: 25 additions & 13 deletions linguine/include/SaveManager.h
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#pragma once

#include <array>
#include <cstdint>

namespace linguine {
Expand All @@ -15,22 +16,19 @@ class SaveManager {

virtual ~SaveManager() = default;

void addPoints(int32_t points) {
_points += points;
save();
void ensureLevel(uint8_t level) {
if (_level < level) {
_level = level;
save();
}
}

void removePoints(int32_t points) {
_points -= points;
save();
}

[[nodiscard]] int32_t getPoints() const {
return _points;
[[nodiscard]] uint8_t getCurrentLevel() const {
return _level;
}

[[nodiscard]] bool isNewPlayer() const {
return _points == 0;
return _level == 1;
}

void setMusicEnabled(bool enabled) {
Expand Down Expand Up @@ -69,17 +67,31 @@ class SaveManager {
return _handedness;
}

void ensureStarsForLevel(uint8_t level, uint8_t stars) {
auto index = level - 1;

if (_stars[index] < stars) {
_stars[index] = stars;
save();
}
}

[[nodiscard]] uint8_t getStarsForLevel(uint8_t level) {
return _stars[level - 1];
}

void restart() {
_points = 0;
_level = 0;
save();
}

protected:
int32_t _points{};
bool _isMusicEnabled{};
bool _isSoundEffectsEnabled{};
bool _isScreenShakeEnabled{};
Handedness _handedness{};
uint8_t _level = 1;
std::array<uint8_t, 20> _stars{};

virtual void load() = 0;

Expand Down
2 changes: 1 addition & 1 deletion linguine/include/Scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ class Scene {

private:
ServiceLocator& _serviceLocator;
std::unique_ptr<EntityManager> _entityManager;
std::vector<std::unique_ptr<System>> _systems;
std::unique_ptr<EntityManager> _entityManager;
};

} // namespace linguine
1 change: 1 addition & 0 deletions linguine/src/components/Button.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ struct Button {
glm::vec3 color = Palette::Primary;
glm::vec3 activeColor = Palette::PrimaryAccent;
bool visible = true;
bool enabled = true;

std::string text;
glm::vec3 textColor = glm::vec3(1.0f);
Expand Down
7 changes: 7 additions & 0 deletions linguine/src/components/FinishLine.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#pragma once

namespace linguine {

struct FinishLine {};

} // namespace linguine
4 changes: 4 additions & 0 deletions linguine/src/components/Score.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,11 @@
namespace linguine {

struct Score {
uint8_t level = 0;
int32_t points = 0;
int32_t possiblePoints = 0;
int32_t mines = 0;
int32_t possibleMines = 0;
};

} // namespace linguine
7 changes: 7 additions & 0 deletions linguine/src/components/SpawnPoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,16 @@ struct SpawnPoint {
float distance = 15.0f;
float lastSpawnPoint = 0.0f;
float spawnChance = 1.0f;
float obstacleSpawnChance = 0.65f;
float wallSpawnChance = 0.0f;
float powerUpInterval = 15.0f;
float powerUpElapsed = 0.0f;
bool speedBoostEnabled = true;
bool regenEnabled = true;
bool reviveEnabled = true;
bool timeWarpEnabled = true;
std::unordered_map<uint64_t, float> powerUpCooldowns{};
float requiredDistance = 0.0f;
};

} // namespace linguine
66 changes: 66 additions & 0 deletions linguine/src/data/LevelDatabase.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
#pragma once

#include "ServiceLocator.h"
#include "scenes/levels/LevelNineScene.h"
#include "scenes/levels/RunnerScene.h"

namespace linguine {

class LevelDatabase {
public:
void load(ServiceLocator& serviceLocator, uint8_t level) {
std::unique_ptr<Scene> newScene;

switch (level) {
case 1:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.0f, 0.0f, 0.0f, 135.0f, false, false, false, false });
break;
case 2:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.95f, 0.0f, 0.0f, 0.0f, 185.625f, false, false, false, false });
break;
case 3:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.25f, 0.0f, 0.0f, 185.625f, false, false, false, false });
break;
case 4:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.5f, 0.0f, 0.0f, 185.625f, false, false, false, false });
break;
case 5:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.65f, 0.0f, 0.0f, 330.0f, false, false, false, false });
break;
case 6:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.0f, 0.0f, 15.0f, 425.0f, true, false, false, false });
break;
case 7:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.65f, 0.0f, 15.0f, 750.0f, true, false, false, false });
break;
case 8:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.25f, 0.0f, 2.0f, 1000.0f, true, false, false, false });
break;
case 9:
newScene = std::make_unique<LevelNineScene>(serviceLocator);
break;
case 10:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.15f, 0.15f, 2.0f, 1000.0f, false, true, false, false });
break;
case 11:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.65f, 0.0f, 15.0f, 1500.0f, true, true, false, false });
break;
case 15:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.65f, 0.0f, 15.0f, 2000.0f, true, true, true, false });
break;
case 16:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.65f, 0.0f, 15.0f, 2000.0f, true, true, true, true });
break;
case 19:
newScene = std::make_unique<RunnerScene>(serviceLocator, RunnerScene::Config{ level, 0.85f, 0.0f, 0.0f, 15.0f, 5000.0f, true, true, true, true });
break;
default:
break;
}

auto& sceneManager = serviceLocator.get<SceneManager>();
sceneManager.load(std::move(newScene));
}
};

} // namespace linguine
61 changes: 0 additions & 61 deletions linguine/src/data/upgrades/LevelCurve.h

This file was deleted.

19 changes: 12 additions & 7 deletions linguine/src/data/upgrades/UpgradeDatabase.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,10 @@ class UpgradeDatabase {
public:
UpgradeDatabase()
: _upgrades {
{ 0, { "Shield Generators", "+1 Shield", { 1, 2, 4, 8, 12 } } },
{ 1, { "Generator Capacity", "+1 Durability", { 3, 7, 11, 15, 18 } } },
{ 2, { "Base Speed", "+1 Speed", { 5, 9, 13, 16, 19 } } },
{ 3, { "Ship Acceleration", "+1 Acceleration", { 6, 10, 14, 17, 20 } } }
{ 0, { "Shield Generators", "+1 Shield", { 1, 2, 3, 4, 5 } } },
{ 1, { "Generator Capacity", "+1 Durability", { 3, 7, 10, 13, 16 } } },
{ 2, { "Base Speed", "+1 Speed", { 5, 8, 11, 14, 17 } } },
{ 3, { "Ship Acceleration", "+1 Acceleration", { 6, 9, 12, 15, 18 } } }
} {}

[[nodiscard]] const std::map<uint8_t, Upgrade>& getUpgrades() const {
Expand All @@ -40,16 +40,21 @@ class UpgradeDatabase {
return rank;
}

[[nodiscard]] const std::string& getDescriptionByLevel(uint8_t level) const {
[[nodiscard]] std::vector<std::string_view> getDescriptionsByLevel(uint8_t level) const {
auto results = std::vector<std::string_view>();

for (auto& upgrade : _upgrades) {
for (auto rankLevel : upgrade.second.rankLevels) {
if (rankLevel == level) {
return upgrade.second.description;
results.push_back(upgrade.second.description);
break;
} else if (rankLevel > level) {
break;
}
}
}

throw std::runtime_error("No description found");
return results;
}

private:
Expand Down

0 comments on commit bb56c59

Please sign in to comment.