diff --git a/as6/Components.hpp b/as6/Components.hpp index 1e6e856..51a2638 100644 --- a/as6/Components.hpp +++ b/as6/Components.hpp @@ -2,8 +2,8 @@ #include "Entity.hpp" -// Placeholder component definitions inspired by the GDD. Logic will be filled -// in later, but the types exist now so other modules can include them and build. +#include +#include struct TransformComponent : public Component { float x = 0.0f; @@ -18,7 +18,22 @@ struct PhysicsComponent : public Component { float vy = 0.0f; float speedCap = 400.0f; void Setup() override {} - void Update(float) override {} + void Update(float dt) override { + auto transform = entity->GetComponent(); + if (!transform) { + return; + } + + const float speed = std::sqrt(vx * vx + vy * vy); + if (speed > speedCap && speed > 0.0f) { + const float scale = speedCap / speed; + vx *= scale; + vy *= scale; + } + + transform->get().x += vx * dt; + transform->get().y += vy * dt; + } void Cleanup() override {} }; @@ -49,8 +64,12 @@ struct ColliderComponent : public Component { struct ScrollComponent : public Component { float scrollX = 0.0f; float speed = 2.0f; + float accel = 0.018f; void Setup() override {} - void Update(float) override {} + void Update(float dt) override { + speed += accel * dt; + scrollX += speed * dt * 60.0f; + } void Cleanup() override {} }; diff --git a/as6/Entities.hpp b/as6/Entities.hpp index bb796b2..99f29e3 100644 --- a/as6/Entities.hpp +++ b/as6/Entities.hpp @@ -6,69 +6,76 @@ std::shared_ptr CreateProbe() { auto e = std::make_shared(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + auto &transform = e->AddComponent(); + transform.x = 96.0f; + transform.y = 230.0f; + + auto &physics = e->AddComponent(); + physics.vx = 165.0f; + physics.vy = 0.0f; + physics.speedCap = 420.0f; + + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateGravityWell() { auto e = std::make_shared(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateStar(float x, float y) { auto e = std::make_shared(); - auto &t = e->template AddComponent(); + auto &t = e->AddComponent(); t.x = x; t.y = y; - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateAsteroid(float x, float y) { auto e = std::make_shared(); - auto &t = e->template AddComponent(); + auto &t = e->AddComponent(); t.x = x; t.y = y; - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateNullZone(float x, float width) { auto e = std::make_shared(); - auto &t = e->template AddComponent(); + auto &t = e->AddComponent(); t.x = x; (void)width; - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateWorld() { auto e = std::make_shared(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } std::shared_ptr CreateHUD() { auto e = std::make_shared(); - e->template AddComponent(); - e->template AddComponent(); - e->template AddComponent(); + e->AddComponent(); + e->AddComponent(); + e->AddComponent(); return e; } diff --git a/as6/main.cpp b/as6/main.cpp index 401607d..fd68140 100644 --- a/as6/main.cpp +++ b/as6/main.cpp @@ -24,6 +24,9 @@ int main() { UpdateAllSystems(entities, dt); + auto worldScroll = entities[0]->GetComponent(); + auto probeTransform = entities[2]->GetComponent(); + window.BeginDrawing(); window.ClearBackground(raylib::Color(11, 15, 26, 255)); @@ -31,6 +34,19 @@ int main() { raylib::DrawText("Gravity Surfing", 14, 12, 20, raylib::Color::RayWhite()); + if (worldScroll) { + // debug readout for early loop validation + raylib::DrawText(TextFormat("scrollX: %.2f", worldScroll->get().scrollX), 14, 40, 16, + raylib::Color(125, 225, 205, 255)); + } + + if (probeTransform) { + const auto &probe = probeTransform->get(); + ::DrawCircleV({probe.x, probe.y}, 7.0f, raylib::Color(250, 244, 227, 255)); + raylib::DrawText(TextFormat("probe: (%.1f, %.1f)", probe.x, probe.y), 14, 60, 16, + raylib::Color(235, 215, 125, 255)); + } + window.EndDrawing(); }