From 95a847c83698e545fb8c73b9c2e1162e8b39f890 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Filip=20Str=C3=B6mb=C3=A4ck?= <filip.stromback@liu.se>
Date: Mon, 21 Nov 2022 10:00:21 +0100
Subject: [PATCH] Updated introduction a bit for 2022.

---
 basic/player.png | Bin 0 -> 2758 bytes
 basic/step05.cpp |   1 +
 basic/step06.cpp |   2 +-
 basic/step07.cpp | 120 +++++++++++++++++++++++++++++++++++++++++++++++
 basic/step08.cpp |  74 +++++++++++++++++++++++++++++
 5 files changed, 196 insertions(+), 1 deletion(-)
 create mode 100644 basic/player.png
 create mode 100644 basic/step07.cpp
 create mode 100644 basic/step08.cpp

diff --git a/basic/player.png b/basic/player.png
new file mode 100644
index 0000000000000000000000000000000000000000..f19959c83b34b2833d9da7300114c225faa6a631
GIT binary patch
literal 2758
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

literal 0
HcmV?d00001

diff --git a/basic/step05.cpp b/basic/step05.cpp
index c23a644..6041d20 100644
--- a/basic/step05.cpp
+++ b/basic/step05.cpp
@@ -8,6 +8,7 @@
  * Fundera på:
  * - Vad är skillnaden här jämfört med förra?
  * - Hur påverkas hastigheten av olika hastighet på programmet?
+ * - Hur fungerar detta med avseende på om programmet har fokus eller ej?
  */
 
 
diff --git a/basic/step06.cpp b/basic/step06.cpp
index 976c26b..32a3841 100644
--- a/basic/step06.cpp
+++ b/basic/step06.cpp
@@ -57,7 +57,7 @@ int main() {
 
         auto delta = clock.restart();
         {
-            float distance = 250.0f * (delta.asMicroseconds() / 1000000.0f);
+            float distance = 250.0f * delta.asSeconds();
             location += direction * distance;
         }
 
diff --git a/basic/step07.cpp b/basic/step07.cpp
new file mode 100644
index 0000000..c9bfd79
--- /dev/null
+++ b/basic/step07.cpp
@@ -0,0 +1,120 @@
+#include <SFML/Graphics.hpp>
+#include "point.h"
+#include "standard.h"
+
+/**
+ * Steg 7: Alternativ hantering av tangentbordsinmatning.
+ *
+ * Fundera på:
+ * - Vad är fördelar och nackdelar gentemot förra lösningen?
+ * - Finns det problem med den här lösningen?
+ */
+
+
+const size_t width = 1024;
+const size_t height = 768;
+
+
+class Key_State {
+public:
+    Key_State()
+        : up{false},
+          down{false},
+          left{false},
+          right{false}
+        {}
+
+    void onKey(sf::Keyboard::Key key, bool pressed) {
+        switch (key) {
+        case sf::Keyboard::W:
+        case sf::Keyboard::Up:
+            up = pressed;
+            break;
+        case sf::Keyboard::S:
+        case sf::Keyboard::Down:
+            down = pressed;
+            break;
+        case sf::Keyboard::A:
+        case sf::Keyboard::Left:
+            left = pressed;
+            break;
+        case sf::Keyboard::D:
+        case sf::Keyboard::Right:
+            right = pressed;
+            break;
+        default:
+            break;
+        }
+    }
+
+    sf::Vector2f direction() const {
+        sf::Vector2f result;
+        if (up)
+            result.y -= 1;
+        if (down)
+            result.y += 1;
+        if (left)
+            result.x -= 1;
+        if (right)
+            result.x += 1;
+        return normalize(result);
+    }
+
+private:
+    bool up;
+    bool down;
+    bool left;
+    bool right;
+};
+
+
+int main() {
+    sf::RenderWindow window{sf::VideoMode{width, height}, "Demo"};
+    window.setKeyRepeatEnabled(false);
+    window.setVerticalSyncEnabled(true);
+
+    sf::CircleShape circle{40};
+    sf::Vector2f location{300, 300};
+
+    sf::Clock clock;
+
+    Key_State keys;
+
+    bool quit = false;
+    while (!quit) {
+        sf::Event event;
+        while (window.pollEvent(event)) {
+            switch (event.type) {
+            case sf::Event::Closed:
+                quit = true;
+                break;
+            case sf::Event::KeyPressed:
+                keys.onKey(event.key.code, true);
+                break;
+            case sf::Event::KeyReleased:
+                keys.onKey(event.key.code, false);
+                break;
+            default:
+                break;
+            }
+        }
+
+        if (quit)
+            break;
+
+        sf::Vector2f direction = keys.direction();
+
+        auto delta = clock.restart();
+        {
+            float distance = 250.0f * delta.asSeconds();
+            location += direction * distance;
+        }
+
+        window.clear();
+        circle.setPosition(location);
+        window.draw(circle);
+        window.display();
+    }
+
+    return 0;
+}
diff --git a/basic/step08.cpp b/basic/step08.cpp
new file mode 100644
index 0000000..5a99a78
--- /dev/null
+++ b/basic/step08.cpp
@@ -0,0 +1,74 @@
+#include <SFML/Graphics.hpp>
+#include "point.h"
+#include "standard.h"
+
+/**
+ * Steg 8: Använda texturer.
+ */
+
+
+const size_t width = 1024;
+const size_t height = 768;
+
+sf::Vector2f find_direction() {
+    sf::Vector2f direction;
+    if (sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
+        direction.y -= 1;
+    if (sf::Keyboard::isKeyPressed(sf::Keyboard::S) || sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
+        direction.y += 1;
+    if (sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
+        direction.x -= 1;
+    if (sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
+        direction.x += 1;
+
+    return normalize(direction);
+}
+
+int main() {
+    sf::RenderWindow window{sf::VideoMode{width, height}, "Demo"};
+    window.setKeyRepeatEnabled(false);
+    window.setVerticalSyncEnabled(true);
+
+    sf::Texture texture;
+    texture.loadFromFile("player.png");
+
+    sf::Vector2f textureSize{texture.getSize()};
+    sf::RectangleShape player{textureSize};
+    player.setTexture(&texture);
+    player.setOrigin(textureSize / 2.0f);
+    sf::Vector2f location{300, 300};
+
+    sf::Clock clock;
+
+    bool quit = false;
+    while (!quit) {
+        sf::Event event;
+        while (window.pollEvent(event)) {
+            switch (event.type) {
+            case sf::Event::Closed:
+                quit = true;
+                break;
+            default:
+                break;
+            }
+        }
+
+        if (quit)
+            break;
+
+        sf::Vector2f direction = find_direction();
+
+        auto delta = clock.restart();
+        {
+            float distance = 250.0f * delta.asSeconds();
+            location += direction * distance;
+        }
+
+        window.clear();
+        player.setPosition(location);
+        window.draw(player);
+        window.display();
+    }
+
+    return 0;
+}
-- 
GitLab