Implement TileSet and TileMap classes
This commit is contained in:
parent
bb9d108102
commit
bb43d308c0
6 changed files with 243 additions and 8 deletions
|
|
@ -4,11 +4,12 @@ module;
|
|||
#include <memory>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
#include <SDL3/SDL.h>
|
||||
|
||||
export module game.game;
|
||||
|
||||
import core.drawing.sprite;
|
||||
import core.drawing.tile_map;
|
||||
import core.drawing.tile_set;
|
||||
import core.engine;
|
||||
import core.render_server;
|
||||
import wrappers.sdl;
|
||||
|
|
@ -28,19 +29,48 @@ export namespace game
|
|||
core::Sprite player_sprite_;
|
||||
std::vector<core::Sprite> sprites_;
|
||||
|
||||
// Tile set and tile map (TODO: tile set should be moved to resource manager in engine)
|
||||
core::TileSet tile_set_;
|
||||
core::TileMap tile_map_;
|
||||
|
||||
// Private constructor
|
||||
explicit Game(core::Engine& engine)
|
||||
: engine_(engine),
|
||||
player_sprite_{
|
||||
core::Sprite::create_with_texture(
|
||||
core::Sprite::create_from_texture(
|
||||
engine_.get_render_server(),
|
||||
"assets/sprites/neocat_64.png",
|
||||
std::nullopt,
|
||||
sdl::FPoint{0, 0},
|
||||
sdl::FPoint{-32, -32}
|
||||
)
|
||||
}
|
||||
{}
|
||||
},
|
||||
tile_set_{
|
||||
core::TileSet::create_from_texture(
|
||||
engine_.get_render_server(),
|
||||
"assets/tilesets/terrain.png",
|
||||
32,
|
||||
{
|
||||
// Tile 0: No tile
|
||||
{0, 0},
|
||||
// Tile 1: Actual first tile in the texture
|
||||
{0, 0},
|
||||
{1, 0},
|
||||
{2, 0},
|
||||
{3, 0},
|
||||
}
|
||||
)
|
||||
},
|
||||
tile_map_(0, 32, 16, 12, {50, 50})
|
||||
{
|
||||
// Initialize tile map with example data
|
||||
for (auto x = 0; x < 10; x++) {
|
||||
for (auto y = 0; y < 10; y++) {
|
||||
const auto tile_index = 2 + (x + y) % 2;
|
||||
tile_map_.set_tile(x, y, tile_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
Game() = delete;
|
||||
|
|
@ -75,7 +105,7 @@ export namespace game
|
|||
|
||||
if (event->type == sdl::EventType::MouseButtonUp) {
|
||||
sprites_.push_back(
|
||||
core::Sprite::create_with_texture(
|
||||
core::Sprite::create_from_texture(
|
||||
engine_.get_render_server(),
|
||||
"assets/sprites/neofox_64.png",
|
||||
std::nullopt,
|
||||
|
|
@ -98,6 +128,10 @@ export namespace game
|
|||
const auto& render_server = engine_.get_render_server();
|
||||
render_server.start_frame();
|
||||
|
||||
// Render tilemap
|
||||
tile_map_.draw(render_server, tile_set_);
|
||||
|
||||
// Render sprites
|
||||
for (const core::Sprite& sprite : sprites_) {
|
||||
sprite.draw(render_server);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue