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