From 7ed23d0c13593ff06631afebdc0b018b899d3c7b Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Wed, 20 Sep 2023 21:17:38 +0200 Subject: [PATCH 01/31] Added sceleton for Sound functionality --- res/Sounds/tank_shot.flac | Bin 0 -> 83742 bytes src/Sound.cpp | 0 src/Sound.hpp | 0 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 res/Sounds/tank_shot.flac create mode 100644 src/Sound.cpp create mode 100644 src/Sound.hpp diff --git a/res/Sounds/tank_shot.flac b/res/Sounds/tank_shot.flac new file mode 100644 index 0000000000000000000000000000000000000000..1848a00c0fd63f98a106707e9fe16148b50801c5 GIT binary patch literal 83742 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 literal 0 HcmV?d00001 diff --git a/src/Sound.cpp b/src/Sound.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/Sound.hpp b/src/Sound.hpp new file mode 100644 index 0000000..e69de29 From 70598c566e2f3f3cb48f4a100d190eaf6208b533 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 21 Sep 2023 16:59:18 +0200 Subject: [PATCH 02/31] adapted CMakeLists.txt to sound functionality --- CMakeLists.txt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 45d4e7e..3d18c41 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,8 @@ add_library( src/TracesHandler.cpp src/Trace.cpp src/Players/DummyPlayer.cpp - src/Players/KeyboardPlayer.cpp) + src/Players/KeyboardPlayer.cpp + src/Sound.cpp) target_include_directories(tank_bot_fight_lib PRIVATE src) @@ -66,13 +67,13 @@ target_include_directories(tank_bot_fight PRIVATE src) find_package( SFML 2.5.1 - COMPONENTS graphics + COMPONENTS graphics audio REQUIRED) find_package(range-v3 REQUIRED) find_package(Microsoft.GSL CONFIG REQUIRED) target_link_libraries(tank_bot_fight_lib PUBLIC sfml-graphics ${EXTRA_LIBS} Microsoft.GSL::GSL) -target_link_libraries(tank_bot_fight PRIVATE tank_bot_fight_lib sfml-graphics) +target_link_libraries(tank_bot_fight PRIVATE tank_bot_fight_lib sfml-graphics sfml-audio) add_subdirectory(test) From 9a26461f9ba96f76c9b9616358c335ab504bee14 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 21 Sep 2023 18:40:43 +0200 Subject: [PATCH 03/31] Implemented class Sound --- src/Sound.cpp | 21 +++++++++++++++++++++ src/Sound.hpp | 26 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/src/Sound.cpp b/src/Sound.cpp index e69de29..a0a5864 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -0,0 +1,21 @@ +#include "Sound.hpp" + +Sound::Sound(std::string file_name) { + if (load_from_file(file_name)) { + set_buffer(); + } +} + +Sound::~Sound() { + // nothing to do here +} + +void Sound::play() { mSound.play(); } + +bool Sound::load_from_file(std::string file_name) { + std::string path_to_file = files::asset_path() + "/res/Sound/" + file_name; + + return mBuffer.loadFromFile(path_to_file); +} + +void Sound::set_buffer() { mSound.setBuffer(mBuffer); } diff --git a/src/Sound.hpp b/src/Sound.hpp index e69de29..7bc6139 100644 --- a/src/Sound.hpp +++ b/src/Sound.hpp @@ -0,0 +1,26 @@ +#pragma once +#include +#include + +#include "Files.hpp" + +class Sound { + private: + // sound data is not stored directly in sf::Sound, it is stored in sf::SoundBuffer + sf::SoundBuffer mBuffer; + + // load Sound from file (it can be loaded from memory, stream, array of samples, which are 16 bit + // integers with sign) MP3 is not supproted due to licensing + std::string mPath; + + // to play a sound, sf::Sound instance is needed. + sf::Sound mSound; + + bool load_from_file(std::string file_name); + void set_buffer(); + + public: + void play(); + Sound(std::string path_to_file); + ~Sound(); +}; From 0539b3c041065d0b33671152132a5ad65b6f5a24 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Wed, 27 Sep 2023 21:53:09 +0200 Subject: [PATCH 04/31] Implemented tank shot sound --- src/Board.cpp | 5 +++-- src/Sound.cpp | 18 +++++++++++++++++- src/Sound.hpp | 13 +++++++++---- src/Tank/Tank.cpp | 13 ++++++++----- src/Tank/Tank.hpp | 3 ++- src/Tank/TankFactory.cpp | 6 ++++-- src/Tank/TankFactory.hpp | 4 +++- src/Tank/TankTower.cpp | 6 +++++- src/Tank/TankTower.hpp | 7 +++++-- src/TankFactory.cpp | 2 +- src/TankFactory.hpp | 2 +- test/CMakeLists.txt | 1 + test/TankTests.cpp | 4 +++- test/TankTowerTests.cpp | 6 ++++-- 14 files changed, 66 insertions(+), 24 deletions(-) diff --git a/src/Board.cpp b/src/Board.cpp index c690121..a716cd0 100644 --- a/src/Board.cpp +++ b/src/Board.cpp @@ -16,11 +16,12 @@ Board::Board() : mWindow(sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"), mBackgro constexpr float TANK_Y = 50.f; constexpr float TANK2_X = WIDTH / 2.0f; constexpr float TANK2_Y = 400.0f; + Sound tank_shot_sound("tank_shot.flac"); mWindow.setFramerateLimit(30); mKeyboardPlayer = - std::make_unique(*this, TankFactory::Random(mStore, TANK_X, TANK_Y)); + std::make_unique(*this, TankFactory::Random(mStore, TANK_X, TANK_Y, tank_shot_sound)); mDummyPlayer = - std::make_unique(*this, TankFactory::Random(mStore, TANK2_X, TANK2_Y)); + std::make_unique(*this, TankFactory::Random(mStore, TANK2_X, TANK2_Y, tank_shot_sound)); mFont.loadFromFile(files::asset_path() + "DejaVuSans.ttf"); mText.setFont(mFont); } diff --git a/src/Sound.cpp b/src/Sound.cpp index a0a5864..4f83411 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -1,11 +1,27 @@ #include "Sound.hpp" +Sound::Sound() { /* empty */ } + +Sound::Sound(const Sound& sound){ + mBuffer = sound.mBuffer; + mSound = sound.mSound; + set_buffer(); +} + Sound::Sound(std::string file_name) { if (load_from_file(file_name)) { set_buffer(); } } +Sound& Sound::operator=(const Sound& sound) +{ + mBuffer = sound.mBuffer; + mSound = sound.mSound; + set_buffer(); + return *this; +} + Sound::~Sound() { // nothing to do here } @@ -13,7 +29,7 @@ Sound::~Sound() { void Sound::play() { mSound.play(); } bool Sound::load_from_file(std::string file_name) { - std::string path_to_file = files::asset_path() + "/res/Sound/" + file_name; + std::string path_to_file = files::asset_path() + "Sounds/" + file_name; return mBuffer.loadFromFile(path_to_file); } diff --git a/src/Sound.hpp b/src/Sound.hpp index 7bc6139..d641041 100644 --- a/src/Sound.hpp +++ b/src/Sound.hpp @@ -16,11 +16,16 @@ class Sound { // to play a sound, sf::Sound instance is needed. sf::Sound mSound; - bool load_from_file(std::string file_name); - void set_buffer(); public: - void play(); - Sound(std::string path_to_file); + Sound(); + Sound(const Sound& sound); + Sound& operator=(const Sound& sound); + + Sound(std::string file_name); ~Sound(); + void play(); + bool load_from_file(std::string file_name); + void set_buffer(); + }; diff --git a/src/Tank/Tank.cpp b/src/Tank/Tank.cpp index 1cc5103..3c7dbb8 100644 --- a/src/Tank/Tank.cpp +++ b/src/Tank/Tank.cpp @@ -9,14 +9,17 @@ constexpr int TANK_INITIAL_ROTATION = 180; Tank::Tank(float x, float y, const TankTextures &textures, std::unique_ptr &&engine, - const TracesHandlerConfig &traces_handler_config, + Sound shot_sound, const TracesHandlerConfig &traces_handler_config, const std::chrono::milliseconds &shot_cooldown) : mPos({x, y}), mBody(textures.mBody), - mTower(TankTowerTextures{.mTower = textures.mTower, - .mShotAnimation = textures.mShot, - .mMissile = textures.mMissile}, - shot_cooldown), + mTower( + TankTowerTextures{ + .mTower = textures.mTower, + .mShotAnimation = textures.mShot, + .mMissile = textures.mMissile}, + shot_cooldown, + shot_sound), mEngine(std::move(engine)), mTracesHandler(std::make_unique(textures.mTracks, mBody.get_sprite(), mPos, traces_handler_config)) { diff --git a/src/Tank/Tank.hpp b/src/Tank/Tank.hpp index 39d80be..a43eb9f 100644 --- a/src/Tank/Tank.hpp +++ b/src/Tank/Tank.hpp @@ -12,6 +12,7 @@ #include "Tank/TankPart.hpp" #include "Tank/TankTower.hpp" #include "TracesHandler.hpp" +#include "Sound.hpp" struct TankTextures { std::reference_wrapper mBody; @@ -24,6 +25,7 @@ struct TankTextures { class Tank { public: Tank(float x, float y, const TankTextures& textures, std::unique_ptr&& engine, + Sound shot_sound, const TracesHandlerConfig& traces_handler_config = {}, const std::chrono::milliseconds& shot_cooldown = std::chrono::milliseconds{500}); Tank(const Tank& rhs); @@ -49,7 +51,6 @@ class Tank { private: void draw_tracks(sf::RenderWindow& window); void update_position(); - sf::Vector2f mPos; float mCurrentSpeed = 0.0f; diff --git a/src/Tank/TankFactory.cpp b/src/Tank/TankFactory.cpp index d3a8b87..43a211f 100644 --- a/src/Tank/TankFactory.cpp +++ b/src/Tank/TankFactory.cpp @@ -4,8 +4,9 @@ #include "SquareRootEngine.hpp" #include "Tank/Tank.hpp" #include "TextureStore.hpp" +#include "Sound.hpp" -std::unique_ptr TankFactory::Random(TextureStore& store, const float x, const float y) { +std::unique_ptr TankFactory::Random(TextureStore& store, const float x, const float y, Sound shot_sound) { using namespace std::string_literals; const sf::IntRect TRACKS_TEXTURE_RECT = {0, 0, 37, 48}; auto& body_texture = store.get_texture(one_of("tankBody_red.png"s, "tankBody_dark.png"s, @@ -30,6 +31,7 @@ std::unique_ptr TankFactory::Random(TextureStore& store, const float x, co .mTracks = tracks_texture, .mMissile = missile_texture}, std::make_unique( - SquareRootEngineConfig{.mStepCount = 70, .mMaxSpeed = 5.f}), + SquareRootEngineConfig{.mStepCount = 70, .mMaxSpeed = 5.f}), + shot_sound, TracesHandlerConfig{.mMaxTraceAge = 50, .mDecayRate = 0.1f}); } diff --git a/src/Tank/TankFactory.hpp b/src/Tank/TankFactory.hpp index aa2ac15..eac4efc 100644 --- a/src/Tank/TankFactory.hpp +++ b/src/Tank/TankFactory.hpp @@ -3,7 +3,9 @@ class TextureStore; class Tank; +class Sound; + class TankFactory { public: - [[nodiscard]] static std::unique_ptr Random(TextureStore& store, float x, float y); + [[nodiscard]] static std::unique_ptr Random(TextureStore& store, float x, float y, Sound shot_sound); }; diff --git a/src/Tank/TankTower.cpp b/src/Tank/TankTower.cpp index e882e8a..2317f15 100644 --- a/src/Tank/TankTower.cpp +++ b/src/Tank/TankTower.cpp @@ -10,10 +10,12 @@ constexpr std::chrono::milliseconds SHOT_ANIMATION_DURATION = std::chrono::milli constexpr auto SHOT_COOLDOWN = std::chrono::milliseconds{500}; TankTower::TankTower(const TankTowerTextures& textures, - const std::chrono::milliseconds& shot_cooldown) + const std::chrono::milliseconds& shot_cooldown, + Sound shot_sound) : mTower(textures.mTower), mShotAnimation(textures.mShotAnimation), mMissileTexture(textures.mMissile), + mShotSound(shot_sound), mShotCooldown(shot_cooldown) {} void TankTower::set_position(const sf::Vector2f& pos) { @@ -63,11 +65,13 @@ void TankTower::update_shot_time() { } std::optional TankTower::shoot() { + auto now = std::chrono::system_clock::now(); auto elapsed = std::chrono::duration_cast(now - mLastShot); if (elapsed >= mShotCooldown) { mLastShot = std::chrono::system_clock::now(); mDrawShot = true; + mShotSound.play(); const auto& [x, y] = calculate_shot_position(); return std::make_optional( mMissileTexture, MovementState{.mX = x, .mY = y, .mAngle = mTower.get_rotation()}); diff --git a/src/Tank/TankTower.hpp b/src/Tank/TankTower.hpp index 03be931..e6d5fde 100644 --- a/src/Tank/TankTower.hpp +++ b/src/Tank/TankTower.hpp @@ -5,6 +5,7 @@ #include "Missle.hpp" #include "SFML/Graphics.hpp" +#include "Sound.hpp" #include "Tank/TankPart.hpp" struct TankTowerTextures { @@ -15,7 +16,7 @@ struct TankTowerTextures { class TankTower { public: - TankTower(const TankTowerTextures& textures, const std::chrono::milliseconds& shot_cooldown); + TankTower(const TankTowerTextures& textures, const std::chrono::milliseconds& shot_cooldown, Sound shot_sound); void set_position(const sf::Vector2f& pos); void set_rotation(float angle); @@ -27,12 +28,14 @@ class TankTower { [[nodiscard]] std::optional shoot(); [[nodiscard]] float get_rotation() const; + private: sf::Vector2f calculate_shot_position() const; void update_shot_time(); TankPart mTower; - TankPart mShotAnimation; + TankPart mShotAnimation; + Sound mShotSound; std::reference_wrapper mMissileTexture; std::chrono::time_point mLastShot; std::chrono::milliseconds mShotCooldown; diff --git a/src/TankFactory.cpp b/src/TankFactory.cpp index 81e3c4e..beb8799 100644 --- a/src/TankFactory.cpp +++ b/src/TankFactory.cpp @@ -3,7 +3,7 @@ #include "Random.hpp" #include "SquareRootEngine.hpp" -Tank TankFactory::Random(TextureStore& store, float x, float y) { +Tank TankFactory::Random(TextureStore& store, float x, float y, Sound& shot_sound) { using namespace std::string_literals; const sf::IntRect TRACKS_TEXTURE_RECT = {0, 0, 37, 48}; constexpr int STEP_COUNT = 70; diff --git a/src/TankFactory.hpp b/src/TankFactory.hpp index 433279a..7034a00 100644 --- a/src/TankFactory.hpp +++ b/src/TankFactory.hpp @@ -4,5 +4,5 @@ class TankFactory { public: - static Tank Random(TextureStore& store, float x, float y); + static Tank Random(TextureStore& store, float x, float y, Sound& shot_sound); }; \ No newline at end of file diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 7048222..217b12e 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -39,6 +39,7 @@ target_link_libraries( sfml-graphics tank_bot_fight_lib range-v3::range-v3 + sfml-audio ) include(GoogleTest) diff --git a/test/TankTests.cpp b/test/TankTests.cpp index a73c6c4..357c06b 100644 --- a/test/TankTests.cpp +++ b/test/TankTests.cpp @@ -5,6 +5,7 @@ #include "SquareRootEngine.hpp" #include "Tank/Tank.hpp" +#include "Sound.hpp" #include "TestUtility.hpp" #include "TracesHandler.hpp" #include "gmock/gmock.h" @@ -24,6 +25,7 @@ struct TankTestData { std::unique_ptr mShot{create_dummy_texture()}; std::unique_ptr mTracks{create_dummy_texture()}; std::unique_ptr mMissile{create_dummy_texture()}; + Sound emptySound; TankTextures mTextures{.mBody = *mBody, .mTower = *mTower, .mShot = *mShot, @@ -35,7 +37,7 @@ struct TankTestData { std::shared_ptr>{}, mEngine.get()}; Tank create_tank(std::unique_ptr>&& engine) { - return {0, 0, mTextures, std::move(engine), + return {0, 0, mTextures, std::move(engine), emptySound, TracesHandlerConfig{.mMaxTraceAge = 10, .mDecayRate = 0.1f}}; } }; diff --git a/test/TankTowerTests.cpp b/test/TankTowerTests.cpp index ad0e574..79da99d 100644 --- a/test/TankTowerTests.cpp +++ b/test/TankTowerTests.cpp @@ -2,6 +2,7 @@ #include +#include "Sound.hpp" #include "Tank/TankTower.hpp" #include "TestUtility.hpp" @@ -12,17 +13,18 @@ class TankTowerTest : public ::testing::Test { std::unique_ptr mMissileTex{create_dummy_texture()}; TankTowerTextures mTextures{ .mTower = *mTowerTex, .mShotAnimation = *mShotTex, .mMissile = *mMissileTex}; + Sound mShotSound{"tank_shot.flac"}; }; TEST_F(TankTowerTest, Given0MsCooldown_WhenShotCalled_ThenMissileIsAlwaysReturned) { - TankTower mTower{mTextures, std::chrono::milliseconds{0}}; + TankTower mTower{mTextures, std::chrono::milliseconds{0}, mShotSound}; EXPECT_TRUE(mTower.shoot()); EXPECT_TRUE(mTower.shoot()); EXPECT_TRUE(mTower.shoot()); } TEST_F(TankTowerTest, GivenNonZeroCooldown_WhenShotCalled_ThenMissileIsNotAlwaysReturned) { - TankTower mTower{mTextures, std::chrono::milliseconds{500}}; + TankTower mTower{mTextures, std::chrono::milliseconds{500}, mShotSound}; EXPECT_TRUE(mTower.shoot()); EXPECT_FALSE(mTower.shoot()); EXPECT_FALSE(mTower.shoot()); From 492d8ead52541b234fca3d99a8e95c5ca1d7a04e Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Tue, 10 Oct 2023 19:43:01 +0200 Subject: [PATCH 05/31] removed tank_shot.flac --- res/Sounds/tank_shot.flac | Bin 83742 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 res/Sounds/tank_shot.flac diff --git a/res/Sounds/tank_shot.flac b/res/Sounds/tank_shot.flac deleted file mode 100644 index 1848a00c0fd63f98a106707e9fe16148b50801c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83742 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 From 6462307fc4b8e234fa7530f6ad1ca039ec1eb37c Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Tue, 10 Oct 2023 19:49:47 +0200 Subject: [PATCH 06/31] added Sounds to .gitattributes --- .gitattributes | 1 + Sound/notes.md | 5 +++++ 2 files changed, 6 insertions(+) create mode 100644 Sound/notes.md diff --git a/.gitattributes b/.gitattributes index cce9987..e26c5d1 100644 --- a/.gitattributes +++ b/.gitattributes @@ -381,3 +381,4 @@ res/PNG/Retina/specialBarrel7_outline.png filter=lfs diff=lfs merge=lfs -text res/Vector/topdownTanks_vector.svg filter=lfs diff=lfs merge=lfs -text res/Vector/topdownTanks_vector.swf filter=lfs diff=lfs merge=lfs -text res/DejaVuSans.ttf filter=lfs diff=lfs merge=lfs -text +res/Sounds/tank_shot.flac filter=lfs merge=lfs -text diff --git a/Sound/notes.md b/Sound/notes.md new file mode 100644 index 0000000..62d714c --- /dev/null +++ b/Sound/notes.md @@ -0,0 +1,5 @@ +SFML provides two classes for playing audio: sf::Sound and sf::Music. They both provide more or less the same features, the main difference is how they work. + +sf::Sound is a lightweight object that plays loaded audio data from a sf::SoundBuffer. It should be used for small sounds that can fit in memory and should suffer no lag when they are played. Examples are gun shots, foot steps, etc. + +sf::Music doesn't load all the audio data into memory, instead it streams it on the fly from the source file. It is typically used to play compressed music that lasts several minutes, and would otherwise take many seconds to load and eat hundreds of MB in memory. From ab793671b496b2187d4bab91d63b5dba8ae87fd6 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Tue, 10 Oct 2023 21:27:00 +0200 Subject: [PATCH 07/31] corrections after review --- src/Sound.cpp | 26 ++++++-------------------- src/Sound.hpp | 14 ++------------ src/Tank/Tank.cpp | 13 +++++-------- src/Tank/Tank.hpp | 5 ++--- src/Tank/TankFactory.cpp | 7 ++++--- src/Tank/TankFactory.hpp | 3 ++- src/Tank/TankTower.cpp | 4 +--- src/Tank/TankTower.hpp | 6 +++--- src/main.cpp | 3 +++ 9 files changed, 28 insertions(+), 53 deletions(-) diff --git a/src/Sound.cpp b/src/Sound.cpp index 4f83411..617ac13 100644 --- a/src/Sound.cpp +++ b/src/Sound.cpp @@ -1,31 +1,19 @@ #include "Sound.hpp" -Sound::Sound() { /* empty */ } - -Sound::Sound(const Sound& sound){ +Sound::Sound(const Sound& sound) { mBuffer = sound.mBuffer; mSound = sound.mSound; - set_buffer(); + mSound.setBuffer(mBuffer); } -Sound::Sound(std::string file_name) { +Sound::Sound(const std::string& file_name) { if (load_from_file(file_name)) { - set_buffer(); + mSound.setBuffer(mBuffer); + } else { + throw std::runtime_error("couldn't load sound"); } } -Sound& Sound::operator=(const Sound& sound) -{ - mBuffer = sound.mBuffer; - mSound = sound.mSound; - set_buffer(); - return *this; -} - -Sound::~Sound() { - // nothing to do here -} - void Sound::play() { mSound.play(); } bool Sound::load_from_file(std::string file_name) { @@ -33,5 +21,3 @@ bool Sound::load_from_file(std::string file_name) { return mBuffer.loadFromFile(path_to_file); } - -void Sound::set_buffer() { mSound.setBuffer(mBuffer); } diff --git a/src/Sound.hpp b/src/Sound.hpp index d641041..2707ff6 100644 --- a/src/Sound.hpp +++ b/src/Sound.hpp @@ -9,23 +9,13 @@ class Sound { // sound data is not stored directly in sf::Sound, it is stored in sf::SoundBuffer sf::SoundBuffer mBuffer; - // load Sound from file (it can be loaded from memory, stream, array of samples, which are 16 bit - // integers with sign) MP3 is not supproted due to licensing - std::string mPath; - // to play a sound, sf::Sound instance is needed. sf::Sound mSound; - public: - Sound(); Sound(const Sound& sound); - Sound& operator=(const Sound& sound); - - Sound(std::string file_name); - ~Sound(); + + Sound(const std::string& file_name); void play(); bool load_from_file(std::string file_name); - void set_buffer(); - }; diff --git a/src/Tank/Tank.cpp b/src/Tank/Tank.cpp index 2b33042..c8c24cd 100644 --- a/src/Tank/Tank.cpp +++ b/src/Tank/Tank.cpp @@ -9,17 +9,14 @@ constexpr int TANK_INITIAL_ROTATION = 180; Tank::Tank(float x, float y, const TankTextures &textures, std::unique_ptr &&engine, - Sound shot_sound, const TracesHandlerConfig &traces_handler_config, + const Sound &shot_sound, const TracesHandlerConfig &traces_handler_config, const std::chrono::milliseconds &shot_cooldown) : mPos({x, y}), mBody(textures.mBody), - mTower( - TankTowerTextures{ - .mTower = textures.mTower, - .mShotAnimation = textures.mShot, - .mMissile = textures.mMissile}, - shot_cooldown, - shot_sound), + mTower(TankTowerTextures{.mTower = textures.mTower, + .mShotAnimation = textures.mShot, + .mMissile = textures.mMissile}, + shot_cooldown, shot_sound), mEngine(std::move(engine)), mTracesHandler(std::make_unique(textures.mTracks, mBody.get_sprite(), mPos, traces_handler_config)) { diff --git a/src/Tank/Tank.hpp b/src/Tank/Tank.hpp index 1b02bed..4873faf 100644 --- a/src/Tank/Tank.hpp +++ b/src/Tank/Tank.hpp @@ -9,11 +9,11 @@ #include "Engine.hpp" #include "Missle.hpp" +#include "Sound.hpp" #include "Tank/TankHealthBar.hpp" #include "Tank/TankPart.hpp" #include "Tank/TankTower.hpp" #include "TracesHandler.hpp" -#include "Sound.hpp" constexpr int TANK_HEALTH = 100; @@ -28,8 +28,7 @@ struct TankTextures { class Tank { public: Tank(float x, float y, const TankTextures& textures, std::unique_ptr&& engine, - Sound shot_sound, - const TracesHandlerConfig& traces_handler_config = {}, + const Sound& shot_sound, const TracesHandlerConfig& traces_handler_config = {}, const std::chrono::milliseconds& shot_cooldown = std::chrono::milliseconds{500}); Tank(const Tank& rhs); Tank(Tank&& rhs) noexcept; diff --git a/src/Tank/TankFactory.cpp b/src/Tank/TankFactory.cpp index 43a211f..91086d4 100644 --- a/src/Tank/TankFactory.cpp +++ b/src/Tank/TankFactory.cpp @@ -1,12 +1,13 @@ #include "TankFactory.hpp" #include "Random.hpp" +#include "Sound.hpp" #include "SquareRootEngine.hpp" #include "Tank/Tank.hpp" #include "TextureStore.hpp" -#include "Sound.hpp" -std::unique_ptr TankFactory::Random(TextureStore& store, const float x, const float y, Sound shot_sound) { +std::unique_ptr TankFactory::Random(TextureStore& store, const float x, const float y, + const Sound& shot_sound) { using namespace std::string_literals; const sf::IntRect TRACKS_TEXTURE_RECT = {0, 0, 37, 48}; auto& body_texture = store.get_texture(one_of("tankBody_red.png"s, "tankBody_dark.png"s, @@ -31,7 +32,7 @@ std::unique_ptr TankFactory::Random(TextureStore& store, const float x, co .mTracks = tracks_texture, .mMissile = missile_texture}, std::make_unique( - SquareRootEngineConfig{.mStepCount = 70, .mMaxSpeed = 5.f}), + SquareRootEngineConfig{.mStepCount = 70, .mMaxSpeed = 5.f}), shot_sound, TracesHandlerConfig{.mMaxTraceAge = 50, .mDecayRate = 0.1f}); } diff --git a/src/Tank/TankFactory.hpp b/src/Tank/TankFactory.hpp index eac4efc..e3b7635 100644 --- a/src/Tank/TankFactory.hpp +++ b/src/Tank/TankFactory.hpp @@ -7,5 +7,6 @@ class Sound; class TankFactory { public: - [[nodiscard]] static std::unique_ptr Random(TextureStore& store, float x, float y, Sound shot_sound); + [[nodiscard]] static std::unique_ptr Random(TextureStore& store, float x, float y, + const Sound& shot_sound); }; diff --git a/src/Tank/TankTower.cpp b/src/Tank/TankTower.cpp index 6cc083f..cc27301 100644 --- a/src/Tank/TankTower.cpp +++ b/src/Tank/TankTower.cpp @@ -11,8 +11,7 @@ constexpr auto SHOT_COOLDOWN = std::chrono::milliseconds{500}; constexpr unsigned int MISSLE_DAMAGE = 20; TankTower::TankTower(const TankTowerTextures& textures, - const std::chrono::milliseconds& shot_cooldown, - Sound shot_sound) + const std::chrono::milliseconds& shot_cooldown, const Sound& shot_sound) : mTower(textures.mTower), mShotAnimation(textures.mShotAnimation), mMissileTexture(textures.mMissile), @@ -66,7 +65,6 @@ void TankTower::update_shot_time() { } std::optional TankTower::shoot() { - auto now = std::chrono::system_clock::now(); auto elapsed = std::chrono::duration_cast(now - mLastShot); if (elapsed >= mShotCooldown) { diff --git a/src/Tank/TankTower.hpp b/src/Tank/TankTower.hpp index e6d5fde..a10ff09 100644 --- a/src/Tank/TankTower.hpp +++ b/src/Tank/TankTower.hpp @@ -16,7 +16,8 @@ struct TankTowerTextures { class TankTower { public: - TankTower(const TankTowerTextures& textures, const std::chrono::milliseconds& shot_cooldown, Sound shot_sound); + TankTower(const TankTowerTextures& textures, const std::chrono::milliseconds& shot_cooldown, + const Sound& shot_sound); void set_position(const sf::Vector2f& pos); void set_rotation(float angle); @@ -28,13 +29,12 @@ class TankTower { [[nodiscard]] std::optional shoot(); [[nodiscard]] float get_rotation() const; - private: sf::Vector2f calculate_shot_position() const; void update_shot_time(); TankPart mTower; - TankPart mShotAnimation; + TankPart mShotAnimation; Sound mShotSound; std::reference_wrapper mMissileTexture; std::chrono::time_point mLastShot; diff --git a/src/main.cpp b/src/main.cpp index c651d5a..f0f8fce 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,6 +1,9 @@ +#include + #include "Board.hpp" int main() { + std::cout << "t24\n"; Board b; b.run(); return 0; From 436776482f2fa71a44a63b5df51d640a9163021c Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 12 Oct 2023 16:51:27 +0200 Subject: [PATCH 08/31] added res/Sounds/ --- res/Sounds/tank_shot.flac | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 res/Sounds/tank_shot.flac diff --git a/res/Sounds/tank_shot.flac b/res/Sounds/tank_shot.flac new file mode 100644 index 0000000..5405716 --- /dev/null +++ b/res/Sounds/tank_shot.flac @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8e3647c1d893e8442be08ed05fa9736fda1b41d7ccbca0451232b1a5d2e4047 +size 83742 From 34379e65404dd5e3146ef796d6a257b242530c34 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 12 Oct 2023 17:05:41 +0200 Subject: [PATCH 09/31] Removed notes.md - these were supposed to be my local notes --- Sound/notes.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 Sound/notes.md diff --git a/Sound/notes.md b/Sound/notes.md deleted file mode 100644 index 62d714c..0000000 --- a/Sound/notes.md +++ /dev/null @@ -1,5 +0,0 @@ -SFML provides two classes for playing audio: sf::Sound and sf::Music. They both provide more or less the same features, the main difference is how they work. - -sf::Sound is a lightweight object that plays loaded audio data from a sf::SoundBuffer. It should be used for small sounds that can fit in memory and should suffer no lag when they are played. Examples are gun shots, foot steps, etc. - -sf::Music doesn't load all the audio data into memory, instead it streams it on the fly from the source file. It is typically used to play compressed music that lasts several minutes, and would otherwise take many seconds to load and eat hundreds of MB in memory. From f74ae4af26ab339110339e863ed5cd46e8a556d3 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop <107147109+bartez33a@users.noreply.github.com> Date: Thu, 12 Oct 2023 17:27:24 +0200 Subject: [PATCH 10/31] Delete res/Sounds/tank_shot.flac deleted tank_shot.flac. It should be added via git-lfs --- res/Sounds/tank_shot.flac | Bin 83742 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 res/Sounds/tank_shot.flac diff --git a/res/Sounds/tank_shot.flac b/res/Sounds/tank_shot.flac deleted file mode 100644 index 1848a00c0fd63f98a106707e9fe16148b50801c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 83742 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 From 9de4aa88fe01c8fbc88575a933c88d6cab7119c5 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 12 Oct 2023 17:29:07 +0200 Subject: [PATCH 11/31] added default ctor to Sound class to make possible compilation of test --- src/Sound.hpp | 2 ++ src/main.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Sound.hpp b/src/Sound.hpp index 2707ff6..df26749 100644 --- a/src/Sound.hpp +++ b/src/Sound.hpp @@ -13,6 +13,8 @@ class Sound { sf::Sound mSound; public: + // default constructor is needed for testing + Sound() = default; Sound(const Sound& sound); Sound(const std::string& file_name); diff --git a/src/main.cpp b/src/main.cpp index f0f8fce..7fe506c 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3,7 +3,7 @@ #include "Board.hpp" int main() { - std::cout << "t24\n"; + std::cout << "t245\n"; Board b; b.run(); return 0; From b3507c5e4acffbb5e504d3f2156e5327e6ee0993 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 12 Oct 2023 17:39:31 +0200 Subject: [PATCH 12/31] corrected formatting in Board.cpp --- src/Board.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Board.cpp b/src/Board.cpp index 724c6b0..2cb612a 100644 --- a/src/Board.cpp +++ b/src/Board.cpp @@ -18,10 +18,10 @@ Board::Board() : mWindow(sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"), mBackgro constexpr float TANK2_Y = 400.0f; Sound tank_shot_sound("tank_shot.flac"); mWindow.setFramerateLimit(30); - mKeyboardPlayer = - std::make_unique(*this, TankFactory::Random(mStore, TANK_X, TANK_Y, tank_shot_sound)); - mDummyPlayer = - std::make_unique(*this, TankFactory::Random(mStore, TANK2_X, TANK2_Y, tank_shot_sound)); + mKeyboardPlayer = std::make_unique( + *this, TankFactory::Random(mStore, TANK_X, TANK_Y, tank_shot_sound)); + mDummyPlayer = std::make_unique( + *this, TankFactory::Random(mStore, TANK2_X, TANK2_Y, tank_shot_sound)); mFont.loadFromFile(files::asset_path() + "DejaVuSans.ttf"); mText.setFont(mFont); } From 12914ddf7d37cb7fcd7d01d22c5638edccf076d7 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop <107147109+bartez33a@users.noreply.github.com> Date: Thu, 12 Oct 2023 20:57:35 +0200 Subject: [PATCH 13/31] Update macos_clang.yaml added workflow_dispatch --- .github/workflows/macos_clang.yaml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/macos_clang.yaml b/.github/workflows/macos_clang.yaml index 2c1529c..bbcbfd9 100644 --- a/.github/workflows/macos_clang.yaml +++ b/.github/workflows/macos_clang.yaml @@ -6,6 +6,25 @@ on: pull_request: branches: - main + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'warning' + type: choice + options: + - info + - warning + - debug + tags: + description: 'Test scenario tags' + required: false + type: boolean + environment: + description: 'Environment to run tests against' + type: environment + required: true env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) From fca57e1da373c7568d9b7a5f8a33b61bef45c67c Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop <107147109+bartez33a@users.noreply.github.com> Date: Thu, 12 Oct 2023 21:02:11 +0200 Subject: [PATCH 14/31] Update macos_clang.yaml restored to previous state --- .github/workflows/macos_clang.yaml | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/.github/workflows/macos_clang.yaml b/.github/workflows/macos_clang.yaml index bbcbfd9..2c1529c 100644 --- a/.github/workflows/macos_clang.yaml +++ b/.github/workflows/macos_clang.yaml @@ -6,25 +6,6 @@ on: pull_request: branches: - main - workflow_dispatch: - inputs: - logLevel: - description: 'Log level' - required: true - default: 'warning' - type: choice - options: - - info - - warning - - debug - tags: - description: 'Test scenario tags' - required: false - type: boolean - environment: - description: 'Environment to run tests against' - type: environment - required: true env: # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) From 93161fc104863fe1365f98541693c7f918d8e812 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 12 Oct 2023 21:21:39 +0200 Subject: [PATCH 15/31] formatted TankTests.cpp --- test/TankTests.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/test/TankTests.cpp b/test/TankTests.cpp index 4acbf05..3fc604c 100644 --- a/test/TankTests.cpp +++ b/test/TankTests.cpp @@ -3,9 +3,9 @@ #include #include +#include "Sound.hpp" #include "SquareRootEngine.hpp" #include "Tank/Tank.hpp" -#include "Sound.hpp" #include "TestUtility.hpp" #include "TracesHandler.hpp" #include "gmock/gmock.h" @@ -39,7 +39,10 @@ struct TankTestData { unsigned int health = 100; Tank create_tank(std::unique_ptr>&& engine) { - return {0, 0, mTextures, std::move(engine), + return {0, + 0, + mTextures, + std::move(engine), emptySound, TracesHandlerConfig{.mMaxTraceAge = 10, .mDecayRate = 0.1f}, shot_cooldown}; From 3b3ffcf840fc04f6436b8464402c2be62da7e0ac Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Sat, 14 Oct 2023 16:43:23 +0200 Subject: [PATCH 16/31] corrected main.cpp added .editorconfig to gitignore --- .gitignore | 1 + src/main.cpp | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 7e10ffd..51ceb82 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/.DS_Store +.editorconfig .vscode .cache build diff --git a/src/main.cpp b/src/main.cpp index 7fe506c..c651d5a 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,6 @@ -#include - #include "Board.hpp" int main() { - std::cout << "t245\n"; Board b; b.run(); return 0; From 1cf7a47820d2c3c9aa1b26e0c0e5d8c80efcb3ee Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Wed, 18 Oct 2023 16:29:24 +0200 Subject: [PATCH 17/31] Created skeleton for GameManager, MainMenu, added Notes - created class GameManager - created class MainMenu - created Notes about SFML --- Notes/SFML notes.md | 13 +++++++++++++ Notes/sf::event.md | 27 +++++++++++++++++++++++++++ src/Board.cpp | 3 ++- src/Board.hpp | 4 ++-- src/GameManager.cpp | 3 +++ src/GameManager.hpp | 27 +++++++++++++++++++++++++++ src/MainMenu.h | 3 +++ src/main.cpp | 6 +++--- 8 files changed, 80 insertions(+), 6 deletions(-) create mode 100644 Notes/SFML notes.md create mode 100644 Notes/sf::event.md create mode 100644 src/GameManager.cpp create mode 100644 src/GameManager.hpp create mode 100644 src/MainMenu.h diff --git a/Notes/SFML notes.md b/Notes/SFML notes.md new file mode 100644 index 0000000..fca3871 --- /dev/null +++ b/Notes/SFML notes.md @@ -0,0 +1,13 @@ +### SFML notes + +# sf::Window - okienko gry, +posiada metody, np.: +- pollEvent, ktora zwraca sf::Event do obslugi eventow jak np. wejścia z klawiatury, myszy. +- waitEvent + +# sf::Event - UWAGA - jest to unia. +Różne metody mogą być wykorzystywane w innym czasie (zależnie czym aktualnie jest instancja sf::Event) + +# only pollEvent and waitEvent produce valid events! +any attempt to use sf::Event which was not returned by successful call to any of these functions will result in undefined behavior. + diff --git a/Notes/sf::event.md b/Notes/sf::event.md new file mode 100644 index 0000000..7760ad4 --- /dev/null +++ b/Notes/sf::event.md @@ -0,0 +1,27 @@ +### sf::Event + +# typical usage of sf::Event + +sf::Event event; + +// while there are pending events... +while (window.pollEvent(event)) +{ + // check the type of the event... + switch (event.type) + { + // window closed + case sf::Event::Closed: + window.close(); + break; + + // key pressed + case sf::Event::KeyPressed: + ... + break; + + // we don't process other types of events + default: + break; + } +} \ No newline at end of file diff --git a/src/Board.cpp b/src/Board.cpp index 2cb612a..191d7fa 100644 --- a/src/Board.cpp +++ b/src/Board.cpp @@ -11,7 +11,8 @@ #include "Tank/TankFactory.hpp" #include "TracesHandler.hpp" -Board::Board() : mWindow(sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"), mBackground(mStore) { +Board::Board(sf::RenderWindow window) + : mWindow{window}(sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"), mBackground(mStore) { constexpr float TANK_X = WIDTH / 2.0f; constexpr float TANK_Y = 50.f; constexpr float TANK2_X = WIDTH / 2.0f; diff --git a/src/Board.hpp b/src/Board.hpp index 3d102db..347f7ae 100644 --- a/src/Board.hpp +++ b/src/Board.hpp @@ -10,7 +10,7 @@ class Board { public: - Board(); + Board(sf::RenderWindow window); void register_missile(const Missle& missile); void run(); @@ -22,7 +22,7 @@ class Board { void draw(); TextureStore mStore; - sf::RenderWindow mWindow; + sf::RenderWindow& mWindow; Background mBackground; std::unique_ptr mKeyboardPlayer; std::unique_ptr mDummyPlayer; diff --git a/src/GameManager.cpp b/src/GameManager.cpp new file mode 100644 index 0000000..661b620 --- /dev/null +++ b/src/GameManager.cpp @@ -0,0 +1,3 @@ +#include "GameManager.hpp" + +GameManager() : mWindow; \ No newline at end of file diff --git a/src/GameManager.hpp b/src/GameManager.hpp new file mode 100644 index 0000000..9229ca8 --- /dev/null +++ b/src/GameManager.hpp @@ -0,0 +1,27 @@ +#pragma once + +#include + +#include "Board.hpp" + +enum class GameManagerState { + MainMenu, + Started, + Exit, +}; + +class GameManager { + public: + GameManager(); + + private: + // objects + GameManagerState mGameManagerState = GameManagerState::MainMenu; + sf::RenderWindow mWindow; + Board board; + + // methods + void start(); + void transitState(GameManagerState desired_state); + void exit; +} \ No newline at end of file diff --git a/src/MainMenu.h b/src/MainMenu.h new file mode 100644 index 0000000..7acca6d --- /dev/null +++ b/src/MainMenu.h @@ -0,0 +1,3 @@ +#pragma once + +class MainMenu {} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index c651d5a..9bfe774 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,7 +1,7 @@ -#include "Board.hpp" +#include "GameManager.hpp" int main() { - Board b; - b.run(); + GameManager gm{}; + gm.start(); return 0; } From 3a8e3d0ec9a139a4ebce308aeb64071358376914 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Sat, 21 Oct 2023 19:31:00 +0200 Subject: [PATCH 18/31] Added more notes --- Notes/Graphics module/drawing 2D stuff.md | 143 ++++++++++++++++++ Notes/Graphics module/sprites_textures.md | 176 ++++++++++++++++++++++ Notes/Window module/OpenGL in SFML.md | 82 ++++++++++ Notes/{ => Window module}/SFML notes.md | 0 Notes/Window module/inputs.md | 95 ++++++++++++ Notes/Window module/sf::event.md | 60 ++++++++ Notes/sf::event.md | 27 ---- 7 files changed, 556 insertions(+), 27 deletions(-) create mode 100644 Notes/Graphics module/drawing 2D stuff.md create mode 100644 Notes/Graphics module/sprites_textures.md create mode 100644 Notes/Window module/OpenGL in SFML.md rename Notes/{ => Window module}/SFML notes.md (100%) create mode 100644 Notes/Window module/inputs.md create mode 100644 Notes/Window module/sf::event.md delete mode 100644 Notes/sf::event.md diff --git a/Notes/Graphics module/drawing 2D stuff.md b/Notes/Graphics module/drawing 2D stuff.md new file mode 100644 index 0000000..ba3358d --- /dev/null +++ b/Notes/Graphics module/drawing 2D stuff.md @@ -0,0 +1,143 @@ +### Drawing 2D stuff + +## Introduction + As you learnt in the previous tutorials, SFML's window module provides an easy way to open an OpenGL window and handle its events, but it doesn't help when it comes to drawing something. The only option which is left to you is to use the powerful, yet complex and low level OpenGL API. + +Fortunately, SFML provides a graphics module which will help you draw 2D entities in a much simpler way than with OpenGL. + +## The drawing window +To draw the entities provided by the graphics module, you must use a specialized window class: `sf::RenderWindow`. This class is derived from `sf::Window`, and inherits all its functions. Everything that you've learnt about sf::Window (creation, event handling, controlling the framerate, mixing with OpenGL, etc.) is applicable to `sf::RenderWindow` as well. + +On top of that, `sf::RenderWindow` adds high-level functions to help you draw things easily. +In this tutorial we'll focus on two of these functions: +- clear and +- draw. +They are as simple as their name implies: +- clear clears the whole window with the chosen color, and +- draw draws whatever object you pass to it. + +Here is what a typical main loop looks like with a render window: + +#include + +int main() +{ + // create the window + sf::RenderWindow window(sf::VideoMode(800, 600), "My window"); + + // run the program as long as the window is open + while (window.isOpen()) + { + // check all the window's events that were triggered since the last iteration of the loop + sf::Event event; + while (window.pollEvent(event)) + { + // "close requested" event: we close the window + if (event.type == sf::Event::Closed) + window.close(); + } + + // clear the window with black color + window.clear(sf::Color::Black); + + // draw everything here... + // window.draw(...); + + // end the current frame + window.display(); + } + + return 0; +} + +Calling clear before drawing anything is mandatory, otherwise the contents from previous frames will be present behind anything you draw. +The only exception is when you cover the entire window with what you draw, so that no pixel is not drawn to. In this case you can avoid calling clear (although it won't have a noticeable impact on performance). + +Calling display is also mandatory, it takes what was drawn since the last call to display and displays it on the window. Indeed, things are not drawn directly to the window, but to a hidden buffer. This buffer is then copied to the window when you call display -- this is called double-buffering. + +This clear/draw/display cycle is the only good way to draw things. Don't try other strategies, such as keeping pixels from the previous frame, "erasing" pixels, or drawing once and calling display multiple times. You'll get strange results due to double-buffering. +Modern graphics hardware and APIs are really made for repeated clear/draw/display cycles where everything is completely refreshed at each iteration of the main loop. Don't be scared to draw 1000 sprites 60 times per second, you're far below the millions of triangles that your computer can handle. + +## What can I draw now? +Now that you have a main loop which is ready to draw, let's see what, and how, you can actually draw there. + +SFML provides four kinds of drawable entities: three of them are ready to be used (sprites, text and shapes), the last one is the building block that will help you create your own drawable entities (vertex arrays). + +Although they share some common properties, each of these entities come with their own nuances and are therefore explained in dedicated tutorials. + +## Off-screen drawing +SFML also provides a way to draw to a texture instead of directly to a window. +To do so, use a `sf::RenderTexture` instead of a `sf::RenderWindow`. +It has the same functions for drawing, inherited from their common base: `sf::RenderTarget`. + + +// create a 500x500 render-texture +sf::RenderTexture renderTexture; +if (!renderTexture.create(500, 500)) +{ + // error... +} + +// drawing uses the same functions +renderTexture.clear(); +renderTexture.draw(sprite); // or any other drawable +renderTexture.display(); + +// get the target texture (where the stuff has been drawn) +const sf::Texture& texture = renderTexture.getTexture(); + +// draw it to the window +sf::Sprite sprite(texture); +window.draw(sprite); + + +The getTexture function returns a read-only texture, which means that you can only use it, not modify it. If you need to modify it before using it, you can copy it to your own sf::Texture instance and modify that instead. + +sf::RenderTexture also has the same functions as sf::RenderWindow for handling views and OpenGL (see the corresponding tutorials for more details). If you use OpenGL to draw to the render-texture, you can request creation of a depth buffer by using the third optional argument of the create function. + +renderTexture.create(500, 500, true); // enable depth buffer + +## Drawing from threads +SFML supports multi-threaded drawing, and you don't even have to do anything to make it work. +The only thing to remember is to deactivate a window before using it in another thread. +That's because a window (more precisely its OpenGL context) cannot be active in more than one thread at the same time. + +void renderingThread(sf::RenderWindow* window) +{ + // activate the window's context + window->setActive(true); + + // the rendering loop + while (window->isOpen()) + { + // draw... + + // end the current frame + window->display(); + } +} + +int main() +{ + // create the window (remember: it's safer to create it in the main thread due to OS limitations) + sf::RenderWindow window(sf::VideoMode(800, 600), "OpenGL"); + + // deactivate its OpenGL context + window.setActive(false); + + // launch the rendering thread + sf::Thread thread(&renderingThread, &window); + thread.launch(); + + // the event/logic/whatever loop + while (window.isOpen()) + { + ... + } + + return 0; +} + +As you can see, you don't even need to bother with the activation of the window in the rendering thread, SFML does it automatically for you whenever it needs to be done. + +Remember to always create the window and handle its events in the main thread for maximum portability. This is explained in the window tutorial. \ No newline at end of file diff --git a/Notes/Graphics module/sprites_textures.md b/Notes/Graphics module/sprites_textures.md new file mode 100644 index 0000000..8298bff --- /dev/null +++ b/Notes/Graphics module/sprites_textures.md @@ -0,0 +1,176 @@ +### Sprites and textures + +Most (if not all) of you are already familiar with these two very common objects, so let's define them very briefly. + +A texture is an image. But we call it "texture" because it has a very specific role: being mapped to a 2D entity. + +A sprite is nothing more than a textured rectangle. + +## Loading a texture + +Before creating any sprite, we need a valid texture. The class that encapsulates textures in SFML is, surprisingly, `sf::Texture`. +Since the only role of a texture is to be loaded and mapped to graphical entities, almost all its functions are about loading and updating it. + +The most common way of loading a texture is from an image file on disk, which is done with the loadFromFile function. + +sf::Texture texture; +if (!texture.loadFromFile("image.png")) +{ + // error... +} + +# The loadFromFile function can sometimes fail with no obvious reason`. +First, check the error message that SFML prints to the standard output (check the console). +If the message is "unable to open file", make sure that the working directory (which is the directory that any file path will be interpreted relative to) is what you think it is: +When you run the application from your desktop environment, the working directory is the executable folder. +However, when you launch your program from your IDE (Visual Studio, Code::Blocks, ...) the working directory might sometimes be set to the project directory instead. +This can usually be changed quite easily in the project settings. + +You can also load an image file from memory (loadFromMemory), +from a custom input stream (loadFromStream), or +from an image that has already been loaded (loadFromImage). +The latter loads the texture from an sf::Image, which is a utility class that helps store and manipulate image data (modify pixels, create transparency channel, etc.). +The pixels of an sf::Image stay in system memory, which ensures that operations on them will be as fast as possible, in contrast to the pixels of a texture which reside in video memory and are therefore slow to retrieve or update but very fast to draw. + +SFML supports most common image file formats. The full list is available in the API documentation. + +All these loading functions have an optional argument, which can be used if you want to load a smaller part of the image. + + +// load a 32x32 rectangle that starts at (10, 10) +if (!texture.loadFromFile("image.png", sf::IntRect(10, 10, 32, 32))) +{ + // error... +} + + +The sf::IntRect class is a simple utility type that represents a rectangle. Its constructor takes the coordinates of the top-left corner, and the size of the rectangle. + +If you don't want to load a texture from an image, but instead want to update it directly from an array of pixels, you can create it empty and update it later: + +// create an empty 200x200 texture +if (!texture.create(200, 200)) +{ + // error... +} + +Note that the contents of the texture are undefined at this point. + +To update the pixels of an existing texture, you have to use the update function. It has overloads for many kinds of data sources: + +// update a texture from an array of pixels +sf::Uint8* pixels = new sf::Uint8[width * height * 4]; // * 4 because pixels have 4 components (RGBA) +... +texture.update(pixels); + +// update a texture from a sf::Image +sf::Image image; +... +texture.update(image); + +// update the texture from the current contents of the window +sf::RenderWindow window; +... +texture.update(window); + + +These examples all assume that the source is of the same size as the texture. If this is not the case, i.e. if you want to update only a part of the texture, you can specify the coordinates of the sub-rectangle that you want to update. You can refer to the documentation for further details. + +Additionally, a texture has two properties that change how it is rendered. + +The first property allows one to smooth the texture. Smoothing a texture makes pixel boundaries less visible (but the image a little more blurry), which can be desirable if it is up-scaled. + +`texture.setSmooth(true);` + +Since smoothing samples from adjacent pixels in the texture as well, it can lead to the unwanted side effect of factoring in pixels outside the selected texture area. This can happen when your sprite is located at non-integer coordinates. + +The second property allows a texture to be repeatedly tiled within a single sprite. + +`texture.setRepeated(true);` + +This only works if your sprite is configured to show a rectangle which is larger than the texture, otherwise this property has no effect. + + + +## Ok, can I have my sprite now? + +Yes, you can now create your sprite. + +sf::Sprite sprite; +sprite.setTexture(texture); + +... and finally draw it. + +// inside the main loop, between window.clear() and window.display() +window.draw(sprite); + +If you don't want your sprite to use the entire texture, you can set its texture rectangle. + +sprite.setTextureRect(sf::IntRect(10, 10, 32, 32)); + +You can also change the color of a sprite. The color that you set is modulated (multiplied) with the texture of the sprite. This can also be used to change the global transparency (alpha) of the sprite. + +sprite.setColor(sf::Color(0, 255, 0)); // green +sprite.setColor(sf::Color(255, 255, 255, 128)); // half transparent + + +Sprites can also be transformed: They have a position, an orientation and a scale. + +// position +sprite.setPosition(sf::Vector2f(10.f, 50.f)); // absolute position +sprite.move(sf::Vector2f(5.f, 10.f)); // offset relative to the current position + +// rotation +sprite.setRotation(90.f); // absolute angle +sprite.rotate(15.f); // offset relative to the current angle + +// scale +sprite.setScale(sf::Vector2f(0.5f, 2.f)); // absolute scale factor +sprite.scale(sf::Vector2f(1.5f, 3.f)); // factor relative to the current scale + +By default, the origin for these three transformations is the top-left corner of the sprite. If you want to set the origin to a different point (for example the center of the sprite, or another corner), you can use the setOrigin function. + +sprite.setOrigin(sf::Vector2f(25.f, 25.f)); + +Since transformation functions are common to all SFML entities, they are explained in a separate tutorial: Transforming entities. + +## The white square problem + +You successfully loaded a texture, constructed a sprite correctly, and... all you see on your screen now is a white square. What happened? + +This is a common mistake. When you set the texture of a sprite, all it does internally is store a pointer to the texture instance. Therefore, if the texture is destroyed or moves elsewhere in memory, the sprite ends up with an invalid texture pointer. + +This problem occurs when you write this kind of function: + +sf::Sprite loadSprite(std::string filename) +{ + sf::Texture texture; + texture.loadFromFile(filename); + + return sf::Sprite(texture); +} // error: the texture is destroyed here + +`You must correctly manage the lifetime of your textures and make sure that they live as long as they are used by any sprite.` + +## The importance of using as few textures as possible +Using as few textures as possible is a good strategy, and the reason is simple: Changing the current texture is an expensive operation for the graphics card. Drawing many sprites that use the same texture will yield the best performance. + +Additionally, using a single texture allows you to group static geometry into a single entity (you can only use one texture per draw call), which will be much faster to draw than a set of many entities. Batching static geometry involves other classes and is therefore beyond the scope of this tutorial, for further details see the vertex array tutorial. + +Try to keep this in mind when you create your animation sheets or your tilesets: Use as little textures as possible. + +## Using sf::Texture with OpenGL code +If you're using OpenGL rather than the graphics entities of SFML, you can still use sf::Texture as a wrapper around an OpenGL texture object and use it along with the rest of your OpenGL code. + +To bind a sf::Texture for drawing (basically glBindTexture), you call the bind static function: + +sf::Texture texture; +... + +// bind the texture +sf::Texture::bind(&texture); + +// draw your textured OpenGL entity here... + +// bind no texture +sf::Texture::bind(NULL); diff --git a/Notes/Window module/OpenGL in SFML.md b/Notes/Window module/OpenGL in SFML.md new file mode 100644 index 0000000..1c7cc80 --- /dev/null +++ b/Notes/Window module/OpenGL in SFML.md @@ -0,0 +1,82 @@ +### OpenGL in SFML + +As you know, one of the most important features of OpenGL is portability. But OpenGL alone won't be enough to create complete programs: you need a window, a rendering context, user input, etc. You would have no choice but to write OS-specific code to handle this stuff on your own. That's where the sfml-window module comes into play. Let's see how it allows you to play with OpenGL. + +# Including and linking OpenGL + +OpenGL headers are not the same on every OS. Therefore, SFML provides an "abstract" header that takes care of including the right file for you. + +`#include ` + +This header includes OpenGL functions, and nothing else. People sometimes think that SFML automatically includes OpenGL extension headers because SFML loads extensions itself, but it's an implementation detail. From the user's point of view, OpenGL extension loading must be handled like any other external library. + +You will then need to link your program to the OpenGL library. Unlike what it does with the headers, SFML can't provide a unified way of linking OpenGL. Therefore, you need to know which library to link to according to what operating system you're using ("opengl32" on Windows, "GL" on Linux, etc.). + +OpenGL functions start with the "gl" prefix. Remember this when you get linker errors, it will help you find which library you forgot to link. + +## Creating an OpenGL window + +Since SFML is based on OpenGL, its windows are ready for OpenGL calls without any extra effort. + +sf::Window window(sf::VideoMode(800, 600), "OpenGL"); + +// it works out of the box +glEnable(GL_TEXTURE_2D); +... + + +## A typical OpenGL-with-SFML program + + Here is what a complete OpenGL program would look like with SFML: + +#include +#include + +int main() +{ + // create the window + sf::Window window(sf::VideoMode(800, 600), "OpenGL", sf::Style::Default, sf::ContextSettings(32)); + window.setVerticalSyncEnabled(true); + + // activate the window + window.setActive(true); + + // load resources, initialize the OpenGL states, ... + + // run the main loop + bool running = true; + while (running) + { + // handle events + sf::Event event; + while (window.pollEvent(event)) + { + if (event.type == sf::Event::Closed) + { + // end the program + running = false; + } + else if (event.type == sf::Event::Resized) + { + // adjust the viewport when the window is resized + glViewport(0, 0, event.size.width, event.size.height); + } + } + + // clear the buffers + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); + + // draw... + + // end the current frame (internally swaps the front and back buffers) + window.display(); + } + + // release resources... + + return 0; +} + +Here we don't use window.isOpen() as the condition of the main loop, because we need the window to remain open until the program ends, so that we still have a valid OpenGL context for the last iteration of the loop and the cleanup code. + +Don't hesitate to have a look at the "OpenGL" and "Window" examples in the SFML SDK if you have further problems, they are more complete and most likely contain solutions to your problems. \ No newline at end of file diff --git a/Notes/SFML notes.md b/Notes/Window module/SFML notes.md similarity index 100% rename from Notes/SFML notes.md rename to Notes/Window module/SFML notes.md diff --git a/Notes/Window module/inputs.md b/Notes/Window module/inputs.md new file mode 100644 index 0000000..d33e37e --- /dev/null +++ b/Notes/Window module/inputs.md @@ -0,0 +1,95 @@ +### Inputs -> keyboard, mouse, joystick + +This tutorial explains how to access global input devices: keyboard, mouse and joysticks. This must not be confused with events. +Real-time input allows you to query the global state of keyboard, mouse and joysticks at any time ("is this button currently pressed?", "where is the mouse currently?") while events notify you when something happens ("this button was pressed", "the mouse has moved"). + + +## Keyboard +The class that provides access to the keyboard state is sf::Keyboard. It contains two overloads of the same function, isKeyPressed, which checks the current state of a key (pressed or released). It is a static function, so you don't need to instantiate sf::Keyboard to use it. + +This function directly reads the keyboard state, ignoring the focus state of your window. This means that isKeyPressed may return true, even if your window is inactive. + +if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) +{ + // left key is pressed: move our character + character.move(-1.f, 0.f); +} + + Key codes are defined in the sf::Keyboard::Key enum. + +if (sf::Keyboard::isKeyPressed(sf::Keyboard::Scan::Right)) +{ + // right key is pressed: move our character + character.move(1.f, 0.f); +} + +Scancodes are defined in the sf::Keyboard::Scancode enum. + +## Mouse + The class that provides access to the mouse state is sf::Mouse. Like its friend sf::Keyboard, sf::Mouse only contains static functions and is not meant to be instantiated (SFML only handles a single mouse for the time being). + +You can check if buttons are pressed: + +if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) +{ + // left mouse button is pressed: shoot + gun.fire(); +} + +Mouse button codes are defined in the sf::Mouse::Button enum. SFML supports up to 5 buttons: left, right, middle (wheel), and two additional buttons whatever they may be. + + You can also get and set the current position of the mouse, either relative to the desktop or to a window: + +// get the global mouse position (relative to the desktop) +sf::Vector2i globalPosition = sf::Mouse::getPosition(); + +// get the local mouse position (relative to a window) +sf::Vector2i localPosition = sf::Mouse::getPosition(window); // window is a sf::Window + +// set the mouse position globally (relative to the desktop) +sf::Mouse::setPosition(sf::Vector2i(10, 50)); + +// set the mouse position locally (relative to a window) +sf::Mouse::setPosition(sf::Vector2i(10, 50), window); // window is a sf::Window + +There is no function for reading the current state of the mouse wheel. Since the wheel can only be moved relatively, it has no absolute state that can be queried. By looking at a key you can tell whether it's pressed or released. By looking at the mouse cursor you can tell where it is located on the screen. However, looking at the mouse wheel doesn't tell you which "tick" it is on. You can only be notified when it moves (MouseWheelScrolled event). + + +## Joystick +The class that provides access to the joysticks' states is sf::Joystick. Like the other classes in this tutorial, it only contains static functions. + +Joysticks are identified by their index (0 to 7, since SFML supports up to 8 joysticks). Therefore, the first argument of every function of sf::Joystick is the index of the joystick that you want to query. + + You can check whether a joystick is connected or not: + +if (sf::Joystick::isConnected(0)) +{ + // joystick number 0 is connected + ... +} + +You can also get the capabilities of a connected joystick: + +// check how many buttons joystick number 0 has +unsigned int buttonCount = sf::Joystick::getButtonCount(0); + +// check if joystick number 0 has a Z axis +bool hasZ = sf::Joystick::hasAxis(0, sf::Joystick::Z); + +Joystick axes are defined in the sf::Joystick::Axis enum. Since buttons have no special meaning, they are simply numbered from 0 to 31. + +Finally, you can query the state of a joystick's axes and buttons as well: + +// is button 1 of joystick number 0 pressed? +if (sf::Joystick::isButtonPressed(0, 1)) +{ + // yes: shoot! + gun.fire(); +} + +// what's the current position of the X and Y axes of joystick number 0? +float x = sf::Joystick::getAxisPosition(0, sf::Joystick::X); +float y = sf::Joystick::getAxisPosition(0, sf::Joystick::Y); +character.move(x, y); + +Joystick states are automatically updated when you check for events. If you don't check for events, or need to query a joystick state (for example, checking which joysticks are connected) before starting your game loop, you'll have to manually call the sf::Joystick::update() function yourself to make sure that the joystick states are up to date. \ No newline at end of file diff --git a/Notes/Window module/sf::event.md b/Notes/Window module/sf::event.md new file mode 100644 index 0000000..9f7adc0 --- /dev/null +++ b/Notes/Window module/sf::event.md @@ -0,0 +1,60 @@ +### sf::Event + +# typical usage of sf::Event + +sf::Event event; + +// while there are pending events... +while (window.pollEvent(event)) +{ + // check the type of the event... + switch (event.type) + { + // window closed + case sf::Event::Closed: + window.close(); + break; + + // key pressed + case sf::Event::KeyPressed: + ... + break; + + // we don't process other types of events + default: + break; + } +} + +# The Closed event +The sf::Event::Closed event is triggered when the user wants to close the window, through any of the possible methods. +The event only represent a close request, the window is not closed yet when the event is received. + +We can save current state of game and close window. + +# The Resized event +The sf::Event::Resized event is triggered when the window is resized (by user or e.g. calling window.setSize). + +# The LostFocus and GainedFocus events +The sf::Event::LostFocus and sf::Event::GainedFocus events are triggered when the window loses/gains focus, which happens when the user switches the currently active window. +When the window is out of focus, it doesn't receive keyboard events. + + There's no member associated with these events in the sf::Event union. + +if (event.type == sf::Event::LostFocus) + myGame.pause(); + +if (event.type == sf::Event::GainedFocus) + myGame.resume(); + +# Other event such as keyboard or mouse input. +https://www.sfml-dev.org/tutorials/2.6/window-events.php + + +## Keyboard input tips + Sometimes, people try to react to KeyPressed events directly to implement smooth movement. Doing so will not produce the expected effect, because when you hold a key you only get a few events (remember, the repeat delay). To achieve smooth movement with events, you must use a boolean that you set on KeyPressed and clear on KeyReleased; you can then move (independently of events) as long as the boolean is set. +The other (easier) solution to produce smooth movement is to use real-time keyboard input with sf::Keyboard (see the dedicated tutorial). + + Scancodes are unique values for each physical key on a keyboard, regardless of the language or layout, whereas key codes represent keys based on the user's chosen layout. For instance, the Z key is in the bottom row to the left of the X key on a US layout. Referring to the scancode for Z would identify this physical key location on any keyboard. However, on a German layout, the same physical key is labeled Y. Thus, using the key code for Y can lead to different physical key locations, depending on the chosen layout. + +It is strongly recommended to use scancodes over key codes if the physical location of the keys is more important than the key values that depend on the keyboard layout, such as using WASD keys for movement. \ No newline at end of file diff --git a/Notes/sf::event.md b/Notes/sf::event.md deleted file mode 100644 index 7760ad4..0000000 --- a/Notes/sf::event.md +++ /dev/null @@ -1,27 +0,0 @@ -### sf::Event - -# typical usage of sf::Event - -sf::Event event; - -// while there are pending events... -while (window.pollEvent(event)) -{ - // check the type of the event... - switch (event.type) - { - // window closed - case sf::Event::Closed: - window.close(); - break; - - // key pressed - case sf::Event::KeyPressed: - ... - break; - - // we don't process other types of events - default: - break; - } -} \ No newline at end of file From 6786c7e1549f03bd124618740474a58ff5d7e9e1 Mon Sep 17 00:00:00 2001 From: Bartosz Rozenkop Date: Thu, 26 Oct 2023 18:07:22 +0200 Subject: [PATCH 19/31] Created classes Button, MenuLevel - created classes Button, MenuLevel - modified class MainMenu - modified class Board --- src/Board.cpp | 41 +++++++++++--------------------- src/Board.hpp | 4 ++-- src/Button.cpp | 6 +++++ src/Button.hpp | 24 +++++++++++++++++++ src/GameManager.cpp | 57 ++++++++++++++++++++++++++++++++++++++++++++- src/GameManager.hpp | 7 +++--- src/MainMenu.cpp | 9 +++++++ src/MainMenu.h | 42 ++++++++++++++++++++++++++++++++- src/MenuLevel.cpp | 1 + src/MenuLevel.hpp | 15 ++++++++++++ 10 files changed, 172 insertions(+), 34 deletions(-) create mode 100644 src/Button.cpp create mode 100644 src/Button.hpp create mode 100644 src/MainMenu.cpp create mode 100644 src/MenuLevel.cpp create mode 100644 src/MenuLevel.hpp diff --git a/src/Board.cpp b/src/Board.cpp index 191d7fa..e12e79f 100644 --- a/src/Board.cpp +++ b/src/Board.cpp @@ -11,8 +11,7 @@ #include "Tank/TankFactory.hpp" #include "TracesHandler.hpp" -Board::Board(sf::RenderWindow window) - : mWindow{window}(sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"), mBackground(mStore) { +Board::Board(sf::RenderWindow& window) : mWindow{window}, mBackground(mStore) { constexpr float TANK_X = WIDTH / 2.0f; constexpr float TANK_Y = 50.f; constexpr float TANK2_X = WIDTH / 2.0f; @@ -30,7 +29,6 @@ Board::Board(sf::RenderWindow window) void Board::register_missile(const Missle& missile) { mMissles.push_back(missile); } void Board::draw() { - mWindow.clear(); mBackground.draw(mWindow); if (mKeyboardPlayer) { mKeyboardPlayer->draw(mWindow); @@ -42,34 +40,23 @@ void Board::draw() { missle.draw(mWindow); } display_speed(); - mWindow.display(); } -void Board::run() { - while (mWindow.isOpen()) { - sf::Event event{}; - while (mWindow.pollEvent(event)) { - if (event.type == sf::Event::Closed) { - mWindow.close(); - } +void Board::play(const sf::Event& event) { + if (mKeyboardPlayer) { + mKeyboardPlayer->handle_events(event); + } - if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) { - mWindow.close(); - } - if (mKeyboardPlayer) { - mKeyboardPlayer->handle_events(event); - } - } - if (mDummyPlayer) { - mDummyPlayer->update(); - } - if (mKeyboardPlayer) { - mKeyboardPlayer->update(); - } - draw(); - remove_missles(); - update_players(); + if (mDummyPlayer) { + mDummyPlayer->update(); + } + + if (mKeyboardPlayer) { + mKeyboardPlayer->update(); } + draw(); + remove_missles(); + update_players(); } void Board::display_speed() { diff --git a/src/Board.hpp b/src/Board.hpp index 347f7ae..8a0686d 100644 --- a/src/Board.hpp +++ b/src/Board.hpp @@ -10,10 +10,10 @@ class Board { public: - Board(sf::RenderWindow window); + Board(sf::RenderWindow& window); void register_missile(const Missle& missile); - void run(); + void play(const sf::Event& event); private: void remove_missles(); diff --git a/src/Button.cpp b/src/Button.cpp new file mode 100644 index 0000000..7751999 --- /dev/null +++ b/src/Button.cpp @@ -0,0 +1,6 @@ +#include "Button.hpp" + +Button::Button(std::string text, void (*callback)(void), LevelOfMenu* nextLevel = nullptr) + : mText{text}, mCallback{callback}, mNextLevel{nextLevel} {} + +bool Button::is_clicked(const sf::Event& event){}; \ No newline at end of file diff --git a/src/Button.hpp b/src/Button.hpp new file mode 100644 index 0000000..2119c72 --- /dev/null +++ b/src/Button.hpp @@ -0,0 +1,24 @@ +#pragma once + +#include +#include +#include + +#include "MenuLevel.hpp" + +using point_t = sf::Vector2u; + +class Button { + std::string mText; + MenuLevel* mNextLevel; + point_t mTopLeft; + unsigned int mWidth; + unsigned int mHeight; + + void (*mCallback)(void); + + public: + Button(std::string text, void (*callback)(void), MenuLevel* nextLevel = nullptr); + + bool is_clicked(const sf::Event& event); +}; \ No newline at end of file diff --git a/src/GameManager.cpp b/src/GameManager.cpp index 661b620..e00a92f 100644 --- a/src/GameManager.cpp +++ b/src/GameManager.cpp @@ -1,3 +1,58 @@ #include "GameManager.hpp" -GameManager() : mWindow; \ No newline at end of file +#include "Size.hpp" + +GameManager::GameManager() + : mWindow{sf::VideoMode(WIDTH, HEIGHT), "TankBotFight"}, mBoard{mWindow} {} + +void GameManager::start() { + while (mWindow.isOpen()) { + // check all the window's events that were triggered since the last iteration of the loop + sf::Event event; + while (mWindow.pollEvent(event)) { + // "close requested" event: we close the window + if (event.type == sf::Event::Closed) { + mGameManagerState = GameManagerState::Exit; + } + if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape) { + mGameManagerState = GameManagerState::Exit; + } + } + + // clear the window with black color + mWindow.clear(sf::Color::Black); + + performStateMachine(event); + + // end the current frame + mWindow.display(); + } +} +#include +void GameManager::performStateMachine(const sf::Event& event) { + switch (mGameManagerState) { + case GameManagerState::MainMenu: + [this]() { + std::string input; + std::cout << "Welcome to the game!\n"; + std::cout << "1. Play\n2. Exit\nSelect: "; + std::cin >> input; + switch (input[0]) { + case '1': + mGameManagerState = GameManagerState::Started; + break; + case '2': + mGameManagerState = GameManagerState::Exit; + break; + } + }(); + + break; + case GameManagerState::Started: + mBoard.play(event); + break; + case GameManagerState::Exit: + mWindow.close(); + break; + } +} diff --git a/src/GameManager.hpp b/src/GameManager.hpp index 9229ca8..cb8c970 100644 --- a/src/GameManager.hpp +++ b/src/GameManager.hpp @@ -18,10 +18,11 @@ class GameManager { // objects GameManagerState mGameManagerState = GameManagerState::MainMenu; sf::RenderWindow mWindow; - Board board; + Board mBoard; // methods + public: void start(); void transitState(GameManagerState desired_state); - void exit; -} \ No newline at end of file + void performStateMachine(const sf::Event& event); +}; \ No newline at end of file diff --git a/src/MainMenu.cpp b/src/MainMenu.cpp new file mode 100644 index 0000000..7c480cd --- /dev/null +++ b/src/MainMenu.cpp @@ -0,0 +1,9 @@ +#include "MainMenu.h" + +void MainMenu::process_and_draw(const sf::Event& event) { + // process inputs + + // draw menu + + // perform actions +} diff --git a/src/MainMenu.h b/src/MainMenu.h index 7acca6d..367d7fa 100644 --- a/src/MainMenu.h +++ b/src/MainMenu.h @@ -1,3 +1,43 @@ #pragma once +#include -class MainMenu {} \ No newline at end of file +// Item: Level +// Level --> Items +// Level contain items. each item contain pointer to next and previous level + +// MainMenu: Start, Options, Exit +// Start: --> start game +// Options --> back. +// Exit --> exit. + +void main_menu_start_callback(void) { std::cout << "Start clicked!\n"; } +void main_menu_options_callback(void) { std::cout << "Options clicked!\n"; } +void main_menu_exit_callback(void) { std::cout << "Exit clicked!\n"; } + +extern LevelOfMenu options; + +// menu objects +LevelOfMenu main_menu{{ + {"Start", main_menu_start_callback, nullptr}, + {"Options", main_menu_options_callback, &options}, + {"Exit" main_menu_exit_callback, nullptr}, + }, + nullptr}; + +void options_back_callback(void){std::cout << "Options: back clicked\n"} + +LevelOfMenu options{{"Back", options_back_callback}, &main_menu}; + +class MainMenu { + public: + MainMenu(sf::Window& window, std::initializer_list menuLevelPtrs, + LevelOfMenu* currentLevel = nullptr) + : mWindow{window}, mCurrentLevel{currentLevel} {} + + void process_and_draw(const sf::Event& event); + + private: + sf::Window& mWindow; + std::vector mMenuLevelPtrs; + LevelOfMenu* mCurrentLevel = nullptr; +}; \ No newline at end of file diff --git a/src/MenuLevel.cpp b/src/MenuLevel.cpp new file mode 100644 index 0000000..a9f59ab --- /dev/null +++ b/src/MenuLevel.cpp @@ -0,0 +1 @@ +#include "MenuLevel.hpp" \ No newline at end of file diff --git a/src/MenuLevel.hpp b/src/MenuLevel.hpp new file mode 100644 index 0000000..70e4b36 --- /dev/null +++ b/src/MenuLevel.hpp @@ -0,0 +1,15 @@ +#pragma once + +#include +#include + +#include "Button.hpp" + +class MenuLevel { + std::vector