Skip to content

Commit c92e071

Browse files
author
GauravDe-git
committed
Added Pause feature and some refactor/cleanup
1 parent f36492b commit c92e071

File tree

15 files changed

+86
-61
lines changed

15 files changed

+86
-61
lines changed

Mini_Assailants/Mini_Assailants.vcxproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@
3636
<ClInclude Include="inc\UiBar.hpp" />
3737
<ClInclude Include="resource.h" />
3838
</ItemGroup>
39-
<ItemGroup>
40-
<Text Include="src\Todo.txt" />
41-
</ItemGroup>
4239
<ItemGroup>
4340
<ResourceCompile Include="Mini_Assailants.rc" />
4441
</ItemGroup>

Mini_Assailants/Mini_Assailants.vcxproj.filters

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,11 +84,6 @@
8484
<Filter>Header Files</Filter>
8585
</ClInclude>
8686
</ItemGroup>
87-
<ItemGroup>
88-
<Text Include="src\Todo.txt">
89-
<Filter>Source Files</Filter>
90-
</Text>
91-
</ItemGroup>
9287
<ItemGroup>
9388
<ResourceCompile Include="Mini_Assailants.rc">
9489
<Filter>Resource Files</Filter>

Mini_Assailants/inc/Enemy.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ Enemy::Enemy(const glm::vec2& pos,Type _type)
2525
{
2626
case Type::Goblin:
2727
aabbs[State::Idle] = { {65,30,0},{80,70,0} };
28-
aabbs[State::Attack] = { {56,33,0},{80,70,0} };
28+
aabbs[State::Attack] = { {59,33,0},{80,70,0} };
2929
aabbs[State::Dead] = { {0,0,0},{0,0,0} };
3030
aabbs[State::None] = { {0,0,0},{0,0,0} };
3131
attackDistance = 55.0f;
@@ -280,7 +280,7 @@ Math::Circle Enemy::getAttackCircle() const
280280
case Type::Cerberus:
281281
return { {transform.getPosition() + glm::vec2{ 40.f, 17.f } *-transform.getScale() }, 9.f };
282282
case Type::FlyingEye:
283-
return { {transform.getPosition() + glm::vec2{ 35.f, 45.f } *-transform.getScale() }, 6.f };
283+
return { {transform.getPosition() + glm::vec2{ 35.f, 45.f } *-transform.getScale() }, 11.f };
284284
}
285285
return {};
286286
}

Mini_Assailants/inc/Level.hpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717
#include <vector>
1818
#include <random>
1919

20-
//Level class: Responsible for both loading/changing levels
21-
// and changing between Game States.
2220

2321
namespace Graphics
2422
{
@@ -32,6 +30,7 @@ class Level {
3230
Menu,
3331
HelpScreen,
3432
Playing,
33+
Paused,
3534
Win,
3635
GameOver
3736
};
@@ -46,6 +45,9 @@ class Level {
4645
GameState getGameState() const { return gameState; }
4746
void setState(GameState newState);
4847

48+
// Got help to implement processEvents(),onMouseMoved(), onResized() from~
49+
// Source: https://github.com/jpvanoosten/SoftwareRasterizer/blob/main/samples/07-PixelAdventure/src/Game.cpp
50+
4951
void processEvents(const Graphics::Event& e);
5052
void onMouseMoved(Graphics::MouseMovedEventArgs& args);
5153
void onResized(Graphics::ResizeEventArgs& args);
@@ -57,13 +59,14 @@ class Level {
5759
};
5860

5961
void updateEnemies(float deltaTime) const;
60-
void beginState(GameState newState);
61-
void endState(GameState oldState);
62+
void beginState(GameState newState,GameState oldState);
63+
void endState(GameState oldState,GameState newState);
6264

6365
void doMenu();
6466
void doHelp();
6567
void enemySteerAi(Enemy* enemy) const;
6668
void doPlaying(float deltaTime);
69+
void doPaused(float deltaTime);
6770
void doGameOver();
6871
void doWin();
6972

Mini_Assailants/inc/UiBar.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#pragma once
22

3-
//Description: The Ui HP and MP bar
3+
//Description: The Ui HP and MP bar
44

55
#include <glm/vec2.hpp>
66

Mini_Assailants/src/Level.cpp

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ void Level::setLevel(int levelNumber)
148148
backgroundPath = "assets/textures/stage3.png";
149149
topEdgeCollision = 210;
150150
enemyInfos = {
151-
{Enemy::Type::Cerberus, {510,250}},
151+
{Enemy::Type::Cerberus, {530,250}},
152152
{Enemy::Type::Cerberus, {900,250}},
153153
{Enemy::Type::Cerberus, {910,240}},
154154
{Enemy::Type::Golem, {1310,240}},
@@ -185,6 +185,9 @@ void Level::update(float deltaTime)
185185
updateEnemies(deltaTime);
186186
doPlaying(deltaTime);
187187
break;
188+
case GameState::Paused:
189+
doPaused(deltaTime);
190+
break;
188191
case GameState::GameOver:
189192
updateEnemies(deltaTime);
190193
doGameOver();
@@ -219,11 +222,11 @@ void Level::draw(Image& image)
219222
case GameState::Playing:
220223
background.draw(image, camera);
221224

222-
//sorting order of drawing player/enemy based on their Y position
223-
// Solution using std::sort and lambda fn. suggested by Jeremiah
225+
// Sorting order of drawing player/enemy based on their Y position
226+
// Solution using std::sort and lambda fn. suggested by Jeremiah van Oosten (@jpvanoosten)
224227
//** ranges algorithm suggested by resharper over the normal std::sort
225228
std::ranges::sort(entities, [](const Entity* a, const Entity* b) {return a->getPosition().y < b->getPosition().y; });
226-
for (const auto entity : entities)
229+
for (auto entity : entities)
227230
{
228231
entity->draw(image, camera);
229232
}
@@ -239,6 +242,24 @@ void Level::draw(Image& image)
239242
image.drawSprite(coinUiAnim, glm::vec2{SCREEN_WIDTH - 150.f, 1.f});
240243
image.drawText(Font::Default, std::to_string(player.getCoins()), glm::vec2{ SCREEN_WIDTH - 115.f, 5.f }, Color::Yellow);
241244
break;
245+
case GameState::Paused:
246+
background.draw(image, camera);
247+
player.draw(image, camera);
248+
for (auto& enemy : enemies)
249+
{
250+
enemy->draw(image, camera);
251+
}
252+
image.drawSprite(coinUiAnim, glm::vec2{ SCREEN_WIDTH - 150.f, 1.f });
253+
image.drawText(Font::Default, std::to_string(player.getCoins()), glm::vec2{ SCREEN_WIDTH - 115.f, 5.f }, Color::Yellow);
254+
255+
image.drawText(tafelSans, "Game is Paused, press P to unpause", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2.3 - 1.5f }, Color::Black);
256+
image.drawText(tafelSans, "Game is Paused, press P to unpause", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2.3 + 3.5f }, Color::Black);
257+
image.drawText(tafelSans, "Game is Paused, press P to unpause", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2.3 }, Color::Yellow);
258+
259+
image.drawText(tafelSans, "Press Q to go back to main menu", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2 - 1.5f }, Color::Black);
260+
image.drawText(tafelSans, "Press Q to go back to main menu", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2 + 3.5f }, Color::Black);
261+
image.drawText(tafelSans, "Press Q to go back to main menu", glm::vec2{ SCREEN_WIDTH / 2 - 110, SCREEN_HEIGHT / 2 }, Color::Yellow);
262+
break;
242263
case GameState::GameOver:
243264
background.draw(image, camera);
244265
for(auto& enemy : enemies)
@@ -259,7 +280,7 @@ void Level::draw(Image& image)
259280
std::string winText2 = "Press Enter to go back";
260281
if (currentLevel < 3)
261282
{
262-
winText = "Congrats on clearing level " + std::to_string(currentLevel) /*+ ", press Enter to go to level " + std::to_string(currentLevel + 1)*/;
283+
winText = "Congrats on clearing level " + std::to_string(currentLevel);
263284
winText2 = "Press Enter to go to next level";
264285
}
265286
image.drawText(tafelSans, winText, glm::vec2{ SCREEN_WIDTH / 2 - 120, SCREEN_HEIGHT / 2 + 3.5f }, Color::Black);
@@ -278,12 +299,15 @@ void Level::setState(GameState newState)
278299
{
279300
if (newState != gameState)
280301
{
281-
beginState(newState);
282-
endState(gameState);
302+
beginState(newState, gameState);
303+
endState(gameState, newState);
283304
gameState = newState;
284305
}
285306
}
286307

308+
// Got help to implement processEvents(),onMouseMoved(), onResized() from~
309+
// Source: https://github.com/jpvanoosten/SoftwareRasterizer/blob/main/samples/07-PixelAdventure/src/Game.cpp
310+
287311
void Level::processEvents(const Event& e)
288312
{
289313
// Copy the event so you can modify it.
@@ -358,17 +382,17 @@ void Level::onResized(ResizeEventArgs& args)
358382

359383
// Update any UI elements or positions that depend on the game rectangle.
360384

361-
playButton.setTransform(Transform2D{ { 120, 170 }/*,{0.8f,0.8f}*/ });
362-
helpButton.setTransform(Transform2D{ { 220, 170 }/*,{0.8f,0.8f}*/ });
363-
quitButton.setTransform(Transform2D{ { 320, 170 }/*,{0.8f,0.8f}*/ });
385+
playButton.setTransform(Transform2D{ { 120, 170 } });
386+
helpButton.setTransform(Transform2D{ { 220, 170 } });
387+
quitButton.setTransform(Transform2D{ { 320, 170 } });
364388
for (int i = 0; i < 3; ++i)
365389
{
366-
levelButtons[i].setTransform(Transform2D{ { 230 + i * 35, 215}/*,{0.8f,0.8f}*/ });
390+
levelButtons[i].setTransform(Transform2D{ { 230 + i * 35, 215} });
367391
}
368-
backButton.setTransform(Transform2D{ { 285, 1 },{0.7f,0.7f} });
392+
backButton.setTransform(Transform2D{ { 375, 220 },{0.7f,0.7f} });
369393
}
370394

371-
void Level::beginState(GameState newState)
395+
void Level::beginState(GameState newState, GameState oldState)
372396
{
373397
switch (newState)
374398
{
@@ -381,7 +405,7 @@ void Level::beginState(GameState newState)
381405
player.setCoins(0);
382406
break;
383407
case GameState::Playing:
384-
if (!isFirstLoad)
408+
if (!isFirstLoad && oldState != GameState::Paused)
385409
{
386410
loadLevelAssets();
387411
camera.setPosition(glm::vec2{ 0,0 });
@@ -396,15 +420,17 @@ void Level::beginState(GameState newState)
396420
}
397421
}
398422

399-
void Level::endState(GameState oldState)
423+
void Level::endState(GameState oldState,GameState newState)
400424
{
401425
switch (oldState)
402426
{
403427
case GameState::Menu:
404428
break;
405429
case GameState::Playing:
406-
entities.clear();
407-
//enemies.clear();
430+
if (newState != GameState::Paused)
431+
{
432+
entities.clear();
433+
}
408434
break;
409435
case GameState::GameOver:
410436
enemies.clear();
@@ -607,13 +633,28 @@ void Level::doPlaying(float deltaTime)
607633
++iter;
608634
}
609635
}
636+
if (Input::getKeyDown(KeyCode::P))
637+
{
638+
setState(GameState::Paused);
639+
}
610640

611641
if (enemies.empty())
612642
{
613643
setState(GameState::Win);
614644
}
615645
}
616646

647+
void Level::doPaused(float deltaTime)
648+
{
649+
// Any logic that needs to happen when the game is paused
650+
if (Input::getKeyDown(KeyCode::P))
651+
setState(GameState::Playing);
652+
653+
if (Input::getKeyDown(KeyCode::Q))
654+
setState(GameState::Menu);
655+
656+
}
657+
617658
void Level::doGameOver()
618659
{
619660
// Any logic that needs to happen when the game is over

Mini_Assailants/src/Player.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ void Player::draw(Image& image, const Camera& camera)
148148
mpBar.Draw(image, mp, maxMp, glm::vec2{ 10, 40 }, magicColor);
149149

150150
//Logic to flash the player sprite upon damage
151-
//Solution using Sin wave shown by Jeremiah
151+
//Solution using Sin wave shown by Jeremiah van Oosten (@jpvanoosten)
152152
Color color = Color::White;
153153
if (hitCounter > 0.f)
154154
{
@@ -392,7 +392,7 @@ void Player::doLightAtk1(float deltaTime)
392392

393393
lightAtk1Sprite.update(deltaTime);
394394

395-
if (lightAtk1Sprite.getCurrentFrame() >= 3)
395+
if (lightAtk1Sprite.getCurrentFrame() >= 3 && lightAtk1Sprite.getCurrentFrame() <= 5)
396396
{
397397
attackCircle = { transform.getPosition() + glm::vec2{ 32.f, -25.f } *transform.getScale(),8.5f };
398398
}
@@ -409,7 +409,7 @@ void Player::doLightAtk2(float deltaTime)
409409

410410
lightAtk2Sprite.update(deltaTime);
411411

412-
if (lightAtk2Sprite.getCurrentFrame() >= 3 && lightAtk2Sprite.getCurrentFrame() <= 4)
412+
if (lightAtk2Sprite.getCurrentFrame() == 3)
413413
attackCircle = { transform.getPosition() + glm::vec2{ 32.f, -30.f } *transform.getScale(),11.f };
414414

415415
if (lightAtk2Sprite.isDone())

Mini_Assailants/src/Todo.txt

Lines changed: 0 additions & 20 deletions
This file was deleted.

Mini_Assailants/src/main.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
1+
// Credits for the framework: C++ For Games by Jeremiah van Oosten (@jpvanoosten)
2+
// Source: https://github.com/BredaUniversityGames/cppforgames-template
3+
// https://github.com/jpvanoosten/SoftwareRasterizer
4+
5+
// Framework Includes:
6+
// 2D software rasterizer in the Image class.
7+
// Support for gamepads(currently using XInput on Windows)
8+
// Spatialized audio library with support for wav, mp3, ogg, flac audio file sources.
9+
// Create your own waveforms for your game using the Waveform class.
10+
// A few math helpers in the math library(AABB, Camera2D, Transform2D, etc...)
11+
112
#include <Game.hpp>
213
#include <Constants.hpp>
314

415
#include "Graphics/Window.hpp"
516

17+
#include <iostream>
18+
619
using namespace Graphics;
720

821
int main()
922
{
23+
std::cout << "...Loading Game" << '\n';
24+
1025
Window window{ L"Mini Assailants", SCREEN_WIDTH, SCREEN_HEIGHT };
1126

1227
Game game{ SCREEN_WIDTH, SCREEN_HEIGHT, window };

assets/sounds/sources.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)