#pragma once

#include <kernel/front/props/PropsPlayable.hpp>
#include <game/back/GameObject.hpp>
#include <game/back/object/Level.hpp>

namespace megu::game {
    class Player : public kernel::PropsPlayable, public GameProps {
        public:
            Player(float x, float y, float w, float h, std::filesystem::path &);

            void move(float, float);

            void setup(kernel::Kernel &, Level &) override;
            void destroy(kernel::Kernel &, Level &) override;

            void apply(kernel::Kernel &) override;

            void on(const kernel::Prop &, const Event &) override;
            std::optional<Event> on() const override;

            void onDamage(const Event &);
            void onSolide(const kernel::Prop &); 

            kernel::Movable & getPhysic() {return this->_movable;}
            kernel::Sprite & getGraphic() {return this->_sprite;}

        private:
            kernel::Sprite _sprite;
            kernel::Movable _movable;
    };
}