This commit is contained in:
Bram Verhulst
2024-06-09 22:03:29 +02:00
parent d7389411f5
commit 5f1dcd5788
76 changed files with 1532 additions and 385 deletions

View File

@@ -11,14 +11,53 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="26a0623a-44d5-441c-8048-32ff1dab3479" name="Changes" comment=""> <list default="true" id="26a0623a-44d5-441c-8048-32ff1dab3479" name="Changes" comment="">
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen/FuelScreen.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellScreen.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellScreen.h" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellSreenRow.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellSreenRow.h" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Inventory/PlayerInventory.cpp" afterDir="false" />
<change afterPath="$PROJECT_DIR$/Game/Inventory/PlayerInventory.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$/.idea/.idea.Motherload/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/.idea.Motherload/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Assets/PlayerWalk.png" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/SoundEffect.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/SoundEffect.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/SoundEffect.h" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/SoundEffect.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/Text.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/Text.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/Text.h" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/Text.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Engine/colors.h" beforeDir="false" afterPath="$PROJECT_DIR$/Engine/colors.h" 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/Camera.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Camera.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.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/GameManager.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GameManager.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/GameManager.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/GameManager.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.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/Gui/GuiButton.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiButton.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/GuiButton.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiButton.h" 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/GuiText.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiText.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/GuiText.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/GuiText.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/Screen.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screen.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screen.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screen.h" afterDir="false" /> <change beforePath="$PROJECT_DIR$/Game/Gui/Screen.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screen.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.cpp" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/FuelScreen/FuelScreen.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.cpp" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.cpp" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Gui/Screens/MainScreen.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/Level.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Levels/Level.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/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.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.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/Player.h" beforeDir="false" afterPath="$PROJECT_DIR$/Game/Player.h" afterDir="false" />
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -28,7 +67,7 @@
<component name="Git.Settings"> <component name="Git.Settings">
<option name="RECENT_BRANCH_BY_REPOSITORY"> <option name="RECENT_BRANCH_BY_REPOSITORY">
<map> <map>
<entry key="$PROJECT_DIR$" value="d3b932df22970cf2f14e9dd79721ccae1d938a38" /> <entry key="$PROJECT_DIR$" value="d7389411f532e93b32134d230990f604e276571a" />
</map> </map>
</option> </option>
</component> </component>
@@ -223,10 +262,136 @@
<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" />
<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="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/algorithm" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/stdbool.h" root0="SKIP_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/stdbool.h" 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/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/vector" root0="SKIP_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/../../../../../../Program Files/Microsoft Visual Studio/2022/Enterprise/VC/Tools/MSVC/14.37.32822/include/xmemory" 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$/../../../../../../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.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Engine/BaseGame.h" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Engine/BaseGame.h" root0="FORCE_HIGHLIGHTING" />
@@ -234,8 +399,18 @@
<setting file="file://$PROJECT_DIR$/Engine/utils.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="file://$PROJECT_DIR$/Engine/utils.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Camera.cpp" root0="FORCE_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Game/Camera.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Game.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/FuelScreen/FuelScreen.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/FuelScreen/FuelScreen.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/MainScreen.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/MainScreen.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/ScreenManager.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellScreen.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Gui/Screens/SellScreen/SellScreen.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/Player.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" /> <setting file="file://$PROJECT_DIR$/Game/Player.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/TextureManager.cpp" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Game/pch.cpp" root0="FORCE_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$/Game/pch.h" root0="FORCE_HIGHLIGHTING" />
<setting file="file://$PROJECT_DIR$/Libraries/SDLMain/SDL2-2.26.3/include/SDL.h" root0="SKIP_HIGHLIGHTING" /> <setting file="file://$PROJECT_DIR$/Libraries/SDLMain/SDL2-2.26.3/include/SDL.h" root0="SKIP_HIGHLIGHTING" />
@@ -260,28 +435,28 @@
<option name="hideEmptyMiddlePackages" value="true" /> <option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" /> <option name="showLibraryContents" value="true" />
</component> </component>
<component name="PropertiesComponent">{ <component name="PropertiesComponent"><![CDATA[{
&quot;keyToString&quot;: { "keyToString": {
&quot;C++ Project.Game.executor&quot;: &quot;Debug&quot;, "C++ Project.Game.executor": "Debug",
&quot;RunOnceActivity.OpenProjectViewOnStart&quot;: &quot;true&quot;, "RunOnceActivity.OpenProjectViewOnStart": "true",
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, "RunOnceActivity.ShowReadmeOnStart": "true",
&quot;ignore.virus.scanning.warn.message&quot;: &quot;true&quot;, "ignore.virus.scanning.warn.message": "true",
&quot;node.js.detected.package.eslint&quot;: &quot;true&quot;, "node.js.detected.package.eslint": "true",
&quot;node.js.detected.package.tslint&quot;: &quot;true&quot;, "node.js.detected.package.tslint": "true",
&quot;node.js.selected.package.eslint&quot;: &quot;(autodetect)&quot;, "node.js.selected.package.eslint": "(autodetect)",
&quot;node.js.selected.package.tslint&quot;: &quot;(autodetect)&quot;, "node.js.selected.package.tslint": "(autodetect)",
&quot;nodejs_package_manager_path&quot;: &quot;npm&quot;, "nodejs_package_manager_path": "npm",
&quot;settings.editor.selected.configurable&quot;: &quot;preferences.pluginManager&quot;, "settings.editor.selected.configurable": "preferences.pluginManager",
&quot;vue.rearranger.settings.migration&quot;: &quot;true&quot; "vue.rearranger.settings.migration": "true"
}, },
&quot;keyToStringList&quot;: { "keyToStringList": {
&quot;rider.external.source.directories&quot;: [ "rider.external.source.directories": [
&quot;C:\\Users\\Bram\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\DecompilerCache&quot;, "C:\\Users\\Bram\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\DecompilerCache",
&quot;C:\\Users\\Bram\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\SourcesCache&quot;, "C:\\Users\\Bram\\AppData\\Roaming\\JetBrains\\Rider2024.1\\resharper-host\\SourcesCache",
&quot;C:\\Users\\Bram\\AppData\\Local\\Symbols\\src&quot; "C:\\Users\\Bram\\AppData\\Local\\Symbols\\src"
] ]
} }
}</component> }]]></component>
<component name="RunManager"> <component name="RunManager">
<configuration name="Game" type="CppProject" factoryName="C++ Project"> <configuration name="Game" type="CppProject" factoryName="C++ Project">
<configuration_1> <configuration_1>
@@ -449,6 +624,8 @@
<workItem from="1716892028109" duration="12355000" /> <workItem from="1716892028109" duration="12355000" />
<workItem from="1717443362042" duration="1602000" /> <workItem from="1717443362042" duration="1602000" />
<workItem from="1717488475405" duration="1118000" /> <workItem from="1717488475405" duration="1118000" />
<workItem from="1717504678935" duration="140000" />
<workItem from="1717767945752" duration="62956000" />
</task> </task>
<task id="LOCAL-00001" summary="Rework Tile detection system"> <task id="LOCAL-00001" summary="Rework Tile detection system">
<option name="closed" value="true" /> <option name="closed" value="true" />
@@ -610,7 +787,15 @@
<option name="project" value="LOCAL" /> <option name="project" value="LOCAL" />
<updated>1715856298231</updated> <updated>1715856298231</updated>
</task> </task>
<option name="localTasksCounter" value="21" /> <task id="LOCAL-00021" summary="Do stuff">
<option name="closed" value="true" />
<created>1717504732974</created>
<option name="number" value="00021" />
<option name="presentableId" value="LOCAL-00021" />
<option name="project" value="LOCAL" />
<updated>1717504732974</updated>
</task>
<option name="localTasksCounter" value="22" />
<servers /> <servers />
</component> </component>
<component name="TypeScriptGeneratedFilesManager"> <component name="TypeScriptGeneratedFilesManager">
@@ -639,14 +824,8 @@
<MESSAGE value="Add Particles (basic)" /> <MESSAGE value="Add Particles (basic)" />
<MESSAGE value="Add Text rendering and Hull / Fuel Meters" /> <MESSAGE value="Add Text rendering and Hull / Fuel Meters" />
<MESSAGE value="Add sun / moon, started on score / GameManager" /> <MESSAGE value="Add sun / moon, started on score / GameManager" />
<option name="LAST_COMMIT_MESSAGE" value="Add sun / moon, started on score / GameManager" /> <MESSAGE value="Do stuff" />
</component> <option name="LAST_COMMIT_MESSAGE" value="Do stuff" />
<component name="XDebuggerManager">
<watches-manager>
<configuration name="CppProject">
<watch expression="@ ALREADY PREPROCESSED @m_IsPlayerInHitbox" />
</configuration>
</watches-manager>
</component> </component>
<component name="XSLT-Support.FileAssociations.UIState"> <component name="XSLT-Support.FileAssociations.UIState">
<expand /> <expand />

Binary file not shown.

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

BIN
Assets/screenshot.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

View File

@@ -58,3 +58,6 @@ void SoundEffect::PauseAll() {
void SoundEffect::ResumeAll() { void SoundEffect::ResumeAll() {
Mix_Resume(-1); Mix_Resume(-1);
} }
bool SoundEffect::IsPlaying() const {
return Mix_Playing(m_Channel);
}

View File

@@ -20,6 +20,8 @@ public:
static void PauseAll( ); static void PauseAll( );
static void ResumeAll( ); static void ResumeAll( );
bool IsPlaying() const;
private: private:
Mix_Chunk* m_pMixChunk; Mix_Chunk* m_pMixChunk;
int m_Channel; int m_Channel;

View File

@@ -31,3 +31,6 @@ void Text::ChangeText(const std::string& text) {
std::cout << "This is wierd??: " << m_Text << std::endl; std::cout << "This is wierd??: " << m_Text << std::endl;
} }
} }
std::string Text::GetText() {
return m_Text;
}

View File

@@ -11,11 +11,15 @@ public:
Text() = default; Text() = default;
~Text(); ~Text();
Text(const Text& other) = delete;
Text(Text&& other) = delete;
Text& operator=(const Text& other) = delete;
Text& operator=(Text&& other) = delete;
void Draw(const Vector2f& pos) const; void Draw(const Vector2f& pos) const;
void ChangeText(const std::string& text); void ChangeText(const std::string& text);
std::string GetText();
private: private:
std::string m_Text; std::string m_Text;

View File

@@ -15,4 +15,6 @@ namespace Colors
const Color4f CYAN{ 0.0f, 1.0f, 1.0f, 1.0f }; const Color4f CYAN{ 0.0f, 1.0f, 1.0f, 1.0f };
const Color4f PINK{ 1.0f, 0.0f, 0.5f, 1.0f }; const Color4f PINK{ 1.0f, 0.0f, 0.5f, 1.0f };
const Color4f ORANGE{ 1.0f, 0.5f, 0.0f, 1.0f }; const Color4f ORANGE{ 1.0f, 0.5f, 0.0f, 1.0f };
const Color4f GRAY{ 0.5f, 0.5f, 0.5f, 1.0f};
const Color4f LIGHTGRAY{ 0.8f, 0.8f, 0.8f, 1.0f};
} }

View File

@@ -5,20 +5,20 @@
#include "utils.h" #include "utils.h"
Animation::Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect, bool isLooping): m_pTexture(pTexture), m_SrcRect(srcRect), m_Frames(frames), Animation::Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect, bool isLooping): m_pTexture(pTexture), m_SrcRect(srcRect), m_Frames(frames),
m_isLooping(isLooping), m_FrameDuration(frameDuration) { m_IsLooping(isLooping), m_FrameDuration(frameDuration) {
} }
void Animation::Update(float elapsedSec) { void Animation::Update(float elapsedSec) {
if (m_isPlaying) { if (m_IsPlaying) {
m_FrameTimer -= elapsedSec; m_FrameTimer -= elapsedSec;
if (m_FrameTimer <= 0.0f) { if (m_FrameTimer <= 0.0f) {
m_FrameTimer = m_FrameDuration; m_FrameTimer = m_FrameDuration;
++m_CurrentFrame; ++m_CurrentFrame;
if (m_CurrentFrame >= m_Frames) { if (m_CurrentFrame >= m_Frames) {
m_CurrentFrame = 0; m_CurrentFrame = 0;
if (!m_isLooping) { if (!m_IsLooping) {
m_hasPlayedOnce = true; m_HasPlayedOnce = true;
m_isPlaying = false; m_IsPlaying = false;
} }
} }
} }
@@ -32,22 +32,22 @@ void Animation::Draw(const Vector2f& pos, const Rectf& dst) const {
Rectf src = m_SrcRect; Rectf src = m_SrcRect;
src.left += static_cast<float>(m_CurrentFrame) * src.width; src.left += static_cast<float>(m_CurrentFrame) * src.width;
m_pTexture->Draw(dst, src, m_isFlipped); m_pTexture->Draw(dst, src, m_IsFlipped);
} }
void Animation::SetPlaying(bool isPlaying) { void Animation::SetPlaying(bool isPlaying) {
m_isPlaying = isPlaying; m_IsPlaying = isPlaying;
} }
void Animation::SetFlipped(bool isFlipped) { void Animation::SetFlipped(bool isFlipped) {
m_isFlipped = isFlipped; m_IsFlipped = isFlipped;
} }
void Animation::Reset() { void Animation::Reset() {
m_CurrentFrame = 0; m_CurrentFrame = 0;
m_hasPlayedOnce = false; m_HasPlayedOnce = false;
m_isPlaying = true; m_IsPlaying = true;
m_FrameTimer = m_FrameDuration; m_FrameTimer = m_FrameDuration;
} }
bool Animation::IsDone() const { bool Animation::IsDone() const {
return m_hasPlayedOnce && !m_isLooping; return m_HasPlayedOnce && !m_IsLooping;
} }
int Animation::GetFrameCount() const { int Animation::GetFrameCount() const {
return m_Frames; return m_Frames;

View File

@@ -5,6 +5,8 @@ class Animation
{ {
public: public:
Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect, bool isLooping = true); Animation(Texture* pTexture, int frames, float frameDuration, Rectf srcRect, bool isLooping = true);
~Animation() = default;
void Update(float elapsedSec); void Update(float elapsedSec);
void Draw(const Vector2f& pos) const; void Draw(const Vector2f& pos) const;
@@ -30,9 +32,9 @@ private:
float m_FrameDuration { 0.1f }; float m_FrameDuration { 0.1f };
bool m_isPlaying { true }; bool m_IsPlaying { true };
bool m_isFlipped { false }; bool m_IsFlipped { false };
bool m_isLooping { true }; bool m_IsLooping { true };
bool m_hasPlayedOnce { false }; bool m_HasPlayedOnce { false };
}; };

View File

@@ -9,9 +9,6 @@ public:
Camera(const Vector2f& position, float scale = 1); Camera(const Vector2f& position, float scale = 1);
~Camera() = default; ~Camera() = default;
Camera(const Camera& other) = default;
Camera& operator=(const Camera& other) = default;
void SetPosition(const Vector2f& position) { void SetPosition(const Vector2f& position) {
m_Position = position; m_Position = position;
} }

View File

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

View File

@@ -47,6 +47,6 @@ private:
bool m_IsRightMouseDown {}; bool m_IsRightMouseDown {};
bool m_imGui{ true }; bool m_ImGui{ true };
}; };

View File

@@ -459,9 +459,158 @@
<LinkCompiled>true</LinkCompiled> <LinkCompiled>true</LinkCompiled>
</ClCompile> </ClCompile>
<ClCompile Include="Gui\Screen.cpp" /> <ClCompile Include="Gui\Screen.cpp" />
<ClCompile Include="Gui\Screens\FuelScreen.cpp" /> <ClCompile Include="Gui\Screens\FuelScreen\FuelScreen.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<Optimization>Disabled</Optimization>
<SupportJustMyCode>true</SupportJustMyCode>
<AssemblerOutput>NoListing</AssemblerOutput>
<AssemblerListingLocation>x64\Debug\</AssemblerListingLocation>
<UndefineAllPreprocessorDefinitions>false</UndefineAllPreprocessorDefinitions>
<BrowseInformation>true</BrowseInformation>
<BrowseInformationFile>x64\Debug\</BrowseInformationFile>
<CompileAs>Default</CompileAs>
<ConformanceMode>true</ConformanceMode>
<DiagnosticsFormat>Column</DiagnosticsFormat>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ErrorReporting>Prompt</ErrorReporting>
<ExpandAttributedSource>false</ExpandAttributedSource>
<ExceptionHandling>Sync</ExceptionHandling>
<EnableASAN>false</EnableASAN>
<EnableFuzzer>false</EnableFuzzer>
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<GenerateModuleDependencies>false</GenerateModuleDependencies>
<GenerateSourceDependencies>false</GenerateSourceDependencies>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>false</IntrinsicFunctions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C>
<MinimalRebuild>false</MinimalRebuild>
<ModuleDependenciesFile>x64\Debug\</ModuleDependenciesFile>
<ModuleOutputFile>x64\Debug\</ModuleOutputFile>
<OmitDefaultLibName>false</OmitDefaultLibName>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<ObjectFileName>x64\Debug\</ObjectFileName>
<CallingConvention>Cdecl</CallingConvention>
<ProgramDataBaseFileName>x64\Debug\vc143.pdb</ProgramDataBaseFileName>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>x64\Debug\Game.pch</PrecompiledHeaderOutputFile>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessKeepComments>false</PreprocessKeepComments>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
<ShowIncludes>false</ShowIncludes>
<SourceDependenciesFile>x64\Debug\</SourceDependenciesFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<BufferSecurityCheck>true</BufferSecurityCheck>
<SmallerTypeCheck>false</SmallerTypeCheck>
<SpectreMitigation>false</SpectreMitigation>
<StructMemberAlignment>Default</StructMemberAlignment>
<TrackerLogDirectory>x64\Debug\Game.tlog\</TrackerLogDirectory>
<TranslateIncludes>false</TranslateIncludes>
<MinimalRebuildFromTracking>true</MinimalRebuildFromTracking>
<TreatWarningAsError>false</TreatWarningAsError>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>true</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<XMLDocumentationFileName>x64\Debug\</XMLDocumentationFileName>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<IntelJCCErratum>false</IntelJCCErratum>
<BuildStlModules>false</BuildStlModules>
<TreatAngleIncludeAsExternal>false</TreatAngleIncludeAsExternal>
<ExternalWarningLevel>InheritWarningLevel</ExternalWarningLevel>
<TreatExternalTemplatesAsInternal>true</TreatExternalTemplatesAsInternal>
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
</ClCompile>
<ClCompile Include="Gui\Screens\MainScreen.cpp" /> <ClCompile Include="Gui\Screens\MainScreen.cpp" />
<ClCompile Include="Gui\Screens\ScreenManager.cpp" /> <ClCompile Include="Gui\Screens\ScreenManager.cpp" />
<ClCompile Include="Gui\Screens\SellScreen\SellScreen.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<Optimization>Disabled</Optimization>
<SupportJustMyCode>true</SupportJustMyCode>
<AssemblerOutput>NoListing</AssemblerOutput>
<AssemblerListingLocation>x64\Debug\</AssemblerListingLocation>
<UndefineAllPreprocessorDefinitions>false</UndefineAllPreprocessorDefinitions>
<BrowseInformation>true</BrowseInformation>
<BrowseInformationFile>x64\Debug\</BrowseInformationFile>
<CompileAs>Default</CompileAs>
<ConformanceMode>true</ConformanceMode>
<DiagnosticsFormat>Column</DiagnosticsFormat>
<DisableLanguageExtensions>false</DisableLanguageExtensions>
<ErrorReporting>Prompt</ErrorReporting>
<ExpandAttributedSource>false</ExpandAttributedSource>
<ExceptionHandling>Sync</ExceptionHandling>
<EnableASAN>false</EnableASAN>
<EnableFuzzer>false</EnableFuzzer>
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
<FloatingPointModel>Precise</FloatingPointModel>
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
<GenerateModuleDependencies>false</GenerateModuleDependencies>
<GenerateSourceDependencies>false</GenerateSourceDependencies>
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
<IntrinsicFunctions>false</IntrinsicFunctions>
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
<LanguageStandard>Default</LanguageStandard>
<LanguageStandard_C>Default</LanguageStandard_C>
<MinimalRebuild>false</MinimalRebuild>
<ModuleDependenciesFile>x64\Debug\</ModuleDependenciesFile>
<ModuleOutputFile>x64\Debug\</ModuleOutputFile>
<OmitDefaultLibName>false</OmitDefaultLibName>
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
<WholeProgramOptimization>false</WholeProgramOptimization>
<ObjectFileName>x64\Debug\</ObjectFileName>
<CallingConvention>Cdecl</CallingConvention>
<ProgramDataBaseFileName>x64\Debug\vc143.pdb</ProgramDataBaseFileName>
<PrecompiledHeader>Use</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<PrecompiledHeaderOutputFile>x64\Debug\Game.pch</PrecompiledHeaderOutputFile>
<PreprocessToFile>false</PreprocessToFile>
<PreprocessKeepComments>false</PreprocessKeepComments>
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
<ShowIncludes>false</ShowIncludes>
<SourceDependenciesFile>x64\Debug\</SourceDependenciesFile>
<SuppressStartupBanner>true</SuppressStartupBanner>
<BufferSecurityCheck>true</BufferSecurityCheck>
<SmallerTypeCheck>false</SmallerTypeCheck>
<SpectreMitigation>false</SpectreMitigation>
<StructMemberAlignment>Default</StructMemberAlignment>
<TrackerLogDirectory>x64\Debug\Game.tlog\</TrackerLogDirectory>
<TranslateIncludes>false</TranslateIncludes>
<MinimalRebuildFromTracking>true</MinimalRebuildFromTracking>
<TreatWarningAsError>false</TreatWarningAsError>
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
<UseFullPaths>true</UseFullPaths>
<WarningLevel>Level3</WarningLevel>
<XMLDocumentationFileName>x64\Debug\</XMLDocumentationFileName>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
<IntelJCCErratum>false</IntelJCCErratum>
<BuildStlModules>false</BuildStlModules>
<TreatAngleIncludeAsExternal>false</TreatAngleIncludeAsExternal>
<ExternalWarningLevel>InheritWarningLevel</ExternalWarningLevel>
<TreatExternalTemplatesAsInternal>true</TreatExternalTemplatesAsInternal>
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
<LinkCompiled>true</LinkCompiled>
</ClCompile>
<ClCompile Include="Gui\Screens\SellScreen\SellSreenRow.cpp" />
<ClCompile Include="Inventory\PlayerInventory.cpp" />
<ClCompile Include="Levels\Level.cpp"> <ClCompile Include="Levels\Level.cpp">
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary> <RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@@ -634,9 +783,12 @@
<ClInclude Include="Gui\GuiMeter.h" /> <ClInclude Include="Gui\GuiMeter.h" />
<ClInclude Include="Gui\GuiText.h" /> <ClInclude Include="Gui\GuiText.h" />
<ClInclude Include="Gui\Screen.h" /> <ClInclude Include="Gui\Screen.h" />
<ClInclude Include="Gui\Screens\FuelScreen.h" /> <ClInclude Include="Gui\Screens\FuelScreen\FuelScreen.h" />
<ClInclude Include="Gui\Screens\MainScreen.h" /> <ClInclude Include="Gui\Screens\MainScreen.h" />
<ClInclude Include="Gui\Screens\ScreenManager.h" /> <ClInclude Include="Gui\Screens\ScreenManager.h" />
<ClInclude Include="Gui\Screens\SellScreen\SellScreen.h" />
<ClInclude Include="Gui\Screens\SellScreen\SellSreenRow.h" />
<ClInclude Include="Inventory\PlayerInventory.h" />
<ClInclude Include="Levels\Level.h" /> <ClInclude Include="Levels\Level.h" />
<ClInclude Include="Levels\MainMenu\MainMenuLevel.h" /> <ClInclude Include="Levels\MainMenu\MainMenuLevel.h" />
<ClInclude Include="Levels\World\Building.h" /> <ClInclude Include="Levels\World\Building.h" />

View File

@@ -3,16 +3,25 @@
GameManager* GameManager::m_pInstance = nullptr; GameManager* GameManager::m_pInstance = nullptr;
GameManager& GameManager::GetInstance() { GameManager& GameManager::GetInstance() {
if (m_pInstance == nullptr) { if (m_pInstance == nullptr) {
m_pInstance = new GameManager(); m_pInstance = new GameManager();
} }
return *m_pInstance; return *m_pInstance;
} }
void GameManager::DestroyInstance() {
delete m_pInstance->m_pInventory;
delete m_pInstance->m_FuelLowSound;
delete m_pInstance;
}
void GameManager::SetMainScreen(MainScreen* pMainScreen) { void GameManager::SetMainScreen(MainScreen* pMainScreen) {
m_pMainScreen = pMainScreen; m_pMainScreen = pMainScreen;
//TODO: not the best but ¯\_(ツ)_/¯ //TODO: not the best but ¯\_(ツ)_/¯
} }
void GameManager::SetPlayer(Player* pPlayer) {
m_pPlayer = pPlayer;
}
void GameManager::SetFuel(float fuel) { void GameManager::SetFuel(float fuel) {
m_Fuel = fuel; m_Fuel = fuel;
//Limit to 0 - MAXa //Limit to 0 - MAXa
@@ -59,7 +68,32 @@ void GameManager::Update(float elapsedSecs) {
m_pMainScreen->SetFuelMeterValue(this->GetMaxFuel() - m_Fuel); m_pMainScreen->SetFuelMeterValue(this->GetMaxFuel() - m_Fuel);
m_pMainScreen->SetHullMeterValue(m_HullIntegrity); m_pMainScreen->SetHullMeterValue(m_HullIntegrity);
m_pMainScreen->SetScore(std::to_string(m_Score)); m_pMainScreen->SetScore(std::to_string(m_Score));
m_pMainScreen->SetMoney("$ " + std::to_string(m_Money));
if (m_HullIntegrity <= 0 or m_Fuel <= 0) {
m_pPlayer->Die();
}
if(m_Fuel <= 20) {
if(m_FuelLowSound->IsPlaying() == false) {
m_FuelLowSound->Play(1);
}
}
} }
int GameManager::GetMaxFuel() { int GameManager::GetMaxFuel() {
return 100; //TODO: change if i ever add upgrades return 100; //TODO: change if i ever add upgrades
} }
PlayerInventory* GameManager::GetInventory() {
return m_pInventory;
}
Player* GameManager::GetPlayer() {
return m_pPlayer;
}
GameManager::GameManager() {
m_pInventory = new PlayerInventory();
m_FuelLowSound = new SoundEffect{ "sound/fuel_low.wav" };
}

View File

@@ -1,14 +1,17 @@
#pragma once #pragma once
#include "Player.h" #include "Player.h"
#include "Gui/Screens/MainScreen.h" #include "Gui/Screens/MainScreen.h"
#include "Inventory/PlayerInventory.h"
class GameManager { class GameManager {
public: public:
static GameManager& GetInstance(); static GameManager& GetInstance();
static GameManager* m_pInstance; static GameManager* m_pInstance;
static void DestroyInstance();
void SetMainScreen(MainScreen* pMainScreen); void SetMainScreen(MainScreen* pMainScreen);
void SetPlayer(Player* pPlayer); //No time
void SetFuel(float fuel); void SetFuel(float fuel);
float GetFuel() const; float GetFuel() const;
@@ -29,9 +32,11 @@ public:
void Update(float elapsedSecs); void Update(float elapsedSecs);
int GetMaxFuel(); int GetMaxFuel();
PlayerInventory* GetInventory();
Player* GetPlayer();
private: private:
GameManager() = default; GameManager();
float m_Balance{ 0.0f }; float m_Balance{ 0.0f };
@@ -40,5 +45,11 @@ private:
int m_Score{ 0 }; int m_Score{ 0 };
int m_Money{ 0 }; int m_Money{ 0 };
MainScreen* m_pMainScreen{ nullptr }; MainScreen* m_pMainScreen{ nullptr };
PlayerInventory* m_pInventory{ nullptr };
Player* m_pPlayer{ nullptr };
SoundEffect* m_FuelLowSound{ nullptr };
}; };

View File

@@ -89,6 +89,7 @@ WorldTile::~WorldTile() {
} }
void WorldTile::Draw() { void WorldTile::Draw() {
utils::SetColor(Colors::WHITE);
switch (m_GroundTileType->GetType()) { switch (m_GroundTileType->GetType()) {
case GroundTileTypes::Air: { case GroundTileTypes::Air: {

View File

@@ -22,6 +22,7 @@ enum class GroundTileTypes {
Iron, Iron,
}; };
static std::map<GroundTileTypes, std::string> GroundTileTypeStrings { static std::map<GroundTileTypes, std::string> GroundTileTypeStrings {
{ GroundTileTypes::Air, "Air" }, { GroundTileTypes::Air, "Air" },
{ GroundTileTypes::Dirt, "Dirt" }, { GroundTileTypes::Dirt, "Dirt" },
@@ -35,6 +36,9 @@ static std::map<GroundTileTypes, std::string> GroundTileTypeStrings {
}; };
GroundTileType * getRandomGroundTile(); GroundTileType * getRandomGroundTile();
class GroundTileType { class GroundTileType {
@@ -140,7 +144,7 @@ public:
~WorldTile(); ~WorldTile();
void Draw(); void Draw();
void Update(const Camera* camera); //TODO: no use void Update(const Camera* camera);
Vector2f GetPosition() const { Vector2f GetPosition() const {
return m_Position; return m_Position;

View File

@@ -5,40 +5,34 @@
#include "colors.h" #include "colors.h"
#include "utils.h" #include "utils.h"
GuiButton::GuiButton(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): m_Position(pos), m_Size(size) { GuiButton::GuiButton(const std::string& filePath, const Vector2f& pos, const Vector2f& size, bool shouldHideDefault, TextureManager* manager): m_Position(pos), m_Size(size),
m_shouldHide(shouldHideDefault) {
m_Texture = manager->GetTexture(filePath); m_Texture = manager->GetTexture(filePath);
if(size.x == 0 && size.y == 0) { if (size.x == 0 && size.y == 0) {
m_Size = Vector2f{float(m_Texture->GetWidth()), float(m_Texture->GetHeight())}; m_Size = Vector2f { float(m_Texture->GetWidth()), float(m_Texture->GetHeight()) };
} }
std::cout << "Button created" << '\n';
}
GuiButton::~GuiButton() {
std::cout << "Button destroyed" << '\n';
} }
void GuiButton::Draw() const { void GuiButton::Draw() const {
Rectf dest = Rectf(m_Position, m_Size); Rectf dest = Rectf(m_Position, m_Size);
Rectf src = Rectf(0, 0, m_Texture->GetWidth(), m_Texture->GetHeight()); Rectf src = Rectf(0, 0, m_Texture->GetWidth(), m_Texture->GetHeight());
if(m_IsHovered) { if (m_IsHovered || !m_shouldHide) {
m_Texture->Draw(dest, src, false); m_Texture->Draw(dest, src, false);
} }
} }
void GuiButton::Update(float elapsedSec) { void GuiButton::Update(float elapsedSec) {
Vector2f mousePos = utils::GetMousePos(); Vector2f mousePos = utils::GetMousePos();
Rectf buttonRect = Rectf(m_Position, m_Size); Rectf buttonRect = Rectf(m_Position, m_Size);
this->m_IsHovered = utils::IsPointInRect(mousePos, buttonRect); this->m_IsHovered = utils::IsPointInRect(mousePos, buttonRect);
m_IsPressed = m_IsHovered && utils::IsMouseButtonDown(SDL_BUTTON_LEFT); m_IsPressed = m_IsHovered && utils::IsMouseButtonDown(SDL_BUTTON_LEFT);
if(m_IsPressed && !m_IsPrimed) { if (m_IsPressed && !m_IsPrimed) {
m_IsPrimed = true; m_IsPrimed = true;
m_OnClick(); m_OnClick();
} }
if(!m_IsPressed) { if (!m_IsPressed) {
m_IsPrimed = false; m_IsPrimed = false;
} }
} }

View File

@@ -6,27 +6,31 @@
#include "Texture.h" #include "Texture.h"
#include "../TextureManager.h" #include "../TextureManager.h"
class GuiButton : public GuiElement class GuiButton : public GuiElement {
{
public: public:
GuiButton() = default; GuiButton() = default;
GuiButton(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager); GuiButton(const std::string& filePath, const Vector2f& pos, const Vector2f& size, bool shouldHideDefault, TextureManager* manager);
~GuiButton() override; ~GuiButton() override = default;
virtual void Draw() const override; virtual void Draw() const override;
virtual void Update(float elapsedSec) override; virtual void Update(float elapsedSec) override;
void SetOnClick(std::function<void(void)> onClick) { void SetOnClick(std::function<void(void)> onClick) {
m_OnClick = onClick; m_OnClick = onClick;
} }
private: private:
Texture* m_Texture{ nullptr }; Texture* m_Texture { nullptr };
Vector2f m_Position; Vector2f m_Position;
Vector2f m_Size; Vector2f m_Size;
bool m_IsHovered{ false }; bool m_IsHovered { false };
bool m_IsPressed{ false }; bool m_IsPressed { false };
bool m_IsPrimed{ false }; bool m_IsPrimed { false };
std::function<void(void)> m_OnClick{ []() { std::cout << "Button not implemented" << std::endl; } }; bool m_shouldHide { true };
std::function<void(void)> m_OnClick { []()
{
std::cout << "Button not implemented" << std::endl;
} };
}; };

View File

@@ -1,6 +1,7 @@
#include "pch.h" #include "pch.h"
#include "GuiMeter.h" #include "GuiMeter.h"
#include "colors.h"
#include "TextureManager.h" #include "TextureManager.h"
#include "utils.h" #include "utils.h"
GuiMeter::GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, int frameCount, TextureManager* manager): GuiMeter( GuiMeter::GuiMeter(const std::string& filePath, Vector2f pos, Vector2f frameSize, int frameCount, TextureManager* manager): GuiMeter(
@@ -14,8 +15,9 @@ GuiMeter::~GuiMeter() {
delete m_Animation; delete m_Animation;
} }
void GuiMeter::Draw() const { void GuiMeter::Draw() const {
utils::SetColor(Colors::WHITE);
m_Animation->Draw(m_Position, Rectf{m_Position, m_DrawSize}); m_Animation->Draw(m_Position, Rectf{m_Position, m_DrawSize});
utils::DrawRect(Rectf { m_Position, m_DrawSize}); // utils::DrawRect(Rectf { m_Position, m_DrawSize});
} }
void GuiMeter::Update(float elapsedSec) { void GuiMeter::Update(float elapsedSec) {
const int frame = static_cast<int>(utils::map(m_Value, 0.0f, m_MaxValue, 0, (float)m_Animation->GetFrameCount())); const int frame = static_cast<int>(utils::map(m_Value, 0.0f, m_MaxValue, 0, (float)m_Animation->GetFrameCount()));

View File

@@ -2,6 +2,7 @@
#include "GuiText.h" #include "GuiText.h"
#include "colors.h" #include "colors.h"
#include "utils.h"
GuiText::GuiText(const Vector2f& position, const std::string& text, const std::string& fontPath, int size, const Color4f& color): m_Position(position), m_Text(new Text(text, fontPath, size, color)) { GuiText::GuiText(const Vector2f& position, const std::string& text, const std::string& fontPath, int size, const Color4f& color): m_Position(position), m_Text(new Text(text, fontPath, size, color)) {
} }
@@ -11,6 +12,7 @@ GuiText::GuiText(): m_Position(100,100), m_Text(new Text("Undefined", "fonts/ver
} }
void GuiText::Draw() const { void GuiText::Draw() const {
utils::SetColor(Colors::WHITE);
m_Text->Draw(m_Position); m_Text->Draw(m_Position);
} }
@@ -20,6 +22,12 @@ void GuiText::Update(float elapsedSec) {
void GuiText::ChangeText(const std::string& text) const { void GuiText::ChangeText(const std::string& text) const {
m_Text->ChangeText(text); m_Text->ChangeText(text);
} }
void GuiText::SetPosition(const Vector2f& pos) {
m_Position = pos;
}
GuiText::~GuiText() { GuiText::~GuiText() {
delete m_Text; delete m_Text;
} }
std::string GuiText::GetText() const {
return m_Text->GetText();
}

View File

@@ -8,12 +8,21 @@ public:
GuiText(const Vector2f& position, const std::string& text, const std::string& fontPath, int size, const Color4f& color); GuiText(const Vector2f& position, const std::string& text, const std::string& fontPath, int size, const Color4f& color);
GuiText(); GuiText();
GuiText(const GuiText& other) = delete;
GuiText& operator=(const GuiText& other) = delete;
GuiText(GuiText&& other) = delete;
GuiText& operator=(GuiText&& other) = delete;
void Draw() const override; void Draw() const override;
void Update(float elapsedSec) override; void Update(float elapsedSec) override;
void ChangeText(const std::string& text) const; void ChangeText(const std::string& text) const;
void SetPosition(const Vector2f& pos);
~GuiText() override; ~GuiText() override;
std::string GetText() const;
private: private:
Vector2f m_Position; Vector2f m_Position;
Text* m_Text; Text* m_Text;

View File

@@ -1,6 +1,9 @@
#include "pch.h" #include "pch.h"
#include "Screen.h" #include "Screen.h"
#include "colors.h"
#include "utils.h"
Screen::Screen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): m_Position(pos), m_Size(size) { Screen::Screen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): m_Position(pos), m_Size(size) {
if (!filePath.empty()) { if (!filePath.empty()) {
m_Background = manager->GetTexture(filePath); m_Background = manager->GetTexture(filePath);
@@ -23,6 +26,7 @@ void Screen::Update(float elapsedSecs) {
} }
} }
void Screen::Draw() const { void Screen::Draw() const {
utils::SetColor(Colors::WHITE);
if (m_Background != nullptr) { //Incase there is no background if (m_Background != nullptr) { //Incase there is no background
Rectf dest = Rectf(m_Position, m_Size); Rectf dest = Rectf(m_Position, m_Size);
Rectf src = Rectf(0, 0, m_Background->GetWidth(), m_Background->GetHeight()); Rectf src = Rectf(0, 0, m_Background->GetWidth(), m_Background->GetHeight());

View File

@@ -12,6 +12,11 @@ public:
Screen() = default; Screen() = default;
Screen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager); Screen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager);
Screen(Screen& other) = delete;
Screen& operator=(Screen& other) = delete;
Screen(Screen&& other) = delete;
Screen& operator=(Screen&& other) = delete;
virtual ~Screen(); virtual ~Screen();
void AddElement(GuiElement* element); void AddElement(GuiElement* element);

View File

@@ -1,72 +0,0 @@
#include "pch.h"
#include "FuelScreen.h"
#include "colors.h"
#include "GameManager.h"
#include "ScreenManager.h"
#include "utils.h"
FuelScreen::FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): Screen(filePath, pos, size, manager)
{
const Vector2f fuelScreenSize = Vector2f { 492, 396 };
// Vector2f fuelScreenCenter = Vector2f { utils::GetViewport().x / 2 - fuelScreenSize.x / 2, utils::GetViewport().y / 2 - fuelScreenSize.y / 2 };
const Vector2f ScreenCenter = Vector2f { utils::GetViewport().x / 2, utils::GetViewport().y / 2 };
const Vector2f fuelScreenCenter = ScreenCenter - fuelScreenSize / 2;
const Vector2f closeButtonOffset = Vector2f { 460, 396 - 14 };
Vector2f closeButtonPos = fuelScreenCenter + closeButtonOffset;
closeButtonPos.y -= 18;
GuiButton* closeFuelButton = new GuiButton { "gui/close.png", closeButtonPos, Vector2f{0,0}, TextureManager::GetInstance() };
closeFuelButton->SetOnClick([this]() { ScreenManager::GetInstance()->CloseScreen(); });
this->AddElement(closeFuelButton);
const Vector2f oneDollarButtonPos = Vector2f { 451, 287 };
GuiButton* fiveDollarButton = new GuiButton { "gui/fuel/5dollars.png", oneDollarButtonPos , Vector2f{0,0}, TextureManager::GetInstance() };
this->AddElement(fiveDollarButton);
const Vector2f tenDollarButtonPos = oneDollarButtonPos + Vector2f { 113, -1 };
GuiButton* tenDollarButton = new GuiButton { "gui/fuel/10dollars.png", tenDollarButtonPos, Vector2f{0,0}, TextureManager::GetInstance() };
this->AddElement(tenDollarButton);
const Vector2f twentyFiveDollarButtonPos = oneDollarButtonPos + Vector2f { 0, -89 };
GuiButton* twentyFiveDollarButton = new GuiButton { "gui/fuel/25dollars.png", twentyFiveDollarButtonPos, Vector2f{0,0}, TextureManager::GetInstance() };
this->AddElement(twentyFiveDollarButton);
const Vector2f fiftyDollarButtonPos = twentyFiveDollarButtonPos + Vector2f { 114, 0 };
GuiButton* fiftyDollarButton = new GuiButton { "gui/fuel/50dollars.png", fiftyDollarButtonPos, Vector2f{0,0}, TextureManager::GetInstance() };
this->AddElement(fiftyDollarButton);
const Vector2f fillTankButtonPos = Vector2f { 450, 108 };
GuiButton* fillTankButton = new GuiButton { "gui/fuel/fillTank.png", fillTankButtonPos, Vector2f{0,0}, TextureManager::GetInstance() };
this->AddElement(fillTankButton);
Vector2f offset{ 50, 320};
m_MoneyText = new GuiText {fuelScreenCenter + offset, "$ 20", "fonts/Arial.ttf", 20, Colors::YELLOW };
}
FuelScreen::~FuelScreen() {
delete m_MoneyText;
};
void FuelScreen::Draw() const {
int currentFuel = GameManager::GetInstance().GetFuel();
int maxFuel = GameManager::GetInstance().GetMaxFuel();
utils::SetColor(Colors::ORANGE);
Vector2f fuelBarPos = Vector2f { 275, 135 };
const int MAX_HEIGHT = 210;
Vector2f fuelBarSize = Vector2f { 40, utils::map(currentFuel, 0, maxFuel, 0, MAX_HEIGHT) };
utils::FillRect(Rectf{fuelBarPos, fuelBarSize});
Screen::Draw();
m_MoneyText->Draw();
}
void FuelScreen::Update(float elapsedSecs) {
Screen::Update(elapsedSecs);
m_MoneyText->ChangeText("$ " + std::to_string(GameManager::GetInstance().GetMoney()));
}

View File

@@ -1,18 +0,0 @@
#pragma once
#include "../Screen.h"
#include "Gui/GuiText.h"
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;
private:
GuiText* m_MoneyText;
};

View File

@@ -0,0 +1,137 @@
#include "pch.h"
#include "FuelScreen.h"
#include "colors.h"
#include "GameManager.h"
#include "../ScreenManager.h"
#include "utils.h"
FuelScreen::FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): Screen(filePath, pos, size, manager) {
const Vector2f fuelScreenSize { 492, 396 };
const Vector2f ScreenCenter { utils::GetViewport().x / 2, utils::GetViewport().y / 2 };
const Vector2f fuelScreenCenter { ScreenCenter - fuelScreenSize / 2 };
m_BuySound = new SoundEffect { "sound/buy.wav" };
const Vector2f closeButtonOffset = Vector2f { 460, 396 - 14 };
Vector2f closeButtonPos = fuelScreenCenter + closeButtonOffset;
closeButtonPos.y -= 18;
GuiButton* closeFuelButton = new GuiButton { "gui/close.png", closeButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
closeFuelButton->SetOnClick([this]()
{
ScreenManager::GetInstance()->CloseScreen();
});
this->AddElement(closeFuelButton);
const Vector2f oneDollarButtonPos = Vector2f { 451, 287 };
GuiButton* fiveDollarButton = new GuiButton { "gui/fuel/5dollars.png", oneDollarButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
fiveDollarButton->SetOnClick([this]()
{
if (GameManager::GetInstance().GetMoney() > 5) {
GameManager::GetInstance().AddFuel(5);
GameManager::GetInstance().IncreaseMoney(-5);
m_BuySound->Play(0);
}
else {
std::cout << "Not enough money" << std::endl;
}
});
this->AddElement(fiveDollarButton);
const Vector2f tenDollarButtonPos = oneDollarButtonPos + Vector2f { 113, -1 };
GuiButton* tenDollarButton = new GuiButton { "gui/fuel/10dollars.png", tenDollarButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
tenDollarButton->SetOnClick([this]()
{
if (GameManager::GetInstance().GetMoney() > 10) {
GameManager::GetInstance().AddFuel(10);
GameManager::GetInstance().IncreaseMoney(-10);
m_BuySound->Play(0);
}
else {
std::cout << "Not enough money" << std::endl;
}
});
this->AddElement(tenDollarButton);
const Vector2f twentyFiveDollarButtonPos = oneDollarButtonPos + Vector2f { 0, -89 };
GuiButton* twentyFiveDollarButton = new GuiButton { "gui/fuel/25dollars.png", twentyFiveDollarButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
twentyFiveDollarButton->SetOnClick([this]()
{
if (GameManager::GetInstance().GetMoney() > 25) {
GameManager::GetInstance().AddFuel(25);
GameManager::GetInstance().IncreaseMoney(-25);
m_BuySound->Play(0);
}
else {
std::cout << "Not enough money" << std::endl;
}
});
this->AddElement(twentyFiveDollarButton);
const Vector2f fiftyDollarButtonPos = twentyFiveDollarButtonPos + Vector2f { 114, 0 };
GuiButton* fiftyDollarButton = new GuiButton { "gui/fuel/50dollars.png", fiftyDollarButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
fiftyDollarButton->SetOnClick([this]()
{
if (GameManager::GetInstance().GetMoney() > 50) {
GameManager::GetInstance().AddFuel(50);
GameManager::GetInstance().IncreaseMoney(-50);
m_BuySound->Play(0);
}
else {
std::cout << "Not enough money" << std::endl;
}
});
this->AddElement(fiftyDollarButton);
const Vector2f fillTankButtonPos = Vector2f { 450, 108 };
GuiButton* fillTankButton = new GuiButton { "gui/fuel/fillTank.png", fillTankButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
fillTankButton->SetOnClick([this]()
{
if (GameManager::GetInstance().GetFuel() < GameManager::GetInstance().GetMaxFuel() - 2) {
int fuelNeeded = static_cast<int>(GameManager::GetInstance().GetMaxFuel() - GameManager::GetInstance().GetFuel());
if (fuelNeeded <= GameManager::GetInstance().GetMoney()) {
GameManager::GetInstance().AddFuel(fuelNeeded);
GameManager::GetInstance().IncreaseMoney(-fuelNeeded);
m_BuySound->Play(0);
}
else {
std::cout << "Not enough money" << std::endl;
}
}
else {
std::cout << "Don't need fuel" << std::endl;
}
});
this->AddElement(fillTankButton);
Vector2f offset { 50, 320 };
m_MoneyText = new GuiText { fuelScreenCenter + offset, "$ 20", "fonts/Arial.ttf", 20, Colors::YELLOW };
}
FuelScreen::~FuelScreen() {
delete m_MoneyText;
delete m_BuySound;
};
void FuelScreen::Draw() const {
int currentFuel = GameManager::GetInstance().GetFuel();
int maxFuel = GameManager::GetInstance().GetMaxFuel();
utils::SetColor(Color4f { 99.f / 255.f, 82.f / 255.f, 36.f / 255.f, 1.f });
Vector2f fuelBarPos = Vector2f { 275, 135 };
const int MAX_HEIGHT = 210;
Vector2f fuelBarSize = Vector2f { 40, utils::map(currentFuel, 0, maxFuel, 0, MAX_HEIGHT) };
utils::FillRect(Rectf { fuelBarPos, fuelBarSize });
Screen::Draw();
m_MoneyText->Draw();
}
void FuelScreen::Update(float elapsedSecs) {
Screen::Update(elapsedSecs);
m_MoneyText->ChangeText("$ " + std::to_string(GameManager::GetInstance().GetMoney())); //Not the best but will work
}

View File

@@ -0,0 +1,25 @@
#pragma once
#include "SoundEffect.h"
#include "../../Screen.h"
#include "Gui/GuiText.h"
class FuelScreen final : public Screen {
public:
FuelScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager);
virtual ~FuelScreen() override;
FuelScreen(const FuelScreen& other) = delete;
FuelScreen(FuelScreen&& other) = delete;
FuelScreen& operator=(const FuelScreen& other) = delete;
FuelScreen& operator=(FuelScreen&& other) = delete;
virtual void Draw() const override;
virtual void Update(float elapsedSecs) override;
private:
GuiText* m_MoneyText;
SoundEffect* m_BuySound { nullptr };
};

View File

@@ -5,24 +5,55 @@
#include "GameManager.h" #include "GameManager.h"
#include "utils.h" #include "utils.h"
#include "Gui/GuiText.h" #include "Gui/GuiText.h"
MainScreen::MainScreen(TextureManager* manager) : Screen("", Vector2f{0, 0}, Vector2f{900.f, 500.f}, manager) { MainScreen::MainScreen(TextureManager* manager) : Screen("", Vector2f { 0, 0 }, Vector2f { 900.f, 500.f }, manager) {
Vector2f ScreenSize = utils::GetViewport(); Vector2f ScreenSize = utils::GetViewport();
Vector2f FuelFrameSize{ 336, 77 }; Vector2f FuelFrameSize { 336, 77 };
Vector2f HullFrameSize{ 61, 76 }; Vector2f HullFrameSize { 61, 76 };
m_FuelMeter = new GuiMeter("gui/main/fuel/fuel.png", Vector2f{HullFrameSize.x + 10, ScreenSize.y - FuelFrameSize.y }, FuelFrameSize,FuelFrameSize / 1.3, 21, manager); m_FuelMeter = new GuiMeter("gui/main/fuel/fuel.png", Vector2f { HullFrameSize.x + 10, ScreenSize.y - FuelFrameSize.y }, FuelFrameSize, FuelFrameSize / 1.3, 21, manager);
this->AddElement(m_FuelMeter); this->AddElement(m_FuelMeter);
m_HullMeter = new GuiMeter("gui/main/hull/hull.png", Vector2f{5, ScreenSize.y - HullFrameSize.y - 10 }, HullFrameSize, HullFrameSize, 50, manager); m_HullMeter = new GuiMeter("gui/main/hull/hull.png", Vector2f { 5, ScreenSize.y - HullFrameSize.y - 10 }, HullFrameSize, HullFrameSize, 50, manager);
this->AddElement(m_HullMeter); this->AddElement(m_HullMeter);
Vector2f DepthMeterPosition{10, ScreenSize.y - 120}; Vector2f DepthMeterPosition { 10, ScreenSize.y - 120 };
m_DepthText = new GuiText(DepthMeterPosition, "Depth: 20", "fonts/Arial.ttf", 20, Colors::YELLOW); m_DepthText = new GuiText(DepthMeterPosition, "Depth: 20", "fonts/Arial.ttf", 20, Colors::YELLOW);
this->AddElement(m_DepthText); this->AddElement(m_DepthText);
Vector2f ScoreMeterPosition{10, ScreenSize.y - 150}; Vector2f ScoreMeterPosition { 150, ScreenSize.y - 50 };
m_ScoreText = new GuiText(ScoreMeterPosition, "Score: 0", "fonts/Arial.ttf", 20, Colors::YELLOW); m_ScoreText = new GuiText(ScoreMeterPosition, "0", "fonts/Arial.ttf", 20, Colors::YELLOW);
this->AddElement(m_ScoreText); this->AddElement(m_ScoreText);
Vector2f InvButtonPosition { ScreenSize.x - 150, ScreenSize.y - 60 };
float InvButtonScale = 1.2f;
m_InvButton = new GuiButton("gui/main/inv.png", InvButtonPosition, Vector2f { 58 * InvButtonScale, 55 * InvButtonScale }, false, manager);
m_InvButton->SetOnClick([]()
{
// GameManager::GetInstance().ToggleInventory();
std::cout << "Inventory button clicked" << std::endl;
});
this->AddElement(m_InvButton);
Vector2f OptionsButtonPosition { ScreenSize.x - 85, ScreenSize.y - 85 };
m_OptionsButton = new GuiButton("gui/main/options.png", OptionsButtonPosition, Vector2f { 74, 56 }, false, manager);
m_OptionsButton->SetOnClick([]()
{
// GameManager::GetInstance().ToggleOptions();
std::cout << "Options button clicked" << std::endl;
});
this->AddElement(m_OptionsButton);
m_HelpButton = new GuiButton("gui/main/help.png", Vector2f { ScreenSize.x - 50, ScreenSize.y - 50 }, Vector2f { 50, 50 }, false, manager);
m_HelpButton->SetOnClick([]()
{
// GameManager::GetInstance().ToggleHelp();
std::cout << "Help button clicked" << std::endl;
});
this->AddElement(m_HelpButton);
m_MoneyText = new GuiText(Vector2f { ScreenSize.x - 450, ScreenSize.y - 35 }, "Filler Text", "fonts/Arial.ttf", 25, Colors::YELLOW);
this->AddElement(m_MoneyText);
} }
MainScreen::~MainScreen() = default; MainScreen::~MainScreen() = default;
void MainScreen::Draw() const { void MainScreen::Draw() const {
@@ -43,4 +74,6 @@ void MainScreen::SetDepth(const std::string& text) const {
void MainScreen::SetScore(const std::string& text) const { void MainScreen::SetScore(const std::string& text) const {
m_ScoreText->ChangeText(text); m_ScoreText->ChangeText(text);
} }
void MainScreen::SetMoney(const std::string& text) const {
m_MoneyText->ChangeText(text);
}

View File

@@ -3,7 +3,7 @@
#include "Gui/GuiText.h" #include "Gui/GuiText.h"
#include "Gui/Screen.h" #include "Gui/Screen.h"
class MainScreen: public Screen { class MainScreen final : public Screen {
public: public:
explicit MainScreen(TextureManager* manager); explicit MainScreen(TextureManager* manager);
virtual ~MainScreen() override; virtual ~MainScreen() override;
@@ -16,6 +16,7 @@ public:
void SetDepth(const std::string& text) const; void SetDepth(const std::string& text) const;
void SetScore(const std::string& text) const; void SetScore(const std::string& text) const;
void SetMoney(const std::string& text) const;
private: private:
GuiMeter* m_FuelMeter; GuiMeter* m_FuelMeter;
@@ -23,5 +24,10 @@ private:
GuiText* m_DepthText; GuiText* m_DepthText;
GuiText* m_ScoreText; GuiText* m_ScoreText;
GuiText* m_MoneyText;
GuiButton* m_InvButton;
GuiButton* m_OptionsButton;
GuiButton* m_HelpButton;
}; };

View File

@@ -1,20 +1,21 @@
#include "pch.h" #include "pch.h"
#include "ScreenManager.h" #include "ScreenManager.h"
#include "FuelScreen.h" #include "FuelScreen/FuelScreen.h"
#include "SellScreen/SellScreen.h"
#include "utils.h" #include "utils.h"
ScreenManager* ScreenManager::m_pInstance = nullptr; ScreenManager* ScreenManager::m_pInstance = nullptr;
Screen* ScreenManager::m_FuelScreen{ nullptr }; Screen* ScreenManager::m_FuelScreen { nullptr };
Screen* ScreenManager::m_SellScreen{ nullptr }; Screen* ScreenManager::m_SellScreen { nullptr };
ScreenManager* ScreenManager::GetInstance() { ScreenManager * ScreenManager::GetInstance() {
if(m_pInstance == nullptr) { if (m_pInstance == nullptr) {
m_pInstance = new ScreenManager(); m_pInstance = new ScreenManager();
} }
if(!m_pInstance->m_AreScreensInitialized) { if (!m_pInstance->m_AreScreensInitialized) {
m_pInstance->InitializeScreens(); //TODO: Ask if this a hack m_pInstance->InitializeScreens();
m_pInstance->m_AreScreensInitialized = true; m_pInstance->m_AreScreensInitialized = true;
} }
return m_pInstance; return m_pInstance;
@@ -25,19 +26,19 @@ void ScreenManager::DestroyInstance() {
} }
void ScreenManager::OpenScreen(Screen* screen) { void ScreenManager::OpenScreen(Screen* screen) {
if(m_IsScreenOpen == false) { if (m_IsScreenOpen == false) {
m_currentScreen = screen; m_currentScreen = screen;
m_IsScreenOpen = true; m_IsScreenOpen = true;
} }
} }
void ScreenManager::CloseScreen() { void ScreenManager::CloseScreen() {
if(m_IsScreenOpen == true) { if (m_IsScreenOpen == true) {
m_IsScreenOpen = false; m_IsScreenOpen = false;
m_currentScreen = nullptr; m_currentScreen = nullptr;
} }
} }
bool ScreenManager::IsScreenOpen() { bool ScreenManager::IsScreenOpen() const {
return m_IsScreenOpen; return m_IsScreenOpen;
} }
ScreenManager::~ScreenManager() { ScreenManager::~ScreenManager() {
@@ -51,8 +52,7 @@ void ScreenManager::InitializeScreens() {
Vector2f sellScreenSize = Vector2f { 533, 398 }; Vector2f sellScreenSize = Vector2f { 533, 398 };
Vector2f sellScreenCenter = Vector2f { utils::GetViewport().x / 2 - sellScreenSize.x / 2, utils::GetViewport().y / 2 - sellScreenSize.y / 2 }; Vector2f sellScreenCenter = Vector2f { utils::GetViewport().x / 2 - sellScreenSize.x / 2, utils::GetViewport().y / 2 - sellScreenSize.y / 2 };
m_SellScreen = new Screen { "gui/sell/background.png", sellScreenCenter, sellScreenSize, TextureManager::GetInstance() }; m_SellScreen = new SellScreen { "gui/sell/background.png", sellScreenCenter, sellScreenSize, TextureManager::GetInstance() };
//m_Button = Button { "gui/close.png", closeButtonPos, closeButtonSize, TextureManager::GetInstance() }; //m_Button = Button { "gui/close.png", closeButtonPos, closeButtonSize, TextureManager::GetInstance() };
} }

View File

@@ -3,8 +3,7 @@
class ScreenManager class ScreenManager {
{
public: public:
static ScreenManager* GetInstance(); static ScreenManager* GetInstance();
static void DestroyInstance(); static void DestroyInstance();
@@ -12,23 +11,26 @@ public:
void OpenScreen(Screen* screen); void OpenScreen(Screen* screen);
void CloseScreen(); void CloseScreen();
Screen* GetCurrentScreen() const { return m_currentScreen; } Screen * GetCurrentScreen() const {
bool IsScreenOpen(); return m_currentScreen;
}
bool IsScreenOpen() const;
static ScreenManager* m_pInstance; static ScreenManager* m_pInstance;
static Screen* m_FuelScreen; static Screen* m_FuelScreen;
static Screen* m_SellScreen; static Screen* m_SellScreen;
private: private:
ScreenManager() = default; ScreenManager() = default;
~ScreenManager(); ~ScreenManager();
void InitializeScreens(); void InitializeScreens();
bool m_IsScreenOpen{ false }; bool m_IsScreenOpen { false };
Screen* m_currentScreen; Screen* m_currentScreen;
bool m_AreScreensInitialized{ false }; bool m_AreScreensInitialized { false };
}; };

View File

@@ -0,0 +1,116 @@
#include "pch.h"
#include "SellScreen.h"
#include "colors.h"
#include "GameManager.h"
#include "SellSreenRow.h"
#include "../ScreenManager.h"
#include "utils.h"
SellScreen::SellScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager): Screen(filePath, pos, size, manager) {
const Vector2f sellScreenSize { 492, 396 };
// Vector2f fuelScreenCenter = Vector2f { utils::GetViewport().x / 2 - fuelScreenSize.x / 2, utils::GetViewport().y / 2 - fuelScreenSize.y / 2 };
const Vector2f ScreenCenter = Vector2f { utils::GetViewport().x / 2, utils::GetViewport().y / 2 };
const Vector2f sellScreenCenter = ScreenCenter - sellScreenSize / 2;
const Vector2f closeButtonOffset = Vector2f { 460, 396 - 14 };
Vector2f closeButtonPos = sellScreenCenter + closeButtonOffset;
closeButtonPos.y -= 18;
GuiButton* closeFuelButton = new GuiButton { "gui/close.png", closeButtonPos, Vector2f { 0, 0 }, true, TextureManager::GetInstance() };
closeFuelButton->SetOnClick([this]()
{
ScreenManager::GetInstance()->CloseScreen();
});
this->AddElement(closeFuelButton);
std::string HeaderText = "Cargo Bay Qty. Value Total Value"; //Dont ask
Vector2f headerTextPos = Vector2f { 285, 400 };
GuiText* m_HeaderText = new GuiText { headerTextPos, HeaderText, "fonts/Arial.ttf", 14, Colors::LIGHTGRAY };
this->AddElement(m_HeaderText);
std::string sellAllPath = "gui/sell/sellall.png";
Vector2f sellAllPos = Vector2f { 410, 100 };
GuiButton* sellAllButton = new GuiButton { sellAllPath, sellAllPos, Vector2f { 97, 27 }, false, TextureManager::GetInstance() };
sellAllButton->SetOnClick([this]()
{
this->SellAll();
});
this->AddElement(sellAllButton);
std::string totalSell = "Balls";
Vector2f totalSellPos = Vector2f { 590, 105 };
m_TotalMoneyText = new GuiText { totalSellPos, totalSell, "fonts/Arial.ttf", 18, Colors::GREEN };
this->AddElement(m_TotalMoneyText);
}
SellScreen::~SellScreen() {
for (SellSreenRow* row : m_Rows) {
delete row;
}
}
void SellScreen::Draw() const {
Screen::Draw();
for (const SellSreenRow* row : m_Rows) {
row->Draw();
}
// m_TotalMoneyText->Draw();
utils::SetColor(Colors::GREEN);
utils::DrawLine(550, 130, 650, 130);
}
void SellScreen::Update(float elapsedSecs) {
Screen::Update(elapsedSecs);
if (m_AreRowsDirty) {
//remake rows
m_AreRowsDirty = false;
for (SellSreenRow* row : m_Rows) {
delete row;
}
m_Rows.clear();
std::vector<ItemStack *> items = GameManager::GetInstance().GetInventory()->GetItems();
int totalWorth { 0 };
int index { 0 }; //Fix to not overshoot when an empty item is in the inventory
for (ItemStack* item : items) {
if (item->m_ItemType == InventoryItem::Empty) {
continue;
}
SellSreenRow* row = new SellSreenRow(*item, Vector2f { 250, (float)360 - index * 30 }, Vector2f { 400, 30 });
totalWorth += item->m_Quantity * PlayerInventory::GetItemValue(item->m_ItemType);
m_Rows.push_back(std::move(row));
index++;
}
m_TotalMoneyText->ChangeText("$" + std::to_string(GameManager::GetInstance().GetInventory()->GetTotalValue()));
int characterCount = m_TotalMoneyText->GetText().length();
m_TotalMoneyText->SetPosition(Vector2f { (float)610 - characterCount * 10, 105 });
}
for (SellSreenRow* row : m_Rows) {
row->Update(elapsedSecs);
}
}
void SellScreen::MarkDirty() {
m_AreRowsDirty = true;
}
void SellScreen::SellAll() {
PlayerInventory* inventory = GameManager::GetInstance().GetInventory();
std::vector<ItemStack *> items = inventory->GetItems();
if (items.empty()) {
return;
}
int totalWorth { 0 };
for (ItemStack* item : items) {
if (item->m_ItemType == InventoryItem::Empty) {
continue;
}
totalWorth += item->m_Quantity * PlayerInventory::GetItemValue(item->m_ItemType);
inventory->RemoveItem(item);
}
GameManager::GetInstance().IncreaseMoney(totalWorth);
}

View File

@@ -0,0 +1,23 @@
#pragma once
#include "SellSreenRow.h"
#include "../../Screen.h"
#include "Gui/GuiText.h"
class SellScreen final : public Screen {
public:
SellScreen(const std::string& filePath, Vector2f pos, Vector2f size, TextureManager* manager);
virtual ~SellScreen() override;
virtual void Draw() const override;
virtual void Update(float elapsedSecs) override;
void MarkDirty();
void SellAll();
private:
GuiText* m_TotalMoneyText;
std::vector<SellSreenRow *> m_Rows;
bool m_AreRowsDirty { true };
};

View File

@@ -0,0 +1,45 @@
#include "pch.h"
#include "SellSreenRow.h"
#include "colors.h"
#include "utils.h"
SellSreenRow::SellSreenRow(const ItemStack& item, const Vector2f& pos, const Vector2f& size): m_Item(item), m_Pos(pos), m_Size(size) {
m_NameText = new Text(PlayerInventory::GetItemName(item.m_ItemType), "fonts/verdana.ttf", 12, Colors::GREEN);
m_CalculationText = new Text("Hello World", "fonts/verdana.ttf", 14, Colors::GREEN);
this->GenerateCalcString();
m_Icon = PlayerInventory::GetItemIcon(item.m_ItemType);
}
SellSreenRow::~SellSreenRow() {
delete m_NameText;
delete m_CalculationText;
}
void SellSreenRow::Draw() const {
//The row has, The icon, The name, The amount, an X, the value, an =, the total value
//The icon
Vector2f iconPos { m_Pos.x + 10, m_Pos.y + 2 };
m_Icon->Draw(iconPos);
//The name
Vector2f namePos { iconPos.x + 50, m_Pos.y + 8 };
m_NameText->Draw(namePos);
Vector2f amountPos { namePos.x + 100, m_Pos.y + 8 };
m_CalculationText->Draw(amountPos);
utils::SetColor(Colors::GREEN);
utils::DrawRect(Rectf { m_Pos, m_Size });
}
void SellSreenRow::Update(float elapsedSecs) {
// m_NameText->ChangeText("EXAMPLE");
// m_CalculationText->ChangeText(std::to_string(m_Item.m_Quantity));
GenerateCalcString();
}
void SellSreenRow::GenerateCalcString() {
std::string amount = std::to_string(m_Item.m_Quantity);
std::string value = std::to_string(PlayerInventory::GetItemValue(m_Item.m_ItemType));
std::string totalValue = std::to_string(PlayerInventory::GetItemValue(m_Item.m_ItemType) * m_Item.m_Quantity);
// NAME AMOUNT X VALUE = TOTAL VALUE
std::string text = amount + " x $" + value + " = " + totalValue + "$";
m_CalculationText->ChangeText(text);
}

View File

@@ -0,0 +1,32 @@
#pragma once
#include "Text.h"
#include "TextureManager.h"
#include "Inventory/PlayerInventory.h"
class SellSreenRow {
public:
SellSreenRow(const ItemStack& item, const Vector2f& pos, const Vector2f& size);
~SellSreenRow();
SellSreenRow(const SellSreenRow& other) = delete;
SellSreenRow(SellSreenRow&& other) = delete;
SellSreenRow& operator=(const SellSreenRow& other) = delete;
SellSreenRow& operator=(SellSreenRow&& other) = delete;
void Draw() const;
void Update(float elapsedSecs);
private:
void GenerateCalcString();
ItemStack m_Item;
Vector2f m_Pos;
Vector2f m_Size;
Text* m_NameText;
Text* m_CalculationText;
Texture* m_Icon;
};

View File

@@ -0,0 +1,130 @@
#include "pch.h"
#include "PlayerInventory.h"
#include <iostream>
#include "Gui/Screens/ScreenManager.h"
#include "Gui/Screens/SellScreen/SellScreen.h"
PlayerInventory::PlayerInventory() {
}
PlayerInventory::~PlayerInventory() {
for(ItemStack* stack : m_Items) {
delete stack;
}
}
void PlayerInventory::ClearInventory() {
for (ItemStack* stack : m_Items) {
delete stack;
}
}
int PlayerInventory::GetTotalValue() const {
int totalValue{ 0 };
for (ItemStack* stack : m_Items) {
totalValue += stack->m_Quantity * GetItemValue(stack->m_ItemType);
}
return totalValue;
}
void PlayerInventory::AddItem(const ItemStack& item) {
dynamic_cast<SellScreen*>(ScreenManager::m_SellScreen)->MarkDirty();
//Check if its in the array
for(ItemStack* stack : m_Items) {
if(stack->m_ItemType == item.m_ItemType) {
std::cout << "Added item to inventory: Existing Array" << std::endl;
stack->m_Quantity += item.m_Quantity;
if(stack->m_Quantity == 2){}
return;
}
}
m_Items.push_back(new ItemStack(item));
std::cout << "Added item to inventory: New Item" << std::endl;
}
void PlayerInventory::RemoveItem(ItemStack* item) {
//Remove the item
for (size_t i = 0; i < m_Items.size(); i++) {
if(m_Items[i] == item) {
delete m_Items[i];
m_Items.erase(m_Items.begin() + i);
dynamic_cast<SellScreen*>(ScreenManager::m_SellScreen)->MarkDirty();
return;
}
}
}
std::vector<ItemStack*> PlayerInventory::GetItems() const {
return m_Items;
}
InventoryItem PlayerInventory::GetItemByType(GroundTileType* tile) {
if(tile == nullptr) {
return InventoryItem::Empty;
}
switch (tile->GetType()) {
case GroundTileTypes::Bronze:
return InventoryItem::Bronzium;
case GroundTileTypes::Air:
return InventoryItem::Empty;
case GroundTileTypes::Gold:
return InventoryItem::Goldium;
case GroundTileTypes::Iron:
return InventoryItem::Ironium;
default:
return InventoryItem::Empty;
}
}
std::string PlayerInventory::GetItemName(InventoryItem item) {
switch (item) {
case InventoryItem::Bronzium:
return "Bronzium";
case InventoryItem::Diamond:
return "Diamond";
case InventoryItem::Einsteinium:
return "Einsteinium";
case InventoryItem::Emerald:
return "Emerald";
case InventoryItem::Goldium:
return "Goldium";
case InventoryItem::Ironium:
return "Ironium";
case InventoryItem::Platnium:
return "Platnium";
case InventoryItem::Ruby:
return "Ruby";
case InventoryItem::Silverium:
return "Silverium";
case InventoryItem::Special:
return "Special";
default:
return "Empty";
}
}
int PlayerInventory::GetItemValue(InventoryItem item) {
switch(item) {
case InventoryItem::Bronzium:
return 60;
case InventoryItem::Ironium:
return 30;
case InventoryItem::Silverium:
return 100;
case InventoryItem::Goldium:
return 250;
case InventoryItem::Platinum:
return 750;
case InventoryItem::Einsteinium:
return 2000;
case InventoryItem::Emerald:
return 5000;
case InventoryItem::Ruby:
return 20000;
case InventoryItem::Diamond:
return 100000;
default:
return 0;
}
}
Texture* PlayerInventory::GetItemIcon(InventoryItem item) {
std::string texturePath = "gui/sell/icons/";
std::string itemName = GetItemName(item);
texturePath += itemName + ".png";
return TextureManager::GetInstance()->GetTexture(texturePath);
}

View File

@@ -0,0 +1,51 @@
#pragma once
#include <vector>
#include "GridSystem/WorldTile.h"
enum class InventoryItem {
Empty,
Bronzium,
Diamond,
Einsteinium,
Emerald,
Goldium,
Ironium,
Platinum,
Platnium,
Ruby,
Silverium,
Special,
};
struct ItemStack {
ItemStack(InventoryItem type, int quantity) : m_ItemType{ type }, m_Quantity{ quantity } {}
InventoryItem m_ItemType;
int m_Quantity{ 0 };
};
class PlayerInventory final {
public:
PlayerInventory();
~PlayerInventory();
PlayerInventory(PlayerInventory& other) = delete;
PlayerInventory& operator=(PlayerInventory& other) = delete;
PlayerInventory(PlayerInventory&& other) = delete;
PlayerInventory& operator=(PlayerInventory&& other) = delete;
void ClearInventory();
int GetTotalValue() const;
void AddItem(const ItemStack& item);
void RemoveItem(ItemStack* item);
std::vector<ItemStack*> GetItems() const;
InventoryItem GetItemByType(GroundTileType* tile);
static std::string GetItemName(InventoryItem item);
static int GetItemValue(InventoryItem item);
static Texture* GetItemIcon(InventoryItem item);
private:
std::vector<ItemStack*> m_Items;
};

View File

@@ -11,6 +11,8 @@ public:
Level(const Level& other) = default; Level(const Level& other) = default;
Level(Level&& other) = default; Level(Level&& other) = default;
Level& operator=(const Level& other) = default;
Level& operator=(Level&& other) = default;
virtual void Update(float elapsedSec) = 0; virtual void Update(float elapsedSec) = 0;
virtual void Draw() const = 0; virtual void Draw() const = 0;

View File

@@ -5,16 +5,16 @@
#include <utility> #include <utility>
#include "colors.h" #include "colors.h"
#include "GameManager.h"
#include "Player.h"
#include "utils.h" #include "utils.h"
Building::Building(const std::string& filePath, const Vector2f& position, const Rectf& boundingBox, TextureManager* pTextureManager): m_Position(position), Building::Building(const std::string& filePath, const Vector2f& position, const Rectf& boundingBox, TextureManager* pTextureManager): m_Position(position),
m_BoundingBox(boundingBox) { m_BoundingBox(boundingBox) {
m_Texture = pTextureManager->GetTexture(filePath); m_Texture = pTextureManager->GetTexture(filePath);
m_Size = Vector2f(m_Texture->GetWidth(), m_Texture->GetHeight()); m_Size = Vector2f(m_Texture->GetWidth(), m_Texture->GetHeight());
std::cout << "i like kids" << std::endl;
} }
Building::~Building() = default;
void Building::Draw() const { void Building::Draw() const {
utils::SetColor(Colors::WHITE);
m_Texture->Draw(m_Position); m_Texture->Draw(m_Position);
utils::SetColor(Colors::GREEN); utils::SetColor(Colors::GREEN);
Rectf temp = m_BoundingBox; Rectf temp = m_BoundingBox;
@@ -24,15 +24,20 @@ void Building::Draw() const {
} }
void Building::Update(float dt, const Rectf& objectBoundingBox) { void Building::Update(float dt, const Rectf& objectBoundingBox) {
if (IsObjectInHitbox(objectBoundingBox)) { if (IsObjectInHitbox(objectBoundingBox)) {
if (!m_IsPlayerInHitbox) { //TODO: what Player* player = GameManager::GetInstance().GetPlayer();
m_IsPlayerInHitbox = true; float speed = player->GetVelocity().Length();
if (m_OnEnterHitbox != nullptr) { if (speed < 100.0f) {
m_OnEnterHitbox(); if (!m_IsPlayerInHitbox) {
} m_IsPlayerInHitbox = true;
else { if (m_OnEnterHitbox != nullptr) {
std::cout << "No function set for onEnterHitbox" << std::endl; m_OnEnterHitbox();
}
else {
std::cout << "No function set for onEnterHitbox" << std::endl;
}
} }
} }
} }
else { else {
m_IsPlayerInHitbox = false; m_IsPlayerInHitbox = false;

View File

@@ -8,12 +8,8 @@ class Building
{ {
public: public:
Building(const std::string& filePath, const Vector2f& position, const Rectf& boundingBox, TextureManager* pTextureManager); Building(const std::string& filePath, const Vector2f& position, const Rectf& boundingBox, TextureManager* pTextureManager);
// Building(const Building& other) = default;
// Building(Building&& other) = default;
// Building& operator=(const Building& other) = default;
// Building& operator=(Building&& other) = default;
~Building(); ~Building() = default;
void Draw() const; void Draw() const;
void Update(float dt, const Rectf& objectBoundingBox); void Update(float dt, const Rectf& objectBoundingBox);

View File

@@ -46,8 +46,11 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
m_GridManager.GetTileAtWorldPos(Vector2f { -650, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE); m_GridManager.GetTileAtWorldPos(Vector2f { -650, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f { -600, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT); m_GridManager.GetTileAtWorldPos(Vector2f { -600, -50 })->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
Building* mineralBuilding = new Building { "buildings/mineralStation.png", Vector2f { -350, -52 }, Rectf{0 ,0, 100, 100}, TextureManager::GetInstance() };
m_Buildings.emplace_back(new Building { "buildings/mineralStation.png", Vector2f { -350, -52 }, Rectf{0 ,0, 100, 100}, TextureManager::GetInstance() }); mineralBuilding->SetOnEnterHitbox([]() {
ScreenManager::GetInstance()->OpenScreen(ScreenManager::m_SellScreen);
});
m_Buildings.emplace_back(mineralBuilding);
m_GridManager.GetTileAtWorldPos(Vector2f {-400, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_LEFT); 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 {-350, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
m_GridManager.GetTileAtWorldPos(Vector2f {-300, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE); m_GridManager.GetTileAtWorldPos(Vector2f {-300, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_MIDDLE);
@@ -70,7 +73,7 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
m_GridManager.GetTileAtWorldPos(Vector2f {800, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT); m_GridManager.GetTileAtWorldPos(Vector2f {800, -50})->SetTileType(GroundTileTypeManager::GetInstance()->HARD_RIGHT);
m_topCover = TextureManager::GetInstance()->GetTexture("topBackground.png"); m_TopCover = TextureManager::GetInstance()->GetTexture("topBackground.png");
m_MainScreen = new MainScreen(TextureManager::GetInstance()); m_MainScreen = new MainScreen(TextureManager::GetInstance());
GameManager::GetInstance().SetMainScreen(m_MainScreen); GameManager::GetInstance().SetMainScreen(m_MainScreen);
@@ -80,13 +83,28 @@ WorldLevel::WorldLevel(Camera* camera, Rectf viewport): Level(camera),
GameManager::GetInstance().SetFuel(100); GameManager::GetInstance().SetFuel(100);
GameManager::GetInstance().SetHullIntegrity(100); GameManager::GetInstance().SetHullIntegrity(100);
GameManager::GetInstance().SetPlayer(&m_Player);
m_BackgroundMusic = new SoundStream("sound/bgm.wav");
m_BackgroundMusic->Play(0);
} }
WorldLevel::~WorldLevel() { WorldLevel::~WorldLevel() {
delete m_MainScreen; delete m_MainScreen;
delete m_Sun; delete m_Sun;
delete m_Moon; delete m_Moon;
delete m_BackgroundMusic;
for (Building* building : m_Buildings) {
delete building;
}
GameManager::DestroyInstance();
} }
void WorldLevel::Update(float elapsedSec) { void WorldLevel::Update(float elapsedSec) {
m_Fps = 1 / elapsedSec; m_Fps = 1 / elapsedSec;
@@ -156,7 +174,7 @@ void WorldLevel::Update(float elapsedSec) {
GameManager::GetInstance().Update(elapsedSec); GameManager::GetInstance().Update(elapsedSec);
m_MainScreen->SetDepth(std::to_string((int)-m_Player.GetPosition().y - 50) + " ft."); m_MainScreen->SetDepth(std::to_string((int)-m_Player.GetPosition().y - 50) + " ft.");
m_MainScreen->SetScore("Score: " + std::to_string(GameManager::GetInstance().GetScore())); m_MainScreen->SetScore(std::to_string(GameManager::GetInstance().GetScore()));
// m_MainScreen->SetFuelMeterValue(GameManager::GetInstance().GetFuel()); // m_MainScreen->SetFuelMeterValue(GameManager::GetInstance().GetFuel());
// m_MainScreen->SetHullMeterValue(GameManager::GetInstance().GetHullIntegrity()); // m_MainScreen->SetHullMeterValue(GameManager::GetInstance().GetHullIntegrity());
m_MainScreen->Update(elapsedSec); m_MainScreen->Update(elapsedSec);
@@ -178,7 +196,7 @@ void WorldLevel::Draw() const {
m_Moon->Draw(); m_Moon->Draw();
// m_topCover->Draw(Vector2f{-850,-70} ); // m_topCover->Draw(Vector2f{-850,-70} );
m_topCover->Draw(Rectf{-850, -70, 850, -70 + 32}, Rectf{0, 0, WORLD_WIDTH * 50, 32}); m_TopCover->Draw(Rectf{-850, -70, 850, -70 + 32}, Rectf{0, 0, WORLD_WIDTH * 50, 32});
for (Collision::CollisionRect rect : m_Rects) { for (Collision::CollisionRect rect : m_Rects) {
utils::DrawRect(rect.pos, rect.size.x, rect.size.y); utils::DrawRect(rect.pos, rect.size.x, rect.size.y);

View File

@@ -8,6 +8,7 @@
#include "Camera.h" #include "Camera.h"
#include "OrbitingObject.h" #include "OrbitingObject.h"
#include "SoundEffect.h" #include "SoundEffect.h"
#include "SoundStream.h"
#include "Text.h" #include "Text.h"
#include "Gui/GuiMeter.h" #include "Gui/GuiMeter.h"
#include "Gui/Screens/MainScreen.h" #include "Gui/Screens/MainScreen.h"
@@ -19,8 +20,12 @@ public:
WorldLevel(Camera* camera, Rectf viewport); WorldLevel(Camera* camera, Rectf viewport);
virtual ~WorldLevel() override; virtual ~WorldLevel() override;
WorldLevel(const WorldLevel& other) = default; WorldLevel(const WorldLevel& other) = delete;
WorldLevel(WorldLevel&& other) = default; WorldLevel& operator=(const WorldLevel& other) = delete;
WorldLevel(WorldLevel&& other) = delete;
WorldLevel& operator=(WorldLevel&& other) = delete;
void Update(float elapsedSec) override; void Update(float elapsedSec) override;
void Draw() const override; void Draw() const override;
@@ -40,6 +45,8 @@ private:
Player m_Player; Player m_Player;
Vector2f m_MousePos {}; Vector2f m_MousePos {};
SoundStream* m_BackgroundMusic;
Rectf m_Viewport; Rectf m_Viewport;
ScreenManager* m_ScreenManager; ScreenManager* m_ScreenManager;
@@ -54,7 +61,7 @@ private:
OrbitingObject* m_Sun{ nullptr }; OrbitingObject* m_Sun{ nullptr };
OrbitingObject* m_Moon{ nullptr }; OrbitingObject* m_Moon{ nullptr };
Texture* m_topCover{ nullptr }; Texture* m_TopCover{ nullptr };
// ImGui Vars // ImGui Vars

View File

@@ -1,10 +1,11 @@
#include "pch.h" #include "pch.h"
#include "Particle.h" #include "Particle.h"
Particle::Particle(const Vector2f& pos, const Vector2f& velocity, float lifetime, Texture* pTexture): m_Position { pos }, m_Velocity { velocity }, m_LifeTime { lifetime }, Particle::Particle(const Vector2f& pos, const Vector2f& velocity,const Vector2f& gravity, float lifetime, Texture* pTexture): m_Position { pos }, m_Velocity { velocity }, m_LifeTime { lifetime }, m_Gravity(gravity),
m_pTexture { pTexture } { m_pTexture { pTexture } {
} }
void Particle::Update(float elapsedSec) { void Particle::Update(float elapsedSec) {
m_Acceleration = Vector2f { 0.0f, -9.81f * 20}; // m_Acceleration = Vector2f { 0.0f, -9.81f * 20};
m_Acceleration = m_Gravity;
m_Velocity += m_Acceleration * elapsedSec; m_Velocity += m_Acceleration * elapsedSec;
m_Position += m_Velocity * elapsedSec; m_Position += m_Velocity * elapsedSec;
m_LifeTime -= elapsedSec; m_LifeTime -= elapsedSec;
@@ -12,8 +13,12 @@ void Particle::Update(float elapsedSec) {
} }
void Particle::Draw() const { void Particle::Draw() const {
m_pTexture->Draw(m_Position); m_pTexture->Draw(m_Position, {}, m_Flipped);
} }
bool Particle::IsDead() const { bool Particle::IsDead() const {
return m_LifeTime <= 0.0f; return m_LifeTime <= 0.0f;
} }
void Particle::SetFlipped(bool flipped) {
m_Flipped = flipped;
}

View File

@@ -4,16 +4,22 @@
class Particle { class Particle {
public: public:
Particle() = default; Particle() = default;
Particle(const Vector2f& pos, const Vector2f& velocity,float lifetime, Texture* pTexture); Particle(const Vector2f& pos, const Vector2f& velocity, const Vector2f& gravity, float lifetime, Texture* pTexture);
~Particle() = default;
void Update(float elapsedSec); void Update(float elapsedSec);
void Draw() const; void Draw() const;
bool IsDead() const; bool IsDead() const;
void SetFlipped(bool flipped);
private: private:
Vector2f m_Position; Vector2f m_Position;
Vector2f m_Velocity; Vector2f m_Velocity;
Vector2f m_Acceleration; Vector2f m_Acceleration;
Vector2f m_Gravity;
bool m_Flipped{ false };
float m_LifeTime; float m_LifeTime;
Texture* m_pTexture; Texture* m_pTexture;

View File

@@ -18,43 +18,72 @@ Player::Player(const Vector2f& Position, TextureManager* manager) : m_Position(P
m_ContactMap[Collision::CollisionDirection::Left] = nullptr; m_ContactMap[Collision::CollisionDirection::Left] = nullptr;
m_ContactMap[Collision::CollisionDirection::Right] = nullptr; m_ContactMap[Collision::CollisionDirection::Right] = nullptr;
m_walkAnimation = new Animation( m_WalkAnimation = new Animation(
manager->GetTexture("animations/player/player_walk.png"), manager->GetTexture("animations/player/player_walk.png"),
8, 0.1f, Rectf { 0, 0, 70, 70 }, true); 8, 0.1f, Rectf { 0, 0, 70, 70 }, true);
m_turnAnimation = new Animation( m_TurnAnimation = new Animation(
manager->GetTexture("animations/player/player_turn.png"), manager->GetTexture("animations/player/player_turn.png"),
5, 0.07f, Rectf { 0, 0, 70, 70 }, false); 5, 0.07f, Rectf { 0, 0, 70, 70 }, false);
m_digStartAnimation = new Animation( m_DigStartAnimation = new Animation(
manager->GetTexture("animations/player/player_dig_start.png"), manager->GetTexture("animations/player/player_dig_start.png"),
7, 0.07f, Rectf { 0, 0, 70, 70 }, false); 7, 0.07f, Rectf { 0, 0, 70, 70 }, false);
m_digAnimation = new Animation( m_DigAnimation = new Animation(
manager->GetTexture("animations/player/player_dig.png"), manager->GetTexture("animations/player/player_dig.png"),
7, 0.05f, Rectf { 0, 0, 70, 70 }, true); 7, 0.05f, Rectf { 0, 0, 70, 70 }, true);
m_flyStartAnimation = new Animation( m_FlyStartAnimation = new Animation(
manager->GetTexture("animations/player/player_fly_start.png"), manager->GetTexture("animations/player/player_fly_start.png"),
12, 0.05f, Rectf { 0, 0, 70, 70 }, false); 12, 0.05f, Rectf { 0, 0, 70, 70 }, false);
m_flyAnimation = new Animation( m_FlyAnimation = new Animation(
manager->GetTexture("animations/player/player_fly.png"), manager->GetTexture("animations/player/player_fly.png"),
5, 0.01f, Rectf { 0, 0, 70, 70 }, true); 5, 0.01f, Rectf { 0, 0, 70, 70 }, true);
m_flyTurnAnimation = new Animation( m_FlyTurnAnimation = new Animation(
manager->GetTexture("animations/player/player_fly_turn.png"), manager->GetTexture("animations/player/player_fly_turn.png"),
3, 0.05f, Rectf { 0, 0, 70, 70 }, false); 3, 0.05f, Rectf { 0, 0, 70, 70 }, false);
m_currentAnimation = m_walkAnimation; m_DieStartAnimation = new Animation(
manager->GetTexture("animations/player/player_die_start.png"),
11, 0.05f, Rectf { 0, 0, 100, 100 }, false);
m_DieLoopAnimation = new Animation(
manager->GetTexture("animations/player/player_die_loop.png"),
4, 0.05f, Rectf { 0, 0, 100, 100 }, true);
m_CurrentAnimation = m_WalkAnimation;
m_IdleSound = new SoundEffect("sound/idle.wav");
m_FlySound = new SoundEffect("sound/fly.wav");
m_DigSound = new SoundEffect("sound/drill.wav");
m_DigSound->SetVolume(64);
m_WalkSound = new SoundEffect("sound/walk.wav");
m_CurrentSound = m_IdleSound;
} }
Player::~Player() { Player::~Player() {
delete m_walkAnimation; delete m_WalkAnimation;
delete m_turnAnimation; delete m_TurnAnimation;
delete m_digAnimation; delete m_DigAnimation;
delete m_digStartAnimation; delete m_DigStartAnimation;
delete m_flyStartAnimation; delete m_IdleSound;
delete m_flyAnimation; delete m_FlySound;
delete m_flyTurnAnimation; delete m_DigSound;
delete m_WalkSound;
delete m_FlyStartAnimation;
delete m_FlyAnimation;
delete m_FlyTurnAnimation;
delete m_DieStartAnimation;
delete m_DieLoopAnimation;
for (Particle* particle : m_DigParticles) {
delete particle;
}
} }
Collision::CollisionRect Player::GetCollisionRect() const { Collision::CollisionRect Player::GetCollisionRect() const {
@@ -81,13 +110,30 @@ void Player::Draw() const {
glRotatef(m_Direction == PlayerDirection::Left ? rotateOffset : -rotateOffset, 0, 0, 1); glRotatef(m_Direction == PlayerDirection::Left ? rotateOffset : -rotateOffset, 0, 0, 1);
} }
{ {
m_currentAnimation->Draw(Vector2f { 0, 0 }, Rectf { 0, 0, frameWidth, frameWidth }); utils::SetColor(Colors::WHITE);
m_CurrentAnimation->Draw(Vector2f { 0, 0 }, Rectf { 0, 0, frameWidth, frameWidth });
utils::SetColor(Colors::GREEN);
} }
glPopMatrix(); glPopMatrix();
utils::FillEllipse(m_OutletPos + m_Position, 5, 5);
for (Particle* particle : m_DigParticles) { for (Particle* particle : m_DigParticles) {
utils::SetColor(Colors::WHITE);
particle->Draw(); particle->Draw();
} }
for (Particle* particle : m_SmokeParticles) {
utils::SetColor(Colors::WHITE);
particle->Draw();
}
}
void Player::Die() {
m_IsDead = true;
m_CurrentAnimation = m_DieStartAnimation;
m_HasPlayedDeathAnimation = false;
} }
void Player::ProcessImGui() { void Player::ProcessImGui() {
ImGui::Begin("Collision Info", nullptr, ImGuiWindowFlags_AlwaysAutoResize); ImGui::Begin("Collision Info", nullptr, ImGuiWindowFlags_AlwaysAutoResize);
@@ -152,6 +198,7 @@ void Player::Dig(Collision::CollisionDirection dir, WorldLevel& level) {
//Set the digging location in the center of the destination tile; //Set the digging location in the center of the destination tile;
const WorldTile* tile = m_ContactMap[dir]; const WorldTile* tile = m_ContactMap[dir];
m_ToAddPoints = tile->GetTileType()->GetValue(); m_ToAddPoints = tile->GetTileType()->GetValue();
m_ToAddTile = tile->GetTileType();
//Add case for bottom because otherwise i clip through the floor //Add case for bottom because otherwise i clip through the floor
m_DigDestination = tile->GetPosition(); m_DigDestination = tile->GetPosition();
if (dir == Collision::Bottom) { if (dir == Collision::Bottom) {
@@ -171,7 +218,10 @@ bool Player::CanDig(Collision::CollisionDirection dir, WorldLevel& level) {
return false; return false;
} }
GroundTileType type = *tile->GetTileType(); GroundTileType type = *tile->GetTileType();
//TODO: Add a list of non diggable tiles
if (type == GroundTileTypeManager::GetInstance()->STONE) {
return false;
}
if (type == GroundTileTypeManager::GetInstance()->HARD_LEFT || type == GroundTileTypeManager::GetInstance()->HARD_MIDDLE || type == GroundTileTypeManager::GetInstance()-> if (type == GroundTileTypeManager::GetInstance()->HARD_LEFT || type == GroundTileTypeManager::GetInstance()->HARD_MIDDLE || type == GroundTileTypeManager::GetInstance()->
HARD_RIGHT) { HARD_RIGHT) {
@@ -180,14 +230,32 @@ bool Player::CanDig(Collision::CollisionDirection dir, WorldLevel& level) {
return true; return true;
} }
void Player::ChangeSound(SoundEffect* sound) {
m_PrevSound = m_CurrentSound;
// m_CurrentSound->Stop();
m_CurrentSound = sound;
}
void Player::Update(float elapsedTime, WorldLevel& level) { void Player::Update(float elapsedTime, WorldLevel& level) {
if (m_IsDead) {
m_CurrentAnimation->Update(elapsedTime);
if (m_CurrentAnimation == m_DieStartAnimation) {
if (m_CurrentAnimation->IsDone()) {
m_CurrentAnimation = m_DieLoopAnimation;
}
}
return;
}
m_BobTimer += elapsedTime; m_BobTimer += elapsedTime;
if (m_BobTimer >= m_BobTime) { if (m_BobTimer >= m_BobTime) {
m_BobUp = !m_BobUp; m_BobUp = !m_BobUp;
m_BobTimer = 0.0f; m_BobTimer = 0.0f;
} }
std::vector<Particle *> particlesToDelete {}; std::vector<Particle *> particlesToDelete {};
for (Particle* particle : m_DigParticles) { for (Particle* particle : m_DigParticles) {
particle->Update(elapsedTime); particle->Update(elapsedTime);
@@ -200,17 +268,39 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
delete particle; delete particle;
} }
m_SmokeTimer += elapsedTime;
if (m_SmokeTimer >= m_SmokeTime) {
m_SmokeTimer = 0.0f;
Vector2f Dir { static_cast<float>(m_Direction == PlayerDirection::Left ? 30 : -30), 20 };
Particle* NewSmokeParticle = new Particle(m_OutletPos + m_Position, Dir, Vector2f { 0.0f, 9.81f * 30}, 5.f, TextureManager::GetInstance()->GetTexture("particles/smoke.png"));
NewSmokeParticle->SetFlipped(m_Direction == PlayerDirection::Left);
m_SmokeParticles.push_back(NewSmokeParticle);
}
std::vector<Particle*> smokeParticlesToDelete{};
for (Particle* particle : m_SmokeParticles) {
particle->Update(elapsedTime);
if (particle->IsDead()) {
smokeParticlesToDelete.push_back(particle);
}
}
for (Particle* particle : smokeParticlesToDelete) {
m_SmokeParticles.erase(std::remove(m_SmokeParticles.begin(), m_SmokeParticles.end(), particle), m_SmokeParticles.end());
delete particle;
}
//check for keys //check for keys
if (m_State != PlayerState::Digging) { if (m_State != PlayerState::Digging) {
if (utils::isKeyDown(SDL_SCANCODE_W)) { if (utils::isKeyDown(SDL_SCANCODE_W)) {
m_State = PlayerState::Flying; m_State = PlayerState::Flying;
// m_Vel.y = m_Speed / 10; // m_Vel.y = m_Speed / 10;
m_Acc.y += m_Speed * 10; m_Acc.y += m_Speed * 10;
if(!m_IsPropellorDeployed) { if (!m_IsPropellorDeployed) {
m_currentAnimation = m_flyStartAnimation; m_CurrentAnimation = m_FlyStartAnimation;
m_flyStartAnimation->SetFlipped(m_Direction == PlayerDirection::Right); m_FlyStartAnimation->SetFlipped(m_Direction == PlayerDirection::Right);
} else { }
m_currentAnimation = m_flyAnimation; else {
m_CurrentAnimation = m_FlyAnimation;
} }
m_Grounded = false; m_Grounded = false;
} }
@@ -218,8 +308,8 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
if (m_Grounded) { if (m_Grounded) {
if (this->CanDig(Collision::Bottom, level)) { if (this->CanDig(Collision::Bottom, level)) {
m_DigDirection = DigDirection::Down; m_DigDirection = DigDirection::Down;
m_currentAnimation = m_digStartAnimation; m_CurrentAnimation = m_DigStartAnimation;
m_currentAnimation->Reset(); m_CurrentAnimation->Reset();
m_IsDiggingPrimed = false; m_IsDiggingPrimed = false;
this->Dig(Collision::CollisionDirection::Bottom, level); this->Dig(Collision::CollisionDirection::Bottom, level);
} }
@@ -227,15 +317,15 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
} }
if (utils::isKeyDown(SDL_SCANCODE_A)) { if (utils::isKeyDown(SDL_SCANCODE_A)) {
if (!m_IsTurning) { if (!m_IsTurning) {
m_walkAnimation->SetFlipped(false); m_WalkAnimation->SetFlipped(false);
m_flyAnimation->SetFlipped(false); m_FlyAnimation->SetFlipped(false);
} }
m_Acc.x = -m_Speed; m_Acc.x = -m_Speed;
if (m_Direction == PlayerDirection::Right) { if (m_Direction == PlayerDirection::Right) {
m_IsTurning = true; m_IsTurning = true;
m_currentAnimation = m_State == PlayerState::Walking ? m_turnAnimation : m_flyTurnAnimation; m_CurrentAnimation = m_State == PlayerState::Walking ? m_TurnAnimation : m_FlyTurnAnimation;
m_currentAnimation->SetFlipped(true); m_CurrentAnimation->SetFlipped(true);
m_currentAnimation->Reset(); m_CurrentAnimation->Reset();
} }
m_Direction = PlayerDirection::Left; m_Direction = PlayerDirection::Left;
if (m_Grounded && !m_DidJustDigLeft) { if (m_Grounded && !m_DidJustDigLeft) {
@@ -255,16 +345,16 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
if (utils::isKeyDown(SDL_SCANCODE_D)) { if (utils::isKeyDown(SDL_SCANCODE_D)) {
if (!m_IsTurning) { if (!m_IsTurning) {
m_walkAnimation->SetFlipped(true); m_WalkAnimation->SetFlipped(true);
m_flyAnimation->SetFlipped(true); m_FlyAnimation->SetFlipped(true);
} }
m_Acc.x = m_Speed; m_Acc.x = m_Speed;
if (m_Direction == PlayerDirection::Left) { if (m_Direction == PlayerDirection::Left) {
m_IsTurning = true; m_IsTurning = true;
m_currentAnimation = m_State == PlayerState::Walking ? m_turnAnimation : m_flyTurnAnimation; m_CurrentAnimation = m_State == PlayerState::Walking ? m_TurnAnimation : m_FlyTurnAnimation;
m_currentAnimation->SetFlipped(false); m_CurrentAnimation->SetFlipped(false);
m_currentAnimation->Reset(); m_CurrentAnimation->Reset();
} }
m_Direction = PlayerDirection::Right; m_Direction = PlayerDirection::Right;
@@ -296,37 +386,39 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
m_Acc = Vector2f { 0, 0 }; m_Acc = Vector2f { 0, 0 };
m_currentAnimation->Update(elapsedTime); m_CurrentAnimation->Update(elapsedTime);
if(m_State == PlayerState::Flying && m_Grounded) { if (m_State == PlayerState::Flying && m_Grounded) {
m_State = PlayerState::Idle; m_State = PlayerState::Idle;
m_walkAnimation->SetFlipped(m_Direction == PlayerDirection::Right); m_WalkAnimation->SetFlipped(m_Direction == PlayerDirection::Right);
m_currentAnimation = m_walkAnimation; m_CurrentAnimation = m_WalkAnimation;
m_IsPropellorDeployed = false; m_IsPropellorDeployed = false;
m_flyStartAnimation->Reset(); m_FlyStartAnimation->Reset();
} }
if (m_currentAnimation->IsDone() && m_IsTurning) { if (m_CurrentAnimation->IsDone() && m_IsTurning) {
m_currentAnimation = m_State == PlayerState::Walking ? m_walkAnimation : m_flyAnimation; m_CurrentAnimation = m_State == PlayerState::Walking ? m_WalkAnimation : m_FlyAnimation;
m_IsTurning = false; m_IsTurning = false;
} }
if(m_currentAnimation == m_flyStartAnimation) { if (m_CurrentAnimation == m_FlyStartAnimation) {
if(m_flyStartAnimation->IsDone()) { if (m_FlyStartAnimation->IsDone()) {
m_IsPropellorDeployed = true; m_IsPropellorDeployed = true;
m_currentAnimation = m_flyAnimation; m_CurrentAnimation = m_FlyAnimation;
} else { }
m_currentAnimation = m_flyStartAnimation; else {
m_CurrentAnimation = m_FlyStartAnimation;
} }
} }
if (m_Direction == PlayerDirection::Left) {
if (m_currentAnimation == m_digStartAnimation) { m_OutletPos = m_OutLeftPos;
}
else {
m_OutletPos = m_OutRightPos;
} }
#pragma region Collision #pragma region Collision
m_ContactMap[Collision::CollisionDirection::Top] = nullptr; m_ContactMap[Collision::CollisionDirection::Top] = nullptr;
m_ContactMap[Collision::CollisionDirection::Bottom] = nullptr; m_ContactMap[Collision::CollisionDirection::Bottom] = nullptr;
@@ -393,7 +485,7 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
} }
} }
Collision::CollisionRect rect = world_tile->GetCollisionRect().getCollisionRect(); //TODO: fix this mess Collision::CollisionRect rect = world_tile->GetCollisionRect().getCollisionRect();
Collision::ResolvePlayerVsRect(*this, elapsedTime, &rect); Collision::ResolvePlayerVsRect(*this, elapsedTime, &rect);
} }
#pragma endregion #pragma endregion
@@ -408,25 +500,35 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
} }
} }
switch (m_State) { switch (m_State) {
case PlayerState::Flying:
GameManager::GetInstance().DecreaseFuel(0.06f);
ChangeSound(m_FlySound);
break;
case PlayerState::Idle: case PlayerState::Idle:
m_walkAnimation->SetPlaying(false); m_WalkAnimation->SetPlaying(false);
GameManager::GetInstance().DecreaseFuel(0.02f); GameManager::GetInstance().DecreaseFuel(0.02f);
ChangeSound(m_IdleSound);
break; break;
case PlayerState::Walking: case PlayerState::Walking:
m_walkAnimation->SetPlaying(true); m_WalkAnimation->SetPlaying(true);
GameManager::GetInstance().DecreaseFuel(0.04f); GameManager::GetInstance().DecreaseFuel(0.04f);
ChangeSound(m_WalkSound);
break; break;
case PlayerState::Digging: { case PlayerState::Digging: {
// m_walkAnimation->SetPlaying(false); // m_walkAnimation->SetPlaying(false);
GameManager::GetInstance().DecreaseFuel(0.06f);
ChangeSound(m_DigSound);
//Diganimation //Diganimation
m_currentAnimation->Update(elapsedTime); 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_IsDiggingPrimed = true;
m_currentAnimation = m_digAnimation; m_CurrentAnimation = m_DigAnimation;
} }
if (m_IsDiggingPrimed) { if (m_IsDiggingPrimed) {
if (!m_Digging) { //TODO: fix for setting the start position if (!m_Digging) {
m_Digging = true; m_Digging = true;
m_DigStart = m_Position; m_DigStart = m_Position;
m_Vel = Vector2f { 0, 0 }; m_Vel = Vector2f { 0, 0 };
@@ -436,9 +538,8 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
//lerp to the destination //lerp to the destination
float progress = utils::map(m_DigProgress, 0.0f, m_DigTime, 0.0f, 1.0f); 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); int particleProgress = (int)utils::map(m_DigProgress, 0.0f, m_DigTime, 0.0f, 100.0f);
std::cout << progress << '\n';
if (particleProgress % 2 == 0) { if (particleProgress % 2 == 0) {
m_DigParticles.push_back(new Particle(m_Position + Vector2f{ 20, 0 }, Vector2f { (float)utils::randRange(-200, 200), (float)utils::randRange(-100, -300) }, 5.f, m_DigParticles.push_back(new Particle(m_Position + Vector2f { 20, 0 }, Vector2f { (float)utils::randRange(-200, 200), (float)utils::randRange(-100, -300) },Vector2f { 0.0f, -9.81f * 20}, 5.f,
TextureManager::GetInstance()->GetTexture("particles/dirt_" + std::to_string(utils::randRange(1, 8)) + ".png"))); TextureManager::GetInstance()->GetTexture("particles/dirt_" + std::to_string(utils::randRange(1, 8)) + ".png")));
} }
m_Position = utils::lerp(m_DigStart, m_DigDestination, progress); m_Position = utils::lerp(m_DigStart, m_DigDestination, progress);
@@ -449,11 +550,30 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
} }
if (progress >= 1.0f) { if (progress >= 1.0f) {
m_State = PlayerState::Idle; m_State = PlayerState::Idle;
m_currentAnimation = m_walkAnimation; m_CurrentAnimation = m_WalkAnimation;
m_HasDeletedTile = false; m_HasDeletedTile = false;
m_Digging = false; m_Digging = false;
GameManager::GetInstance().IncreaseScore(m_ToAddPoints); GameManager::GetInstance().IncreaseScore(m_ToAddPoints);
m_ToAddPoints = 0; m_ToAddPoints = 0;
//Add the dug item to the inventory
PlayerInventory* inventory = GameManager::GetInstance().GetInventory();
InventoryItem item = inventory->GetItemByType(m_ToAddTile);
ItemStack stack = ItemStack { item, 1 };
inventory->AddItem(stack);
std::cout << "Added: " << PlayerInventory::GetItemName(item) << std::endl;
//Print the inventory
std::cout << "-----------------------" << std::endl;
std::cout << "Inventory: " << std::endl;
std::vector<ItemStack *> items = inventory->GetItems();
for (ItemStack* i : items) {
std::cout << PlayerInventory::GetItemName(i->m_ItemType) << " Quantity: " << i->m_Quantity << std::endl;
}
std::cout << "-----------------------" << std::endl;
} }
} }
@@ -466,4 +586,15 @@ void Player::Update(float elapsedTime, WorldLevel& level) {
if (m_State != PlayerState::Digging) { if (m_State != PlayerState::Digging) {
m_Position = m_Position + m_Vel * elapsedTime; m_Position = m_Position + m_Vel * elapsedTime;
} }
if (m_DidSoundChange) {
m_CurrentSound->Stop();
m_DidSoundChange = false;
}
if (m_CurrentSound != nullptr) {
if (!m_CurrentSound->IsPlaying()) {
m_CurrentSound->Play(1);
}
}
} }

View File

@@ -1,7 +1,9 @@
#pragma once #pragma once
#include "Collision.h" #include "Collision.h"
#include "SoundEffect.h"
#include "TextureManager.h" #include "TextureManager.h"
#include "Animations/Animation.h" #include "Animations/Animation.h"
#include "GridSystem/WorldTile.h"
#include "Particle/Particle.h" #include "Particle/Particle.h"
class WorldLevel; class WorldLevel;
@@ -66,15 +68,23 @@ public:
m_ContactMap[dir] = tile; m_ContactMap[dir] = tile;
} }
void Die();
void ProcessImGui(); void ProcessImGui();
private: private:
void Dig(Collision::CollisionDirection dir, WorldLevel& level); void Dig(Collision::CollisionDirection dir, WorldLevel& level);
bool CanDig(Collision::CollisionDirection dir, WorldLevel& level); bool CanDig(Collision::CollisionDirection dir, WorldLevel& level);
void ChangeSound(SoundEffect* sound);
Vector2f m_Position; Vector2f m_Position;
Vector2f m_Size; Vector2f m_Size;
Vector2f m_OutletPos;
Vector2f m_OutLeftPos{ 55, 45};
Vector2f m_OutRightPos{ 0, 45 };
Vector2f m_Vel; Vector2f m_Vel;
const float m_Speed{ 400.0f }; const float m_Speed{ 400.0f };
@@ -95,33 +105,54 @@ private:
WorldTile* m_DigTile{ nullptr }; WorldTile* m_DigTile{ nullptr };
int m_ToAddPoints{ 0 }; int m_ToAddPoints{ 0 };
GroundTileType* m_ToAddTile{ nullptr };
bool m_IsDiggingPrimed{ false }; bool m_IsDiggingPrimed{ false };
std::vector<Particle*> m_DigParticles{}; std::vector<Particle*> m_DigParticles{};
std::vector<Particle*> m_SmokeParticles{};
float m_SmokeTimer{ 0.0f };
const float m_SmokeTime{ 0.25f };
const float m_DigTime{ 0.5f }; const float m_DigTime{ 0.5f };
bool m_IsDead{ false };
bool m_HasPlayedDeathAnimation{ false };
bool m_Grounded { false }; bool m_Grounded { false };
bool m_IsTurning{ false }; bool m_IsTurning{ false };
bool m_DidJustDigRight { false }; bool m_DidJustDigRight { false };
bool m_DidJustDigLeft { false }; bool m_DidJustDigLeft { false };
Animation* m_currentAnimation{ nullptr }; Animation* m_CurrentAnimation{ nullptr };
Animation* m_walkAnimation; Animation* m_WalkAnimation;
Animation* m_turnAnimation{ nullptr }; Animation* m_TurnAnimation{ nullptr };
Animation* m_digStartAnimation{ nullptr }; Animation* m_DigStartAnimation{ nullptr };
Animation* m_digAnimation{ nullptr }; Animation* m_DigAnimation{ nullptr };
Animation* m_flyStartAnimation{ nullptr }; Animation* m_FlyStartAnimation{ nullptr };
Animation* m_flyAnimation{ nullptr }; Animation* m_FlyAnimation{ nullptr };
Animation* m_flyTurnAnimation{ nullptr }; Animation* m_FlyTurnAnimation{ nullptr };
Animation* m_DieStartAnimation{ nullptr };
Animation* m_DieLoopAnimation{ nullptr };
bool m_IsPropellorDeployed{ false }; bool m_IsPropellorDeployed{ false };
PlayerState m_State { PlayerState::Idle }; PlayerState m_State { PlayerState::Idle };
PlayerDirection m_Direction { PlayerDirection::Left }; PlayerDirection m_Direction { PlayerDirection::Left };
DigDirection m_DigDirection { DigDirection::Right }; DigDirection m_DigDirection { DigDirection::Right };
SoundEffect* m_IdleSound{ nullptr };
SoundEffect* m_WalkSound{ nullptr };
SoundEffect* m_DigSound{ nullptr };
SoundEffect* m_FlySound{ nullptr };
SoundEffect* m_CurrentSound{ nullptr };
SoundEffect* m_PrevSound{ nullptr };
bool m_DidSoundChange{ false };
//Testing //Testing
bool m_DrawCollisionRect { true }; bool m_DrawCollisionRect { true };
}; };

178
README.md
View File

@@ -1,59 +1,59 @@
<a name="readme-top"></a> <a name="readme-top"></a>
<!-- GENERAL GAME INFO --> <!-- GENERAL GAME INFO -->
<br /> <br />
<div align="center"> <div align="center">
<h1 align="center">Motherload</h1> <h1 align="center">Motherload</h1>
<p align="center"> <p align="center">
Gather resources and buy upgrades to dig as far as you can. You have to dig ores and sell them to earn cash which you use to buy fuel, digger upgrades, explosives, and other supplies. You can only sell ore and buy items at the surface. If you run out of fuel, your digger explodes and you die (game over). There are more valuable (and heavier) ores as you go deeper into the mine. There are several types of alien artifacts which are of considerable value and appear randomly throughout the mine (below 950 feet). Gather resources and buy upgrades to dig as far as you can. You have to dig ores and sell them to earn cash which you use to buy fuel, digger upgrades, explosives, and other supplies. You can only sell ore and buy items at the surface. If you run out of fuel, your digger explodes and you die (game over). There are more valuable (and heavier) ores as you go deeper into the mine. There are several types of alien artifacts which are of considerable value and appear randomly throughout the mine (below 950 feet).
<br /> <br />
<strong>Original game : </strong> <strong>Original game : </strong>
<a href="https://xgenstudios.fandom.com/wiki/Motherload"><strong>General info »</strong></a> <a href="https://xgenstudios.fandom.com/wiki/Motherload"><strong>General info »</strong></a>
· ·
<a href="https://www.youtube.com/watch?v=QCMbRe8ij5g&t=322s&pp=ygUTbW9odGVybG9hZCBnYW1lcGxheQ%3D%3D"><strong>Youtube video »<strong></a> <a href="https://www.youtube.com/watch?v=QCMbRe8ij5g&t=322s&pp=ygUTbW9odGVybG9hZCBnYW1lcGxheQ%3D%3D"><strong>Youtube video »<strong></a>
<br /> <br />
<br /> <br />
</p> </p>
</div> </div>
<!-- TABLE OF CONTENTS --> <!-- TABLE OF CONTENTS -->
<details> <details>
<summary>Table of Contents</summary> <summary>Table of Contents</summary>
<ol> <ol>
<li> <li>
<a href="#about-the-project">About The Project</a> <a href="#about-the-project">About The Project</a>
</li> </li>
<li> <li>
<a href="#my-version">My version</a> <a href="#my-version">My version</a>
</li> </li>
<li> <li>
<a href="#getting-started">Getting Started</a> <a href="#getting-started">Getting Started</a>
</li> </li>
<li><a href="#how-to-play">How To Play</a></li> <li><a href="#how-to-play">How To Play</a></li>
<li><a href="#class-structure">Class structure</a></li> <li><a href="#class-structure">Class structure</a></li>
<li><a href="#checklist">Checklist</a></li> <li><a href="#checklist">Checklist</a></li>
<li><a href="#contact">Contact</a></li> <li><a href="#contact">Contact</a></li>
<li><a href="#acknowledgments">Acknowledgments</a></li> <li><a href="#acknowledgments">Acknowledgments</a></li>
</ol> </ol>
</details> </details>
<!-- ABOUT THE PROJECT --> <!-- ABOUT THE PROJECT -->
## About The Project ## About The Project
TODO: add screenshot
![screenshot.jpg](Assets%2Fscreenshot.jpg)
Here's why: Here's why:
TODO: describe why you chose this game
* It's a classic game that I played when I was younger. * It's a classic game that I played when I was younger.
* It's a game that I can make in a reasonable amount of time. * It's a game that I can make in a reasonable amount of time.
* <p align="right">(<a href="#readme-top">back to top</a>)</p>
<p align="right">(<a href="#readme-top">back to top</a>)</p>
## My version ## My version
@@ -65,7 +65,7 @@ This section gives a clear and detailed overview of which parts of the original
* Resource Collection * Resource Collection
* Random Generated world * Random Generated world
* The fuel and sell building * The fuel and sell building
### What I will probably make as well: ### What I will probably make as well:
* Dying * Dying
* Working Lava * Working Lava
@@ -74,10 +74,10 @@ This section gives a clear and detailed overview of which parts of the original
* Main Menu, Options Screen * Main Menu, Options Screen
* Boss fight * Boss fight
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- GETTING STARTED --> <!-- GETTING STARTED -->
## Getting Started ## Getting Started
Detailed instructions on how to run your game project are in this section. Detailed instructions on how to run your game project are in this section.
@@ -88,77 +88,93 @@ This is an example of how to list things you need to use the software and how to
### How to run the project ### How to run the project
Explain which project (version) must be run. 1. Download the Repo.
* any extra steps if required 2. Open the project in Visual Studio 2022 or Jetbrains Rider.
3. Run the project.
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- HOW TO PLAY -->
<!-- HOW TO PLAY -->
## How to play ## How to play
Use this space to show useful examples of how a game can be played.
Additional screenshots and demos work well in this space.
### Controls ### Controls
* W A S D * W A S D
* Mouse For menues
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- CLASS STRUCTURE --> <!-- CLASS STRUCTURE -->
## Class structure ## Class structure
### Object composition ### Object composition
If you applied object composition (optional); explain where and how. #### Player
The player has a bunch of objects in the Player class, These are
- Animations
- Particles
- SoundEffects
#### WorldLevel
The world level contains all the objects for the "Main" Game. These are
- Player
- GridManager
- Background Music
- MainScreen (Game UI)
- The Sun and Moon
### Inheritance ### Inheritance
Explain where you applied inheritance (mandatory). Here are a couple examples on how i used Inheritance throughout the project.
### .. #### Screens
The Screen class is the base class for all the screens in the game. <br>
This Class manages all the GuiElements inside of it. <br>
Also all the subscreens, eg. FuelScreen, SellScreen, even the Main Game ui is a subclass of the Screen type.
<p align="right">(<a href="#readme-top">back to top</a>)</p> #### GuiElement
The whole Screen system is based on the GuiElement. This class has a Draw and Update Function. <br>
This is because the Screen class calls these for each of the subclasses of a GuiElement. <br>
For Example, the Button class is a subclass of GuiElement. <br>
The Button class has a Draw and Update function that the Screen class calls. The screen does not know what type of <br>
update it's calling, it just knows that it's calling the update function of a GuiElement.
<!-- CHECKLIST --> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- CHECKLIST -->
## Checklist ## Checklist
- [x] Accept / set up github project - [x] Accept / set up github project
- [x] week 01 topics applied - [x] week 01 topics applied
- [ ] const keyword applied proactively (variables, functions,..)
- [ ] static keyword applied proactively (class variables, static functions,..)
- [ ] object composition (optional)
- [x] week 02 topics applied - [x] week 02 topics applied
- [x] week 03 topics applied - [x] week 03 topics applied
- [ ] week 04 topics applied - [x] week 04 topics applied
- [ ] week 05 topics applied - [x] week 05 topics applied
- [ ] week 06 topics applied - [x] week 06 topics applied
- [ ] week 07 topics applied - [x] week 07 topics applied
- [ ] week 08 topics applied - [x] week 08 topics applied
- [ ] week 09 topics applied (optional) - [x] week 09 topics applied (optional)
- [ ] week 10 topics applied (optional) - [x] week 10 topics applied (optional)
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- CONTACT --> <!-- CONTACT -->
## Contact ## Contact
Bram Verhulst - bram.verhulst@student.howest.be Bram Verhulst - bram.verhulst@student.howest.be
Project Link: [Here](https://github.com/HowestDAE/dae16-VerhulstBram) Project Link: [Here](https://github.com/HowestDAE/dae16-VerhulstBram)
Alternative Project Link (Gitea): [Here](https://git.brammie15.dev/brammie15/dae16-VerhulstBram-GameProject)
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>
<!-- ACKNOWLEDGMENTS --> <!-- ACKNOWLEDGMENTS -->
## Acknowledgments ## Acknowledgments
Use this space to list resources you find helpful and would like to give credit to. Use this space to list resources you find helpful and would like to give credit to.
* [Example 1: cpp reference on std::vector](https://en.cppreference.com/w/cpp/container/vector) * [Example 1: cpp reference on std::vector](https://en.cppreference.com/w/cpp/container/vector)
* .. * [Dear ImGui for development](https://github.com/ocornut/imgui)
<p align="right">(<a href="#readme-top">back to top</a>)</p> <p align="right">(<a href="#readme-top">back to top</a>)</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

BIN
Resources/gui/main/help.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
Resources/gui/main/inv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 881 B

BIN
Resources/sound/bgm.wav Normal file

Binary file not shown.

BIN
Resources/sound/buy.wav Normal file

Binary file not shown.

BIN
Resources/sound/drill.wav Normal file

Binary file not shown.

BIN
Resources/sound/fly.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
Resources/sound/idle.wav Normal file

Binary file not shown.

BIN
Resources/sound/walk.wav Normal file

Binary file not shown.