#include "components/GravityWellComponent.hpp" #include "Entities.hpp" #include "Entity.hpp" #include "components/PlayerBlackHoleComponent.hpp" #include "components/StatsComponent.hpp" #include "raylib.h" void GravityWellComponent::Setup() {} void GravityWellComponent::Update(float) { if (!controlledByMouse) { active = alwaysActive; return; } active = false; if (!context || !context->entities) { return; } // Right click removes all player-created black holes if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) { for (auto &ent : *context->entities) { if (!ent || ent->queuedForFree) { continue; } auto marker = ent->GetComponent(); if (marker) { ent->QueueFree(); } } // Do not early return; allow left-click placement to still happen in the same frame } if (!IsMouseButtonPressed(MOUSE_BUTTON_LEFT) || !context->statsEntity) { return; } auto stats = context->statsEntity->GetComponent(); if (!stats || stats->get().value < placementCost) { return; } stats->get().Drain(placementCost); const Vector2 mouse = GetMousePosition(); const float worldX = context->scrollX + mouse.x; auto blackHole = CreatePlayerBlackHole(worldX, mouse.y, context->scrollX, placementTtl); blackHole->SetContext(context); context->entities->push_back(blackHole); } void GravityWellComponent::Cleanup() {}