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.cpp
|
||||||
src/game/hexWorld/gameplay/TurnSystem.h
|
src/game/hexWorld/gameplay/TurnSystem.h
|
||||||
src/game/hexWorld/gameplay/TurnState.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
|
target_compile_options(Dicewars_Siedler PRIVATE
|
||||||
|
|||||||
@ -5,15 +5,35 @@
|
|||||||
#ifndef MODELCOMPONENT_H
|
#ifndef MODELCOMPONENT_H
|
||||||
#define MODELCOMPONENT_H
|
#define MODELCOMPONENT_H
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include "Component.h"
|
#include "Component.h"
|
||||||
|
#include "../../layer/entities/ModelStage.h"
|
||||||
#include "../../renderer/model/TexturedModel.h"
|
#include "../../renderer/model/TexturedModel.h"
|
||||||
|
|
||||||
|
|
||||||
class ModelComponent: public Component {
|
class ModelComponent: public Component {
|
||||||
public:
|
public:
|
||||||
std::shared_ptr<TexturedModel> model;
|
ModelComponent(const std::vector<ModelStage>& stages) : stages(stages) {};
|
||||||
ModelComponent(std::shared_ptr<TexturedModel> model) : model(std::move(model)) {};
|
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 transform = entityManager.getComponent<TransformComponent>(id);
|
||||||
auto model = entityManager.getComponent<ModelComponent>(id);
|
auto model = entityManager.getComponent<ModelComponent>(id);
|
||||||
|
model->updateStage();
|
||||||
auto tileRenderingComponent = entityManager.getComponent<TileRenderComponent>(id);
|
auto tileRenderingComponent = entityManager.getComponent<TileRenderComponent>(id);
|
||||||
|
|
||||||
if (!transform || !model) continue;
|
if (!transform || !model) continue;
|
||||||
@ -16,7 +17,7 @@ void RenderSystem::render(EntityManager &entityManager, MasterRenderer &renderer
|
|||||||
if (tileRenderingComponent) {
|
if (tileRenderingComponent) {
|
||||||
renderer.submitTerrainTile(transform, model, tileRenderingComponent);
|
renderer.submitTerrainTile(transform, model, tileRenderingComponent);
|
||||||
} else {
|
} 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));
|
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) {
|
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));
|
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 {
|
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);
|
return turn % static_cast<int>(getPlayerCount()) == static_cast<int>(playerID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user