#pragma once #include "Components.hpp" #include "Entity.hpp" #include std::shared_ptr CreateProbe() { auto e = std::make_shared(); auto &transform = e->AddComponent(); transform.x = 96.0f; transform.y = 230.0f; e->AddComponent(); auto &physics = e->AddComponent(); physics.vx = 108.0f; physics.vy = 0.0f; physics.speedCap = 8192.0f; auto &collider = e->AddComponent(); collider.radius = 7.0f; auto &probeState = e->AddComponent(); probeState.spawnX = 96.0f; probeState.spawnY = 230.0f; probeState.spawnVx = 165.0f; probeState.spawnVy = 0.0f; e->AddComponent(); e->AddComponent(); auto &render = e->AddComponent(); render.draw = [e]() { auto transform = e->GetComponent(); if (!transform) { return; } DrawCircleV({transform->get().x, transform->get().y}, 7.0f, Color{250, 244, 227, 255}); }; return e; } std::shared_ptr CreateGravityWell() { auto e = std::make_shared(); auto &transform = e->AddComponent(); transform.x = 96.0f; transform.y = 230.0f; auto &well = e->AddComponent(); well.mass = (float)(1 << 22); well.minDist = 28.0f; well.followLerp = 12.0f; auto &render = e->AddComponent(); render.draw = [e]() { auto transform = e->GetComponent(); if (!transform) { return; } DrawCircleLines(static_cast(transform->get().x), static_cast(transform->get().y), 18.0f, Color{86, 197, 255, 255}); }; return e; } std::shared_ptr CreateStar(float x, float y) { auto e = std::make_shared(); auto &t = e->AddComponent(); t.x = x; t.y = y; auto &scrollable = e->AddComponent(); scrollable.worldX = x; auto &collider = e->AddComponent(); collider.radius = 6.0f; e->AddComponent(); auto &render = e->AddComponent(); render.draw = [e]() { auto transform = e->GetComponent(); if (!transform) { return; } DrawCircleV({transform->get().x, transform->get().y}, 6.0f, Color{255, 223, 86, 255}); }; return e; } std::shared_ptr CreateAsteroid(float x, float y) { auto e = std::make_shared(); auto &t = e->AddComponent(); t.x = x; t.y = y; auto &scrollable = e->AddComponent(); scrollable.worldX = x; auto &collider = e->AddComponent(); collider.radius = 13.0f; e->AddComponent(); auto &render = e->AddComponent(); render.draw = [e]() { auto transform = e->GetComponent(); if (!transform) { return; } DrawCircleV({transform->get().x, transform->get().y}, 13.0f, Color{116, 126, 142, 255}); }; return e; } std::shared_ptr CreateNullZone(float x, float width) { auto e = std::make_shared(); auto &t = e->AddComponent(); t.x = x; auto &scrollable = e->AddComponent(); scrollable.worldX = x; auto &nullZone = e->AddComponent(); nullZone.width = width; auto &render = e->AddComponent(); render.draw = [e]() { auto transform = e->GetComponent(); auto zone = e->GetComponent(); if (!transform || !zone) { return; } DrawRectangle(static_cast(transform->get().x), 0, static_cast(zone->get().width), GetScreenHeight(), Color{96, 64, 146, 80}); }; return e; } std::shared_ptr CreateWorld() { auto e = std::make_shared(); e->AddComponent(); e->AddComponent(); return e; } std::shared_ptr CreateHUD() { auto e = std::make_shared(); e->AddComponent(); e->AddComponent(); auto &render = e->AddComponent(); render.draw = [e]() { auto meter = e->GetComponent(); if (!meter) { return; } const float t = std::clamp(meter->get().value / 100.0f, 0.0f, 1.0f); const int x = 14; const int y = 86; const int w = 240; const int h = 14; DrawRectangleLines(x, y, w, h, Color{125, 140, 165, 255}); DrawRectangle(x + 1, y + 1, static_cast((w - 2) * t), h - 2, Color{60, 199, 178, 255}); }; return e; }