Browse Source

Lesson 22.5

Godzil 3 years ago
parent
commit
18d7f8b800
2 changed files with 30 additions and 15 deletions
  1. 4 4
      source/Game.cpp
  2. 26 11
      source/include/Systems/RenderGUI.h

+ 4 - 4
source/Game.cpp

@@ -220,7 +220,7 @@ void Game::LoadLevel(int level)
     chopper.addComponent<TransformComponent>(glm::vec2(240, 110), glm::vec2(1, 1), 0);
     chopper.addComponent<SpriteComponent>("chopper-image", 1, 32, 32);
     chopper.addComponent<RigidBodyComponent>(glm::vec2(0, 0));
-    chopper.addComponent<BoxColliderComponent>(32, 32);
+    chopper.addComponent<BoxColliderComponent>(32, 25, glm::vec2(0, 5));
     chopper.addComponent<AnimationComponent>(2, 15, true);
     chopper.addComponent<KeyboardControlComponent>(glm::vec2(0, -80), glm::vec2(80, 0),
                                                    glm::vec2(0, 80), glm::vec2(-80, 0));
@@ -240,7 +240,7 @@ void Game::LoadLevel(int level)
     tank.addComponent<TransformComponent>(glm::vec2(500, 500), glm::vec2(1, 1), 0);
     tank.addComponent<RigidBodyComponent>(glm::vec2(0, 0));
     tank.addComponent<SpriteComponent>("tank-image", 1, 32, 32);
-    tank.addComponent<BoxColliderComponent>(32, 32);
+    tank.addComponent<BoxColliderComponent>(25, 18, glm::vec2(5, 7));
     tank.addComponent<ProjectileEmitterComponent>(glm::vec2(100, 0), 3000, 5000, 10, false);
     tank.addComponent<HealthComponent>(100);
     tank.group("enemies");
@@ -249,7 +249,7 @@ void Game::LoadLevel(int level)
     truck.addComponent<TransformComponent>(glm::vec2(120, 500), glm::vec2(1, 1), 0);
     truck.addComponent<RigidBodyComponent>(glm::vec2(0, 0));
     truck.addComponent<SpriteComponent>("truck-image", 2, 32, 32);
-    truck.addComponent<BoxColliderComponent>(32, 32);
+    truck.addComponent<BoxColliderComponent>(25, 20, glm::vec2(5, 5));
     truck.addComponent<ProjectileEmitterComponent>(glm::vec2(0, -100), 2000, 5000, 10, false);
     truck.addComponent<HealthComponent>(100);
     truck.group("enemies");
@@ -349,7 +349,7 @@ void Game::Render()
     {
         registry->getSystem<CollisionSystem>().debugRender(this->renderer, this->camera);
 
-        registry->getSystem<RenderGUISystem>().update();
+        registry->getSystem<RenderGUISystem>().update(this->registry);
     }
 
     SDL_RenderPresent(this->renderer);

+ 26 - 11
source/include/Systems/RenderGUI.h

@@ -11,6 +11,7 @@
 #define IMGUI_SOURCE_INCLUDE_SYSTEMS_RENDERGUI_H
 
 #include <SDL.h>
+#include <glm/glm.hpp>
 
 #include <imgui.h>
 #include <imgui_sdl.h>
@@ -19,28 +20,42 @@
 #include <ECS.h>
 #include <Logger.h>
 
+#include <Components/Transform.h>
+#include <Components/RigidBody.h>
+#include <Components/Sprite.h>
+#include <Components/BoxCollider.h>
+#include <Components/ProjectileEmitter.h>
+#include <Components/Heakth.h>
+
 class RenderGUISystem : public System
 {
 public:
     RenderGUISystem() = default;
 
-    void update()
+    void update(const std::unique_ptr<Registry> &registry)
     {
         ImGui::NewFrame();
 
         if (ImGui::Begin("Spawn enemies"))
         {
-            ImGui::Text("Press that button to spawn an enemy");
-            ImGui::NewLine();
-            ImGui::Button("Hello");
-            ImGui::NewLine();
-            ImGui::NewLine();
-            ImGui::NewLine();
-            ImGui::NewLine();
-            ImGui::NewLine();
-            ImGui::Button("World");
-            ImGui::End();
+            static int xPos = 0, yPos = 0;
+
+            ImGui::InputInt("Enemy X position", &xPos);
+            ImGui::InputInt("Enemy Y position", &yPos);
+
+            if (ImGui::Button("Spawn"))
+            {
+                Entity newEnemy = registry->createEntity();
+                newEnemy.addComponent<TransformComponent>(glm::vec2(xPos, yPos), glm::vec2(1, 1), 0);
+                newEnemy.addComponent<RigidBodyComponent>(glm::vec2(0, 0));
+                newEnemy.addComponent<SpriteComponent>("tank-image", 2, 32, 32);
+                newEnemy.addComponent<BoxColliderComponent>(18, 18, glm::vec2(5, 7));
+                newEnemy.addComponent<ProjectileEmitterComponent>(glm::vec2(100, 0), 3000, 5000, 10, false);
+                newEnemy.addComponent<HealthComponent>(100);
+                newEnemy.group("enemies");
+            }
         }
+        ImGui::End();
 
         ImGui::Render();
         ImGuiSDL::Render(ImGui::GetDrawData());