#pragma once #include "flecs.h" #include struct Vector2 { Vector2() = default; Vector2(int32_t x, int32_t y): X{ x }, Y{ y } {}; int32_t X{}, Y{}; Vector2 operator+(const Vector2& other) const { return { X + other.X, Y + other.Y }; } Vector2 operator-(const Vector2& other) const { return { X - other.X, Y - other.Y }; } }; struct TilePosition { Vector2 Position; }; struct Bounds { Vector2 Min; Vector2 Max; }; struct Level { Level() = default; Level(uint8_t level) : Val{ level } {}; uint8_t Val; }; template > flecs::opaque std_vector_support(flecs::world& world) { return flecs::opaque() .as_type(world.vector()) .serialize([](const flecs::serializer *s, const Vector *data) { for (const auto& el : *data) s->value(el); return 0; }) .count([](const Vector *data) { return data->size(); }) .resize([](Vector *data, size_t size) { data->resize(size); }) .ensure_element([](Vector *data, size_t elem) { if (data->size() <= elem) data->resize(elem + 1); return &data->data()[elem]; }); } inline void Flecs_Misc(flecs::world& world) { world.component() .member("x") .member("y"); world.component() .member("Position"); world.component() .member("Min") .member("Max"); world.component() .member("Val"); }