diff options
Diffstat (limited to 'main.cpp')
-rw-r--r-- | main.cpp | 69 |
1 files changed, 47 insertions, 22 deletions
@@ -6,36 +6,66 @@ #include "window.hpp" #include <chrono> +#include <fstream> #include <iostream> #include <thread> #include <entt/entt.hpp> +#include <sol/sol.hpp> #include <SDL2/SDL.h> constexpr std::chrono::microseconds FRAME_TIME (1'000'000 / 60); static bool handleInputs(entt::registry& registry); -int main() +int main(int argc, const char *argv[]) { + entt::registry registry; + sol::state lua; + if (auto err = sdl2Initialize(); err) return err; - entt::registry registry; + for (int i = 1; i < argc; ++i) + lua.script_file(argv[i]); - { - const auto ent = registry.create(); - registry.emplace<Player>(ent); - registry.emplace<Point>(ent, 0.f, WINDOW_HEIGHT - 200.f); - registry.emplace<Velocity>(ent, 0.f, 0.f); - registry.emplace<Texture>(ent, "img/player.png"); - } + sol::optional<sol::table> entities = lua["entities"]; + if (entities) { + entities->for_each([®istry](sol::object _, sol::object val) { + const auto ent = registry.create(); + auto tbl = val.as<sol::table>(); - { - const auto ent = registry.create(); - registry.emplace<Point>(ent, 0.f, 0.f); - registry.emplace<Texture>(ent, "img/level.png"); - registry.emplace<Solid>(ent, "img/level.png"); + sol::optional<std::string> solid = tbl["solid"]; + if (solid) { + registry.emplace<Solid>(ent, solid->c_str()); + } + + sol::optional<std::string> texture = tbl["texture"]; + if (texture) { + registry.emplace<Texture>(ent, texture->c_str()); + } + + sol::optional<sol::table> point = tbl["point"]; + if (point) { + registry.emplace<Point>(ent, + static_cast<float>((*point)["x"]), + static_cast<float>((*point)["y"])); + } + + sol::optional<sol::table> velocity = tbl["velocity"]; + if (velocity) { + registry.emplace<Velocity>(ent, + static_cast<float>((*velocity)["x"]), + static_cast<float>((*velocity)["y"])); + } + + sol::optional<sol::table> player = tbl["player"]; + if (player) { + registry.emplace<Player>(ent); + } + }); + } else { + std::cout << "No entities defined..." << std::endl; } do { @@ -50,14 +80,9 @@ int main() registry.view<Solid, Point>().each( [®istry](auto& s, auto& p) { registry.view<Player, Point, Velocity, Texture>().each( - [&s, &p](auto& _, auto& pp, auto& pv, auto& t) { - const auto c = s.collision(pp + t.dim()); - - if (c) { - if (std::abs(c) > 1.f) - pv.y = c * 0.5f; - else - pv.y = 0.f; + [&s, &p](auto& _, auto& pp, auto& pv, auto& pt) { + if (const auto c = s.collision(pp + pt.dim()); c) { + pv.y = (std::abs(c) > 1.f) ? c * 0.25f : 0.f; } else { pv.y += 0.1f; } |