Add AS6 skeleton
parent
67097e14c9
commit
ba42c54560
|
|
@ -0,0 +1,21 @@
|
|||
cmake_minimum_required(VERSION 3.25)
|
||||
project(as6-gravity-surfing VERSION 0.1 LANGUAGES CXX)
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# adding this option to make clangd work
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
add_subdirectory(../raylib-cpp raylib)
|
||||
|
||||
include(../assets/includeable.cmake)
|
||||
|
||||
add_executable(as6-gravity-surfing main.cpp)
|
||||
target_link_libraries(as6-gravity-surfing PUBLIC raylib raylib_cpp buffered-raylib)
|
||||
|
||||
target_include_directories(as6-gravity-surfing PRIVATE
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
${RAYLIB_CPP_ROOT}/include
|
||||
)
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
#pragma once
|
||||
|
||||
#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.
|
||||
|
||||
struct TransformComponent : public Component {
|
||||
float x = 0.0f;
|
||||
float y = 0.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct PhysicsComponent : public Component {
|
||||
float vx = 0.0f;
|
||||
float vy = 0.0f;
|
||||
float speedCap = 400.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct GravityWellComponent : public Component {
|
||||
float mass = 150000.0f;
|
||||
float minDist = 30.0f;
|
||||
bool active = false;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct GravityReceiverComponent : public Component {
|
||||
Entity *well = nullptr;
|
||||
bool inVoid = false;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct ColliderComponent : public Component {
|
||||
float radius = 8.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct ScrollComponent : public Component {
|
||||
float scrollX = 0.0f;
|
||||
float speed = 2.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct ScrollableComponent : public Component {
|
||||
float worldX = 0.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct SpawnComponent : public Component {
|
||||
float cursorWX = 0.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct TrailComponent : public Component {
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct ProjectionComponent : public Component {
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct MeterComponent : public Component {
|
||||
float value = 60.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct HudComponent : public Component {
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct RenderComponent : public Component {
|
||||
virtual void Draw() {}
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct NullZoneComponent : public Component {
|
||||
float width = 70.0f;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
||||
struct CollectibleComponent : public Component {
|
||||
bool collected = false;
|
||||
void Setup() override {}
|
||||
void Update(float) override {}
|
||||
void Cleanup() override {}
|
||||
};
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
#pragma once
|
||||
|
||||
// placeholder for draw helpers
|
||||
void DrawSceneOutline() {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
#pragma once
|
||||
|
||||
#include "Components.hpp"
|
||||
#include "Entity.hpp"
|
||||
#include <memory>
|
||||
|
||||
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>();
|
||||
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>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateStar(float x, float y) {
|
||||
auto e = std::make_shared<Entity>();
|
||||
auto &t = e->template AddComponent<TransformComponent>();
|
||||
t.x = x;
|
||||
t.y = y;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<ColliderComponent>();
|
||||
e->template AddComponent<CollectibleComponent>();
|
||||
e->template 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>();
|
||||
t.x = x;
|
||||
t.y = y;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<ColliderComponent>();
|
||||
e->template 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>();
|
||||
t.x = x;
|
||||
(void)width;
|
||||
e->template AddComponent<ScrollableComponent>();
|
||||
e->template AddComponent<NullZoneComponent>();
|
||||
e->template AddComponent<RenderComponent>();
|
||||
return e;
|
||||
}
|
||||
|
||||
std::shared_ptr<Entity> CreateWorld() {
|
||||
auto e = std::make_shared<Entity>();
|
||||
e->template AddComponent<ScrollComponent>();
|
||||
e->template 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>();
|
||||
return e;
|
||||
}
|
||||
|
|
@ -0,0 +1,47 @@
|
|||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <optional>
|
||||
#include <vector>
|
||||
|
||||
struct Entity;
|
||||
class Component;
|
||||
|
||||
class Component {
|
||||
public:
|
||||
Entity *entity = nullptr;
|
||||
|
||||
virtual void Setup() = 0;
|
||||
virtual void Update(float dt) = 0;
|
||||
virtual void Cleanup() = 0;
|
||||
|
||||
virtual ~Component() = default;
|
||||
};
|
||||
|
||||
struct Entity {
|
||||
std::vector<std::shared_ptr<Component>> components;
|
||||
|
||||
template <std::derived_from<Component> T> T &AddComponent() {
|
||||
auto &ptr = components.emplace_back(std::make_shared<T>());
|
||||
ptr->entity = this;
|
||||
ptr->Setup();
|
||||
return static_cast<T &>(*ptr);
|
||||
}
|
||||
|
||||
template <std::derived_from<Component> T>
|
||||
std::optional<std::reference_wrapper<T>> GetComponent() const {
|
||||
for (auto &c : components) {
|
||||
T *cast = dynamic_cast<T *>(c.get());
|
||||
if (cast) {
|
||||
return *cast;
|
||||
}
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
void Update(float dt) {
|
||||
for (auto &c : components) {
|
||||
c->Update(dt);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include "Entity.hpp"
|
||||
|
||||
void UpdateAllSystems(std::vector<Entity> &entities, float deltaTime) {
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
#include "Components.hpp"
|
||||
#include "Draw.hpp"
|
||||
#include "Entities.hpp"
|
||||
#include "Entity.hpp"
|
||||
#include "Systems.hpp"
|
||||
|
||||
#include "raylib-cpp.hpp"
|
||||
|
||||
int main() {
|
||||
raylib::Window window(700, 460, "Gravity Surfing");
|
||||
window.SetTargetFPS(60);
|
||||
|
||||
std::vector<Entity> entities;
|
||||
entities.reserve(20);
|
||||
|
||||
auto &world = entities.emplace_back();
|
||||
world.AddComponent<ScrollComponent>();
|
||||
|
||||
while (!window.ShouldClose()) {
|
||||
float dt = window.GetFrameTime();
|
||||
UpdateAllSystems(entities, dt);
|
||||
window.BeginDrawing();
|
||||
window.ClearBackground(raylib::Color::Black());
|
||||
DrawSceneOutline();
|
||||
window.EndDrawing();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
#
|
||||
# rgl layout text file (v4.0) - raygui layout file generated using rGuiLayout
|
||||
#
|
||||
# Number of controls: 1
|
||||
#
|
||||
# Ref. window: r <x> <y> <width> <height>
|
||||
# Anchor info: a <id> <name> <posx> <posy> <enabled>
|
||||
# Control info: c <id> <type> <name> <rectangle> <anchor_id> <text>
|
||||
#
|
||||
r 0 40 -1 -1
|
||||
a 001 anchor01 456 240 1
|
||||
c 000 18 GravityBar 72 24 240 16 0 Gravity
|
||||
Loading…
Reference in New Issue