From 2a0fa130f3ed26eeca12cd7587779040454aed7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Th=C3=A9au?= <theau.baton@etu.univ-amu.fr>
Date: Tue, 14 Jan 2025 23:38:30 +0100
Subject: [PATCH] Changing Props -> BasicProps

---
 assets/tilemap.png                            | Bin 4547 -> 4985 bytes
 .../graphics/front/object/TileArray.cpp       |   4 +-
 .../graphics/front/object/TileArray.hpp       |   2 +-
 source/game/Game.cpp                          |   7 ---
 source/game/back/GameObject.hpp               |   9 ++++
 source/game/back/message/Receiver.hpp         |  17 +++++++
 source/game/back/object/Terrain.hpp           |  14 ++++++
 source/game/object/Test.cpp                   |  43 +++++++++++++++---
 source/game/object/Test.hpp                   |   8 ++--
 .../back/{props => component}/Component.hpp   |   0
 .../back/{props => component}/Graphical.hpp   |   1 +
 .../back/{props => component}/Physical.hpp    |   4 +-
 source/kernel/back/engine/GraphicEngine.hpp   |   2 +-
 source/kernel/back/engine/PhysicEngine.hpp    |   2 +-
 source/kernel/back/props/Props.hpp            |  17 -------
 source/kernel/front/Kernel.cpp                |   2 +-
 source/kernel/front/Kernel.hpp                |  15 +++---
 .../kernel/front/component/graphic/Sprite.hpp |   2 +-
 .../front/component/graphic/TileMap.cpp       |  34 ++++++++++----
 .../front/component/graphic/TileMap.hpp       |  16 ++++---
 .../kernel/front/component/physic/Fixed.hpp   |   2 +-
 .../front/component/physic/FixedArray.cpp     |   6 +++
 .../front/component/physic/FixedArray.hpp     |   6 ++-
 .../kernel/front/component/physic/Movable.hpp |   2 +-
 source/kernel/front/props/Props.hpp           |  23 ++++++++++
 source/kernel/front/props/PropsDynamic.cpp    |   6 +++
 source/kernel/front/props/PropsDynamic.hpp    |  19 ++++++++
 source/kernel/front/props/PropsStatic.cpp     |   6 +++
 source/kernel/front/props/PropsStatic.hpp     |  19 ++++++++
 source/kernel/front/props/PropsTileMap.cpp    |   7 +++
 source/kernel/front/props/PropsTileMap.hpp    |  19 ++++++++
 .../kernel/front/resolver/GraphicResolver.hpp |   5 +-
 .../kernel/front/resolver/PhysicResolver.hpp  |   4 +-
 source/kernel/front/resolver/Resolver.hpp     |   4 +-
 34 files changed, 252 insertions(+), 75 deletions(-)
 create mode 100644 source/game/back/GameObject.hpp
 create mode 100644 source/game/back/message/Receiver.hpp
 create mode 100644 source/game/back/object/Terrain.hpp
 rename source/kernel/back/{props => component}/Component.hpp (100%)
 rename source/kernel/back/{props => component}/Graphical.hpp (94%)
 rename source/kernel/back/{props => component}/Physical.hpp (100%)
 delete mode 100644 source/kernel/back/props/Props.hpp
 create mode 100644 source/kernel/front/props/Props.hpp
 create mode 100644 source/kernel/front/props/PropsDynamic.cpp
 create mode 100644 source/kernel/front/props/PropsDynamic.hpp
 create mode 100644 source/kernel/front/props/PropsStatic.cpp
 create mode 100644 source/kernel/front/props/PropsStatic.hpp
 create mode 100644 source/kernel/front/props/PropsTileMap.cpp
 create mode 100644 source/kernel/front/props/PropsTileMap.hpp

diff --git a/assets/tilemap.png b/assets/tilemap.png
index b336765460a48008cfa66ca7a72ecdc290c9aa51..49ffb3925e40fe5195012608f088696ccd8bd4de 100644
GIT binary patch
delta 4957
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
G5}E+_Lzkfd

delta 4516
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
Ceyw2u

diff --git a/source/engine/graphics/front/object/TileArray.cpp b/source/engine/graphics/front/object/TileArray.cpp
index 9e1d431..475635b 100644
--- a/source/engine/graphics/front/object/TileArray.cpp
+++ b/source/engine/graphics/front/object/TileArray.cpp
@@ -3,7 +3,7 @@
 #include <iostream>
 
 namespace megu {
-    TileArray::TileArray(const std::filesystem::path & path, size_t width, size_t height, float size)
+    TileArray::TileArray(const std::filesystem::path & path, size_t width, size_t height, float size, size_t lenght)
     : _width(width), _height(height), _size(size) {
         megu::TextureBuffer buffer(path);
         this->_texture.store(buffer);
@@ -14,7 +14,7 @@ namespace megu {
         for(size_t x = 0; x < width; ++x) {
             std::vector<glm::vec4> rows;
             for(size_t y = 0; y < height; ++y) {
-                rows.push_back({0.f, 0.f, twidth, theight});
+                rows.push_back({0.f, this->_texture.height() - lenght, lenght, lenght});
             }
             this->_uvs.push_back(rows);
         }
diff --git a/source/engine/graphics/front/object/TileArray.hpp b/source/engine/graphics/front/object/TileArray.hpp
index 94e66b7..c4191dc 100644
--- a/source/engine/graphics/front/object/TileArray.hpp
+++ b/source/engine/graphics/front/object/TileArray.hpp
@@ -13,7 +13,7 @@
 namespace megu {
     class TileArray : public Quads {
         public:
-            TileArray(const std::filesystem::path &, size_t, size_t, float);
+            TileArray(const std::filesystem::path &, size_t, size_t, float, size_t);
 
             inline void setPosition(const Vec2 & pos)   {this->_transformation.setPosition(pos.x, pos.y);}
             inline void setOrigine(const Vec2 & pos)    {this->_transformation.setOrigine(pos.x, pos.y);}
diff --git a/source/game/Game.cpp b/source/game/Game.cpp
index b9c38e1..65d0899 100644
--- a/source/game/Game.cpp
+++ b/source/game/Game.cpp
@@ -20,16 +20,9 @@ namespace megu::game {
             FrameCounter counter;
 
             kernel::Kernel kernel(window);
-
-            /* object */
             auto path = std::filesystem::path("assets/textures/Neera.png");
             megu::game::Object object(path);
             kernel.add(&object);
-            
-            /*megu::game::Object object2(path);
-            object2.tmp_setPos(20, 0);
-            kernel.add(&object2);*/
-            /* ------ */
 
             while(window.isOpen()) {
                 counter.count(Window::Time());
diff --git a/source/game/back/GameObject.hpp b/source/game/back/GameObject.hpp
new file mode 100644
index 0000000..a2c7fd7
--- /dev/null
+++ b/source/game/back/GameObject.hpp
@@ -0,0 +1,9 @@
+#pragma once
+
+namespace megu::game {
+    class GameObject {
+        public:
+            virtual void setup() = 0;
+            virtual void destroy() = 0;
+    };
+}
\ No newline at end of file
diff --git a/source/game/back/message/Receiver.hpp b/source/game/back/message/Receiver.hpp
new file mode 100644
index 0000000..326864a
--- /dev/null
+++ b/source/game/back/message/Receiver.hpp
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <game/back/GameObject.hpp>
+
+namespace megu::game {
+    class Message;
+
+    class Collider : public GameObject {
+        public:
+            Collider<>
+
+            virtual void setup();
+
+            virtual void on(Message &);
+            virtual Message make()
+    };
+}
\ No newline at end of file
diff --git a/source/game/back/object/Terrain.hpp b/source/game/back/object/Terrain.hpp
new file mode 100644
index 0000000..0058a3c
--- /dev/null
+++ b/source/game/back/object/Terrain.hpp
@@ -0,0 +1,14 @@
+#pragma once
+
+#include <kernel/front/props/PropsTileMap.hpp>
+
+namespace megu::game {
+    class Terrain : public kernel::PropsTileMap {
+        public:
+            Terrain(float, float);
+
+        private:
+            kernel::Tilemap _graphicMap;
+            kernel::FixedArray _solidMap;
+    };
+}
\ No newline at end of file
diff --git a/source/game/object/Test.cpp b/source/game/object/Test.cpp
index f2c6e96..8433087 100644
--- a/source/game/object/Test.cpp
+++ b/source/game/object/Test.cpp
@@ -2,16 +2,45 @@
 
 namespace megu::game {
     Object::Object(std::filesystem::path & path)
-    : _physic(0, 0, 64, 64), _graphic(path), _map("assets/tilemap.png", 2, 2, 16.f, 16) {
+    : _physic(0, 0, 64, 64), _graphic(path), _map("assets/tilemap.png", 8, 8, 8.f, 16, 0.125) {
         this->_graphic.setFrame({0.f, 0.f, 51.f, 98.f});
         this->_graphic.setSize({51.f, 98.f});
 
-        this->_map.setValue(0, 0, 1);
-        this->_map.setValue(1, 0, 2);
-        this->_map.setValue(0, 1, 1);
-        this->_map.setValue(1, 1, 1);
+        size_t tab[8][8] = {
+            {44,  45,  44,  47, 2, 1, 1, 1},
+            {45,  45,  44,  47, 1, 1, 1, 1},
+            {45,  44,  44,  47, 1, 1, 1, 1},
+            {22,  22,  22,  23, 1, 1, 2, 1},
+            {28,  28,  28,  29, 1, 1, 1, 1},
+            { 1,   2,   1,   1, 1, 1, 1, 1},
+            { 1,   2,   1,   1, 1, 1, 1, 1},
+            { 1,   1,   1,   2, 1, 1, 1, 1}
+        };
 
-        this->_map.addAnimation(0, 1, {18, 19, 20, 21});
-        this->_map.addAnimation(1, 1, {18, 19, 20, 21});
+        for(size_t i = 0; i < 8; ++i) {
+            for(size_t j = 0; j < 8; ++j) {
+                this->_map.setValue(j, i, tab[i][j]);
+            }
+        }
+
+        this->_map.addAnimation(0, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(1, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(2, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(3, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(4, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(5, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(6, 6, {18, 18, 20, 21});
+        this->_map.addAnimation(7, 6, {18, 18, 20, 21});
+
+        this->_map.addAnimation(0, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(1, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(2, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(3, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(4, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(5, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(6, 7, {24, 25, 26, 27});
+        this->_map.addAnimation(7, 7, {24, 25, 26, 27});
+
+        this->_map.setSize({360 / 8, 360 / 8});
     }
 }
\ No newline at end of file
diff --git a/source/game/object/Test.hpp b/source/game/object/Test.hpp
index cd3854e..a7b123f 100644
--- a/source/game/object/Test.hpp
+++ b/source/game/object/Test.hpp
@@ -1,17 +1,17 @@
 #pragma once
 
-#include <kernel/back/props/Props.hpp>
+#include <kernel/front/props/Props.hpp>
 #include <kernel/front/component/physic/Fixed.hpp>
 #include <kernel/front/component/graphic/Sprite.hpp>
 #include <kernel/front/component/graphic/TileMap.hpp>
 
 namespace megu::game {
-    class Object : public kernel::Props {
+    class Object : public kernel::Prop {
         public:
             Object(std::filesystem::path &);
 
-            inline kernel::Physical<kernel::PhysicEngine> * getPhysicComponent() override {return &this->_physic;}
-            inline kernel::Graphical<kernel::GraphicEngine> * getGraphicComponent() override {return &this->_map;}
+            inline kernel::Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;}
+            inline kernel::Prop::Graphical_Component * getGraphicComponent() override {return &this->_map;}
 
         private:
             kernel::Fixed _physic;
diff --git a/source/kernel/back/props/Component.hpp b/source/kernel/back/component/Component.hpp
similarity index 100%
rename from source/kernel/back/props/Component.hpp
rename to source/kernel/back/component/Component.hpp
diff --git a/source/kernel/back/props/Graphical.hpp b/source/kernel/back/component/Graphical.hpp
similarity index 94%
rename from source/kernel/back/props/Graphical.hpp
rename to source/kernel/back/component/Graphical.hpp
index 432e580..0354e05 100644
--- a/source/kernel/back/props/Graphical.hpp
+++ b/source/kernel/back/component/Graphical.hpp
@@ -1,6 +1,7 @@
 #pragma once
 
 #include "Component.hpp"
+#include <engine/utility/Priority.hpp>
 
 namespace megu::kernel {
     template <class Ge>
diff --git a/source/kernel/back/props/Physical.hpp b/source/kernel/back/component/Physical.hpp
similarity index 100%
rename from source/kernel/back/props/Physical.hpp
rename to source/kernel/back/component/Physical.hpp
index 92d17ce..23028af 100644
--- a/source/kernel/back/props/Physical.hpp
+++ b/source/kernel/back/component/Physical.hpp
@@ -1,8 +1,8 @@
 #pragma once
 
-#include <functional>
-
 #include "Component.hpp"
+
+#include <functional>
 #include <utility/Identifiable.hpp>
 
 namespace megu::kernel {
diff --git a/source/kernel/back/engine/GraphicEngine.hpp b/source/kernel/back/engine/GraphicEngine.hpp
index 41d8546..d0d9811 100644
--- a/source/kernel/back/engine/GraphicEngine.hpp
+++ b/source/kernel/back/engine/GraphicEngine.hpp
@@ -10,7 +10,7 @@
 #include <engine/graphics/front/module/TileArray_Module.hpp>
 #include <engine/graphics/front/object/TileArray.hpp>
 
-#include <kernel/back/props/Graphical.hpp>
+#include <kernel/back/component/Graphical.hpp>
 
 namespace megu::kernel {
     class GraphicEngine : public Engine<megu::GraphicEngine, Graphical<GraphicEngine>, Renderable> {
diff --git a/source/kernel/back/engine/PhysicEngine.hpp b/source/kernel/back/engine/PhysicEngine.hpp
index 38919d9..7a7f441 100644
--- a/source/kernel/back/engine/PhysicEngine.hpp
+++ b/source/kernel/back/engine/PhysicEngine.hpp
@@ -3,7 +3,7 @@
 #include "Engine.hpp"
 
 #include <engine/physic/front/engine/Engine.hpp>
-#include <kernel/back/props/Physical.hpp>
+#include <kernel/back/component/Physical.hpp>
 
 namespace megu::kernel {
     class PhysicEngine : public Engine<megu::PhysicEngine, Physical<PhysicEngine>, Tangible> {
diff --git a/source/kernel/back/props/Props.hpp b/source/kernel/back/props/Props.hpp
deleted file mode 100644
index 80dbe58..0000000
--- a/source/kernel/back/props/Props.hpp
+++ /dev/null
@@ -1,17 +0,0 @@
-#pragma once
-
-#include <kernel/back/engine/GraphicEngine.hpp>
-#include <kernel/back/engine/PhysicEngine.hpp>
-#include <utility/Identifiable.hpp>
-
-#include "Physical.hpp"
-#include "Graphical.hpp"
-
-namespace megu::kernel {
-    class Props : public Identifiable {
-        public:
-            virtual Physical<PhysicEngine> * getPhysicComponent() = 0;
-            virtual Graphical<GraphicEngine> * getGraphicComponent() = 0;
-            
-    };
-}
\ No newline at end of file
diff --git a/source/kernel/front/Kernel.cpp b/source/kernel/front/Kernel.cpp
index 84cd925..e0a917b 100644
--- a/source/kernel/front/Kernel.cpp
+++ b/source/kernel/front/Kernel.cpp
@@ -24,7 +24,7 @@ namespace megu::kernel {
         this->_pResolver.resolve(*this, this->_pEngine, time);
     }
 
-    void Kernel::add(Props * props) {
+    void Kernel::add(Prop * props) {
         this->_props[props->id()] = props;
         auto * pComponent = props->getPhysicComponent();
         if(pComponent != nullptr) {
diff --git a/source/kernel/front/Kernel.hpp b/source/kernel/front/Kernel.hpp
index 6a89a50..f6b7b7a 100644
--- a/source/kernel/front/Kernel.hpp
+++ b/source/kernel/front/Kernel.hpp
@@ -4,23 +4,24 @@
 
 #include <engine/io/Window.hpp>
 
-#include <kernel/back/engine/PhysicEngine.hpp>
-#include <kernel/back/engine/GraphicEngine.hpp>
-#include <kernel/back/props/Props.hpp>
+#include <kernel/front/props/Props.hpp>
 
-#include "resolver/PhysicResolver.hpp"
 #include "resolver/GraphicResolver.hpp"
+#include "resolver/PhysicResolver.hpp"
 
 namespace megu::kernel {
+    class PhysicResolver;
+    class GraphicResolver;
+
     class Kernel {
         public:
             Kernel(Window &);
            ~Kernel();
 
             void step();
-            void add(Props *);
+            void add(Prop *);
 
-            inline Identifiable_Map<Props> & props() {return this->_props;}
+            inline Identifiable_Map<Prop> & props() {return this->_props;}
 
             inline PhysicEngine & getPhysicEngine() {return this->_pEngine;}
             inline GraphicEngine & getGraphicEngine() {return this->_gEngine;}
@@ -31,7 +32,7 @@ namespace megu::kernel {
             PhysicEngine _pEngine; 
             GraphicEngine _gEngine;
 
-            Identifiable_Map<Props> _props;
+            Identifiable_Map<Prop> _props;
             PhysicResolver _pResolver;
             GraphicResolver _gResolver;
     };
diff --git a/source/kernel/front/component/graphic/Sprite.hpp b/source/kernel/front/component/graphic/Sprite.hpp
index fbc9f16..5d1420f 100644
--- a/source/kernel/front/component/graphic/Sprite.hpp
+++ b/source/kernel/front/component/graphic/Sprite.hpp
@@ -5,7 +5,7 @@
 #include <chrono>
 
 #include <kernel/back/engine/GraphicEngine.hpp>
-#include <kernel/back/props/Graphical.hpp>
+#include <kernel/back/component/Graphical.hpp>
 #include <kernel/back/linker/GraphicLinker.hpp>
 
 #include <engine/utility/ref_set.hpp>
diff --git a/source/kernel/front/component/graphic/TileMap.cpp b/source/kernel/front/component/graphic/TileMap.cpp
index 252c86f..83cd774 100644
--- a/source/kernel/front/component/graphic/TileMap.cpp
+++ b/source/kernel/front/component/graphic/TileMap.cpp
@@ -4,14 +4,17 @@ namespace megu::kernel {
     UniqueGraphicLinker<TileArray> Tilemap::_Linker = UniqueGraphicLinker<TileArray>();
 
     Tilemap::Tilemap(const std::filesystem::path & path, size_t width, size_t height, float size, size_t lenght, double aUpdate) 
-    : TileArray(path, width , height, size), _tileSize(lenght), _duration(aUpdate) {
+    : TileArray(path, width , height, size, lenght), _tileSize(lenght), _duration(aUpdate) {
         if(lenght % width != 0 && lenght % height != 0) {
             throw std::runtime_error("Tilemap dimension not matching tiles size.");
         }
 
-        for(size_t x = 0; x < this->texture().width() - this->_tileSize*2; x += this->_tileSize) {
-            for(size_t y = 0; y < this->texture().height() - this->_tileSize*2; y += this->_tileSize) {
-                this->_tilesPosition.push_back({y, x});
+        size_t tileWidth = this->texture().width() / this->_tileSize;
+        size_t tileHeight = this->texture().height() / this->_tileSize;
+        
+        for(size_t y = 0; y < tileHeight; ++y) {
+            for(size_t x = 0; x < tileWidth; ++x) {
+                this->_tilesPosition.push_back({x * this->_tileSize, y * this->_tileSize});
             }
         }
         
@@ -28,10 +31,19 @@ namespace megu::kernel {
            Tilemap::_Linker.setModule(new TileArray_Module{});
         }
 
-        this->setSize({width * size, height * size});
+        //this->setSize({width * size, height * size});
     }
 
     void Tilemap::setValue(size_t x, size_t y, size_t value) {
+        if(this->width() <= x || this->height() <= y) {
+            throw std::runtime_error("Set Tilemap coords out of range.");
+        }
+
+        if(value >= this->_tilesPosition.size()) {
+            std::cerr << value << " for " << this->_tilesPosition.size() << std::endl;
+            throw std::runtime_error("Set Tilemap value out of range.");
+        }
+
         TilePosition position = this->_tilesPosition[value];
         glm::vec4 uv = {position.x, 
                         this->texture().height()  - position.y - this->_tileSize, 
@@ -42,7 +54,12 @@ namespace megu::kernel {
         this->_tilesValue[x][y] = value;
     }
 
-    size_t Tilemap::getValue(size_t x, size_t y) {
+    size_t Tilemap::getValue(size_t x, size_t y) const {
+        TilePosition position = {x, y};
+        if(this->_animations.contains(position)) {
+            return this->_animations.at(position).first.at(this->_animations.at(position).second);
+        }
+
         if(this->_tilesValue.size() > x && this->_tilesValue[x].size() > y) {
             return this->_tilesValue[x][y];
         }
@@ -50,7 +67,9 @@ namespace megu::kernel {
     }
 
     void Tilemap::addAnimation(size_t x, size_t y, const std::vector<size_t> & ids) {
-        this->_animations[{x, y}] = std::pair<std::vector<size_t>, size_t>(ids, 0);
+        if(x < this->width() && y < this->height()) {
+            this->_animations[{x, y}] = std::pair<std::vector<size_t>, size_t>(ids, 0);
+        }
     }
 
     void Tilemap::removeAnimation(size_t x, size_t y) {
@@ -58,7 +77,6 @@ namespace megu::kernel {
     }
 
     void Tilemap::update(double time) {
-        //... Peut-être des tiles animées si j'ai le temps 🙌 (spoiler non).
         if(this->_previous == 0.0) {
             this->_previous = time;
         }
diff --git a/source/kernel/front/component/graphic/TileMap.hpp b/source/kernel/front/component/graphic/TileMap.hpp
index 39f43c8..bdbc02b 100644
--- a/source/kernel/front/component/graphic/TileMap.hpp
+++ b/source/kernel/front/component/graphic/TileMap.hpp
@@ -4,7 +4,7 @@
 #include <vector>
 
 #include <kernel/back/engine/GraphicEngine.hpp>
-#include <kernel/back/props/Graphical.hpp>
+#include <kernel/back/component/Graphical.hpp>
 #include <kernel/back/linker/UniqueLinker.hpp>
 
 #include <engine/graphics/front/object/TileArray.hpp>
@@ -17,29 +17,31 @@ namespace megu::kernel {
                 size_t x = 0;
                 size_t y = 0;
 
-                friend bool operator<(const TilePosition & p1, const TilePosition & p2) {
-                    if(p1.x == p2.x) {
-                        return p1.y < p2.y;
+                bool operator<(const TilePosition & p) const {
+                    if(this->x == p.x) {
+                        return this->y < p.y;
                     }
-                    return p1.x < p1.y;
+                    return this->y < p.y;
                 }
             };
 
             Tilemap(const std::filesystem::path &, size_t, size_t, float, size_t, double = 0.1);
 
             void setValue(size_t, size_t, size_t);
-            size_t getValue(size_t, size_t);
+            size_t getValue(size_t, size_t) const;
 
             void addAnimation(size_t, size_t, const std::vector<size_t> &);
             void removeAnimation(size_t, size_t);
 
+            const std::map<TilePosition, std::pair<std::vector<size_t>, size_t>, reference_sorter<TilePosition>> & animation() const {return this->_animations;}
+
             void update(double) override;
             void apply(Kernel &, GraphicEngine &) override;
 
         private:
             std::vector<TilePosition> _tilesPosition;
             std::vector<std::vector<size_t>> _tilesValue;
-            std::map<TilePosition, std::pair<std::vector<size_t>, size_t>> _animations;
+            std::map<TilePosition, std::pair<std::vector<size_t>, size_t>, reference_sorter<TilePosition>> _animations;
             TileArray_Module _module;
             size_t _tileSize;
             double _duration;
diff --git a/source/kernel/front/component/physic/Fixed.hpp b/source/kernel/front/component/physic/Fixed.hpp
index 9439be8..14e086b 100644
--- a/source/kernel/front/component/physic/Fixed.hpp
+++ b/source/kernel/front/component/physic/Fixed.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <kernel/back/props/Physical.hpp>
+#include <kernel/back/component/Physical.hpp>
 #include <kernel/back/engine/PhysicEngine.hpp>
 
 #include <engine/physic/front/object/TangibleStatic.hpp>
diff --git a/source/kernel/front/component/physic/FixedArray.cpp b/source/kernel/front/component/physic/FixedArray.cpp
index 7482b8d..4272875 100644
--- a/source/kernel/front/component/physic/FixedArray.cpp
+++ b/source/kernel/front/component/physic/FixedArray.cpp
@@ -31,6 +31,12 @@ namespace megu::kernel {
         }
     }
 
+    void FixedArray::update_physic(double time) const {
+        if(this->_update != nullptr) {
+            this->_update(time);
+        }
+    }
+
     void FixedArray::apply(Kernel & kernel, PhysicEngine & engine) {
         engine.get().push(0, *this);
     }
diff --git a/source/kernel/front/component/physic/FixedArray.hpp b/source/kernel/front/component/physic/FixedArray.hpp
index 473b06b..c506453 100644
--- a/source/kernel/front/component/physic/FixedArray.hpp
+++ b/source/kernel/front/component/physic/FixedArray.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <kernel/back/props/Physical.hpp>
+#include <kernel/back/component/Physical.hpp>
 #include <kernel/back/engine/PhysicEngine.hpp>
 #include <vector>
 #include <functional>
@@ -15,7 +15,11 @@ namespace megu::kernel {
             void push(const Fixed &);
             void erase(const Fixed &);
             void erase(const Position &);
+        
+            void setCollideLambda(CollideLambda &);
+            void setUpdateLambda(UpdateLambda &);
 
+            void update_physic(double) const override;
             void on_collide(const Kernel &, const PhysicEngine &, Physical &, double) override;
             void apply(Kernel & k, PhysicEngine &) override;
 
diff --git a/source/kernel/front/component/physic/Movable.hpp b/source/kernel/front/component/physic/Movable.hpp
index f74c85b..2e83bf9 100644
--- a/source/kernel/front/component/physic/Movable.hpp
+++ b/source/kernel/front/component/physic/Movable.hpp
@@ -1,6 +1,6 @@
 #pragma once
 
-#include <kernel/back/props/Physical.hpp>
+#include <kernel/back/component/Physical.hpp>
 #include <kernel/back/engine/PhysicEngine.hpp>
 
 #include <engine/physic/front/object/TangibleMovable.hpp>
diff --git a/source/kernel/front/props/Props.hpp b/source/kernel/front/props/Props.hpp
new file mode 100644
index 0000000..d86d795
--- /dev/null
+++ b/source/kernel/front/props/Props.hpp
@@ -0,0 +1,23 @@
+#pragma once
+
+
+#include <utility/Identifiable.hpp>
+#include <kernel/back/component/Physical.hpp>
+#include <kernel/back/component/Graphical.hpp>
+
+#include <kernel/back/engine/PhysicEngine.hpp>
+#include <kernel/back/engine/GraphicEngine.hpp>
+
+namespace megu::kernel {
+    template <class Pe, class Ge>
+    class BaseProps : virtual public Identifiable {
+        public:
+            using Graphical_Component = Graphical<Ge>;
+            using Physical_Component = Physical<Pe>;
+            
+            virtual Graphical_Component * getGraphicComponent() = 0;   
+            virtual Physical_Component * getPhysicComponent() = 0;
+    };
+
+    using Prop = BaseProps<PhysicEngine, GraphicEngine>;
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsDynamic.cpp b/source/kernel/front/props/PropsDynamic.cpp
new file mode 100644
index 0000000..6d94db7
--- /dev/null
+++ b/source/kernel/front/props/PropsDynamic.cpp
@@ -0,0 +1,6 @@
+#include "PropsDynamic.hpp"
+
+namespace megu::kernel {
+    PropsDynamic::PropsDynamic(Sprite & sprite, Movable & movable)
+    : _graphic(sprite), _physic(movable) {}
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsDynamic.hpp b/source/kernel/front/props/PropsDynamic.hpp
new file mode 100644
index 0000000..b86d815
--- /dev/null
+++ b/source/kernel/front/props/PropsDynamic.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <kernel/front/props/Props.hpp>
+#include <kernel/front/component/graphic/Sprite.hpp>
+#include <kernel/front/component/physic/Movable.hpp>
+
+namespace megu::kernel {
+    class PropsDynamic : public Prop {
+        public:
+            PropsDynamic(Sprite &, Movable &);
+
+            inline Prop::Graphical_Component * getGraphicComponent() {return &this->_graphic;}
+            inline Prop::Physical_Component * getPhysicComponent() {return &this->_physic;}
+
+        private:
+            Sprite & _graphic;
+            Movable & _physic;
+    };
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsStatic.cpp b/source/kernel/front/props/PropsStatic.cpp
new file mode 100644
index 0000000..e10f34f
--- /dev/null
+++ b/source/kernel/front/props/PropsStatic.cpp
@@ -0,0 +1,6 @@
+#include "PropsStatic.hpp"
+
+namespace megu::kernel {
+    PropsStatic::PropsStatic(Sprite & sprite, Fixed & fixed)
+    : _graphic(sprite), _physic(fixed) {}
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsStatic.hpp b/source/kernel/front/props/PropsStatic.hpp
new file mode 100644
index 0000000..3210fcd
--- /dev/null
+++ b/source/kernel/front/props/PropsStatic.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <kernel/front/props/Props.hpp>
+#include <kernel/front/component/graphic/Sprite.hpp>
+#include <kernel/front/component/physic/Fixed.hpp>
+
+namespace megu::kernel {
+    class PropsStatic : public Prop {
+        public:
+            PropsStatic(Sprite &, Fixed &);
+
+            inline Prop::Graphical_Component * getGraphicComponent() override {return &this->_graphic;}
+            inline Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;}
+
+        private:
+            Sprite & _graphic;
+            Fixed & _physic;
+    };
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsTileMap.cpp b/source/kernel/front/props/PropsTileMap.cpp
new file mode 100644
index 0000000..8ec7d35
--- /dev/null
+++ b/source/kernel/front/props/PropsTileMap.cpp
@@ -0,0 +1,7 @@
+#include "PropsTileMap.hpp"
+
+namespace megu::kernel {
+    PropsTileMap::PropsTileMap(Tilemap & tilemap, FixedArray & fixedarray)
+    : _graphic(tilemap), _physic(fixedarray) {} 
+
+}
\ No newline at end of file
diff --git a/source/kernel/front/props/PropsTileMap.hpp b/source/kernel/front/props/PropsTileMap.hpp
new file mode 100644
index 0000000..eee3f71
--- /dev/null
+++ b/source/kernel/front/props/PropsTileMap.hpp
@@ -0,0 +1,19 @@
+#pragma once
+
+#include <kernel/front/props/Props.hpp>
+#include <kernel/front/component/graphic/TileMap.hpp>
+#include <kernel/front/component/physic/FixedArray.hpp>
+
+namespace megu::kernel {
+    class PropsTileMap : public Prop {
+        public:
+            PropsTileMap(Tilemap &, FixedArray &);
+
+            inline Prop::Graphical_Component * getGraphicComponent() override {return &this->_graphic;}
+            inline Prop::Physical_Component * getPhysicComponent() override {return &this->_physic;}
+
+        private:
+            Tilemap & _graphic;
+            FixedArray & _physic;  
+    };
+}
\ No newline at end of file
diff --git a/source/kernel/front/resolver/GraphicResolver.hpp b/source/kernel/front/resolver/GraphicResolver.hpp
index 7e2b541..8be90fa 100644
--- a/source/kernel/front/resolver/GraphicResolver.hpp
+++ b/source/kernel/front/resolver/GraphicResolver.hpp
@@ -2,10 +2,11 @@
 
 #include "Resolver.hpp"
 #include <kernel/back/engine/GraphicEngine.hpp>
-#include <kernel/back/props/Props.hpp>
+#include <kernel/front/props/Props.hpp>
 
 namespace megu::kernel {
-    class GraphicResolver : public Resolver<GraphicEngine, Graphical<GraphicEngine>> {
+    class Kernel;
+    class GraphicResolver : public Resolver<GraphicEngine, Prop::Graphical_Component> {
         public:
             void resolve(Kernel &, GraphicEngine &, double) override;
     };
diff --git a/source/kernel/front/resolver/PhysicResolver.hpp b/source/kernel/front/resolver/PhysicResolver.hpp
index 349c6de..40aaf15 100644
--- a/source/kernel/front/resolver/PhysicResolver.hpp
+++ b/source/kernel/front/resolver/PhysicResolver.hpp
@@ -2,10 +2,10 @@
 
 #include "Resolver.hpp"
 #include <kernel/back/engine/PhysicEngine.hpp>
-#include <kernel/back/props/Props.hpp>
+#include <kernel/front/props/Props.hpp>
 
 namespace megu::kernel {
-    class PhysicResolver : public Resolver<PhysicEngine, Physical<PhysicEngine>> {
+    class PhysicResolver : public Resolver<PhysicEngine, Prop::Physical_Component> {
         public:
             void resolve(Kernel &, PhysicEngine &, double) override;
     };
diff --git a/source/kernel/front/resolver/Resolver.hpp b/source/kernel/front/resolver/Resolver.hpp
index 35b4732..0e63f12 100644
--- a/source/kernel/front/resolver/Resolver.hpp
+++ b/source/kernel/front/resolver/Resolver.hpp
@@ -1,9 +1,9 @@
 #pragma once
 
+#include <optional>
 #include <utility/Identifiable.hpp>
-#include <kernel/back/props/Component.hpp>
 #include <engine/utility/ref_set.hpp>
-#include <optional>
+#include <kernel/back/component/Component.hpp>
 
 namespace megu::kernel {
     template <class E, class O>
-- 
GitLab