#pragma once
#include "components.hpp"
#include "levelmanager.hpp"


namespace System {
  using namespace components;

  void lighting(GameLevel &level);
  void motion(GameLevel &level);
  void collision(GameLevel &level);
  void death(GameLevel &level, components::ComponentMap& components);
  void generate_paths(GameLevel &level);
  void enemy_pathing(GameLevel &level);
  void enemy_ai_initialize(GameLevel &level);

  void init_positions(DinkyECS::World &world, SpatialMap &collider);
  void device(DinkyECS::World &world, DinkyECS::Entity actor, DinkyECS::Entity item);
  void plan_motion(DinkyECS::World& world, Point move_to);
  std::wstring draw_map(GameLevel level, size_t view_x, size_t view_y, int compass_dir);

  void enemy_ai(GameLevel &level);
  void combat(GameLevel &level, int attack_id);

  std::shared_ptr<sf::Shader> sprite_effect(GameLevel &level, DinkyECS::Entity entity);
  void player_status(GameLevel &level);

}
