Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/game/components.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "components/render/rotation.h"
#include "components/render/sprite.h"
#include "components/render/text.h"
#include "components/render/triangle.h"
#include "components/rhythm/holdactive.h"
#include "components/rhythm/judgetext.h"
#include "components/rhythm/keyinput.h"
Expand Down
8 changes: 4 additions & 4 deletions include/game/components/render/camera.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ namespace Game::Render
struct Camera2D
{
// For setting up view/prep Matrix
float offsetX, offsetY; // Camera View Offset (Position)
float scaleX, scaleY; // Camera View Size
float rotation; // Camera rotation
float zoom; // Camera zoom
float offsetX = 0, offsetY = 0; // Camera View Offset (Position)
float scaleX = 1, scaleY = 1; // Camera View Size
float rotation = 0; // Camera rotation
float zoom = 1; // Camera zoom
};
} // namespace Game::Render
2 changes: 1 addition & 1 deletion include/game/components/render/intent_handle.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ namespace Game::Render
{
size_t handle_id;

IntentHandle() : handle_id(System::RenderStorage::alloc_slot())
IntentHandle() : handle_id(System::Render::IntentStorage::alloc_slot())
{}
explicit IntentHandle(const size_t handle_id) : handle_id(handle_id)
{}
Expand Down
15 changes: 10 additions & 5 deletions include/game/components/render/text.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,17 @@ namespace Game::Render
char *font_name; // font name in asset
uint32_t font_size; // font size

Text() : font_name(nullptr), font_size(0)
{}
explicit Text(std::string value) : text(std::move(value)), font_name(nullptr), font_size(0)
// World-space position
float x;
float y;
// Anchor
float anchor_x;
float anchor_y;

Text() : font_name(nullptr), font_size(0), x(0.0f), y(0.0f), anchor_x(0.5f), anchor_y(0.5f)
{}
explicit Text(std::string value, char *font_name, const uint32_t font_size) :
text(std::move(value)), font_name(font_name), font_size(font_size)
explicit Text(std::string value, char *font_name, const uint32_t font_size, const float x, const float y, const float anchor_x, const float anchor_y) :
text(std::move(value)), font_name(font_name), font_size(font_size), x(x), y(y), anchor_x(anchor_x), anchor_y(anchor_y)
{}
};
} // namespace Game::Render
12 changes: 12 additions & 0 deletions include/game/components/render/triangle.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#pragma once
#include "maths.h"

namespace Game::Render
{
struct Triangle
{
Math::Vector2<float> points[3];
uint32_t layer; // Layer to render
uint32_t order; // Order of render in layer
};
} // namespace Game::Render
2 changes: 2 additions & 0 deletions include/game/systems.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@
#include "systems/render/rotation_intent.h"
#include "systems/render/sprite_intent.h"
#include "systems/render/text_intent.h"
#include "systems/render/set_camera.h"
#include "systems/render/triangle_intent.h"
6 changes: 3 additions & 3 deletions include/game/systems/render/material_intent.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,19 +9,19 @@ namespace Game::Render
for (auto &[id, comps]: query)
{
const size_t &intent_id = comps.get<IntentHandle>().handle_id;
std::optional<System::DrawIntent> &intent = System::RenderStorage::get_intent(intent_id);
std::optional<System::Render::DrawIntent> &intent = System::Render::IntentStorage::get_intent(intent_id);
const Material &material = comps.get<Material>();

if (!intent.has_value())
{
intent = System::DrawIntent{};
intent = System::Render::DrawIntent{};
}
auto &common = intent.value().common;
common.vert_shader = material.vert_shader;
common.pixel_shader = material.pixel_shader;
common.visible = material.visible;
common.render_prior = material.render_prior;
common.color = System::Color(material.color.r, material.color.g, material.color.b, material.color.a);
common.color = System::Render::Color(material.color.r, material.color.g, material.color.b, material.color.a);
}
}
} // namespace Game::Render
4 changes: 2 additions & 2 deletions include/game/systems/render/rotation_intent.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ namespace Game::Render
for (auto &[id, comps]: query)
{
const size_t &intent_id = comps.get<IntentHandle>().handle_id;
std::optional<System::DrawIntent> &intent = System::RenderStorage::get_intent(intent_id);
std::optional<System::Render::DrawIntent> &intent = System::Render::IntentStorage::get_intent(intent_id);
const Rotation &rotation = comps.get<Rotation>();

if (!intent.has_value())
{
intent = System::DrawIntent{};
intent = System::Render::DrawIntent{};
}

auto &common = intent.value().common;
Expand Down
22 changes: 22 additions & 0 deletions include/game/systems/render/set_camera.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#pragma once

namespace Game::Render
{
template<typename T>
void set_camera([[maybe_unused]] T &syscall, System::ECS::Query<Game::Render::Camera2D> &query)
{
if (query.begin() == query.end())
return;

const auto &[offsetX, offsetY, scaleX, scaleY, rotation, zoom] = query.front().get<Game::Render::Camera2D>();
// ReSharper disable once CppUseStructuredBinding
auto &intent_camera = System::Render::IntentStorage::get_camera();
intent_camera.offsetX = offsetX;
intent_camera.offsetY = offsetY;
intent_camera.scaleX = scaleX;
intent_camera.scaleY = scaleY;
intent_camera.zoom = zoom;
intent_camera.rotation = rotation;
LOG_INFO("Camera set");
}
} // namespace Game::Render
20 changes: 10 additions & 10 deletions include/game/systems/render/sprite_intent.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,38 +9,38 @@ namespace Game::Render
for (auto &[id, comps]: query)
{
const size_t &intent_id = comps.get<IntentHandle>().handle_id;
std::optional<System::DrawIntent> &intent = System::RenderStorage::get_intent(intent_id);
std::optional<System::Render::DrawIntent> &intent = System::Render::IntentStorage::get_intent(intent_id);
const Sprite &sprite = comps.get<Sprite>();

if (!intent.has_value())
{
intent = System::DrawIntent{};
intent = System::Render::DrawIntent{};
}

switch (intent.value().kind)
{
case System::DrawKind::KIND_UNKNOWN:
intent.value().kind = System::DrawKind::KIND_SPRITE;
case System::DrawKind::KIND_SPRITE:
case System::Render::DrawKind::KIND_UNKNOWN:
intent.value().kind = System::Render::DrawKind::KIND_SPRITE;
case System::Render::DrawKind::KIND_SPRITE:
break;
default:
return;
}

if (!std::holds_alternative<System::SpriteDrawDesc>(intent.value().special))
if (!std::holds_alternative<System::Render::SpriteDrawDesc>(intent.value().special))
{
intent.value().special = System::SpriteDrawDesc{};
intent.value().special = System::Render::SpriteDrawDesc{};
}

auto &common = intent.value().common;
common.layer = sprite.layer;
common.order = sprite.order;

auto &[texture, src_rect, dst_rect, flipX, flipY] =
std::get<System::SpriteDrawDesc>(intent.value().special);
std::get<System::Render::SpriteDrawDesc>(intent.value().special);
texture = sprite.texture;
src_rect = System::Rect{sprite.src_rect.u0, sprite.src_rect.v0, sprite.src_rect.u1, sprite.src_rect.v1};
dst_rect = System::Rect{sprite.dst_rect.u0, sprite.dst_rect.v0, sprite.dst_rect.u1, sprite.dst_rect.v1};
src_rect = System::Render::Rect{sprite.src_rect.u0, sprite.src_rect.v0, sprite.src_rect.u1, sprite.src_rect.v1};
dst_rect = System::Render::Rect{sprite.dst_rect.u0, sprite.dst_rect.v0, sprite.dst_rect.u1, sprite.dst_rect.v1};
flipX = sprite.flipX;
flipY = sprite.flipY;
}
Expand Down
20 changes: 11 additions & 9 deletions include/game/systems/render/text_intent.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,33 +8,35 @@ namespace Game::Render
for (auto &[id, comps]: query)
{
const size_t &intent_id = comps.get<IntentHandle>().handle_id;
std::optional<System::DrawIntent> &intent = System::RenderStorage::get_intent(intent_id);
std::optional<System::Render::DrawIntent> &intent = System::Render::IntentStorage::get_intent(intent_id);
const Text &text_component = comps.get<Text>();

if (!intent.has_value())
{
intent = System::DrawIntent{};
intent = System::Render::DrawIntent{};
}

switch (intent.value().kind)
{
case System::DrawKind::KIND_UNKNOWN:
intent.value().kind = System::DrawKind::KIND_TEXT;
case System::DrawKind::KIND_TEXT:
case System::Render::DrawKind::KIND_UNKNOWN:
intent.value().kind = System::Render::DrawKind::KIND_TEXT;
case System::Render::DrawKind::KIND_TEXT:
break;
default:
return;
}

if (!std::holds_alternative<System::TextDrawDesc>(intent.value().special))
if (!std::holds_alternative<System::Render::TextDrawDesc>(intent.value().special))
{
intent.value().special = System::TextDrawDesc{};
intent.value().special = System::Render::TextDrawDesc{};
}

auto &[text, font_name, font_size] = std::get<System::TextDrawDesc>(intent.value().special);
auto &[text, font_name, font_size, x, y, anchor_x, anchor_y] = std::get<System::Render::TextDrawDesc>(intent.value().special);
text = std::string_view(text_component.text);
font_name = text_component.font_name;
font_size = text_component.font_size;
x = text_component.x;
y = text_component.y;
}
}
} // namespace Game::Render
} // namespace Game::Render
52 changes: 52 additions & 0 deletions include/game/systems/render/triangle_intent.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#pragma once

namespace Game::Render
{
template <typename T>
void triangle_intent([[maybe_unused]] T &syscall, System::ECS::Query<Triangle, IntentHandle> &query)
{
for (auto &[id, comps]: query)
{
const size_t &intent_id = comps.get<IntentHandle>().handle_id;
std::optional<System::Render::DrawIntent> &intent = System::Render::IntentStorage::get_intent(intent_id);
const Triangle &triangle = comps.get<Triangle>();

if (!intent.has_value())
{
intent = System::Render::DrawIntent{};
}

if (!intent.has_value())
{
intent = System::Render::DrawIntent{};
}

switch (intent.value().kind)
{
case System::Render::DrawKind::KIND_UNKNOWN:
intent.value().kind = System::Render::DrawKind::KIND_TRIANGLE;
case System::Render::DrawKind::KIND_TRIANGLE:
break;
default:
return;
}

if (!std::holds_alternative<System::Render::TriangleDrawDesc>(intent.value().special))
{
intent.value().special = System::Render::TriangleDrawDesc{};
}

auto &common = intent.value().common;
common.layer = triangle.layer;
common.order = triangle.order;

auto &[u0, v0, u1, v1, u2, v2] = std::get<System::Render::TriangleDrawDesc>(intent.value().special);
u0 = triangle.points[0].x;
v0 = triangle.points[0].y;
u1 = triangle.points[1].x;
v1 = triangle.points[1].y;
u2 = triangle.points[2].x;
v2 = triangle.points[2].y;
}
}
}
3 changes: 2 additions & 1 deletion include/scene.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,13 @@
#include "scene/battle_scene.h"
#include "scene/demo.h"
#include "scene/demo_rhythm.h"
#include "scene/demo_render.h"

// define configuration items
namespace Scene::Config
{
// starting scene
using StartingScene = BattleScene;
using StartingScene = DemoRender;

} // namespace Scene::Config

Expand Down
35 changes: 35 additions & 0 deletions include/scene/demo_render.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
#pragma once
#include "game.h"

namespace Scene
{
struct DemoRender
{
static DemoRender instance();

constexpr static auto name = "DemoRender";

// declare scene parameters
constexpr static size_t MaxResource = 1000;
using ComponentTuple = std::tuple<
Game::Render::Camera2D,
Game::Render::Sprite,
Game::Render::Material,
Game::Render::Text,
Game::Render::IntentHandle,
Game::Render::Rotation,
Game::Render::Triangle>;
using ResourceManager = Utils::make_resource_manager_t<MaxResource, ComponentTuple>;
using Syscall = Utils::make_syscall_t<MaxResource, ComponentTuple>;
using TaskManager = System::ECS::TaskManager<
ResourceManager,
Syscall,
Game::Render::set_camera<Syscall>,
Game::Render::material_intent<Syscall>,
Game::Render::triangle_intent<Syscall>>;

// declare functions
static TaskManager init();
static std::vector<ComponentTuple> exit();
};
} // namespace Scene
2 changes: 1 addition & 1 deletion include/scene/scene_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace Scene
/* Optimizable */
class SceneManager
{
std::variant<std::monostate, Demo, BattleScene, DemoRhythm> _current_scene_template;
std::variant<std::monostate, Demo, BattleScene, DemoRhythm, DemoRender> _current_scene_template;
std::any _current_manager;

public:
Expand Down
1 change: 1 addition & 0 deletions include/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "system/ecs.h"
#include "system/input.h"
#include "system/intent_storage.h"
#include "system/compositor.h"

namespace System
{
Expand Down
Loading