Bomberman Multiplayer
Authoritative multiplayer networking layer for Bomberman.
Loading...
Searching...
No Matches
LevelScene.h
1#ifndef _BOMBERMAN_LEVEL_SCENE_H_
2#define _BOMBERMAN_LEVEL_SCENE_H_
3
4#include <SDL.h>
5#include <memory>
6#include <optional>
7
8#include "Const.h"
9#include "Entities/Music.h"
10#include "Entities/Player.h"
11#include "Scenes/Scene.h"
12#include "Sim/Movement.h"
13
14namespace bomberman
15{
19 class LevelScene : public Scene
20 {
21 public:
24 {
25 int fieldX = 0;
26 int fieldY = 0;
27 int scaledTile = 0;
28 };
29
38 LevelScene(Game* game, const unsigned int stage, const unsigned int prevScore,
39 std::optional<uint32_t> mapSeed = std::nullopt);
40
41 virtual ~LevelScene() override = default;
42
43 void onEnter() override;
44 void onExit() override;
45
47 [[nodiscard]]
49 {
50 return { fieldPositionX, fieldPositionY, scaledTileSize };
51 }
52
58 virtual void onEvent(const SDL_Event& event) override;
64 virtual void update(const unsigned int delta) override;
65
68
74 [[nodiscard]]
75 virtual bool usesEventDrivenLocalMovement() const { return true; }
76
77 protected:
79 void initializeLevelWorld(std::optional<uint32_t> mapSeed);
80
81 // spawn and generation of shared map objects
82 void generateTileMap(std::optional<uint32_t> mapSeed);
83 void spawnGrass(const int positionX, const int positionY);
84 void spawnBrick(const int positionX, const int positionY);
85 void spawnStone(const int positionX, const int positionY);
86 void spawnPlayer(const int positionX, const int positionY);
87
89 virtual void onCollisionObjectSpawned(Tile tile, const std::shared_ptr<Object>& object);
90
91 // update movement
92 void updateMovement(const bool isPressed, const int keycode);
93 // update camera
94 void updateCamera();
95
99 virtual void updateLevel(const unsigned int delta) = 0;
100
104 virtual void onKeyPressed(SDL_Scancode scancode);
105
107 [[nodiscard]]
108 virtual bool supportsPause() const { return true; }
109
114
119
122
123 std::shared_ptr<Music> menuMusic = nullptr; // menu music
124 std::shared_ptr<Player> player = nullptr; // player
125 Tile tiles[tileArrayHeight][tileArrayWidth]; // tilemap
126
127 int playerDirectionX = 0; // direction used for control
128 int playerDirectionY = 0; // direction used for control
129 bool isPaused = false;
130 unsigned int stage = 0;
131
132 // level positioning
133 int fieldPositionX = 0;
134 int fieldPositionY = 0;
135 // size of tiles
136 int scaledTileSize = 0;
137 // last object that used as background (grass)
138 int backgroundObjectLastNumber = 0;
139
142
143 };
144} // namespace bomberman
145
146#endif // _BOMBERMAN_LEVEL_SCENE_H_
Game-world configuration constants.
constexpr unsigned int tileArrayWidth
Tile map width in tiles.
Definition Const.h:43
constexpr unsigned int tileArrayHeight
Tile map height in tiles.
Definition Const.h:44
Tile
Tile type identifiers used in the tile map.
Definition Const.h:13
Shared authoritative movement simulation primitives.
Definition Game.h:23
Shared level-scene scaffold used by both singleplayer and multiplayer.
Definition LevelScene.h:20
void setLocalPlayerPositionQ(sim::TilePos posQ)
Replaces the canonical local player position and syncs the sprite immediately.
Definition LevelScene.cpp:297
virtual void onCollisionObjectSpawned(Tile tile, const std::shared_ptr< Object > &object)
Allows derived scenes to collect collision objects during map spawn.
Definition LevelScene.cpp:115
virtual bool supportsPause() const
Whether ENTER pause toggle is enabled for this level mode.
Definition LevelScene.h:108
FieldTransform getFieldTransform() const
Returns the field transform needed to map tile-Q8 world coords to screen pixels.
Definition LevelScene.h:48
virtual void onEvent(const SDL_Event &event) override
Catch SDL2 events.
Definition LevelScene.cpp:127
virtual void updateLevel(const unsigned int delta)=0
Per-mode update body executed when the scene is not paused.
void clearLocalMovementInput()
Clears locally held movement input and resets player facing/animation state.
Definition LevelScene.cpp:263
void onEnter() override
Called when scene become activated.
Definition LevelScene.cpp:26
virtual bool usesEventDrivenLocalMovement() const
Returns true when this level consumes SDL key press/release events as local movement state.
Definition LevelScene.h:75
virtual void onKeyPressed(SDL_Scancode scancode)
Optional per-mode key-down handling.
Definition LevelScene.cpp:165
void stepLocalPlayerMovement()
Steps the local player position by one simulation tick.
Definition LevelScene.cpp:272
void syncPlayerSpriteToSimPosition()
Writes playerPos_ to the player sprite in screen space.
Definition LevelScene.cpp:287
void initializeLevelWorld(std::optional< uint32_t > mapSeed)
Completes shared world setup after derived state is ready.
Definition LevelScene.cpp:46
void onExit() override
CAlled when scene become deactivated.
Definition LevelScene.cpp:36
virtual void update(const unsigned int delta) override
Update level scene.
Definition LevelScene.cpp:157
sim::TilePos playerPos_
Canonical player position in tile-Q8, owned by LevelScene.
Definition LevelScene.h:141
Scene base class.
Definition Scene.h:17
Parameters needed to convert tile-Q8 world coords to screen pixels.
Definition LevelScene.h:24
int scaledTile
Rendered tile size in pixels.
Definition LevelScene.h:27
int fieldX
Screen X of tile column 0.
Definition LevelScene.h:25
int fieldY
Screen Y of tile row 0.
Definition LevelScene.h:26
Tile-space Q8 position representing the CENTER of the entity.
Definition Movement.h:30