Add scrolling
parent
d3b871f214
commit
5abb201ed3
|
|
@ -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 <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
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<TransformComponent>();
|
||||
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 {}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -6,69 +6,76 @@
|
|||
|
||||
std::shared_ptr<Entity> CreateProbe() {
|
||||
auto e = std::make_shared<Entity>();
|
||||
e->template AddComponent<TransformComponent>();
|
||||
e->template AddComponent<PhysicsComponent>();
|
||||
e->template AddComponent<GravityReceiverComponent>();
|
||||
e->template AddComponent<ColliderComponent>();
|
||||
e->template AddComponent<TrailComponent>();
|
||||
e->template AddComponent<ProjectionComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
auto &transform = e->AddComponent<TransformComponent>();
|
||||
transform.x = 96.0f;
|
||||
transform.y = 230.0f;
|
||||
|
||||
auto &physics = e->AddComponent<PhysicsComponent>();
|
||||
physics.vx = 165.0f;
|
||||
physics.vy = 0.0f;
|
||||
physics.speedCap = 420.0f;
|
||||
|
||||
e->AddComponent<GravityReceiverComponent>();
|
||||
e->AddComponent<ColliderComponent>();
|
||||
e->AddComponent<TrailComponent>();
|
||||
e->AddComponent<ProjectionComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateGravityWell() {
|
||||
auto e = std::make_shared<Entity>();
|
||||
e->template AddComponent<TransformComponent>();
|
||||
e->template AddComponent<GravityWellComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
e->AddComponent<TransformComponent>();
|
||||
e->AddComponent<GravityWellComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateStar(float x, float y) {
|
||||
auto e = std::make_shared<Entity>();
|
||||
auto &t = e->template AddComponent<TransformComponent>();
|
||||
auto &t = e->AddComponent<TransformComponent>();
|
||||
t.x = x;
|
||||
t.y = y;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<ColliderComponent>();
|
||||
e->template AddComponent<CollectibleComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
e->AddComponent<ScrollableComponent>();
|
||||
e->AddComponent<ColliderComponent>();
|
||||
e->AddComponent<CollectibleComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateAsteroid(float x, float y) {
|
||||
auto e = std::make_shared<Entity>();
|
||||
auto &t = e->template AddComponent<TransformComponent>();
|
||||
auto &t = e->AddComponent<TransformComponent>();
|
||||
t.x = x;
|
||||
t.y = y;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<ColliderComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
e->AddComponent<ScrollableComponent>();
|
||||
e->AddComponent<ColliderComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateNullZone(float x, float width) {
|
||||
auto e = std::make_shared<Entity>();
|
||||
auto &t = e->template AddComponent<TransformComponent>();
|
||||
auto &t = e->AddComponent<TransformComponent>();
|
||||
t.x = x;
|
||||
(void)width;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<NullZoneComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
e->AddComponent<ScrollableComponent>();
|
||||
e->AddComponent<NullZoneComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateWorld() {
|
||||
auto e = std::make_shared<Entity>();
|
||||
e->template AddComponent<ScrollComponent>();
|
||||
e->template AddComponent<SpawnComponent>();
|
||||
e->AddComponent<ScrollComponent>();
|
||||
e->AddComponent<SpawnComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateHUD() {
|
||||
auto e = std::make_shared<Entity>();
|
||||
e->template AddComponent<MeterComponent>();
|
||||
e->template AddComponent<HudComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
e->AddComponent<MeterComponent>();
|
||||
e->AddComponent<HudComponent>();
|
||||
e->AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
|
|
|||
16
as6/main.cpp
16
as6/main.cpp
|
|
@ -24,6 +24,9 @@ int main() {
|
|||
|
||||
UpdateAllSystems(entities, dt);
|
||||
|
||||
auto worldScroll = entities[0]->GetComponent<ScrollComponent>();
|
||||
auto probeTransform = entities[2]->GetComponent<TransformComponent>();
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue