Skip to content
Draft
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
10 changes: 10 additions & 0 deletions Documentation/API/Common/InverseLerp.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,13 @@ func _ready() -> void:

print(value) # 0.5
```

##### Lua

```gdscript
local rhythmgameutilities = require("rhythmgameutilities")

local value = rhythmgameutilities.inverse_lerp(0, 10, 5);

print(value) -- 0.5
```
10 changes: 10 additions & 0 deletions Documentation/API/Common/Lerp.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,13 @@ func _ready() -> void:

print(value) # 5
```

##### Lua

```gdscript
local rhythmgameutilities = require("rhythmgameutilities")

local value = rhythmgameutilities.lerp(0, 10, 0.5);

print(value) -- 5.0
```
1 change: 1 addition & 0 deletions LuaPlugin/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.so
11 changes: 11 additions & 0 deletions LuaPlugin/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
help:
@fgrep -h "##" $(MAKEFILE_LIST) | sed -e 's/##//' | tail -n +2

build: ## Build Lua plugin
./build.sh

test: build ## Test Lua plugin
lua test.lua

install-dependencies: ## Install Dependencies
brew install lua
13 changes: 13 additions & 0 deletions LuaPlugin/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#!/bin/bash

SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &>/dev/null && pwd)

(

cd "${SCRIPT_DIR}" || exit

g++ -std=c++17 -shared -fPIC -arch arm64 -undefined dynamic_lookup -o rhythmgameutilities.so lua_bindings.cpp \
-I../include \
-I/opt/homebrew/Cellar/lua/5.4.8/include

)
3 changes: 3 additions & 0 deletions LuaPlugin/compile_flags.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-std=c++17
-I../include/
-I/opt/homebrew/Cellar/lua/5.4.8/include
101 changes: 101 additions & 0 deletions LuaPlugin/lua_bindings.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#include "RhythmGameUtilities/Common.hpp"
#include "RhythmGameUtilities/Utilities.hpp"

#include <lua/lua.hpp>

// Common

static auto lua_inverse_lerp(lua_State *L) -> int
{
float a = luaL_checknumber(L, 1);
float b = luaL_checknumber(L, 2);
float v = luaL_checknumber(L, 3);

float result = RhythmGameUtilities::InverseLerp(a, b, v);

lua_pushnumber(L, result);

return 1;
}

static auto lua_lerp(lua_State *L) -> int
{
float a = luaL_checknumber(L, 1);
float b = luaL_checknumber(L, 2);
float t = luaL_checknumber(L, 3);

float result = RhythmGameUtilities::Lerp(a, b, t);

lua_pushnumber(L, result);

return 1;
}

// Utilities

static auto lua_calculate_accuracy_ratio(lua_State *L) -> int
{
int position = luaL_checknumber(L, 1);
int current_position = luaL_checknumber(L, 2);
int delta = luaL_checknumber(L, 3);

float result = RhythmGameUtilities::CalculateAccuracyRatio(
position, current_position, delta);

lua_pushnumber(L, result);

return 1;
}

static auto lua_convert_tick_to_position(lua_State *L) -> int
{
int tick = luaL_checknumber(L, 1);
int resolution = luaL_checknumber(L, 2);

float result = RhythmGameUtilities::ConvertTickToPosition(tick, resolution);

lua_pushnumber(L, result);

return 1;
}

static auto lua_is_on_the_beat(lua_State *L) -> int
{
int bpm = luaL_checknumber(L, 1);
float current_time = luaL_checknumber(L, 2);
float delta = luaL_checknumber(L, 3);

bool result = RhythmGameUtilities::IsOnTheBeat(bpm, current_time, delta);

lua_pushboolean(L, result);

return 1;
}

static auto lua_round_up_to_the_nearest_multiplier(lua_State *L) -> int
{
int value = luaL_checknumber(L, 1);
int multiplier = luaL_checknumber(L, 2);

int result =
RhythmGameUtilities::RoundUpToTheNearestMultiplier(value, multiplier);

lua_pushnumber(L, result);

return 1;
}

static const luaL_Reg rhythmgameutilities_functions[] = {
{"inverse_lerp", lua_inverse_lerp},
{"lerp", lua_lerp},
{"calculate_accuracy_ratio", lua_calculate_accuracy_ratio},
{"convert_tick_to_position", lua_convert_tick_to_position},
{"is_on_the_beat", lua_is_on_the_beat},
{"round_up_to_the_nearest_multiplier",
lua_round_up_to_the_nearest_multiplier}};

extern "C" auto luaopen_rhythmgameutilities(lua_State *L) -> int
{
luaL_newlib(L, rhythmgameutilities_functions);
return 1;
}
60 changes: 60 additions & 0 deletions LuaPlugin/test.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
local rhythmgameutilities = require("rhythmgameutilities")

local function inverse_lerp_test()
local value = rhythmgameutilities.inverse_lerp(0, 10, 5);

print(value) -- 0.5

assert(value == 0.5)
end

local function lerp_test()
local value = rhythmgameutilities.lerp(0, 10, 0.5);

print(value) -- 5.0

assert(value == 5)
end

local function calculate_accuracy_ratio_test()
local value = rhythmgameutilities.calculate_accuracy_ratio(750, 768, 50);

value = tonumber(string.format("%.2f", value));

print(value) -- 0.64

assert(value == value)
end

local function convert_tick_to_position_test()
local value = rhythmgameutilities.convert_tick_to_position(1056, 192);

print(value) -- 5.5

assert(value == 5.5)
end

local function is_on_the_beat_test()
local value = rhythmgameutilities.is_on_the_beat(120, 10, 0.05);

print(value) -- true

assert(value == true)
end

local function round_up_to_the_nearest_multiplier_test()
local value = rhythmgameutilities.round_up_to_the_nearest_multiplier(12, 10);

print(value) -- 20

assert(value == 20)
end

inverse_lerp_test();
lerp_test();

calculate_accuracy_ratio_test();
convert_tick_to_position_test();

is_on_the_beat_test();
round_up_to_the_nearest_multiplier_test();