From e1e1ec8e8cd2dd8deea299659de5ee8a78d934fa Mon Sep 17 00:00:00 2001 From: Benjamin Kraft Date: Tue, 24 Jan 2023 13:03:43 +0100 Subject: [PATCH] walljumpevent --- src/Event.h | 13 ++++++------- src/Game.cpp | 7 ++++++- src/Game.h | 6 +++++- src/Listener.cpp | 7 ++----- src/Listener.h | 3 +-- src/Player.cpp | 12 +++++++++--- src/Player.h | 1 - src/Queue.h | 1 - src/Spectator.cpp | 4 ++-- src/Spectator.h | 2 +- 10 files changed, 32 insertions(+), 24 deletions(-) diff --git a/src/Event.h b/src/Event.h index be3327e..a6b3505 100644 --- a/src/Event.h +++ b/src/Event.h @@ -46,14 +46,13 @@ struct WheelEvent : InputEvent { struct GameEvent { - int time = 0; + // seconds + float time = 0; virtual void print() {}; }; -struct CoinCollectEvent : GameEvent { - double value = 0; -}; - -struct DamageEvent : GameEvent { - double amount = 0; +class Player; +struct WallJumpEvent : GameEvent { + double wallHeight = 0; + Player * player = nullptr; }; \ No newline at end of file diff --git a/src/Game.cpp b/src/Game.cpp index b8c2889..4dafa56 100644 --- a/src/Game.cpp +++ b/src/Game.cpp @@ -9,12 +9,17 @@ void Game::draw(QPixmap &output) { } void Game::update(float dTime) { + eTime += dTime; player.update(dTime); } Game::Game() { - + for (auto & spectator : spectators){ + Game::eventQueue->registerListener(&spectator); + } InputWindow::inputQueue->registerListener(&player); + instance = this; } GameQueue * Game::eventQueue = new GameQueue; +Game * Game::instance = nullptr; diff --git a/src/Game.h b/src/Game.h index 937e406..11715db 100644 --- a/src/Game.h +++ b/src/Game.h @@ -6,11 +6,15 @@ #define WIDTH 1000 #define HEIGHT 500 +#define GROUND_Y 400 +#define SPEC_Y 150 class Game { Player player; - std::vector spectators; + std::vector spectators {5}; public: + float eTime = 0; + static Game * instance; static GameQueue * eventQueue; explicit Game(); void draw(QPixmap & output); diff --git a/src/Listener.cpp b/src/Listener.cpp index b0e98d0..1f8129c 100644 --- a/src/Listener.cpp +++ b/src/Listener.cpp @@ -1,11 +1,8 @@ #include "Listener.h" void GameListener::accept(GameEvent *event) { - if (auto coinEvent = dynamic_cast(event)) - OnCoinCollect(coinEvent); - - if (auto dmgEvent = dynamic_cast(event)) - OnDamage(dmgEvent); + if (auto wallJumpEvent = dynamic_cast(event)) + OnWallJumped(wallJumpEvent); } void InputListener::accept(InputEvent *event) { diff --git a/src/Listener.h b/src/Listener.h index 4d7fc5b..c3b3c4d 100644 --- a/src/Listener.h +++ b/src/Listener.h @@ -26,6 +26,5 @@ class GameListener : public Listener { public: void accept(GameEvent * event) override; protected: - virtual void OnCoinCollect(CoinCollectEvent * event) {}; - virtual void OnDamage(DamageEvent * event) {}; + virtual void OnWallJumped(WallJumpEvent * event) {}; }; \ No newline at end of file diff --git a/src/Player.cpp b/src/Player.cpp index 1e71451..f86cb70 100644 --- a/src/Player.cpp +++ b/src/Player.cpp @@ -1,10 +1,16 @@ #include "Player.h" #include "Audio.h" #include +#include "Game.h" void Player::mousePressed(MouseEvent *event) { - if (pos.y() == ground && event->button == Qt::MouseButton::LeftButton){ + if (pos.y() == GROUND_Y && event->button == Qt::MouseButton::LeftButton){ jump(); + auto e = new WallJumpEvent; + e->time = Game::instance->eTime; + e->player = this; + e->wallHeight = 100; + Game::eventQueue->submitEvent(e); } } @@ -21,8 +27,8 @@ void Player::update(float dTime) { pos += vel * dTime; vel += acc * dTime; - if (pos.y() > ground){ - pos.setY(ground); + if (pos.y() > GROUND_Y){ + pos.setY(GROUND_Y); vel = {}; } } diff --git a/src/Player.h b/src/Player.h index 6d6be5b..9f24438 100644 --- a/src/Player.h +++ b/src/Player.h @@ -10,7 +10,6 @@ class Player : public Entity, public InputListener { QVector2D vel {}; QVector2D acc {0, 9.81 * 30}; - float ground = 400; void jump(); public: void draw(QPainter &painter); diff --git a/src/Queue.h b/src/Queue.h index 6241308..1793c59 100644 --- a/src/Queue.h +++ b/src/Queue.h @@ -10,7 +10,6 @@ template class Queue { -private: std::thread thread; std::mutex mutex; void run() { diff --git a/src/Spectator.cpp b/src/Spectator.cpp index 0e1336c..e18285f 100644 --- a/src/Spectator.cpp +++ b/src/Spectator.cpp @@ -2,6 +2,6 @@ #include -void Spectator::OnCoinCollect(CoinCollectEvent *event) { - std::cout << "Someone collected a coin\n"; +void Spectator::OnWallJumped(WallJumpEvent *event) { + std::cout << "Wall jump at " << event->time << std::endl; } diff --git a/src/Spectator.h b/src/Spectator.h index 4dd8126..cdbaa4d 100644 --- a/src/Spectator.h +++ b/src/Spectator.h @@ -5,5 +5,5 @@ class Spectator : public Entity, public GameListener { protected: - void OnCoinCollect(CoinCollectEvent *event) override; + void OnWallJumped(WallJumpEvent * event) override; };