ADD: Basic StageSystem
This commit is contained in:
parent
ce2858534f
commit
150fbca06c
@ -171,6 +171,10 @@ add_executable(Dicewars_Siedler src/main.cpp
|
||||
src/game/hexWorld/gameplay/TurnSystem.cpp
|
||||
src/game/hexWorld/gameplay/TurnSystem.h
|
||||
src/game/hexWorld/gameplay/TurnState.h
|
||||
src/engine/layer/entities/ModelState.cpp
|
||||
src/engine/layer/entities/ModelState.h
|
||||
src/engine/layer/entities/ModelStage.cpp
|
||||
src/engine/layer/entities/ModelStage.h
|
||||
)
|
||||
|
||||
target_compile_options(Dicewars_Siedler PRIVATE
|
||||
|
||||
@ -5,15 +5,35 @@
|
||||
#ifndef MODELCOMPONENT_H
|
||||
#define MODELCOMPONENT_H
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "Component.h"
|
||||
#include "../../layer/entities/ModelStage.h"
|
||||
#include "../../renderer/model/TexturedModel.h"
|
||||
|
||||
|
||||
class ModelComponent: public Component {
|
||||
public:
|
||||
std::shared_ptr<TexturedModel> model;
|
||||
ModelComponent(std::shared_ptr<TexturedModel> model) : model(std::move(model)) {};
|
||||
ModelComponent(const std::vector<ModelStage>& stages) : stages(stages) {};
|
||||
ModelComponent(std::shared_ptr<TexturedModel> model) {
|
||||
activeModel = std::move(model);
|
||||
}
|
||||
|
||||
void updateStage() {
|
||||
for (const auto& stage : stages) {
|
||||
if (stage.isActive()) {
|
||||
activeModel = stage.model;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[[nodiscard]] std::shared_ptr<TexturedModel> getActiveModel() const {
|
||||
return activeModel;
|
||||
}
|
||||
private:
|
||||
std::vector<ModelStage> stages;
|
||||
std::shared_ptr<TexturedModel> activeModel;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@ -9,6 +9,7 @@ void RenderSystem::render(EntityManager &entityManager, MasterRenderer &renderer
|
||||
|
||||
auto transform = entityManager.getComponent<TransformComponent>(id);
|
||||
auto model = entityManager.getComponent<ModelComponent>(id);
|
||||
model->updateStage();
|
||||
auto tileRenderingComponent = entityManager.getComponent<TileRenderComponent>(id);
|
||||
|
||||
if (!transform || !model) continue;
|
||||
@ -16,7 +17,7 @@ void RenderSystem::render(EntityManager &entityManager, MasterRenderer &renderer
|
||||
if (tileRenderingComponent) {
|
||||
renderer.submitTerrainTile(transform, model, tileRenderingComponent);
|
||||
} else {
|
||||
Entity entity = Entity(model->model, transform->position, transform->rotation.x, transform->rotation.y, transform->rotation.z, transform->scale);
|
||||
Entity entity = Entity(model->getActiveModel(), transform->position, transform->rotation.x, transform->rotation.y, transform->rotation.z, transform->scale);
|
||||
renderer.submitEntity(std::make_unique<Entity>(entity));
|
||||
}
|
||||
|
||||
|
||||
5
src/engine/layer/entities/ModelStage.cpp
Normal file
5
src/engine/layer/entities/ModelStage.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by sebastian on 13.02.26.
|
||||
//
|
||||
|
||||
#include "ModelStage.h"
|
||||
22
src/engine/layer/entities/ModelStage.h
Normal file
22
src/engine/layer/entities/ModelStage.h
Normal file
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by sebastian on 13.02.26.
|
||||
//
|
||||
|
||||
#ifndef DICEWARS_SIEDLER_MODELSTAGE_H
|
||||
#define DICEWARS_SIEDLER_MODELSTAGE_H
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
#include "../../renderer/model/TexturedModel.h"
|
||||
|
||||
|
||||
class ModelStage {
|
||||
public:
|
||||
std::string name;
|
||||
std::shared_ptr<TexturedModel> model;
|
||||
// Trigger-Funktion: Gibt true zurück, wenn dieser State aktiv sein sollte
|
||||
std::function<bool()> isActive;
|
||||
};
|
||||
|
||||
|
||||
#endif //DICEWARS_SIEDLER_MODELSTAGE_H
|
||||
5
src/engine/layer/entities/ModelState.cpp
Normal file
5
src/engine/layer/entities/ModelState.cpp
Normal file
@ -0,0 +1,5 @@
|
||||
//
|
||||
// Created by sebastian on 13.02.26.
|
||||
//
|
||||
|
||||
#include "ModelState.h"
|
||||
22
src/engine/layer/entities/ModelState.h
Normal file
22
src/engine/layer/entities/ModelState.h
Normal file
@ -0,0 +1,22 @@
|
||||
//
|
||||
// Created by sebastian on 13.02.26.
|
||||
//
|
||||
|
||||
#ifndef DICEWARS_SIEDLER_MODELSTATE_H
|
||||
#define DICEWARS_SIEDLER_MODELSTATE_H
|
||||
#include <functional>
|
||||
#include <string>
|
||||
|
||||
|
||||
class ModelState {
|
||||
public:
|
||||
std::string name;
|
||||
std::string modelPath;
|
||||
std::string texturePath;
|
||||
|
||||
// Trigger-Function: Returns true when this state should be active
|
||||
std::function<bool()> isActive;
|
||||
};
|
||||
|
||||
|
||||
#endif //DICEWARS_SIEDLER_MODELSTATE_H
|
||||
@ -33,7 +33,7 @@ void MasterRenderer::submitEntity(std::unique_ptr<Entity> entity) {
|
||||
|
||||
void MasterRenderer::submitTerrainTile(std::shared_ptr<TransformComponent> transform, std::shared_ptr<ModelComponent> model, std::shared_ptr<TileRenderComponent> terrainTileComponent) {
|
||||
TerrainRenderingData terrain = TerrainRenderingData(std::move(transform), std::move(model), std::move(terrainTileComponent));
|
||||
terrainTiles[terrain.modelComponent->model.get()].push_back(std::make_unique<TerrainRenderingData>(std::move(terrain)));
|
||||
terrainTiles[terrain.modelComponent->getActiveModel().get()].push_back(std::make_unique<TerrainRenderingData>(std::move(terrain)));
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -72,7 +72,6 @@ size_t GameMode::getPlayerCount() const {
|
||||
}
|
||||
|
||||
bool GameMode::hasTurn(PlayerID playerID, int turn) const {
|
||||
printf("Turn: %d, PlayerCount: %lu, playerID: %u\n, Modulo Result: %lu", turn, getPlayerCount(), playerID, turn % getPlayerCount());
|
||||
return turn % static_cast<int>(getPlayerCount()) == static_cast<int>(playerID);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user