From af9ae9430c7328e030ace9787bc90b426cfc2f52 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 01:46:01 +0100 Subject: [PATCH] Add animation on tilemap --- assets/tilemap.png | Bin 4536 -> 4547 bytes .../engine/graphics/back/textures/Texture.cpp | 25 ++--------- .../engine/graphics/back/textures/Texture.hpp | 7 +-- source/game/object/Test.cpp | 7 ++- .../front/component/graphic/TileMap.cpp | 40 ++++++++++++------ .../front/component/graphic/TileMap.hpp | 8 +++- 6 files changed, 48 insertions(+), 39 deletions(-) diff --git a/assets/tilemap.png b/assets/tilemap.png index 48ec4457cb7f48a2078e595d0f56a72cc4239534..b336765460a48008cfa66ca7a72ecdc290c9aa51 100644 GIT binary patch delta 4245 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 b`)t2pL&#B)-0vm~3=9mOu6{1-oD!M<xGN}e delta 4249 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 BEZzVB diff --git a/source/engine/graphics/back/textures/Texture.cpp b/source/engine/graphics/back/textures/Texture.cpp index 658169b..88821c8 100644 --- a/source/engine/graphics/back/textures/Texture.cpp +++ b/source/engine/graphics/back/textures/Texture.cpp @@ -5,7 +5,7 @@ namespace megu { Texture::Texture(GLuint slot, GLuint type) - : _id(0), _type(type), _slot(slot) { + : _id(0), _type(type), _slot(slot), _width(0), _height(0) { glGenTextures(1, &this->_id); } @@ -38,26 +38,6 @@ namespace megu { this->bind(); } - GLint Texture::width() const { - if(this->_id == 0) { - return 0; - } - - GLint width; - glGetTexLevelParameteriv(this->_type, 0, GL_TEXTURE_WIDTH, &width); - return width; - } - - GLint Texture::height() const { - if(this->_id == 0) { - return 0; - } - - GLint height; - glGetTexLevelParameteriv(this->_type, 0, GL_TEXTURE_HEIGHT, &height); - return height; - } - void Texture::changeSlot(GLuint slot) { this->_slot = slot; } @@ -90,6 +70,9 @@ namespace megu { glDeleteTextures(1, &this->_id); glGenTextures(1, &this->_id); } + + this->_width = width; + this->_height = height; glBindTexture(this->_type, this->_id); glTexImage2D(this->_type, 0, format, width, height, 0, format, GL_UNSIGNED_BYTE, data); diff --git a/source/engine/graphics/back/textures/Texture.hpp b/source/engine/graphics/back/textures/Texture.hpp index 221d628..c58c013 100644 --- a/source/engine/graphics/back/textures/Texture.hpp +++ b/source/engine/graphics/back/textures/Texture.hpp @@ -39,8 +39,8 @@ namespace megu { void bind() const; void bind(GLuint) const; - GLint width() const; - GLint height() const; + inline GLint width() const {return this->_width;} + inline GLint height() const {return this->_height;} inline GLuint slot() const {return this->_slot;} inline GLuint type() const {return this->_type;} @@ -71,6 +71,7 @@ namespace megu { private: GLuint _id; GLuint _type; - mutable GLuint _slot; + mutable GLuint _slot; + GLsizei _width, _height; }; } \ No newline at end of file diff --git a/source/game/object/Test.cpp b/source/game/object/Test.cpp index bcdf555..f2c6e96 100644 --- a/source/game/object/Test.cpp +++ b/source/game/object/Test.cpp @@ -7,8 +7,11 @@ namespace megu::game { this->_graphic.setSize({51.f, 98.f}); this->_map.setValue(0, 0, 1); - this->_map.setValue(1, 0, 1); - this->_map.setValue(0, 1, 2); + this->_map.setValue(1, 0, 2); + this->_map.setValue(0, 1, 1); this->_map.setValue(1, 1, 1); + + this->_map.addAnimation(0, 1, {18, 19, 20, 21}); + this->_map.addAnimation(1, 1, {18, 19, 20, 21}); } } \ No newline at end of file diff --git a/source/kernel/front/component/graphic/TileMap.cpp b/source/kernel/front/component/graphic/TileMap.cpp index da61dc8..252c86f 100644 --- a/source/kernel/front/component/graphic/TileMap.cpp +++ b/source/kernel/front/component/graphic/TileMap.cpp @@ -3,23 +3,19 @@ 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) - : TileArray(path, width , height, size), _tileSize(lenght) { + 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) { if(lenght % width != 0 && lenght % height != 0) { throw std::runtime_error("Tilemap dimension not matching tiles size."); } - size_t i = 0, j = 0; - for(size_t x = 0; x < this->texture().width(); x += this->_tileSize) { - j = 0; - for(size_t y = 0; y < this->texture().height(); y += this->_tileSize) { - this->_tilesPosition.push_back({j * this->_tileSize, i * this->_tileSize}); - ++j; + 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}); } - ++i; } - i = 0; + size_t i = 0; for(size_t x = 0; x < width * this->_tileSize; x += this->_tileSize) { this->_tilesValue.push_back({}); for(size_t y = 0; y < height * this->_tileSize; y += this->_tileSize) { @@ -38,11 +34,11 @@ namespace megu::kernel { void Tilemap::setValue(size_t x, size_t y, size_t value) { TilePosition position = this->_tilesPosition[value]; glm::vec4 uv = {position.x, - this->texture().height() - position.y - this->_tileSize, + this->texture().height() - position.y - this->_tileSize, this->_tileSize, this->_tileSize}; - this->setUv(x, this->width() - 1 - y, uv); + this->setUv(this->height() - 1 - y, x, uv); this->_tilesValue[x][y] = value; } @@ -53,8 +49,28 @@ namespace megu::kernel { throw std::runtime_error("Tilemap coords out of bound"); } + 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); + } + + void Tilemap::removeAnimation(size_t x, size_t y) { + this->_animations.erase({x, y}); + } + 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; + } + else { + if(time - this->_previous > this->_duration) { + for(auto & [coords, animation] : this->_animations) { + animation.second = (animation.second+1) % animation.first.size(); + this->setValue(coords.x, coords.y, animation.first[animation.second]); + } + this->_previous = time; + } + } } void Tilemap::apply(Kernel & kernel, GraphicEngine & engine) { diff --git a/source/kernel/front/component/graphic/TileMap.hpp b/source/kernel/front/component/graphic/TileMap.hpp index 3834953..39f43c8 100644 --- a/source/kernel/front/component/graphic/TileMap.hpp +++ b/source/kernel/front/component/graphic/TileMap.hpp @@ -25,19 +25,25 @@ namespace megu::kernel { } }; - Tilemap(const std::filesystem::path &, size_t, size_t, float, size_t); + 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); + void addAnimation(size_t, size_t, const std::vector<size_t> &); + void removeAnimation(size_t, size_t); + 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; TileArray_Module _module; size_t _tileSize; + double _duration; + double _previous; static UniqueGraphicLinker<TileArray> _Linker; }; -- GitLab