80 lines
2.3 KiB
C++
80 lines
2.3 KiB
C++
#include "scene/GameplayScene.hpp"
|
|
|
|
#include "EnergyBarRaygui.hpp"
|
|
#include "scene/DeathScene.hpp"
|
|
#include "scene/SceneManager.hpp"
|
|
|
|
#include <algorithm>
|
|
|
|
void GameplayScene::Enter() {
|
|
entities.clear();
|
|
entities.reserve(20);
|
|
context = {};
|
|
collectedCount = 0;
|
|
meterValue = 60.0f;
|
|
|
|
context.onPlayerDeath = [this]() {
|
|
// queue the death scene with the current star count so the recap is accurate
|
|
manager.QueueSceneChange<DeathScene>(collectedCount, this->isMuted);
|
|
};
|
|
context.AddCollectiblePickedListener([this](Entity &collectible) {
|
|
collectedCount++;
|
|
|
|
auto transform = collectible.GetComponent<TransformComponent>();
|
|
if (!transform || !context.entities) {
|
|
return;
|
|
}
|
|
|
|
context.entities->emplace_back(
|
|
CreateDebris(transform->get().x - 4.0f, transform->get().y, -22.0f, -36.0f));
|
|
context.entities->emplace_back(
|
|
CreateDebris(transform->get().x + 4.0f, transform->get().y, 24.0f, -28.0f));
|
|
});
|
|
context.AddMeterChangedListener([this](float, float newValue) { meterValue = newValue; });
|
|
|
|
context.worldEntity = entities.emplace_back(CreateWorld()).get();
|
|
|
|
context.wellEntity = entities.emplace_back(CreateGravityWell()).get();
|
|
|
|
context.probeEntity = entities.emplace_back(CreateProbe()).get();
|
|
|
|
entities.emplace_back(CreateStar(900.0f, 230.0f));
|
|
entities.emplace_back(CreateNullZone(1280.0f, 120.0f));
|
|
|
|
context.statsEntity = entities.emplace_back(CreateStats()).get();
|
|
|
|
if (context.statsEntity) {
|
|
auto stats = context.statsEntity->GetComponent<StatsComponent>();
|
|
if (stats) {
|
|
meterValue = stats->get().value;
|
|
}
|
|
}
|
|
|
|
context.entities = &entities;
|
|
|
|
for (auto &entity : entities) {
|
|
if (!entity) {
|
|
continue;
|
|
}
|
|
entity->SetContext(&context);
|
|
}
|
|
}
|
|
|
|
void GameplayScene::Exit() { entities.clear(); }
|
|
|
|
void GameplayScene::Update(float dt) { UpdateAllSystems(entities, dt); }
|
|
|
|
void GameplayScene::Draw() {
|
|
for (auto &entity : entities) {
|
|
if (!entity || entity->queuedForFree) {
|
|
continue;
|
|
}
|
|
auto render = entity->GetComponent<RenderComponent>();
|
|
if (render) {
|
|
render->get().Draw();
|
|
}
|
|
}
|
|
|
|
Scene::Draw();
|
|
}
|