ran a formatter on all the files for tab consistency
This commit is contained in:
@@ -2,57 +2,70 @@
|
||||
#include "Game.h"
|
||||
#include "backend/RaylibInput.h"
|
||||
|
||||
#include <raylib.h>
|
||||
#include <RmlUi/Core.h>
|
||||
#include <RmlUi/Core/DataModelHandle.h>
|
||||
#include <RmlUi/Debugger.h>
|
||||
#include <iostream>
|
||||
#include <raylib.h>
|
||||
|
||||
Game game;
|
||||
|
||||
bool Application::Init(int width, int height, const char* title, const char* documentPath) {
|
||||
InitWindow(width, height, title);
|
||||
SetTargetFPS(60);
|
||||
bool Application::Init(int width, int height, const char *title,
|
||||
const char *documentPath) {
|
||||
InitWindow(width, height, title);
|
||||
SetTargetFPS(60);
|
||||
|
||||
Rml::SetSystemInterface(&system_interface);
|
||||
Rml::SetRenderInterface(&render_interface);
|
||||
Rml::Initialise();
|
||||
Rml::SetSystemInterface(&system_interface);
|
||||
Rml::SetRenderInterface(&render_interface);
|
||||
Rml::Initialise();
|
||||
|
||||
context = Rml::CreateContext("main", Rml::Vector2i(width, height));
|
||||
Rml::Debugger::Initialise(context);
|
||||
context = Rml::CreateContext("main", Rml::Vector2i(width, height));
|
||||
Rml::Debugger::Initialise(context);
|
||||
|
||||
// TODO: load a real font
|
||||
// TODO: load a real font
|
||||
|
||||
if (Rml::ElementDocument* document = context->LoadDocument(documentPath)) {
|
||||
document->Show();
|
||||
} else {
|
||||
TraceLog(LOG_WARNING, "Failed to load %s", documentPath);
|
||||
}
|
||||
if (Rml::ElementDocument *document = context->LoadDocument(documentPath)) {
|
||||
document->Show();
|
||||
} else {
|
||||
TraceLog(LOG_WARNING, "Failed to load %s", documentPath);
|
||||
}
|
||||
|
||||
game.Init(context);
|
||||
if (!game.Init(context)) {
|
||||
TraceLog(LOG_ERROR, "Failed to initialize game instance.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
Rml::DataModelHandle game_data_model_handle;
|
||||
if (!game.setup_rml_data_binding(context, game_data_model_handle,
|
||||
game.game_data)) {
|
||||
TraceLog(LOG_ERROR, "Failed to initialize data bindings for 'game_data'.");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Application::Frame() {
|
||||
if (WindowShouldClose()) {
|
||||
running = false;
|
||||
return;
|
||||
}
|
||||
if (WindowShouldClose()) {
|
||||
running = false;
|
||||
return;
|
||||
}
|
||||
|
||||
ForwardInputToRml(context);
|
||||
context->Update();
|
||||
ForwardInputToRml(context);
|
||||
context->Update();
|
||||
|
||||
game.Update();
|
||||
game.Update();
|
||||
|
||||
BeginDrawing();
|
||||
ClearBackground(DARKGRAY);
|
||||
BeginDrawing();
|
||||
ClearBackground(DARKGRAY);
|
||||
|
||||
game.Draw2D();
|
||||
game.Draw2D();
|
||||
|
||||
context->Render();
|
||||
EndDrawing();
|
||||
context->Render();
|
||||
EndDrawing();
|
||||
}
|
||||
|
||||
void Application::Shutdown() {
|
||||
Rml::Shutdown();
|
||||
CloseWindow();
|
||||
Rml::Shutdown();
|
||||
CloseWindow();
|
||||
}
|
||||
@@ -1,20 +1,20 @@
|
||||
#pragma once
|
||||
#include <RmlUi/Core/Context.h>
|
||||
#include "backend/RaylibSystemInterface.h"
|
||||
#include "backend/RaylibRenderInterface.h"
|
||||
#include "Game.h"
|
||||
#include "backend/RaylibRenderInterface.h"
|
||||
#include "backend/RaylibSystemInterface.h"
|
||||
#include <RmlUi/Core/Context.h>
|
||||
|
||||
class Application {
|
||||
public:
|
||||
bool Init(int width, int height, const char* title, const char* documentPath);
|
||||
void Frame();
|
||||
void Shutdown();
|
||||
bool Init(int width, int height, const char *title, const char *documentPath);
|
||||
void Frame();
|
||||
void Shutdown();
|
||||
|
||||
bool IsRunning() const { return running; }
|
||||
bool IsRunning() const { return running; }
|
||||
|
||||
private:
|
||||
RaylibSystemInterface system_interface;
|
||||
RaylibRenderInterface render_interface;
|
||||
Rml::Context* context = nullptr;
|
||||
bool running = true;
|
||||
RaylibSystemInterface system_interface;
|
||||
RaylibRenderInterface render_interface;
|
||||
Rml::Context *context = nullptr;
|
||||
bool running = true;
|
||||
};
|
||||
53
src/Game.cpp
53
src/Game.cpp
@@ -1,20 +1,51 @@
|
||||
#include "Game.h"
|
||||
#include <RmlUi/Core.h>
|
||||
#include <RmlUi/Core/Context.h>
|
||||
#include <RmlUi/Core/DataModelHandle.h>
|
||||
#include <iostream>
|
||||
#include <raylib.h>
|
||||
#include <RmlUi/Core.h>
|
||||
|
||||
void Game::Draw2D() {return;}
|
||||
void Game::Draw2D() { return; }
|
||||
|
||||
void Game::Update() {
|
||||
// TODO: Remove this debug
|
||||
std::cout << "Game update" << std::endl;
|
||||
return;
|
||||
}
|
||||
void Game::Update() { return; }
|
||||
|
||||
bool Game::Init(Rml::Context *context) {
|
||||
if (!ctx) return false;
|
||||
|
||||
ctx = context;
|
||||
return true;
|
||||
if (!ctx)
|
||||
return false;
|
||||
|
||||
ctx = context;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Game::setup_rml_data_binding(Rml::Context *ctx,
|
||||
Rml::DataModelHandle &model_handle,
|
||||
GameData &game_data) {
|
||||
Rml::DataModelConstructor dmc = ctx->CreateDataModel("game_data");
|
||||
if (!dmc) {
|
||||
TraceLog(LOG_ERROR, "Failed to construct data model..");
|
||||
return false;
|
||||
}
|
||||
|
||||
dmc.Bind("game_state", &game_data.game_state);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Game::ResetGame() {}
|
||||
void Game::ShowMainMenu() {}
|
||||
|
||||
void Game::TrySetGameState(GameState newState) {
|
||||
GameState currentState = game_data.game_state;
|
||||
|
||||
switch (newState) {
|
||||
case START_MENU:
|
||||
if (currentState == IN_GAME)
|
||||
ResetGame();
|
||||
ShowMainMenu();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
game_data.game_state = newState;
|
||||
}
|
||||
34
src/Game.h
34
src/Game.h
@@ -2,31 +2,33 @@
|
||||
|
||||
#include <RmlUi/Core/Context.h>
|
||||
#include <RmlUi/Core/DataModelHandle.h>
|
||||
enum GameState {
|
||||
START_MENU,
|
||||
PAUSE_MENU,
|
||||
STATS_MENU,
|
||||
OPTIONS_MENU,
|
||||
IN_GAME
|
||||
};
|
||||
enum GameState { START_MENU, PAUSE_MENU, STATS_MENU, OPTIONS_MENU, IN_GAME };
|
||||
|
||||
struct GameData {
|
||||
GameState game_state = START_MENU;
|
||||
GameState game_state = START_MENU;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class Game {
|
||||
public:
|
||||
GameData game_data;
|
||||
GameData game_data;
|
||||
|
||||
bool Init(Rml::Context *context);
|
||||
bool Init(Rml::Context *context);
|
||||
|
||||
bool setup_rml_data_binding(Rml::Context *ctx, Rml::DataModelHandle &model_handle, GameData &game_data);
|
||||
bool setup_rml_data_binding(Rml::Context *ctx,
|
||||
Rml::DataModelHandle &model_handle,
|
||||
GameData &game_data);
|
||||
|
||||
void Update();
|
||||
void Draw2D();
|
||||
void Update();
|
||||
void Draw2D();
|
||||
|
||||
void TrySetGameState(GameState newState);
|
||||
|
||||
void StartNewGame();
|
||||
void ResetGame();
|
||||
|
||||
void ShowMainMenu();
|
||||
void ShowPauseMenu();
|
||||
|
||||
private:
|
||||
Rml::Context *ctx = nullptr;
|
||||
Rml::Context *ctx = nullptr;
|
||||
};
|
||||
@@ -1,22 +1,22 @@
|
||||
#pragma once
|
||||
#include <RmlUi/Core/Element.h>
|
||||
#include <RmlUi/Core/Event.h>
|
||||
#include <RmlUi/Core/EventListener.h>
|
||||
#include <RmlUi/Core/Element.h>
|
||||
#include <functional>
|
||||
|
||||
class UiCallbackListener : public Rml::EventListener {
|
||||
public:
|
||||
using Callback = std::function<void(Rml::Event&)>;
|
||||
explicit UiCallbackListener(Callback callback) : callback(std::move(callback)) {}
|
||||
using Callback = std::function<void(Rml::Event &)>;
|
||||
explicit UiCallbackListener(Callback callback)
|
||||
: callback(std::move(callback)) {}
|
||||
|
||||
void ProcessEvent(Rml::Event& event) override {
|
||||
if (callback) callback(event);
|
||||
}
|
||||
void ProcessEvent(Rml::Event &event) override {
|
||||
if (callback)
|
||||
callback(event);
|
||||
}
|
||||
|
||||
void OnDetach(Rml::Element* /*element*/) override {
|
||||
delete this;
|
||||
}
|
||||
void OnDetach(Rml::Element * /*element*/) override { delete this; }
|
||||
|
||||
private:
|
||||
Callback callback;
|
||||
Callback callback;
|
||||
};
|
||||
@@ -2,24 +2,32 @@
|
||||
#include <raylib.h>
|
||||
|
||||
namespace {
|
||||
int GetRmlKeyModifiers() {
|
||||
int mods = 0;
|
||||
if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)) mods |= Rml::Input::KM_SHIFT;
|
||||
if (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL)) mods |= Rml::Input::KM_CTRL;
|
||||
if (IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT)) mods |= Rml::Input::KM_ALT;
|
||||
return mods;
|
||||
}
|
||||
}
|
||||
int GetRmlKeyModifiers() {
|
||||
int mods = 0;
|
||||
if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT))
|
||||
mods |= Rml::Input::KM_SHIFT;
|
||||
if (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL))
|
||||
mods |= Rml::Input::KM_CTRL;
|
||||
if (IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT))
|
||||
mods |= Rml::Input::KM_ALT;
|
||||
return mods;
|
||||
}
|
||||
} // namespace
|
||||
|
||||
void ForwardInputToRml(Rml::Context* context) {
|
||||
Vector2 mouse = GetMousePosition();
|
||||
context->ProcessMouseMove((int)mouse.x, (int)mouse.y, GetRmlKeyModifiers());
|
||||
void ForwardInputToRml(Rml::Context *context) {
|
||||
Vector2 mouse = GetMousePosition();
|
||||
context->ProcessMouseMove((int)mouse.x, (int)mouse.y, GetRmlKeyModifiers());
|
||||
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) context->ProcessMouseButtonDown(0, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) context->ProcessMouseButtonUp(0, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) context->ProcessMouseButtonDown(1, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonReleased(MOUSE_BUTTON_RIGHT)) context->ProcessMouseButtonUp(1, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
|
||||
context->ProcessMouseButtonDown(0, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT))
|
||||
context->ProcessMouseButtonUp(0, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT))
|
||||
context->ProcessMouseButtonDown(1, GetRmlKeyModifiers());
|
||||
if (IsMouseButtonReleased(MOUSE_BUTTON_RIGHT))
|
||||
context->ProcessMouseButtonUp(1, GetRmlKeyModifiers());
|
||||
|
||||
float wheel = GetMouseWheelMove();
|
||||
if (wheel != 0.0f) context->ProcessMouseWheel(-wheel, GetRmlKeyModifiers());
|
||||
float wheel = GetMouseWheelMove();
|
||||
if (wheel != 0.0f)
|
||||
context->ProcessMouseWheel(-wheel, GetRmlKeyModifiers());
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
#pragma once
|
||||
#include <RmlUi/Core/Context.h>
|
||||
|
||||
void ForwardInputToRml(Rml::Context* context);
|
||||
void ForwardInputToRml(Rml::Context *context);
|
||||
@@ -3,107 +3,114 @@
|
||||
#include <raylib.h>
|
||||
#include <rlgl.h>
|
||||
|
||||
#include <vector>
|
||||
#include <cstring>
|
||||
#include <vector>
|
||||
|
||||
namespace {
|
||||
|
||||
struct GeometryData {
|
||||
std::vector<Rml::Vertex> vertices;
|
||||
std::vector<int> indices;
|
||||
};
|
||||
struct GeometryData {
|
||||
std::vector<Rml::Vertex> vertices;
|
||||
std::vector<int> indices;
|
||||
};
|
||||
|
||||
}
|
||||
} // namespace
|
||||
|
||||
Rml::CompiledGeometryHandle RaylibRenderInterface::CompileGeometry(
|
||||
Rml::Span<const Rml::Vertex> vertices, Rml::Span<const int> indices) {
|
||||
auto* geo = new GeometryData();
|
||||
geo->vertices.assign(vertices.begin(), vertices.end());
|
||||
geo->indices.assign(indices.begin(), indices.end());
|
||||
return reinterpret_cast<Rml::CompiledGeometryHandle>(geo);
|
||||
Rml::CompiledGeometryHandle
|
||||
RaylibRenderInterface::CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
||||
Rml::Span<const int> indices) {
|
||||
auto *geo = new GeometryData();
|
||||
geo->vertices.assign(vertices.begin(), vertices.end());
|
||||
geo->indices.assign(indices.begin(), indices.end());
|
||||
return reinterpret_cast<Rml::CompiledGeometryHandle>(geo);
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::RenderGeometry(Rml::CompiledGeometryHandle handle,
|
||||
Rml::Vector2f translation,
|
||||
Rml::TextureHandle texture) {
|
||||
auto* geo = reinterpret_cast<GeometryData*>(handle);
|
||||
Rml::Vector2f translation,
|
||||
Rml::TextureHandle texture) {
|
||||
auto *geo = reinterpret_cast<GeometryData *>(handle);
|
||||
|
||||
if (texture) {
|
||||
Texture2D* tex = reinterpret_cast<Texture2D*>(texture);
|
||||
rlSetTexture(tex->id);
|
||||
} else {
|
||||
rlSetTexture(rlGetTextureIdDefault());
|
||||
if (texture) {
|
||||
Texture2D *tex = reinterpret_cast<Texture2D *>(texture);
|
||||
rlSetTexture(tex->id);
|
||||
} else {
|
||||
rlSetTexture(rlGetTextureIdDefault());
|
||||
}
|
||||
|
||||
rlPushMatrix();
|
||||
rlTranslatef(translation.x, translation.y, 0.0f);
|
||||
|
||||
rlBegin(RL_TRIANGLES);
|
||||
for (size_t i = 0; i + 2 < geo->indices.size(); i += 3) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
const Rml::Vertex &v = geo->vertices[geo->indices[i + j]];
|
||||
rlColor4ub(v.colour.red, v.colour.green, v.colour.blue, v.colour.alpha);
|
||||
rlTexCoord2f(v.tex_coord.x, v.tex_coord.y);
|
||||
rlVertex2f(v.position.x, v.position.y);
|
||||
}
|
||||
}
|
||||
rlEnd();
|
||||
|
||||
rlPushMatrix();
|
||||
rlTranslatef(translation.x, translation.y, 0.0f);
|
||||
|
||||
rlBegin(RL_TRIANGLES);
|
||||
for (size_t i = 0; i + 2 < geo->indices.size(); i += 3) {
|
||||
for (int j = 0; j < 3; ++j) {
|
||||
const Rml::Vertex& v = geo->vertices[geo->indices[i + j]];
|
||||
rlColor4ub(v.colour.red, v.colour.green, v.colour.blue, v.colour.alpha);
|
||||
rlTexCoord2f(v.tex_coord.x, v.tex_coord.y);
|
||||
rlVertex2f(v.position.x, v.position.y);
|
||||
}
|
||||
}
|
||||
rlEnd();
|
||||
|
||||
rlPopMatrix();
|
||||
rlSetTexture(0);
|
||||
rlPopMatrix();
|
||||
rlSetTexture(0);
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::ReleaseGeometry(Rml::CompiledGeometryHandle handle) {
|
||||
delete reinterpret_cast<GeometryData*>(handle);
|
||||
void RaylibRenderInterface::ReleaseGeometry(
|
||||
Rml::CompiledGeometryHandle handle) {
|
||||
delete reinterpret_cast<GeometryData *>(handle);
|
||||
}
|
||||
|
||||
Rml::TextureHandle RaylibRenderInterface::LoadTexture(Rml::Vector2i& texture_dimensions,
|
||||
const Rml::String& source) {
|
||||
Texture2D tex = ::LoadTexture(source.c_str());
|
||||
if (tex.id == 0) {
|
||||
TraceLog(LOG_WARNING, "[RmlUi] failed to load texture: %s", source.c_str());
|
||||
return 0;
|
||||
}
|
||||
texture_dimensions = Rml::Vector2i(tex.width, tex.height);
|
||||
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
||||
Rml::TextureHandle
|
||||
RaylibRenderInterface::LoadTexture(Rml::Vector2i &texture_dimensions,
|
||||
const Rml::String &source) {
|
||||
Texture2D tex = ::LoadTexture(source.c_str());
|
||||
if (tex.id == 0) {
|
||||
TraceLog(LOG_WARNING, "[RmlUi] failed to load texture: %s", source.c_str());
|
||||
return 0;
|
||||
}
|
||||
texture_dimensions = Rml::Vector2i(tex.width, tex.height);
|
||||
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
||||
}
|
||||
|
||||
Rml::TextureHandle RaylibRenderInterface::GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
||||
Rml::Vector2i source_dimensions) {
|
||||
Image img{};
|
||||
img.width = source_dimensions.x;
|
||||
img.height = source_dimensions.y;
|
||||
img.mipmaps = 1;
|
||||
img.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
||||
Rml::TextureHandle
|
||||
RaylibRenderInterface::GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
||||
Rml::Vector2i source_dimensions) {
|
||||
Image img{};
|
||||
img.width = source_dimensions.x;
|
||||
img.height = source_dimensions.y;
|
||||
img.mipmaps = 1;
|
||||
img.format = PIXELFORMAT_UNCOMPRESSED_R8G8B8A8;
|
||||
|
||||
size_t byte_count = static_cast<size_t>(img.width) * img.height * 4;
|
||||
img.data = RL_MALLOC(byte_count);
|
||||
std::memcpy(img.data, source_data.data(), byte_count);
|
||||
size_t byte_count = static_cast<size_t>(img.width) * img.height * 4;
|
||||
img.data = RL_MALLOC(byte_count);
|
||||
std::memcpy(img.data, source_data.data(), byte_count);
|
||||
|
||||
Texture2D tex = LoadTextureFromImage(img);
|
||||
UnloadImage(img); // frees img.data
|
||||
Texture2D tex = LoadTextureFromImage(img);
|
||||
UnloadImage(img); // frees img.data
|
||||
|
||||
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
||||
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::ReleaseTexture(Rml::TextureHandle handle) {
|
||||
Texture2D* tex = reinterpret_cast<Texture2D*>(handle);
|
||||
UnloadTexture(*tex);
|
||||
delete tex;
|
||||
Texture2D *tex = reinterpret_cast<Texture2D *>(handle);
|
||||
UnloadTexture(*tex);
|
||||
delete tex;
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::EnableScissorRegion(bool enable) {
|
||||
scissor_enabled = enable;
|
||||
if (enable) ApplyScissor();
|
||||
else EndScissorMode();
|
||||
scissor_enabled = enable;
|
||||
if (enable)
|
||||
ApplyScissor();
|
||||
else
|
||||
EndScissorMode();
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::SetScissorRegion(Rml::Rectanglei region) {
|
||||
scissor_region = region;
|
||||
if (scissor_enabled) ApplyScissor();
|
||||
scissor_region = region;
|
||||
if (scissor_enabled)
|
||||
ApplyScissor();
|
||||
}
|
||||
|
||||
void RaylibRenderInterface::ApplyScissor() {
|
||||
BeginScissorMode(scissor_region.Left(), scissor_region.Top(),
|
||||
scissor_region.Width(), scissor_region.Height());
|
||||
BeginScissorMode(scissor_region.Left(), scissor_region.Top(),
|
||||
scissor_region.Width(), scissor_region.Height());
|
||||
}
|
||||
@@ -1,7 +1,6 @@
|
||||
#pragma once
|
||||
#include <RmlUi/Core/RenderInterface.h>
|
||||
|
||||
|
||||
// NOTE: RmlUi's RenderInterface signature has shifted across versions
|
||||
// (raw pointer+count vs. Rml::Span<>). If this fails to compile against
|
||||
// a different RmlUi commit, check RmlUi/Core/RenderInterface.h and adjust
|
||||
@@ -10,28 +9,30 @@
|
||||
|
||||
class RaylibRenderInterface : public Rml::RenderInterface {
|
||||
public:
|
||||
Rml::CompiledGeometryHandle CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
||||
Rml::Span<const int> indices) override;
|
||||
Rml::CompiledGeometryHandle
|
||||
CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
||||
Rml::Span<const int> indices) override;
|
||||
|
||||
void RenderGeometry(Rml::CompiledGeometryHandle handle, Rml::Vector2f translation,
|
||||
Rml::TextureHandle texture) override;
|
||||
void RenderGeometry(Rml::CompiledGeometryHandle handle,
|
||||
Rml::Vector2f translation,
|
||||
Rml::TextureHandle texture) override;
|
||||
|
||||
void ReleaseGeometry(Rml::CompiledGeometryHandle handle) override;
|
||||
void ReleaseGeometry(Rml::CompiledGeometryHandle handle) override;
|
||||
|
||||
Rml::TextureHandle LoadTexture(Rml::Vector2i& texture_dimensions,
|
||||
const Rml::String& source) override;
|
||||
Rml::TextureHandle LoadTexture(Rml::Vector2i &texture_dimensions,
|
||||
const Rml::String &source) override;
|
||||
|
||||
Rml::TextureHandle GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
||||
Rml::Vector2i source_dimensions) override;
|
||||
Rml::TextureHandle GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
||||
Rml::Vector2i source_dimensions) override;
|
||||
|
||||
void ReleaseTexture(Rml::TextureHandle handle) override;
|
||||
void ReleaseTexture(Rml::TextureHandle handle) override;
|
||||
|
||||
void EnableScissorRegion(bool enable) override;
|
||||
void SetScissorRegion(Rml::Rectanglei region) override;
|
||||
void EnableScissorRegion(bool enable) override;
|
||||
void SetScissorRegion(Rml::Rectanglei region) override;
|
||||
|
||||
private:
|
||||
void ApplyScissor();
|
||||
void ApplyScissor();
|
||||
|
||||
bool scissor_enabled = false;
|
||||
Rml::Rectanglei scissor_region;
|
||||
bool scissor_enabled = false;
|
||||
Rml::Rectanglei scissor_region;
|
||||
};
|
||||
@@ -1,14 +1,15 @@
|
||||
#include "RaylibSystemInterface.h"
|
||||
#include <raylib.h>
|
||||
|
||||
double RaylibSystemInterface::GetElapsedTime() {
|
||||
return GetTime();
|
||||
}
|
||||
double RaylibSystemInterface::GetElapsedTime() { return GetTime(); }
|
||||
|
||||
bool RaylibSystemInterface::LogMessage(Rml::Log::Type type, const Rml::String& message) {
|
||||
TraceLogLevel level = LOG_INFO;
|
||||
if (type == Rml::Log::LT_WARNING) level = LOG_WARNING;
|
||||
if (type == Rml::Log::LT_ERROR || type == Rml::Log::LT_ASSERT) level = LOG_ERROR;
|
||||
TraceLog(level, "[RmlUi] %s", message.c_str());
|
||||
return true;
|
||||
bool RaylibSystemInterface::LogMessage(Rml::Log::Type type,
|
||||
const Rml::String &message) {
|
||||
TraceLogLevel level = LOG_INFO;
|
||||
if (type == Rml::Log::LT_WARNING)
|
||||
level = LOG_WARNING;
|
||||
if (type == Rml::Log::LT_ERROR || type == Rml::Log::LT_ASSERT)
|
||||
level = LOG_ERROR;
|
||||
TraceLog(level, "[RmlUi] %s", message.c_str());
|
||||
return true;
|
||||
}
|
||||
@@ -3,6 +3,6 @@
|
||||
|
||||
class RaylibSystemInterface : public Rml::SystemInterface {
|
||||
public:
|
||||
double GetElapsedTime() override;
|
||||
bool LogMessage(Rml::Log::Type type, const Rml::String& message) override;
|
||||
double GetElapsedTime() override;
|
||||
bool LogMessage(Rml::Log::Type type, const Rml::String &message) override;
|
||||
};
|
||||
24
src/main.cpp
24
src/main.cpp
@@ -6,28 +6,26 @@
|
||||
|
||||
namespace {
|
||||
|
||||
Application* g_app = nullptr;
|
||||
Application *g_app = nullptr;
|
||||
|
||||
void MainLoopStep() {
|
||||
g_app->Frame();
|
||||
}
|
||||
void MainLoopStep() { g_app->Frame(); }
|
||||
|
||||
} // namespace
|
||||
|
||||
int main() {
|
||||
static Application app;
|
||||
g_app = &app;
|
||||
static Application app;
|
||||
g_app = &app;
|
||||
|
||||
app.Init(1280, 720, "gamejam", "assets/main.rml");
|
||||
app.Init(1280, 720, "gamejam", "assets/main.rml");
|
||||
|
||||
#ifdef __EMSCRIPTEN__
|
||||
emscripten_set_main_loop(MainLoopStep, 0, 1);
|
||||
emscripten_set_main_loop(MainLoopStep, 0, 1);
|
||||
#else
|
||||
while (app.IsRunning()) {
|
||||
app.Frame();
|
||||
}
|
||||
while (app.IsRunning()) {
|
||||
app.Frame();
|
||||
}
|
||||
#endif
|
||||
|
||||
app.Shutdown();
|
||||
return 0;
|
||||
app.Shutdown();
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user