feat: enhance physics and map modules with Box2D integration and documentation updates

- Updated the physics module to include Box2D support, enabling management of physics bodies and collision events.
- Enhanced the map module to support tile layers and improved hot-reload functionality for tilemaps.
- Updated documentation to reflect the new features in the physics and map systems, including usage examples and API references.
- Modified CMakeLists.txt to include new modules for physics and font management, ensuring proper build configurations.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
sunxfancyandCursor committed 2026-08-06 23:53:39 +08:00
1 parent 6ae6a778db
commit c19b8fda41
38 files changed
+3063 -40

No files matched your search

+94
View File
@@ -0,0 +1,94 @@
#include "map/Map.h"
#include "map/TileSystem.h"
#include "map/TileConfig.h"
#include "graphics/Graphics.h"
#include "common/Module.h"
#include <simplesquirrel/simplesquirrel.hpp>
namespace eve::map {
Module_IMPL(Map, new Map());
TileLayer *Map::newLayer(int mapW, int mapH, float tileW, float tileH) {
return TileLayer::createLayer(mapW, mapH, tileW, tileH);
}
TileLayer *Map::newLayerFromFile(const std::string &path) {
auto layers = loadMapFile(path, nullptr);
return layers.empty() ? nullptr : layers.front();
}
int Map::loadFromFile(const std::string &path) {
auto layers = loadMapFile(path, nullptr);
return int(layers.size());
}
void Map::update(float dt) {
(void)dt;
TileConfigSystem::poll();
}
void Map::render(graphics::Graphics *gfx) { TileRenderSystem::render(gfx); }
int Map::pollConfigs() { return TileConfigSystem::poll(); }
int Map::getLayerCount() const {
if (ecs::ComponentManager<TileLayer>::inst().registy == nullptr) return 0;
int n = 0;
auto view = ecs::View<TileLayer, TileLayer::Config>();
for (auto it = view.begin(); it != view.end(); ++it) ++n;
return n;
}
void Map::expose(ssq::Table &table) {
auto cls = table.addClass(name, Map::create, false);
expose(cls);
auto layer = table.addClass<TileLayer>(
"TileLayer", std::function<TileLayer *()>([]() -> TileLayer * { return nullptr; }), true);
layer.addFunc("setOrigin", &TileLayer::setOrigin);
layer.addFunc("getX", &TileLayer::getX);
layer.addFunc("getY", &TileLayer::getY);
layer.addFunc("getMapWidth", &TileLayer::getMapWidth);
layer.addFunc("getMapHeight", &TileLayer::getMapHeight);
layer.addFunc("getTileWidth", &TileLayer::getTileWidth);
layer.addFunc("getTileHeight", &TileLayer::getTileHeight);
layer.addFunc("setTileSize", &TileLayer::setTileSize);
layer.addFunc("resize", &TileLayer::resize);
layer.addFunc("setTile", &TileLayer::setTile);
layer.addFunc("getTile", &TileLayer::getTile);
layer.addFunc("fill", &TileLayer::fill);
layer.addFunc("clear", &TileLayer::clear);
layer.addFunc("setTileset", &TileLayer::setTileset);
layer.addFunc("setTilesetTileSize", &TileLayer::setTilesetTileSize);
layer.addFunc("getTilesetTexture", &TileLayer::getTilesetTexture);
layer.addFunc("getTilesetFirstGid", &TileLayer::getTilesetFirstGid);
layer.addFunc("getTilesetColumns", &TileLayer::getTilesetColumns);
layer.addFunc("setCanvas", &TileLayer::setCanvas);
layer.addFunc("setCamera", &TileLayer::setCamera);
layer.addFunc("setLayer", &TileLayer::setLayer);
layer.addFunc("getLayer", &TileLayer::getLayer);
layer.addFunc("setVisible", &TileLayer::setVisible);
layer.addFunc("isVisible", &TileLayer::isVisible);
layer.addFunc("setTint", &TileLayer::setTint);
layer.addFunc("applyConfig", &TileLayer::applyConfig);
layer.addFunc("loadConfig", &TileLayer::loadConfig);
layer.addFunc("reloadConfig", &TileLayer::reloadConfig);
layer.addFunc("setAutoReload", &TileLayer::setAutoReload);
layer.addFunc("getAutoReload", &TileLayer::getAutoReload);
layer.addFunc("getConfigPath", &TileLayer::getConfigPath);
}
void Map::expose(ssq::Class &cls) {
cls.addFunc("getName", &Map::getName);
cls.addFunc("newLayer", &Map::newLayer);
cls.addFunc("newLayerFromFile", &Map::newLayerFromFile);
cls.addFunc("loadFromFile", &Map::loadFromFile);
cls.addFunc("update", &Map::update);
cls.addFunc("render", &Map::render);
cls.addFunc("pollConfigs", &Map::pollConfigs);
cls.addFunc("getLayerCount", &Map::getLayerCount);
}
} // namespace eve::map