ran a formatter on all the files for tab consistency
This commit is contained in:
@@ -1,8 +1,10 @@
|
|||||||
<rml>
|
<rml>
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<title>gamejam</title>
|
<title>gamejam</title>
|
||||||
<link type="text/rcss" href="main.rcss" />
|
<link type="text/rcss" href="main.rcss" />
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<div id="start_menu">
|
<div id="start_menu">
|
||||||
<h1>gamejam</h1>
|
<h1>gamejam</h1>
|
||||||
|
|||||||
@@ -2,13 +2,16 @@
|
|||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
#include "backend/RaylibInput.h"
|
#include "backend/RaylibInput.h"
|
||||||
|
|
||||||
#include <raylib.h>
|
|
||||||
#include <RmlUi/Core.h>
|
#include <RmlUi/Core.h>
|
||||||
|
#include <RmlUi/Core/DataModelHandle.h>
|
||||||
#include <RmlUi/Debugger.h>
|
#include <RmlUi/Debugger.h>
|
||||||
|
#include <iostream>
|
||||||
|
#include <raylib.h>
|
||||||
|
|
||||||
Game game;
|
Game game;
|
||||||
|
|
||||||
bool Application::Init(int width, int height, const char* title, const char* documentPath) {
|
bool Application::Init(int width, int height, const char *title,
|
||||||
|
const char *documentPath) {
|
||||||
InitWindow(width, height, title);
|
InitWindow(width, height, title);
|
||||||
SetTargetFPS(60);
|
SetTargetFPS(60);
|
||||||
|
|
||||||
@@ -27,7 +30,17 @@ bool Application::Init(int width, int height, const char* title, const char* doc
|
|||||||
TraceLog(LOG_WARNING, "Failed to load %s", documentPath);
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <RmlUi/Core/Context.h>
|
|
||||||
#include "backend/RaylibSystemInterface.h"
|
|
||||||
#include "backend/RaylibRenderInterface.h"
|
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "backend/RaylibRenderInterface.h"
|
||||||
|
#include "backend/RaylibSystemInterface.h"
|
||||||
|
#include <RmlUi/Core/Context.h>
|
||||||
|
|
||||||
class Application {
|
class Application {
|
||||||
public:
|
public:
|
||||||
|
|||||||
45
src/Game.cpp
45
src/Game.cpp
@@ -1,20 +1,51 @@
|
|||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include <RmlUi/Core.h>
|
||||||
#include <RmlUi/Core/Context.h>
|
#include <RmlUi/Core/Context.h>
|
||||||
|
#include <RmlUi/Core/DataModelHandle.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
#include <RmlUi/Core.h>
|
|
||||||
|
|
||||||
void Game::Draw2D() { return; }
|
void Game::Draw2D() { return; }
|
||||||
|
|
||||||
void Game::Update() {
|
void Game::Update() { return; }
|
||||||
// TODO: Remove this debug
|
|
||||||
std::cout << "Game update" << std::endl;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool Game::Init(Rml::Context *context) {
|
bool Game::Init(Rml::Context *context) {
|
||||||
if (!ctx) return false;
|
if (!ctx)
|
||||||
|
return false;
|
||||||
|
|
||||||
ctx = context;
|
ctx = context;
|
||||||
return true;
|
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;
|
||||||
|
}
|
||||||
22
src/Game.h
22
src/Game.h
@@ -2,31 +2,33 @@
|
|||||||
|
|
||||||
#include <RmlUi/Core/Context.h>
|
#include <RmlUi/Core/Context.h>
|
||||||
#include <RmlUi/Core/DataModelHandle.h>
|
#include <RmlUi/Core/DataModelHandle.h>
|
||||||
enum GameState {
|
enum GameState { START_MENU, PAUSE_MENU, STATS_MENU, OPTIONS_MENU, IN_GAME };
|
||||||
START_MENU,
|
|
||||||
PAUSE_MENU,
|
|
||||||
STATS_MENU,
|
|
||||||
OPTIONS_MENU,
|
|
||||||
IN_GAME
|
|
||||||
};
|
|
||||||
|
|
||||||
struct GameData {
|
struct GameData {
|
||||||
GameState game_state = START_MENU;
|
GameState game_state = START_MENU;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Game {
|
class Game {
|
||||||
public:
|
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 Update();
|
||||||
void Draw2D();
|
void Draw2D();
|
||||||
|
|
||||||
|
void TrySetGameState(GameState newState);
|
||||||
|
|
||||||
|
void StartNewGame();
|
||||||
|
void ResetGame();
|
||||||
|
|
||||||
|
void ShowMainMenu();
|
||||||
|
void ShowPauseMenu();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Rml::Context *ctx = nullptr;
|
Rml::Context *ctx = nullptr;
|
||||||
};
|
};
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
#include <RmlUi/Core/Element.h>
|
||||||
#include <RmlUi/Core/Event.h>
|
#include <RmlUi/Core/Event.h>
|
||||||
#include <RmlUi/Core/EventListener.h>
|
#include <RmlUi/Core/EventListener.h>
|
||||||
#include <RmlUi/Core/Element.h>
|
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
|
||||||
class UiCallbackListener : public Rml::EventListener {
|
class UiCallbackListener : public Rml::EventListener {
|
||||||
public:
|
public:
|
||||||
using Callback = std::function<void(Rml::Event &)>;
|
using Callback = std::function<void(Rml::Event &)>;
|
||||||
explicit UiCallbackListener(Callback callback) : callback(std::move(callback)) {}
|
explicit UiCallbackListener(Callback callback)
|
||||||
|
: callback(std::move(callback)) {}
|
||||||
|
|
||||||
void ProcessEvent(Rml::Event &event) override {
|
void ProcessEvent(Rml::Event &event) override {
|
||||||
if (callback) callback(event);
|
if (callback)
|
||||||
|
callback(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnDetach(Rml::Element* /*element*/) override {
|
void OnDetach(Rml::Element * /*element*/) override { delete this; }
|
||||||
delete this;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Callback callback;
|
Callback callback;
|
||||||
|
|||||||
@@ -4,22 +4,30 @@
|
|||||||
namespace {
|
namespace {
|
||||||
int GetRmlKeyModifiers() {
|
int GetRmlKeyModifiers() {
|
||||||
int mods = 0;
|
int mods = 0;
|
||||||
if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT)) mods |= Rml::Input::KM_SHIFT;
|
if (IsKeyDown(KEY_LEFT_SHIFT) || IsKeyDown(KEY_RIGHT_SHIFT))
|
||||||
if (IsKeyDown(KEY_LEFT_CONTROL) || IsKeyDown(KEY_RIGHT_CONTROL)) mods |= Rml::Input::KM_CTRL;
|
mods |= Rml::Input::KM_SHIFT;
|
||||||
if (IsKeyDown(KEY_LEFT_ALT) || IsKeyDown(KEY_RIGHT_ALT)) mods |= Rml::Input::KM_ALT;
|
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;
|
return mods;
|
||||||
}
|
}
|
||||||
}
|
} // namespace
|
||||||
|
|
||||||
void ForwardInputToRml(Rml::Context *context) {
|
void ForwardInputToRml(Rml::Context *context) {
|
||||||
Vector2 mouse = GetMousePosition();
|
Vector2 mouse = GetMousePosition();
|
||||||
context->ProcessMouseMove((int)mouse.x, (int)mouse.y, GetRmlKeyModifiers());
|
context->ProcessMouseMove((int)mouse.x, (int)mouse.y, GetRmlKeyModifiers());
|
||||||
|
|
||||||
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT)) context->ProcessMouseButtonDown(0, GetRmlKeyModifiers());
|
if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
|
||||||
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT)) context->ProcessMouseButtonUp(0, GetRmlKeyModifiers());
|
context->ProcessMouseButtonDown(0, GetRmlKeyModifiers());
|
||||||
if (IsMouseButtonPressed(MOUSE_BUTTON_RIGHT)) context->ProcessMouseButtonDown(1, GetRmlKeyModifiers());
|
if (IsMouseButtonReleased(MOUSE_BUTTON_LEFT))
|
||||||
if (IsMouseButtonReleased(MOUSE_BUTTON_RIGHT)) context->ProcessMouseButtonUp(1, GetRmlKeyModifiers());
|
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();
|
float wheel = GetMouseWheelMove();
|
||||||
if (wheel != 0.0f) context->ProcessMouseWheel(-wheel, GetRmlKeyModifiers());
|
if (wheel != 0.0f)
|
||||||
|
context->ProcessMouseWheel(-wheel, GetRmlKeyModifiers());
|
||||||
}
|
}
|
||||||
@@ -3,8 +3,8 @@
|
|||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
#include <rlgl.h>
|
#include <rlgl.h>
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
@@ -13,10 +13,11 @@ namespace {
|
|||||||
std::vector<int> indices;
|
std::vector<int> indices;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
} // namespace
|
||||||
|
|
||||||
Rml::CompiledGeometryHandle RaylibRenderInterface::CompileGeometry(
|
Rml::CompiledGeometryHandle
|
||||||
Rml::Span<const Rml::Vertex> vertices, Rml::Span<const int> indices) {
|
RaylibRenderInterface::CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
||||||
|
Rml::Span<const int> indices) {
|
||||||
auto *geo = new GeometryData();
|
auto *geo = new GeometryData();
|
||||||
geo->vertices.assign(vertices.begin(), vertices.end());
|
geo->vertices.assign(vertices.begin(), vertices.end());
|
||||||
geo->indices.assign(indices.begin(), indices.end());
|
geo->indices.assign(indices.begin(), indices.end());
|
||||||
@@ -53,11 +54,13 @@ void RaylibRenderInterface::RenderGeometry(Rml::CompiledGeometryHandle handle,
|
|||||||
rlSetTexture(0);
|
rlSetTexture(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RaylibRenderInterface::ReleaseGeometry(Rml::CompiledGeometryHandle handle) {
|
void RaylibRenderInterface::ReleaseGeometry(
|
||||||
|
Rml::CompiledGeometryHandle handle) {
|
||||||
delete reinterpret_cast<GeometryData *>(handle);
|
delete reinterpret_cast<GeometryData *>(handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
Rml::TextureHandle RaylibRenderInterface::LoadTexture(Rml::Vector2i& texture_dimensions,
|
Rml::TextureHandle
|
||||||
|
RaylibRenderInterface::LoadTexture(Rml::Vector2i &texture_dimensions,
|
||||||
const Rml::String &source) {
|
const Rml::String &source) {
|
||||||
Texture2D tex = ::LoadTexture(source.c_str());
|
Texture2D tex = ::LoadTexture(source.c_str());
|
||||||
if (tex.id == 0) {
|
if (tex.id == 0) {
|
||||||
@@ -68,7 +71,8 @@ Rml::TextureHandle RaylibRenderInterface::LoadTexture(Rml::Vector2i& texture_dim
|
|||||||
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
return reinterpret_cast<Rml::TextureHandle>(new Texture2D(tex));
|
||||||
}
|
}
|
||||||
|
|
||||||
Rml::TextureHandle RaylibRenderInterface::GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
Rml::TextureHandle
|
||||||
|
RaylibRenderInterface::GenerateTexture(Rml::Span<const Rml::byte> source_data,
|
||||||
Rml::Vector2i source_dimensions) {
|
Rml::Vector2i source_dimensions) {
|
||||||
Image img{};
|
Image img{};
|
||||||
img.width = source_dimensions.x;
|
img.width = source_dimensions.x;
|
||||||
@@ -94,13 +98,16 @@ void RaylibRenderInterface::ReleaseTexture(Rml::TextureHandle handle) {
|
|||||||
|
|
||||||
void RaylibRenderInterface::EnableScissorRegion(bool enable) {
|
void RaylibRenderInterface::EnableScissorRegion(bool enable) {
|
||||||
scissor_enabled = enable;
|
scissor_enabled = enable;
|
||||||
if (enable) ApplyScissor();
|
if (enable)
|
||||||
else EndScissorMode();
|
ApplyScissor();
|
||||||
|
else
|
||||||
|
EndScissorMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RaylibRenderInterface::SetScissorRegion(Rml::Rectanglei region) {
|
void RaylibRenderInterface::SetScissorRegion(Rml::Rectanglei region) {
|
||||||
scissor_region = region;
|
scissor_region = region;
|
||||||
if (scissor_enabled) ApplyScissor();
|
if (scissor_enabled)
|
||||||
|
ApplyScissor();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RaylibRenderInterface::ApplyScissor() {
|
void RaylibRenderInterface::ApplyScissor() {
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <RmlUi/Core/RenderInterface.h>
|
#include <RmlUi/Core/RenderInterface.h>
|
||||||
|
|
||||||
|
|
||||||
// NOTE: RmlUi's RenderInterface signature has shifted across versions
|
// NOTE: RmlUi's RenderInterface signature has shifted across versions
|
||||||
// (raw pointer+count vs. Rml::Span<>). If this fails to compile against
|
// (raw pointer+count vs. Rml::Span<>). If this fails to compile against
|
||||||
// a different RmlUi commit, check RmlUi/Core/RenderInterface.h and adjust
|
// a different RmlUi commit, check RmlUi/Core/RenderInterface.h and adjust
|
||||||
@@ -10,10 +9,12 @@
|
|||||||
|
|
||||||
class RaylibRenderInterface : public Rml::RenderInterface {
|
class RaylibRenderInterface : public Rml::RenderInterface {
|
||||||
public:
|
public:
|
||||||
Rml::CompiledGeometryHandle CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
Rml::CompiledGeometryHandle
|
||||||
|
CompileGeometry(Rml::Span<const Rml::Vertex> vertices,
|
||||||
Rml::Span<const int> indices) override;
|
Rml::Span<const int> indices) override;
|
||||||
|
|
||||||
void RenderGeometry(Rml::CompiledGeometryHandle handle, Rml::Vector2f translation,
|
void RenderGeometry(Rml::CompiledGeometryHandle handle,
|
||||||
|
Rml::Vector2f translation,
|
||||||
Rml::TextureHandle texture) override;
|
Rml::TextureHandle texture) override;
|
||||||
|
|
||||||
void ReleaseGeometry(Rml::CompiledGeometryHandle handle) override;
|
void ReleaseGeometry(Rml::CompiledGeometryHandle handle) override;
|
||||||
|
|||||||
@@ -1,14 +1,15 @@
|
|||||||
#include "RaylibSystemInterface.h"
|
#include "RaylibSystemInterface.h"
|
||||||
#include <raylib.h>
|
#include <raylib.h>
|
||||||
|
|
||||||
double RaylibSystemInterface::GetElapsedTime() {
|
double RaylibSystemInterface::GetElapsedTime() { return GetTime(); }
|
||||||
return GetTime();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool RaylibSystemInterface::LogMessage(Rml::Log::Type type, const Rml::String& message) {
|
bool RaylibSystemInterface::LogMessage(Rml::Log::Type type,
|
||||||
|
const Rml::String &message) {
|
||||||
TraceLogLevel level = LOG_INFO;
|
TraceLogLevel level = LOG_INFO;
|
||||||
if (type == Rml::Log::LT_WARNING) level = LOG_WARNING;
|
if (type == Rml::Log::LT_WARNING)
|
||||||
if (type == Rml::Log::LT_ERROR || type == Rml::Log::LT_ASSERT) level = LOG_ERROR;
|
level = LOG_WARNING;
|
||||||
|
if (type == Rml::Log::LT_ERROR || type == Rml::Log::LT_ASSERT)
|
||||||
|
level = LOG_ERROR;
|
||||||
TraceLog(level, "[RmlUi] %s", message.c_str());
|
TraceLog(level, "[RmlUi] %s", message.c_str());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -8,9 +8,7 @@ namespace {
|
|||||||
|
|
||||||
Application *g_app = nullptr;
|
Application *g_app = nullptr;
|
||||||
|
|
||||||
void MainLoopStep() {
|
void MainLoopStep() { g_app->Frame(); }
|
||||||
g_app->Frame();
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user