feat: implement TickSystem for managing world ticks and initialize World constructor

Signed-off-by: szdytom <szdytom@qq.com>
This commit is contained in:
方而静 2025-08-05 16:09:37 +08:00
parent 998668802f
commit 0edb71385f
Signed by: szTom
GPG Key ID: 072D999D60C6473C
2 changed files with 43 additions and 0 deletions

View File

@ -2,17 +2,21 @@
#define ISTD_CORE_WORLD_H
#include "istd_core/room.h"
#include "tilemap/generation.h"
#include "tilemap/tilemap.h"
#include <vector>
namespace istd {
struct World {
std::uint32_t tick;
TileMap tilemap;
std::vector<std::vector<Room>> rooms;
entt::registry registry;
World(std::uint8_t size);
void generateTilemap(const GenerationConfig &config);
};
} // namespace istd

39
core/src/world.cpp Normal file
View File

@ -0,0 +1,39 @@
#include "istd_core/world.h"
#include "istd_core/system.h"
#include "tilemap/generation.h"
namespace istd {
namespace {
struct TickSystem : public System {
void tick(World &world) const noexcept override {
world.tick += 1;
}
std::string_view name() const noexcept override {
return "Tick System";
}
};
static const TickSystem tick_system;
static const SystemRegistry::Registar tick_registrar(
System::Precedence::Highest, &tick_system
);
} // namespace
World::World(std::uint8_t size)
: tick(0), tilemap(size), rooms(size, std::vector<Room>(size, {0, 0})) {
for (std::uint8_t x = 0; x < size; ++x) {
for (std::uint8_t y = 0; y < size; ++y) {
rooms[x][y] = {x, y};
}
}
}
void World::generateTilemap(const GenerationConfig &config) {
map_generate(tilemap, config);
}
} // namespace istd