Add Main UI, Fuel meter. Add particles to player digging

This commit is contained in:
Bram Verhulst
2024-05-14 12:28:37 +02:00
parent d5c002c2b2
commit 600050c198
39 changed files with 251 additions and 108 deletions

View File

@@ -11,12 +11,22 @@
</component>
<component name="ChangeListManager">
<list default="true" id="26a0623a-44d5-441c-8048-32ff1dab3479" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.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$/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/Gui/GuiMeter.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiMeter.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/GuiMeter.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiMeter.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/Levels/World/Building.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/World/Building.h" 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/Particle/Particle.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Particle/Particle.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Particle/Particle.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Particle/Particle.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/main.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/main.cpp" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -31,6 +41,79 @@
</option>
</component>
<component name="HighlightingSettingsPerFile">
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
<setting file="mock:///dummy.cpp" root0="SKIP_HIGHLIGHTING" />
@@ -39,12 +122,12 @@
<setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/algorithm" 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="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/xstring" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/BaseGame.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/BaseGame.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/Texture.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/utils.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/utils.h" root0="FORCE_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/Camera.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Player.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Player.h" root0="FORCE_HIGHLIGHTING" />
@@ -83,7 +166,7 @@
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;,
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;,
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.sourceCode.C++&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;,
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot;
},
&quot;keyToStringList&quot;: {
@@ -236,7 +319,12 @@
<workItem from="1715063584283" duration="11702000" />
<workItem from="1715170674144" duration="2320000" />
<workItem from="1715206284291" duration="5406000" />
<workItem from="1715254613428" duration="787000" />
<workItem from="1715254613428" duration="3973000" />
<workItem from="1715293126957" duration="547000" />
<workItem from="1715334251448" duration="4485000" />
<workItem from="1715360147026" duration="5634000" />
<workItem from="1715583954732" duration="5283000" />
<workItem from="1715669033601" duration="10940000" />
</task>
<task id="LOCAL-00001" summary="Rework Tile detection system">
<option name="closed" value="true" />
@@ -374,7 +462,15 @@
<option name="project" value="LOCAL" />
<updated>1715208368790</updated>
</task>
<option name="localTasksCounter" value="18" />
<task id="LOCAL-00018" summary="Add Particles (basic)">
<option name="closed" value="true" />
<created>1715255455692</created>
<option name="number" value="00018" />
<option name="presentableId" value="LOCAL-00018" />
<option name="project" value="LOCAL" />
<updated>1715255455692</updated>
</task>
<option name="localTasksCounter" value="19" />
<servers />
</component>
<component name="TypeScriptGeneratedFilesManager">
@@ -400,7 +496,8 @@
<MESSAGE value="Remove All Memory leaks" />
<MESSAGE value="Fix digging" />
<MESSAGE value="Started on GuiIcon, General fixes" />
<option name="LAST_COMMIT_MESSAGE" value="Started on GuiIcon, General fixes" />
<MESSAGE value="Add Particles (basic)" />
<option name="LAST_COMMIT_MESSAGE" value="Add Particles (basic)" />
</component>
<component name="XSLT-Support.FileAssociations.UIState">
<expand />

View File

@@ -57,6 +57,9 @@ void Game::Draw() const {
void Game::ProcessKeyDownEvent(const SDL_KeyboardEvent& e) {
//std::cout << "KEYDOWN event: " << e.keysym.sym << std::endl;
if(e.keysym.sym == SDLK_BACKQUOTE) {
m_imGui = !m_imGui;
}
}
void Game::ProcessKeyUpEvent(const SDL_KeyboardEvent& e) {
@@ -83,5 +86,7 @@ void Game::ProcessMouseWheelEvent(const SDL_MouseWheelEvent& e) {
m_Camera.SetScale(newScale);
}
void Game::ProcessImGui() {
m_pCurrentLevel->ProcessImGui();
if(m_imGui) {
m_pCurrentLevel->ProcessImGui();
}
}

View File

@@ -46,4 +46,7 @@ private:
Vector2f m_MouseOffset {};
bool m_IsRightMouseDown {};
bool m_imGui{ true };
};

View File

@@ -313,6 +313,7 @@
<ClCompile Include="Gui\GuiMeter.cpp" />
<ClCompile Include="Gui\Screen.cpp" />
<ClCompile Include="Gui\Screens\FuelScreen.cpp" />
<ClCompile Include="Gui\Screens\MainScreen.cpp" />
<ClCompile Include="Gui\Screens\ScreenManager.cpp" />
<ClCompile Include="Levels\Level.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
@@ -485,6 +486,7 @@
<ClInclude Include="Gui\GuiMeter.h" />
<ClInclude Include="Gui\Screen.h" />
<ClInclude Include="Gui\Screens\FuelScreen.h" />
<ClInclude Include="Gui\Screens\MainScreen.h" />
<ClInclude Include="Gui\Screens\ScreenManager.h" />
<ClInclude Include="Levels\Level.h" />
<ClInclude Include="Levels\MainMenu\MainMenuLevel.h" />

View File

@@ -3,17 +3,25 @@
#include "TextureManager.h"
#include "utils.h"
GuiMeter::GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, int frameCount, TextureManager* manager): m_Position(pos), m_FrameCount(frameCount) {
m_Animation = new Animation(manager->GetTexture(filePath),frameCount, 0.0f, Rectf{0, 0, frameSize.x, frameSize.y}, false);
GuiMeter::GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, int frameCount, TextureManager* manager): GuiMeter(
filePath, pos, frameSize, frameSize, frameCount, manager) {
}
GuiMeter::GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, Vector2f drawSize, int frameCount, TextureManager* manager): m_Position(pos),
m_DrawSize(drawSize), m_FrameCount(frameCount) {
m_Animation = new Animation(manager->GetTexture(filePath), frameCount, 0.0f, Rectf { 0, 0, frameSize.x, frameSize.y }, false);
}
GuiMeter::~GuiMeter() {
delete m_Animation;
}
void GuiMeter::Draw() const {
m_Animation->Draw(m_Position);
m_Animation->Draw(m_Position, Rectf{m_Position, m_DrawSize});
utils::DrawRect(Rectf { m_Position, m_DrawSize});
}
void GuiMeter::Update(float elapsedSec) {
m_Value += 1;
const int frame = static_cast<int>(utils::map(m_Value, 0.0f, m_MaxValue, 0, (float)m_Animation->GetFrameCount()));
m_Animation->SetFrame(frame);
}
}
void GuiMeter::SetValue(float value) {
m_Value = value;
}

View File

@@ -5,23 +5,26 @@
class TextureManager;
class GuiMeter : public GuiElement
class GuiMeter final : public GuiElement
{
public:
GuiMeter() = default;
GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, int frameCount, TextureManager* manager);
virtual ~GuiMeter();
GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, Vector2f drawSize, int frameCount, TextureManager* manager);
GuiMeter(GuiMeter& other) = delete;
GuiMeter& operator=(const GuiMeter& other) = delete;
GuiMeter(GuiMeter&& other) = delete;
GuiMeter& operator=(GuiMeter&& other) = delete;
virtual ~GuiMeter() override;
virtual void Draw() const override;
virtual void Update(float elapsedSec) override;
void SetValue(float value) {
m_Value = value;
}
void SetValue(float value);
private:
Animation* m_Animation{ nullptr };
Animation* m_Animation{ nullptr };
Vector2f m_Position;
Vector2f m_DrawSize;
float m_Value{ 0.0f };
const float m_MaxValue{ 100.0f };

View File

@@ -2,7 +2,11 @@
#include "Screen.h"
Screen::Screen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): m_Position(pos), m_Size(size) {
m_Background = manager->GetTexture(filePath);
if(!filePath.empty()) {
m_Background = manager->GetTexture(filePath);
} else {
m_Background = nullptr;
}
}
Screen::~Screen() {
for (GuiElement* b : m_Elements) {
@@ -15,11 +19,13 @@ void Screen::Update(float elapsedSecs) {
}
}
void Screen::Draw() const {
Rectf dest = Rectf(m_Position, m_Size);
Rectf src = Rectf(0, 0, m_Background->GetWidth(), m_Background->GetHeight());
m_Background->Draw(dest, src, false);
if(m_Background != nullptr) { //Incase there is no background
Rectf dest = Rectf(m_Position, m_Size);
Rectf src = Rectf(0, 0, m_Background->GetWidth(), m_Background->GetHeight());
m_Background->Draw(dest, src, false);
}
for (GuiElement* b : m_Elements) {
b->Draw();
for (GuiElement* GuiElement : m_Elements) {
GuiElement->Draw();
}
}

View File

@@ -41,8 +41,7 @@ FuelScreen::FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size,
}
FuelScreen::~FuelScreen() {
}
FuelScreen::~FuelScreen() = default;
void FuelScreen::Draw() const {
Screen::Draw();

View File

@@ -0,0 +1,16 @@
#include "pch.h"
#include "MainScreen.h"
MainScreen::MainScreen(TextureManager* manager) : Screen("", Vector2f{0, 0}, Vector2f{900.f, 500.f}, manager) {
m_FuelMeter = new GuiMeter("gui/main/fuel/fuel.png", Vector2f{20, 500.f - 146 / 1.5 - 20}, Vector2f{336, 146},Vector2f{336 / 2, 146 / 1.5}, 21, manager);
this->AddElement(m_FuelMeter);
}
MainScreen::~MainScreen() = default;
void MainScreen::Draw() const {
Screen::Draw();
}
void MainScreen::Update(float elapsedSecs) {
Screen::Update(elapsedSecs);
}
void MainScreen::SetFuelMeterValue(float value) const {
m_FuelMeter->SetValue(value);
}

View File

@@ -0,0 +1,18 @@
#pragma once
#include "Gui/GuiMeter.h"
#include "Gui/Screen.h"
class MainScreen: public Screen {
public:
explicit MainScreen(TextureManager* manager);
virtual ~MainScreen() override;
virtual void Draw() const override;
virtual void Update(float elapsedSecs) override;
void SetFuelMeterValue(float value) const;
private:
GuiMeter* m_FuelMeter;
};

View File

@@ -6,10 +6,10 @@ class Building
{
public:
Building(const std::string& filePath, const Vector2f& position, TextureManager* pTextureManager);
Building(const Building& other) = delete;
Building(Building&& other) = delete;
Building& operator=(const Building& other) = delete;
Building& operator=(Building&& other) = delete;
Building(const Building& other) = default;
Building(Building&& other) = default;
Building& operator=(const Building& other) = default;
Building& operator=(Building&& other) = default;
~Building();

View File

@@ -35,12 +35,13 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
m_GridManager.GetTileAtIndex(x, 0)->SetTileType(GroundTileTypeManager::GetInstance()->AIR);
m_GridManager.GetTileAtIndex(x, 1)->SetTileType(GroundTileTypeManager::GetInstance()->GRASS);
}
m_RefeulBuilding = new Building { "buildings/fuelStation.png", Vector2f { -700, -52 }, TextureManager::GetInstance() };
m_Buildings.emplace_back(Building { "buildings/fuelStation.png", Vector2f { -700, -52 }, TextureManager::GetInstance() });
m_GridManager.GetTileAtWorldPos(Vector2f { -750, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT);
m_GridManager.GetTileAtWorldPos(Vector2f { -700, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT);
m_GridManager.GetTileAtWorldPos(Vector2f { -650, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f { -600, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
m_MineralBuilding = new Building { "buildings/mineralStation.png", Vector2f { -350, -52 }, TextureManager::GetInstance() };
m_Buildings.emplace_back(Building { "buildings/mineralStation.png", Vector2f { -350, -52 }, TextureManager::GetInstance() });
m_GridManager.GetTileAtWorldPos(Vector2f {-400, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT);
m_GridManager.GetTileAtWorldPos(Vector2f {-350, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {-300, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
@@ -48,7 +49,7 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
m_GridManager.GetTileAtWorldPos(Vector2f {-200, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {-150, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
m_JunkBuilding = new Building { "buildings/junkStation.png", Vector2f { 250, -52 }, TextureManager::GetInstance() };
m_Buildings.emplace_back(Building { "buildings/junkStation.png", Vector2f { 250, -52 }, TextureManager::GetInstance() });
m_GridManager.GetTileAtWorldPos(Vector2f {200, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT);
m_GridManager.GetTileAtWorldPos(Vector2f {250, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {300, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
@@ -56,24 +57,22 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
m_GridManager.GetTileAtWorldPos(Vector2f {400, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {450, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
m_RepairBuilding = new Building { "buildings/repairStation.png", Vector2f { 700, -52 }, TextureManager::GetInstance() };
m_Buildings.emplace_back(Building { "buildings/repairStation.png", Vector2f { 700, -52 }, TextureManager::GetInstance() });
m_GridManager.GetTileAtWorldPos(Vector2f {650, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT);
m_GridManager.GetTileAtWorldPos(Vector2f {700, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {750, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {800, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
// m_Meter = new GuiMeter("gui/main/fuel_guage.png", Vector2f{100, 100}, Vector2f{336, 146}, 100, TextureManager::GetInstance());
// Texture* test = new Texture("gui/main/fuel_guage.png");
m_topCover = TextureManager::GetInstance()->GetTexture("topBackground.png");
m_MainScreen = new MainScreen(TextureManager::GetInstance());
}
WorldLevel::~WorldLevel() {
delete m_RefeulBuilding;
delete m_MineralBuilding;
delete m_JunkBuilding;
delete m_RepairBuilding;
delete m_MainScreen;
}
void WorldLevel::Update(float elapsedSec) {
m_Fps = 1 / elapsedSec;
// m_Meter->Update(elapsedSec);
int mouseX, mouseY;
SDL_GetMouseState(&mouseX, &mouseY);
@@ -95,20 +94,9 @@ void WorldLevel::Update(float elapsedSec) {
}
}
}
testCounter++;
std::vector<Particle*> ToDelete{};
for(Particle* p : m_Particles) {
p->Update(elapsedSec);
if(p->IsDead()) {
ToDelete.emplace_back(p);
}
}
for (Particle* p : ToDelete) {
m_Particles.erase(std::remove(m_Particles.begin(), m_Particles.end(), p), m_Particles.end());
delete p;
}
if(testCounter % 100 == 0) {
m_Particles.emplace_back(new Particle(Vector2f{100, 100}, Vector2f{float(utils::randRange(-200, 200)), 10},100, TextureManager::GetInstance()->GetTexture("particles/dirt_" + std::to_string(utils::randRange(1, 8)) + ".png")));
for (Building building : m_Buildings) {
building.Update(elapsedSec);
}
@@ -118,23 +106,6 @@ void WorldLevel::Update(float elapsedSec) {
}
}
//Get the diogonal tiles of the selected tile
// if (m_pSelectedTile != nullptr) {
// surroundingTiles surroundingTiles = m_gridManager.GetSurroundingTiles(m_pSelectedTile);
// TileDirection direction = TileDirection::TopMiddle;
// const std::array<TileDirection, 8> directions = { TileDirection::TopLeft, TileDirection::TopMiddle, TileDirection::TopRight, TileDirection::MiddleLeft,
// TileDirection::MiddleRight, TileDirection::BottomLeft, TileDirection::BottomMiddle, TileDirection::BottomRight };
//
// for (int i = 0; i < 8; i++) {
// direction = directions[i];
// if (surroundingTiles.GetTile(direction) != nullptr) {
// if (surroundingTiles.GetTile(direction)->GetTileType() != GroundTileTypeManager::GetInstance()->AIR) {
// //surroundingTiles.GetTile(direction)->m_Hightlight = true;
// }
// }
// }
// }
m_Player.Update(elapsedSec, *this);
//Move the camera when the player gets to the edge
@@ -150,8 +121,8 @@ void WorldLevel::Update(float elapsedSec) {
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;
if (playerPos.y > newCameraPos.y + m_Viewport.height - 100) {
newCameraPos.y = playerPos.y - m_Viewport.height + 100;
}
m_pCamera->SetPosition(newCameraPos);
}
@@ -161,6 +132,8 @@ void WorldLevel::Update(float elapsedSec) {
screen->Update(elapsedSec);
}
m_MainScreen->Update(elapsedSec);
//Vector2f playerPos = m_player.GetPosition();
//Vector2f newCameraPos = playerPos;
//m_pCamera->SetPosition(newCameraPos);
@@ -169,7 +142,10 @@ void WorldLevel::Update(float elapsedSec) {
//m_pCamera->SetPosition(Vector2f{playerPos.x - m_viewport.width / 2, playerPos.y - m_viewport.height / 2});
}
void WorldLevel::Draw() const {
m_pCamera->BeginRendering();
// m_topCover->Draw(Vector2f{-850,-70} );
m_topCover->Draw(Rectf{-850, -70, 850, -70 + 32}, Rectf{0, 0, WORLD_WIDTH * 50, 32});
for (Collision::CollisionRect rect : m_Rects) {
utils::DrawRect(rect.pos, rect.size.x, rect.size.y);
@@ -191,16 +167,12 @@ void WorldLevel::Draw() const {
m_pSelectedTile->Draw();
}
m_RefeulBuilding->Draw();
m_MineralBuilding->Draw();
m_JunkBuilding->Draw();
m_RepairBuilding->Draw();
m_Player.Draw();
for(Particle* p : m_Particles) {
p->Draw();
for(Building building : m_Buildings) {
building.Draw();
}
m_Player.Draw();
utils::SetColor(Colors::GREEN);
utils::DrawArrow(Vector2f{0, 0}, m_MousePos);
@@ -214,8 +186,9 @@ void WorldLevel::Draw() const {
if (screen != nullptr) {
screen->Draw();
}
m_MainScreen->Draw();
// m_Meter->Draw();
}
void WorldLevel::MouseMove(const Vector2f& mousePos) {
m_MousePos = mousePos;

View File

@@ -7,6 +7,7 @@
#include "Gui/Screens/ScreenManager.h"
#include "Camera.h"
#include "Gui/GuiMeter.h"
#include "Gui/Screens/MainScreen.h"
#include "Particle/Particle.h"
class WorldLevel : public Level
@@ -28,8 +29,6 @@ public:
std::vector<Collision::CollisionRect> m_Rects;
std::vector<Particle*> m_Particles;
int testCounter{ 0 };
private:
double m_Fps{ 0.0f };
@@ -44,18 +43,17 @@ private:
WorldTile* m_pSelectedTile { nullptr };
Building* m_RefeulBuilding;
Building* m_MineralBuilding;
Building* m_JunkBuilding;
Building* m_RepairBuilding;
std::vector<Building> m_Buildings{};
GuiMeter* m_Meter{ nullptr };
MainScreen* m_MainScreen{};
Texture* m_topCover{ nullptr };
// ImGui Vars
bool m_ShowTextureManagerWindow { false };
bool m_ShowCameraWindow { false };
bool m_ShowPlayerInfo { true };
bool m_FollowPlayer { false };
bool m_FollowPlayer { true };
};

View File

@@ -29,7 +29,7 @@ Player::Player(const Vector2f& Position, TextureManager* manager) : m_Position(P
m_digAnimation = new Animation(
manager->GetTexture("animations/player/player_dig.png"),
7, 0.05f, Rectf { 0, 0, 70, 70 }, true);
m_currentAnimation = m_walkAnimation;
}
Player::Player(Player&& other) {
@@ -71,8 +71,9 @@ void Player::Draw() const {
}
glPopMatrix();
utils::DrawEllipse(m_DigDestination, 5, 5);
utils::DrawEllipse(m_DigStart, 5, 5);
for (Particle* particle : m_DigParticles) {
particle->Draw();
}
}
void Player::ProcessImGui() {
ImGui::Begin("Collision Info", nullptr, ImGuiWindowFlags_AlwaysAutoResize);
@@ -166,17 +167,24 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
m_BobTimer = 0.0f;
}
std::vector<Particle *> particlesToDelete {};
for (Particle* particle : m_DigParticles) {
particle->Update(elapsedTime);
if (particle->IsDead()) {
particlesToDelete.push_back(particle);
}
}
for (Particle* particle : particlesToDelete) {
m_DigParticles.erase(std::remove(m_DigParticles.begin(), m_DigParticles.end(), particle), m_DigParticles.end());
delete particle;
}
//check for keys
if (m_State != PlayerState::Digging) {
if (utils::isKeyDown(SDL_SCANCODE_W)) {
// if (m_Grounded) {
m_State = PlayerState::Flying;
m_Vel.y = m_Speed;
m_Grounded = false;
// }
}
if (utils::isKeyPressed(SDL_SCANCODE_S)) {
if (m_Grounded) {
@@ -259,16 +267,15 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
m_currentAnimation->Update(elapsedTime);
if (m_currentAnimation->IsDone() && m_IsTurning) {
m_currentAnimation = m_walkAnimation;
m_IsTurning = false;
}
if(m_currentAnimation == m_digStartAnimation) {
if (m_currentAnimation == m_digStartAnimation) {
}
#pragma region Collision
@@ -362,12 +369,12 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
// m_walkAnimation->SetPlaying(false);
//Diganimation
m_currentAnimation->Update(elapsedTime);
if(m_currentAnimation->IsDone() && m_State == PlayerState::Digging && !m_IsDiggingPrimed) {
if (m_currentAnimation->IsDone() && m_State == PlayerState::Digging && !m_IsDiggingPrimed) {
m_IsDiggingPrimed = true;
m_currentAnimation = m_digAnimation;
}
if(m_IsDiggingPrimed) {
if (m_IsDiggingPrimed) {
if (!m_Digging) { //TODO: fix for setting the start position
m_Digging = true;
m_DigStart = m_Position;
@@ -377,7 +384,12 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
m_DigProgress += elapsedTime;
//lerp to the destination
float progress = utils::map(m_DigProgress, 0.0f, m_DigTime, 0.0f, 1.0f);
int particleProgress = (int)utils::map(m_DigProgress, 0.0f, m_DigTime, 0.0f, 100.0f);
std::cout << progress << '\n';
if (particleProgress % 25 == 0) {
m_DigParticles.push_back(new Particle(m_Position, Vector2f { (float)utils::randRange(-200, 200), (float)utils::randRange(-100, -300) }, 5.f,
TextureManager::GetInstance()->GetTexture("particles/dirt_" + std::to_string(utils::randRange(1, 8)) + ".png")));
}
m_Position = utils::lerp(m_DigStart, m_DigDestination, progress);
if (progress >= 0.5f && !m_HasDeletedTile) {
m_DigTile->SetTileType(GroundTileTypeManager::GetInstance()->AIR);

View File

@@ -2,6 +2,7 @@
#include "Collision.h"
#include "TextureManager.h"
#include "Animations/Animation.h"
#include "Particle/Particle.h"
class WorldLevel;
@@ -95,6 +96,8 @@ private:
bool m_IsDiggingPrimed{ false };
std::vector<Particle*> m_DigParticles{};
const float m_DigTime{ 0.5f };
bool m_Grounded { false };

View File

@@ -12,7 +12,7 @@ int SDL_main(int argv, char** args) {
StartHeapControl();
auto pGame { new Game { Window { "Motherload - Verhulst, Bram - 1DAEGD16E", Viewport.x, Viewport.y, false} } };
auto pGame { new Game { Window { "Motherload - Verhulst, Bram - 1DAEGD16E", Viewport.x, Viewport.y, true} } };
pGame->Run();
delete pGame;

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

BIN
Resources/topBackground.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB