Skip to content

Commit

Permalink
Stack shields vertically and support left-handed configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
justindriggers committed Jan 25, 2024
1 parent ec8b041 commit d9c198a
Show file tree
Hide file tree
Showing 20 changed files with 406 additions and 75 deletions.
1 change: 1 addition & 0 deletions alfredo/src/platform/MacSaveManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class MacSaveManager : public SaveManager {
_isMusicEnabled = true;
_isSoundEffectsEnabled = true;
_isScreenShakeEnabled = true;
_handedness = Handedness::Right;
}

void save() override {}
Expand Down
1 change: 1 addition & 0 deletions linguine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ add_library(linguine
src/renderer/features/FeatureRenderer.cpp
src/scenes/GameOverScene.cpp
src/scenes/InfiniteRunnerScene.cpp
src/scenes/NewPlayerScene.cpp
src/scenes/OptionsScene.cpp
src/scenes/TitleScene.cpp
src/systems/AttachmentSystem.cpp
Expand Down
15 changes: 15 additions & 0 deletions linguine/include/SaveManager.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ namespace linguine {

class SaveManager {
public:
enum class Handedness {
Left,
Right
};

SaveManager() = default;

virtual ~SaveManager() = default;
Expand Down Expand Up @@ -55,6 +60,15 @@ class SaveManager {
return _isScreenShakeEnabled;
}

void setHandedness(Handedness handedness) {
_handedness = handedness;
save();
}

[[nodiscard]] Handedness getHandedness() const {
return _handedness;
}

void restart() {
_points = 0;
save();
Expand All @@ -65,6 +79,7 @@ class SaveManager {
bool _isMusicEnabled{};
bool _isSoundEffectsEnabled{};
bool _isScreenShakeEnabled{};
Handedness _handedness{};

virtual void load() = 0;

Expand Down
11 changes: 11 additions & 0 deletions linguine/src/components/Follow.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#pragma once

#include <glm/vec2.hpp>

namespace linguine {

struct Follow {
glm::vec2 offset{};
};

} // namespace linguine
2 changes: 1 addition & 1 deletion linguine/src/components/StarSpawnPoint.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
namespace linguine {

struct StarSpawnPoint {
float distance = 1.2f;
float distance = 2.0f;
float lastSpawnPoint = 0.0f;
};

Expand Down
1 change: 1 addition & 0 deletions linguine/src/components/Toggle.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ namespace linguine {

struct Toggle {
bool isEnabled = false;
bool stickySelection = false;

glm::vec3 position = glm::vec3(0.0f);
glm::vec2 minSize = glm::vec2(1.0f);
Expand Down
85 changes: 49 additions & 36 deletions linguine/src/scenes/InfiniteRunnerScene.cpp
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#include "InfiniteRunnerScene.h"

#include "components/Ability.h"
#include "components/AbilityLabel.h"
#include "components/Alive.h"
#include "components/Attachment.h"
#include "components/CameraFixture.h"
Expand All @@ -11,6 +10,7 @@
#include "components/Drawable.h"
#include "components/Emitter.h"
#include "components/Fire.h"
#include "components/Follow.h"
#include "components/Friendly.h"
#include "components/GlobalCooldown.h"
#include "components/Health.h"
Expand Down Expand Up @@ -68,7 +68,7 @@ void InfiniteRunnerScene::init() {
registerSystem(std::make_unique<PhysicsInterpolationSystem>(getEntityManager(), get<TimeManager>()));
registerSystem(std::make_unique<CollisionSystem>(getEntityManager()));
registerSystem(std::make_unique<EffectSystem>(getEntityManager(), *_spellDatabase));
registerSystem(std::make_unique<HudSystem>(getEntityManager(), get<Renderer>()));
registerSystem(std::make_unique<HudSystem>(getEntityManager(), get<Renderer>(), get<SaveManager>()));
registerSystem(std::make_unique<HealthProgressSystem>(getEntityManager()));
registerSystem(std::make_unique<LivenessSystem>(getEntityManager(), get<Renderer>(), get<AudioManager>(), get<SaveManager>(), get<ServiceLocator>()));
registerSystem(std::make_unique<CooldownProgressSystem>(getEntityManager()));
Expand All @@ -80,7 +80,7 @@ void InfiniteRunnerScene::init() {

// Scene-specific
registerSystem(std::make_unique<SpawnSystem>(getEntityManager(), get<Renderer>()));
registerSystem(std::make_unique<ScoringSystem>(getEntityManager(), *_spellDatabase, get<Renderer>(), get<AudioManager>()));
registerSystem(std::make_unique<ScoringSystem>(getEntityManager(), *_spellDatabase, get<Renderer>(), get<AudioManager>(), get<SaveManager>()));
registerSystem(std::make_unique<TutorialSystem>(getEntityManager()));

registerSystem(std::make_unique<TransformationSystem>(getEntityManager()));
Expand All @@ -98,15 +98,26 @@ void InfiniteRunnerScene::init() {
auto cameraEntity = createEntity();
cameraEntity->add<Shake>();

auto follow = cameraEntity->add<Follow>();

switch (saveManager.getHandedness()) {
case SaveManager::Handedness::Right:
follow->offset = { 1.6f, 1.81578947368421f };
break;
case SaveManager::Handedness::Left:
follow->offset = { -1.6f, 1.81578947368421f };
break;
}

auto transform = cameraEntity->add<Transform>();
transform->position = glm::vec3(0.0f, 0.0f, 0.0f);

cameraEntity->add<PhysicalState>();
cameraEntity->add<CircleCollider>()->radius = 20.0f;
cameraEntity->add<CircleCollider>()->radius = 40.0f;
cameraEntity->add<Trigger>();

auto fixture = cameraEntity->add<CameraFixture>();
fixture->size = 12.0f;
fixture->size = 15.2f;
fixture->type = CameraFixture::Measurement::Width;
fixture->camera = renderer.createCamera();
fixture->camera->clearColor = { 0.007f, 0.01521f, 0.04667f };
Expand All @@ -119,20 +130,18 @@ void InfiniteRunnerScene::init() {

auto spawnPoint = spawnPointEntity->add<SpawnPoint>();
spawnPoint->distance = 6.25f;
spawnPoint->lastSpawnPoint = 10.0f;
spawnPoint->lastSpawnPoint = 20.0f;
spawnPoint->spawnChance = 0.85f;

auto starSpawnPoint = spawnPointEntity->add<StarSpawnPoint>();
starSpawnPoint->lastSpawnPoint = -15.0f;
starSpawnPoint->lastSpawnPoint = -20.0f;

auto spawnPointTransform = spawnPointEntity->add<Transform>();
spawnPointTransform->position = { 0.0f, 15.0f, 0.0f };

spawnPointEntity->add<PhysicalState>(spawnPointTransform->position, 0.0f);
spawnPointEntity->add<Transform>();
spawnPointEntity->add<PhysicalState>();

auto attachment = spawnPointEntity->add<Attachment>();
attachment->parentId = cameraEntity->getId();
attachment->offset = { 0.0f, 15.0f };
attachment->offset = { 0.0f, 20.0f };
}
}

Expand All @@ -155,6 +164,7 @@ void InfiniteRunnerScene::init() {

auto points = saveManager.getPoints();
auto level = LevelCurve::getLevelForXp(points);
auto shieldCount = _upgradeDatabase.getRankByLevel(0, level);

{
auto playerEntity = createEntity();
Expand Down Expand Up @@ -274,6 +284,7 @@ void InfiniteRunnerScene::init() {
auto particleEntity = createEntity();

auto particle = particleEntity->add<Particle>();
particle->scalePerSecond = -0.35f;
particle->duration = 5.0f;

auto playerTransform = playerEntity->get<Transform>();
Expand Down Expand Up @@ -356,7 +367,7 @@ void InfiniteRunnerScene::init() {

auto party = playerEntity->add<Party>();

for (auto i = 0; i < _upgradeDatabase.getRankByLevel(0, level); ++i) {
for (auto i = 0; i < shieldCount; ++i) {
auto shieldEntity = createEntity();

shieldEntity->add<Health>(1000 + 250 * _upgradeDatabase.getRankByLevel(1, level));
Expand All @@ -371,9 +382,18 @@ void InfiniteRunnerScene::init() {
auto textEntity = createEntity();

auto transform = textEntity->add<Transform>();
transform->position = { -15.0f, -156.0f, 0.0f };
transform->position = { 0.0f, (static_cast<float>(shieldCount) / 2.0f - static_cast<float>(shieldCount - 1) - 0.5f) * 46.0f - 51.0f, 0.0f };
transform->scale = { 5.0f, 5.0f, 0.0f };

switch (saveManager.getHandedness()) {
case SaveManager::Handedness::Right:
transform->position.x = 77.0f;
break;
case SaveManager::Handedness::Left:
transform->position.x = -107.0f;
break;
}

auto text = textEntity->add<Text>();
text->feature = new TextFeature();
text->feature->text = "Shields";
Expand All @@ -389,35 +409,28 @@ void InfiniteRunnerScene::init() {
healEntity->add<Ability>(_spellDatabase->getSpellById(1));

auto transform = healEntity->add<Transform>();
transform->position = { 0.0f, -96.0f, 0.0f};
transform->scale = { 224.0f, 12.0f, 0.0f };
transform->position = { 0.0f, -23.0f, 0.0f};
transform->rotation = glm::angleAxis(glm::pi<float>() / 2.0f, glm::vec3(0.0f, 0.0f, 1.0f));
transform->scale = { static_cast<float>(shieldCount) * 40.0f + static_cast<float>(shieldCount - 1) * 6.0f, 4.0f, 0.0f };

switch (saveManager.getHandedness()) {
case SaveManager::Handedness::Right:
transform->position.x = 118.0f;
break;
case SaveManager::Handedness::Left:
transform->position.x = -118.0f;
break;
}

auto progressable = healEntity->add<Progressable>();
progressable->feature = new ProgressFeature();
progressable->feature->meshType = Quad;
progressable->feature->color = { 0.0f, 1.0f, 0.0f };
progressable->feature->backgroundColor = { 0.0f, 0.0f, 0.0f, 0.0f };
progressable->renderable = renderer.create(std::unique_ptr<ProgressFeature>(progressable->feature), UI);
progressable.setRemovalListener([progressable](const Entity e) {
progressable->renderable->destroy();
});

// Text
{
auto textEntity = createEntity();
textEntity->add<AbilityLabel>()->abilityId = healEntity->getId();

auto textTransform = textEntity->add<Transform>();
textTransform->position.x = -109.0f;
textTransform->position.y = -80.0f;
textTransform->scale = { 5.0f, 5.0f, 0.0f };

auto text = textEntity->add<Text>();
text->feature = new TextFeature();
text->renderable = renderer.create(std::unique_ptr<TextFeature>(text->feature), UI);
text.setRemovalListener([text](const Entity e) {
text->renderable->destroy();
});
}
}

{
Expand All @@ -440,7 +453,7 @@ void InfiniteRunnerScene::init() {
scoreEntity->add<Score>();

auto transform = scoreEntity->add<Transform>();
transform->position = { -102.0f, 150.0f, 0.0f };
transform->position = { -102.0f, 148.0f, 0.0f };
transform->scale = glm::vec3(20.0f);

auto text = scoreEntity->add<Text>();
Expand All @@ -456,7 +469,7 @@ void InfiniteRunnerScene::init() {
toastEntity->add<Transform>();

auto toast = toastEntity->add<Toast>();
toast->startPosition = { 0.0f, 48.0f, 0.0f };
toast->startPosition = { 0.0f, 1.81578947368421f * 240.0f / 15.2f, 0.0f };

auto text = toastEntity->add<Text>();
text->feature = new TextFeature();
Expand Down

0 comments on commit d9c198a

Please sign in to comment.