#pragma once #include "dinkyecs.hpp" #include "components.hpp" #include "config.hpp" #include "dinky_components.hpp" #include "point.hpp" #include #include namespace components { struct Player { DinkyECS::Entity entity; }; struct Position { Point location; }; struct Motion { int dx; int dy; bool random=false; }; struct Loot { int amount; }; struct Tile { std::string display; std::array foreground; std::array background; }; struct GameConfig { Config game; Config enemies; Config items; Config tiles; Config devices; }; struct EnemyConfig { int hearing_distance = 10; }; struct Debug { bool PATHS=false; bool LIGHT=false; bool FPS=false; }; struct Weapon { int damage = 0; }; struct Curative { int hp = 10; }; struct Combat { int hp; int max_hp; int damage; /* NOTE: This is used to _mark_ entities as dead, to detect ones that have just died. Don't make attack automatically set it.*/ bool dead = false; int attack(Combat &target); }; struct LightSource { int strength = 0; float radius = 1.0f; }; struct Device { json config; std::vector events; void configure_events(std::vector &event_names); }; struct Sprite { string name; }; struct Animation { float scale = 0.0f; bool simple = true; int frames = 10; int current = 0; void step(sf::Vector2f& scale_out, sf::IntRect& rect_out) { if(current < frames) { scale_out.x += scale; scale_out.y += scale; current++; } (void) rect_out; } }; void configure(ComponentMap& component_map); // these need to be here if you're using components::convert outside of components.cpp ENROLL_COMPONENT(Tile, display, foreground, background); }