summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--cwd/assets/altcraft/shaders/rml.json1
-rw-r--r--cwd/assets/altcraft/shaders/rmltex.json1
-rw-r--r--cwd/assets/altcraft/shaders/vert/rml.vs7
-rw-r--r--cwd/test.rcss24
-rw-r--r--cwd/test.rml20
-rw-r--r--src/Plugin.cpp4
-rw-r--r--src/Plugin.hpp3
-rw-r--r--src/Render.cpp46
-rw-r--r--src/Rml.cpp6
9 files changed, 104 insertions, 8 deletions
diff --git a/cwd/assets/altcraft/shaders/rml.json b/cwd/assets/altcraft/shaders/rml.json
index c62ff25..0cd85cc 100644
--- a/cwd/assets/altcraft/shaders/rml.json
+++ b/cwd/assets/altcraft/shaders/rml.json
@@ -2,6 +2,7 @@
"vert": "/altcraft/shaders/vert/rml",
"frag": "/altcraft/shaders/frag/rml",
"uniforms": [
+ "translation",
"viewportSize"
]
} \ No newline at end of file
diff --git a/cwd/assets/altcraft/shaders/rmltex.json b/cwd/assets/altcraft/shaders/rmltex.json
index 3fef969..a8a1323 100644
--- a/cwd/assets/altcraft/shaders/rmltex.json
+++ b/cwd/assets/altcraft/shaders/rmltex.json
@@ -2,6 +2,7 @@
"vert": "/altcraft/shaders/vert/rml",
"frag": "/altcraft/shaders/frag/rmltex",
"uniforms": [
+ "translation",
"viewportSize",
"fontTexture"
]
diff --git a/cwd/assets/altcraft/shaders/vert/rml.vs b/cwd/assets/altcraft/shaders/vert/rml.vs
index bfc50fb..bdd3b71 100644
--- a/cwd/assets/altcraft/shaders/vert/rml.vs
+++ b/cwd/assets/altcraft/shaders/vert/rml.vs
@@ -1,6 +1,7 @@
#version 330 core
uniform uvec2 viewportSize;
+uniform vec2 translation;
uniform mat4 rotationMat;
layout (location = 0) in vec2 pos;
@@ -13,9 +14,9 @@ out VS_OUT {
} vs_out;
void main() {
- float x = (pos.x - viewportSize.x) / viewportSize.x;
- float y = ((pos.y - viewportSize.y) / viewportSize.y) * -1;
- gl_Position = vec4(x, y, -1.0f, 1.0f);
+ float x = ((pos.x + translation.x) / viewportSize.x) * 2.0f - 1.0f;
+ float y = ((pos.y + translation.y) / viewportSize.y) * 2.0f - 1.0f;
+ gl_Position = vec4(x, -y, -1.0f, 1.0f);
vs_out.color = vec4(float(color.x) / 255.0f, float(color.y) / 255.0f, float(color.z) / 255.0f, float(color.w) / 255.0f);
vs_out.tex_coord = tex_coord;
}
diff --git a/cwd/test.rcss b/cwd/test.rcss
index 47441bb..f1e8cee 100644
--- a/cwd/test.rcss
+++ b/cwd/test.rcss
@@ -1,6 +1,28 @@
body {
background-color: red;
color: blue;
- font-size: 100px;
+ font-size: 50px;
font-family: "open sans";
+ width: 100%;
+}
+
+body:hover {
+ background-color: yellow;
+}
+
+div {
+ background-color: green;
+}
+
+div:hover {
+ background-color: white;
+}
+
+button:active {
+ background-color: teal;
+}
+
+.right-pos {
+ position: absolute;
+ right: 0px;
}
diff --git a/cwd/test.rml b/cwd/test.rml
index ee72ece..4c7bfa6 100644
--- a/cwd/test.rml
+++ b/cwd/test.rml
@@ -1,10 +1,26 @@
<rml>
<head>
<link type="text/rcss" href="test.rcss" />
+ <script>
+ redLvl = 0
+ function Test(elem)
+ elem.style["background-color"] = "rgb(" .. redLvl .. ",255,255)"
+ print("New background-color: "..elem.style["background-color"])
+ redLvl = redLvl + 50
+ end
+ </script>
</head>
<body>
- <div style="background-color:green;">
- Test RmlUi
+ Test RmlUi
+ <br />
+ New line
+ <div>
+ Substring
+ </div>
+ <br />
+ <button onclick="print('Button clicked!')" style="background-color:navy;">Clickable!</button>
+ <div class="right-pos" onclick="Test(element)">
+ (Clickable) Right viewport border is here ->
</div>
</body>
</rmL>
diff --git a/src/Plugin.cpp b/src/Plugin.cpp
index 83e9bdd..d7a9820 100644
--- a/src/Plugin.cpp
+++ b/src/Plugin.cpp
@@ -214,6 +214,10 @@ void PluginSystem::Init() {
apiTable["RegisterDimension"] = PluginApi::RegisterDimension;
}
+lua_State* PluginSystem::GetLuaState() {
+ return lua.lua_state();
+}
+
void PluginSystem::Execute(const std::string &luaCode, bool except) {
OPTICK_EVENT();
try {
diff --git a/src/Plugin.hpp b/src/Plugin.hpp
index a849f5c..7af27a4 100644
--- a/src/Plugin.hpp
+++ b/src/Plugin.hpp
@@ -5,10 +5,13 @@
#include "Vector.hpp"
class BlockInfo;
+struct lua_State;
namespace PluginSystem {
void Init();
+ lua_State* GetLuaState();
+
void Execute(const std::string &luaCode, bool except = false);
void CallOnChangeState(std::string newState);
diff --git a/src/Render.cpp b/src/Render.cpp
index 0f04992..48bbadd 100644
--- a/src/Render.cpp
+++ b/src/Render.cpp
@@ -3,6 +3,7 @@
#include <easylogging++.h>
#include <optick.h>
#include <RmlUi/Core.h>
+#include <RmlUi/Lua.h>
#include "Shader.hpp"
#include "AssetManager.hpp"
@@ -276,6 +277,13 @@ void Render::HandleEvents() {
case SDL_SCANCODE_SLASH:
case SDL_SCANCODE_T: {
+ auto state = GetState();
+ if (state == State::Playing) {
+ SetState(State::Chat);
+ }
+ else if (state == State::Chat) {
+ SetState(State::Playing);
+ }
break;
}
@@ -287,14 +295,50 @@ void Render::HandleEvents() {
}
case SDL_MOUSEMOTION: {
+ if (isMouseCaptured) {
+ double deltaX = event.motion.xrel;
+ double deltaY = event.motion.yrel;
+ deltaX *= sensetivity;
+ deltaY *= sensetivity * -1;
+ PUSH_EVENT("MouseMove", std::make_tuple(deltaX, deltaY));
+ } else {
+ int mouseX, mouseY;
+ SDL_GetMouseState(&mouseX, &mouseY);
+ rmlContext->ProcessMouseMove(mouseX, mouseY, 0);
+ }
break;
}
case SDL_MOUSEBUTTONDOWN: {
+ if (isMouseCaptured) {
+ if (event.button.button == SDL_BUTTON_LEFT)
+ PUSH_EVENT("LmbPressed", 0);
+ else if (event.button.button == SDL_BUTTON_RIGHT)
+ PUSH_EVENT("RmbPressed", 0);
+ } else {
+ if (event.button.button == SDL_BUTTON_MIDDLE)
+ event.button.button = SDL_BUTTON_RIGHT;
+ else if (event.button.button == SDL_BUTTON_RIGHT)
+ event.button.button = SDL_BUTTON_MIDDLE;
+ rmlContext->ProcessMouseButtonDown(event.button.button - 1, 0);
+ }
+
break;
}
case SDL_MOUSEBUTTONUP: {
+ if (isMouseCaptured) {
+ if (event.button.button == SDL_BUTTON_LEFT)
+ PUSH_EVENT("LmbReleased", 0);
+ else if (event.button.button == SDL_BUTTON_RIGHT)
+ PUSH_EVENT("RmbReleased", 0);
+ } else {
+ if (event.button.button == SDL_BUTTON_MIDDLE)
+ event.button.button = SDL_BUTTON_RIGHT;
+ else if (event.button.button == SDL_BUTTON_RIGHT)
+ event.button.button = SDL_BUTTON_MIDDLE;
+ rmlContext->ProcessMouseButtonUp(event.button.button - 1, 0);
+ }
break;
}
@@ -437,6 +481,8 @@ void Render::InitRml() {
if (!Rml::Initialise())
LOG(WARNING) << "Rml not initialized";
+ Rml::Lua::Initialise(PluginSystem::GetLuaState());
+
rmlContext = Rml::CreateContext("default", Rml::Vector2i(renderState.WindowWidth, renderState.WindowHeight));
if (!Rml::LoadFontFace("OpenSans-Regular.ttf"))
diff --git a/src/Rml.cpp b/src/Rml.cpp
index 7987121..bcdca0c 100644
--- a/src/Rml.cpp
+++ b/src/Rml.cpp
@@ -84,10 +84,12 @@ RmlRenderInterface::~RmlRenderInterface() {
void RmlRenderInterface::RenderGeometry(Rml::Vertex* vertices, int num_vertices, int* indices, int num_indices, Rml::TextureHandle texture, const Rml::Vector2f& translation) {
if (texture) {
AssetManager::GetAsset<AssetShader>("/altcraft/shaders/rmltex")->shader->Activate();
+ AssetManager::GetAsset<AssetShader>("/altcraft/shaders/rmltex")->shader->SetUniform("translation", glm::vec2(translation.x, translation.y));
glBindTexture(GL_TEXTURE_2D, texture);
- }
- else
+ } else {
AssetManager::GetAsset<AssetShader>("/altcraft/shaders/rml")->shader->Activate();
+ AssetManager::GetAsset<AssetShader>("/altcraft/shaders/rml")->shader->SetUniform("translation", glm::vec2(translation.x, translation.y));
+ }
glCheckError();
glBindVertexArray(Vao);