From f3b323d71a10e6fa7156617d532f7401692fccbc Mon Sep 17 00:00:00 2001 From: Johannes Hendrik Gerard van der Weide Date: Wed, 11 Oct 2023 12:51:24 +0200 Subject: [PATCH] Update --- flake.nix | 1 + src/ProjectName.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 83 insertions(+), 1 deletion(-) diff --git a/flake.nix b/flake.nix index 2a85ddf..5a510ed 100644 --- a/flake.nix +++ b/flake.nix @@ -26,6 +26,7 @@ default = pkgs.mkShell { # The Nix packages provided in the environment packages = with pkgs; [ + gdb sfml cmake gcc diff --git a/src/ProjectName.cpp b/src/ProjectName.cpp index 52f6db7..8f0c04c 100644 --- a/src/ProjectName.cpp +++ b/src/ProjectName.cpp @@ -1,5 +1,86 @@ #include -#include +#include "Game.hpp" + +Game::Game() +: mWindow(sf::VideoMode(640, 480), "SFML Application") +, mPlayer() +{ + mPlayer.setRadius(40.f); + mPlayer.setPosition(100.f, 100.f); + mPlayer.setFillColor(sf::Color::Cyan); +} +void Game::run() +{ + sf::Clock clock; + sf::Time timeSinceLastUpdate = sf::Time::Zero; + while (mWindow.isOpen()) + { + processEvents(); + timeSinceLastUpdate += clock.restart(); + while (timeSinceLastUpdate > TimePerFrame) + { + timeSinceLastUpdate -= TimePerFrame; + processEvents(); + update(TimePerFrame); + } + render(); + } +} + +void Game::processEvents() +{ + sf::Event event; + while (mWindow.pollEvent(event)) + { + switch (event.type) + { + //For each time the while loop iterates, it means a new event that was registered by the window is being handled. While there can be many different events, we will only check for some types of events, which are of our interest right now. + case sf::Event::KeyPressed: + handlePlayerInput(event.key.code, true); + break; + case sf::Event::KeyReleased: + handlePlayerInput(event.key.code, false); + break; + case sf::Event::Closed: + mWindow.close(); + break; + } + } +} + +void Game::handlePlayerInput(sf::Keyboard::Key key,bool isPressed) +{ + if (key == sf::Keyboard::W) + mIsMovingUp = isPressed; + else if (key == sf::Keyboard::S) + mIsMovingDown = isPressed; + else if (key == sf::Keyboard::A) + mIsMovingLeft = isPressed; + else if (key == sf::Keyboard::D) + mIsMovingRight = isPressed; +} + +void Game::update(sf::Time deltaTime) +{ + sf::Vector2f movement(0.f, 0.f); + if (mIsMovingUp) + movement.y -= 1.f; + if (mIsMovingDown) + movement.y += 1.f; + if (mIsMovingLeft) + movement.x -= 1.f; + if (mIsMovingRight) + movement.x += 1.f; + + mPlayer.move(movement * deltaTime.asSeconds()); +} + +void Game::render() +{ + mWindow.clear(); + mWindow.draw(mPlayer); + mWindow.display(); +} int main() {