Add alot of memory leak fixes

This commit is contained in:
Bram Verhulst
2024-04-23 11:17:17 +02:00
parent e75b80eea8
commit 1b90f222a4
27 changed files with 234 additions and 48 deletions

View File

@@ -11,24 +11,33 @@
</component>
<component name="ChangeListManager">
<list default="true" id="26a0623a-44d5-441c-8048-32ff1dab3479" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/Game/GroundTileTypeManager.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/GroundTileTypeManager.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/.idea.Motherload/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.Motherload/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/BaseGame.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/BaseGame.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/BaseGame.h" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/BaseGame.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/Text.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/Text.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Animations/Animation.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Animations/Animation.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Animations/Animation.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Animations/Animation.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Game.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Game.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Game.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Game.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Game.vcxproj" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Game.vcxproj" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Game.vcxproj.filters" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Game.vcxproj.filters" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/GridSystem/WorldGridManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GridSystem/WorldGridManager.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/GridSystem/WorldGridManager.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GridSystem/WorldGridManager.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/GridSystem/WorldTile.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GridSystem/WorldTile.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/GridSystem/WorldTile.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GridSystem/WorldTile.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Levels/World/Building.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/World/Building.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screen.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screen.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Levels/MainMenu/MainMenuLevel.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/MainMenu/MainMenuLevel.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Levels/World/Building.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/World/Building.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Levels/World/WorldLevel.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/World/WorldLevel.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Levels/World/WorldLevel.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/World/WorldLevel.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Player.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Player.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Player.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Player.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/TextureManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/TextureManager.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/TextureManager.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/TextureManager.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/main.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/main.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Lava_1.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Lava_2.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Lava_3.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Stone_1.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Stone_2.jpg" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Resources/tiles/ores/Ore_Stone_3.jpg" beforeDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -43,14 +52,17 @@
</option>
</component>
<component name="HighlightingSettingsPerFile">
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/type_traits" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/vector" root0="SKIP_HIGHLIGHTING" />
<setting file="mock://C:/Users/Bram/Desktop/Programming 2/Exam/dae16-VerhulstBram/Game/Animations/Animation.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Animations/Animation.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Camera.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="mock://C:/Users/Bram/Desktop/Programming 2/Exam/dae16-VerhulstBram/Game/Gui/Screens/FuelScreen.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/pch.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/pch.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../week6/Lab/Lab6/Game.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../week6/Lab/Lab6/main.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../week6/Lab/Lab6/pch.h" root0="SKIP_HIGHLIGHTING" />
</component>
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
@@ -70,7 +82,7 @@
</component>
<component name="PropertiesComponent"><![CDATA[{
"keyToString": {
"C++ Project.Game.executor": "Run",
"C++ Project.Game.executor": "Debug",
"RunOnceActivity.OpenProjectViewOnStart": "true",
"RunOnceActivity.ShowReadmeOnStart": "true",
"ignore.virus.scanning.warn.message": "true",
@@ -79,7 +91,7 @@
"node.js.selected.package.eslint": "(autodetect)",
"node.js.selected.package.tslint": "(autodetect)",
"nodejs_package_manager_path": "npm",
"settings.editor.selected.configurable": "preferences.CppConfiguration",
"settings.editor.selected.configurable": "preferences.pluginManager",
"vue.rearranger.settings.migration": "true"
},
"keyToStringList": {
@@ -212,6 +224,9 @@
<workItem from="1713796697935" duration="987000" />
<workItem from="1713807176793" duration="5224000" />
<workItem from="1713817523511" duration="347000" />
<workItem from="1713853942608" duration="1816000" />
<workItem from="1713855878621" duration="24000" />
<workItem from="1713858589244" duration="4723000" />
</task>
<task id="LOCAL-00001" summary="Rework Tile detection system">
<option name="closed" value="true" />

View File

@@ -10,6 +10,7 @@ Text::Text(const std::string& text, const std::string& fontPath, int size, const
}
Text::~Text() {
if(m_IsCreatedOk && m_Texture->IsCreationOk()) {
delete m_Texture;
}
}
void Text::Draw(const Vector2f& pos) const {

View File

@@ -4,8 +4,6 @@
#include "utils.h"
Animation::Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect): m_pTexture(pTexture), m_SrcRect(srcRect), m_Frames(frames) {
}
Animation::~Animation() {
}
void Animation::Update(float elapsedSec) {
if (m_isPlaying) {
@@ -25,7 +23,7 @@ void Animation::Draw(const Vector2f& pos) const {
void Animation::Draw(const Vector2f& pos, const Rectf& dst) const {
Rectf src = m_SrcRect;
src.left += m_CurrentFrame * src.width;
src.left += static_cast<float>(m_CurrentFrame) * src.width;
m_pTexture->Draw(dst, src, m_isFlipped);
}

View File

@@ -5,7 +5,7 @@ class Animation
{
public:
Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect);
~Animation();
~Animation() = default;
void Update(float elapsedSec);
void Draw(const Vector2f& pos) const;

View File

@@ -2,6 +2,7 @@
#include "Game.h"
#include <ostream>
#include <algorithm>
#include "colors.h"
#include "utils.h"
@@ -26,6 +27,10 @@ void Game::Initialize() {
}
void Game::Cleanup() {
//TODO: ask how 2 delete the TextureManager
ScreenManager::DestroyInstance();
TextureManager::DestroyInstance();
}
void Game::Update(float elapsedSec) {
@@ -93,7 +98,11 @@ void Game::ProcessMouseWheelEvent(const SDL_MouseWheelEvent& e) {
scroll = Vector2f { 0, -1 };
}
//camera zoom
m_Camera.SetScale((m_Camera.GetScale() - e.preciseY * 0.1f));
float newScale = m_Camera.GetScale() - e.preciseY * 0.1f;
if(newScale < 0.0f) {
newScale = 0.0f;
}
m_Camera.SetScale(newScale);
}
void Game::ProcessImGui() {
m_pCurrentLevel->ProcessImGui();

View File

@@ -111,6 +111,7 @@
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<BrowseInformation>true</BrowseInformation>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
@@ -130,6 +131,9 @@
xcopy "$(SolutionDir)Resources\*.*" "$(TargetDir)" /y /d /s
</Command>
</PostBuildEvent>
<Bscmake>
<PreserveSbr>true</PreserveSbr>
</Bscmake>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
@@ -225,6 +229,7 @@
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
<BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
</ClCompile>
<ClCompile Include="GridSystem\WorldTile.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
@@ -299,7 +304,9 @@
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
<BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
</ClCompile>
<ClCompile Include="GroundTileTypeManager.cpp" />
<ClCompile Include="Gui\Button.cpp" />
<ClCompile Include="Gui\Screen.cpp" />
<ClCompile Include="Gui\Screens\FuelScreen.cpp" />
@@ -377,6 +384,7 @@
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
<BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
</ClCompile>
<ClCompile Include="Levels\MainMenu\MainMenuLevel.cpp" />
<ClCompile Include="Levels\World\Building.cpp" />
@@ -453,6 +461,7 @@
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
<BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
</ClCompile>
<ClCompile Include="main.cpp" />
<ClCompile Include="pch.cpp" />
@@ -466,6 +475,7 @@
<ClInclude Include="GameManager.h" />
<ClInclude Include="GridSystem\WorldGridManager.h" />
<ClInclude Include="GridSystem\WorldTile.h" />
<ClInclude Include="GroundTileTypeManager.h" />
<ClInclude Include="Gui\Button.h" />
<ClInclude Include="Gui\Screen.h" />
<ClInclude Include="Gui\Screens\FuelScreen.h" />

View File

@@ -27,9 +27,6 @@
<ClCompile Include="Camera.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="WorldLevel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Player.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -63,6 +60,15 @@
<ClCompile Include="Levels\Level.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Levels\MainMenu\MainMenuLevel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Levels\World\Building.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Levels\World\WorldLevel.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Game.h">
@@ -74,9 +80,6 @@
<ClInclude Include="Camera.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="WorldLevel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Player.h">
<Filter>Header Files</Filter>
</ClInclude>
@@ -110,5 +113,14 @@
<ClInclude Include="Levels\Level.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Levels\MainMenu\MainMenuLevel.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Levels\World\Building.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Levels\World\WorldLevel.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@@ -1,6 +1,7 @@
#include "pch.h"
#include "WorldGridManager.h"
#include <iostream>
#include <stdexcept>
#include "WorldTile.h"
@@ -14,8 +15,29 @@ WorldGridManager::WorldGridManager() {
}
WorldGridManager::~WorldGridManager() {
for (size_t x { 0 }; x < WORLD_WIDTH; ++x) {
for (size_t y { 0 }; y < WORLD_HEIGHT; ++y) {
delete m_worldTiles[x][y];
}
}
std::cout << "Deleting static" << std::endl;
delete Tiles::AIR;
delete Tiles::DIRT;
delete Tiles::Hazards::LAVA;
delete Tiles::Hazards::STONE;
delete Tiles::Ores::BRONZE;
delete Tiles::Ores::GOLD;
delete Tiles::Ores::IRON;
delete Tiles::Special::GRASS;
delete Tiles::Special::HARD_LEFT;
delete Tiles::Special::HARD_MIDDLE;
delete Tiles::Special::HARD_RIGHT;
}
surroundingTiles WorldGridManager::GetSurroundingTiles(const WorldTile* world_tile) {
surroundingTiles tiles;
Vector2f pos = world_tile->GetPosition();

View File

@@ -72,6 +72,4 @@ public:
private:
std::array<std::array<WorldTile *, WORLD_WIDTH>, WORLD_HEIGHT> m_worldTiles;
};

View File

@@ -33,6 +33,10 @@ GroundTileType* getRandomGroundTile() {
// This should never be reached if weights sum to 1.0
return Tiles::AIR; // Default value
}
// void InitializeGroundTiles() {
//
// Tiles::AIR = new GroundTileType("", GroundTileTypes::Air);
// }
WorldTile::WorldTile(const Vector2f& position, GroundTileType* groundTileType, TextureManager* pTextureManager, WorldGridManager* pGridManager) : m_Position { position }, m_GroundTileType { groundTileType }, m_pGridManager { pGridManager } {
// const std::string dirtPath = + "tiles/dirt/dirt" + std::to_string(utils::randRange(1, 5)) + ".png";
// m_pTexture = new Texture(dirtPath);
@@ -52,7 +56,6 @@ WorldTile::WorldTile(const Vector2f& position, GroundTileType* groundTileType, T
m_pAllTexture = pTextureManager->GetTexture("tiles/dirt/sidepieces/all.png");
}
WorldTile::~WorldTile() {
delete m_pTexture;
}
void WorldTile::Draw() {

View File

@@ -150,6 +150,8 @@ static std::map<GroundTileType *, float> GroundTileWeights {
{ Tiles::Ores::IRON, 0.1f },
};
void InitializeGroundTiles();
class WorldTile
{
public:
@@ -197,7 +199,7 @@ private:
surroundingTiles m_SurroundingTiles;
std::vector<Texture *> m_SideTextures { 8, nullptr };
std::vector<Texture*> m_SideTextures { 8, nullptr };
Texture* m_pAllTexture;
};

View File

@@ -0,0 +1,22 @@
#include "pch.h"
#include "GroundTileTypeManager.h"
#include "GridSystem/WorldTile.h"
GroundTileTypeManager* GroundTileTypeManager::m_pInstance = nullptr;
GroundTileTypeManager* GroundTileTypeManager::GetInstance() {
if (m_pInstance == nullptr) {
m_pInstance = new GroundTileTypeManager();
}
return m_pInstance;
}
void GroundTileTypeManager::DestroyInstance() {
}
// void GroundTileTypeManager::Initialize() {
// AIR = new GroundTileType("", GroundTileTypes::Air);
// }
GroundTileTypeManager::GroundTileTypeManager() {
}
GroundTileTypeManager::~GroundTileTypeManager() {
}

View File

@@ -0,0 +1,38 @@
#pragma once
#include <map>
class GroundTileType;
class GroundTileTypeManager
{
public:
static GroundTileTypeManager* GetInstance();
static void DestroyInstance();
//
// static GroundTileType* AIR{ nullptr };
//
//
// static std::map<GroundTileType *, float> GroundTileWeights {
// { Tiles::AIR, 0.2f },
// { Tiles::DIRT, 0.5f },
// { Tiles::Special::GRASS, 0.0f },
// { Tiles::Hazards::STONE, 0.025f },
// { Tiles::Hazards::LAVA, 0.01f },
// { Tiles::Special::HARD_LEFT, 0.0f },
// { Tiles::Special::HARD_MIDDLE, 0.0f },
// { Tiles::Special::HARD_RIGHT, 0.0f },
// { Tiles::Ores::BRONZE, 0.05f },
// { Tiles::Ores::GOLD, 0.02f },
// { Tiles::Ores::IRON, 0.1f },
// };
private:
GroundTileTypeManager();
~GroundTileTypeManager();
static GroundTileTypeManager* m_pInstance;
};

View File

@@ -5,6 +5,9 @@ Screen::Screen(const std::string& filePath, Vector2f pos, Vector2f size, Texture
m_Background = manager->GetTexture(filePath);
}
Screen::~Screen() {
for (Button* b : m_Buttons) {
delete b;
}
}
void Screen::Update(float elapsedSecs) {
for (Button* b : m_Buttons) {

View File

@@ -40,6 +40,10 @@ FuelScreen::FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size,
this->AddButton(fillTankButton);
}
FuelScreen::~FuelScreen() {
}
void FuelScreen::Draw() const {
Screen::Draw();
}

View File

@@ -6,6 +6,7 @@ class FuelScreen : public Screen
public:
FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager);
virtual ~FuelScreen() override;
virtual void Draw() const override;
virtual void Update(float elapsedSecs) override;

View File

@@ -5,8 +5,8 @@
#include "utils.h"
ScreenManager* ScreenManager::m_pInstance = nullptr;
Screen* ScreenManager::Fuel{ nullptr };
Screen* ScreenManager::SellScreen{ nullptr };
Screen* ScreenManager::m_FuelScreen{ nullptr };
Screen* ScreenManager::m_SellScreen{ nullptr };
ScreenManager* ScreenManager::GetInstance() {
@@ -20,6 +20,10 @@ ScreenManager* ScreenManager::GetInstance() {
return m_pInstance;
}
void ScreenManager::DestroyInstance() {
delete m_pInstance;
}
void ScreenManager::OpenScreen(Screen* screen) {
if(m_IsScreenOpen == false) {
m_currentScreen = screen;
@@ -33,14 +37,18 @@ void ScreenManager::CloseScreen() {
}
}
ScreenManager::~ScreenManager() {
delete m_FuelScreen;
delete m_SellScreen;
}
void ScreenManager::InitializeScreens() {
Vector2f fuelScreenSize = Vector2f { 492, 396 };
Vector2f fuelScreenCenter = Vector2f { utils::GetViewport().x / 2 - fuelScreenSize.x / 2, utils::GetViewport().y / 2 - fuelScreenSize.y / 2 };
Fuel = new FuelScreen { "gui/fuel/background.png", fuelScreenCenter, Vector2f { 0, 0 }, TextureManager::GetInstance() };
m_FuelScreen = new FuelScreen { "gui/fuel/background.png", fuelScreenCenter, Vector2f { 0, 0 }, TextureManager::GetInstance() };
Vector2f sellScreenSize = Vector2f { 533, 398 };
Vector2f sellScreenCenter = Vector2f { utils::GetViewport().x / 2 - sellScreenSize.x / 2, utils::GetViewport().y / 2 - sellScreenSize.y / 2 };
SellScreen = new Screen { "gui/sell/background.png", sellScreenCenter, sellScreenSize, TextureManager::GetInstance() };
m_SellScreen = new Screen { "gui/sell/background.png", sellScreenCenter, sellScreenSize, TextureManager::GetInstance() };
//m_Button = Button { "gui/close.png", closeButtonPos, closeButtonSize, TextureManager::GetInstance() };
}

View File

@@ -7,19 +7,21 @@ class ScreenManager
{
public:
static ScreenManager* GetInstance();
static void DestroyInstance();
void OpenScreen(Screen* screen);
void CloseScreen();
Screen* GetCurrentScreen() { return m_currentScreen; }
Screen* GetCurrentScreen() const { return m_currentScreen; }
static ScreenManager* m_pInstance;
static Screen* Fuel;
static Screen* SellScreen;
static Screen* m_FuelScreen;
static Screen* m_SellScreen;
private:
ScreenManager() = default;
~ScreenManager();
void InitializeScreens();

View File

@@ -7,7 +7,7 @@ class MainMenuLevel : public Level
public:
MainMenuLevel(Camera* camera);
virtual ~MainMenuLevel();
virtual ~MainMenuLevel() override;
void Update(float elapsedSec) override;
void Draw() const override;

View File

@@ -1,5 +1,7 @@
#include "pch.h"
#include "Building.h"
#include <iostream>
Building::Building(const std::string& filePath, const Vector2f& position, TextureManager* pTextureManager): m_Position(position) {
m_Texture = pTextureManager->GetTexture(filePath);
m_Size = Vector2f(m_Texture->GetWidth(), m_Texture->GetHeight());

View File

@@ -63,6 +63,10 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
}
WorldLevel::~WorldLevel() {
delete m_refeulBuilding;
delete m_mineralBuilding;
delete m_junkBuilding;
delete m_repairBuilding;
//delete m_pTextTexture;
}
void WorldLevel::Update(float elapsedSec) {
@@ -111,6 +115,25 @@ void WorldLevel::Update(float elapsedSec) {
m_player.Update(elapsedSec, *this);
//Move the camera when the player gets to the edge
if(m_FollowPlayer) {
Vector2f playerPos = m_player.GetPosition();
Vector2f newCameraPos = m_pCamera->GetPosition();
if (playerPos.x < newCameraPos.x + 50) {
newCameraPos.x = playerPos.x - 50;
}
if (playerPos.x > newCameraPos.x + m_viewport.width - 100) {
newCameraPos.x = playerPos.x - m_viewport.width + 100;
}
if (playerPos.y < newCameraPos.y + 50) {
newCameraPos.y = playerPos.y - 50;
}
if (playerPos.y > newCameraPos.y + m_viewport.height - 50) {
newCameraPos.y = playerPos.y - m_viewport.height + 50;
}
m_pCamera->SetPosition(newCameraPos);
}
Screen* screen = m_screenManager->GetCurrentScreen();
if (screen != nullptr) {
screen->Update(elapsedSec);
@@ -158,6 +181,9 @@ void WorldLevel::Draw() const {
m_pCamera->EndRendering();
utils::FillRect(utils::GetMousePos(), 10, 10);
utils::DrawRect(50, 50, m_viewport.width - 100, m_viewport.height - 100);
const Screen* screen = m_screenManager->GetCurrentScreen();
if (screen != nullptr) {
screen->Draw();
@@ -209,12 +235,12 @@ void WorldLevel::ProcessImGui() {
}
if (ImGui::BeginMenu("Screens")) {
if (ImGui::MenuItem("Open Fuel screen")) {
ScreenManager::GetInstance()->OpenScreen(ScreenManager::Fuel);
ScreenManager::GetInstance()->OpenScreen(ScreenManager::m_FuelScreen);
}
if (ImGui::MenuItem("Open Sell screen")) {
ScreenManager::GetInstance()->OpenScreen(ScreenManager::SellScreen);
ScreenManager::GetInstance()->OpenScreen(ScreenManager::m_SellScreen);
}
if (ImGui::MenuItem("Close Screen")) {
@@ -249,6 +275,7 @@ void WorldLevel::ProcessImGui() {
m_pCamera->SetPosition(Vector2f { -m_viewport.width / 2, -m_viewport.height / 2 });
m_pCamera->SetScale(1.0f);
}
ImGui::Checkbox("Follow Player", &m_FollowPlayer);
ImGui::End();
}

View File

@@ -44,10 +44,11 @@ private:
Building* m_junkBuilding;
Building* m_repairBuilding;
float testLerp{ 0.0f };
// ImGui Vars
bool m_ShowTextureManagerWindow { false };
bool m_ShowCameraWindow { false };
bool m_ShowPlayerInfo { true };
bool m_FollowPlayer { false };
};

View File

@@ -24,8 +24,8 @@ Player::Player(const Vector2f& Position, TextureManager* manager) : m_Position(P
Player::~Player() {
delete m_walkAnimation;
delete m_turnAnimation;
delete m_digAnimation;
// delete m_turnAnimation;
// delete m_digAnimation;
}
Collision::CollisionRect Player::GetCollisionRect() const {

View File

@@ -95,8 +95,8 @@ private:
bool m_DidJustDigLeft { false };
Animation* m_currentAnimation{ nullptr };
Animation* m_walkAnimation;
Animation* m_turnAnimation;
Animation* m_digAnimation;
Animation* m_turnAnimation{ nullptr };
Animation* m_digAnimation{ nullptr };
PlayerState m_State { PlayerState::Idle };
PlayerDirection m_Direction { PlayerDirection::Right };

View File

@@ -1,5 +1,7 @@
#include "pch.h"
#include "TextureManager.h"
#include <iostream>
TextureManager* TextureManager::m_pInstance = nullptr;
TextureManager * TextureManager::GetInstance() {
@@ -8,6 +10,9 @@ TextureManager * TextureManager::GetInstance() {
}
return m_pInstance;
}
void TextureManager::DestroyInstance() {
delete m_pInstance;
}
Texture * TextureManager::GetTexture(const std::string& name) {
if (m_Textures.find(name) != m_Textures.end()) {
return m_Textures[name];
@@ -18,7 +23,7 @@ Texture * TextureManager::GetTexture(const std::string& name) {
}
TextureManager::~TextureManager() {
//TODO: Loop over the m_Textures to delete them
for ( const auto &p : m_Textures ) {
for (const auto& p : m_Textures) {
delete p.second;
}
}
}

View File

@@ -7,7 +7,8 @@ class TextureManager
{
public:
static TextureManager * GetInstance();
Texture * GetTexture(const std::string& name);
static void DestroyInstance();
Texture* GetTexture(const std::string& name);
private:
TextureManager() = default;

View File

@@ -12,11 +12,13 @@ int SDL_main(int argv, char** args) {
StartHeapControl();
new Button();
auto pGame { new Game { Window { "Motherload - Verhulst, Bram - 1DAEGD16E", Viewport.x, Viewport.y } } };
pGame->Run();
delete pGame;
DumpMemoryLeaks();
//DumpMemoryLeaks();
return 0;
}