Skip to content

Commit

Permalink
add player compatibility api (#41)
Browse files Browse the repository at this point in the history
  • Loading branch information
wsor4035 authored Sep 8, 2024
1 parent 931a168 commit b18dc7b
Show file tree
Hide file tree
Showing 10 changed files with 210 additions and 12 deletions.
3 changes: 3 additions & 0 deletions .luacheckrc
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,7 @@ read_globals = {
"rp_sounds",
"mtt",
"sounds",
"player_api",
"mcl_player",
"fl_player",
}
22 changes: 11 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# XCompat

[![luacheck](https://github.com/mt-mods/xcompat/workflows/luacheck/badge.svg)](https://github.com/mt-mods/xcompat/actions)
[![luacheck](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml/badge.svg?branch=master)](https://github.com/mt-mods/xcompat/actions/workflows/luacheck.yml)
[![ContentDB](https://content.minetest.net/packages/mt-mods/xcompat/shields/downloads/)](https://content.minetest.net/packages/mt-mods/xcompat/)

Provides cross compatibility between games and mods for sounds and crafting materials.
Expand All @@ -15,16 +15,16 @@ See the respective sub apis doc file in /doc for detailed documentation.

## Directly supported games and mods

| Games | Sounds | Materials | Textures |
| ----------------- | --------- | --------- | --------- |
| Minetest Game | x | x | x |
| MineClone2 | x | x | |
| Mineclonia | x | x | |
| Hades Revisited | x | x | |
| Farlands Reloaded | x | x | x |
| Exile | x | | |
| KSurvive 2 | x | | |
| Forgotten Lands | x | | |
| Games | Sounds | Materials | Textures | Player |
| ----------------- | --------- | --------- | --------- | ------ |
| Minetest Game | x | x | x | x |
| MineClone2 | x | x | | x |
| Mineclonia | x | x | | x |
| Hades Revisited | x | x | | |
| Farlands Reloaded | x | x | x | x |
| Exile | x | | | |
| KSurvive 2 | x | | | |
| Forgotten Lands | x | | | |

For functions see /doc/functions.md for the specifics relating to the function

Expand Down
13 changes: 13 additions & 0 deletions doc/player.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Player API

mimic mtg player_api

## NOTE

`xcompat.player.player_attached`

read/write from it is fine, looping over it is not as it is a proxy table. this
would need lua5.2 __pairs/__ipairs metamethods support which i could polyfill
for using https://stackoverflow.com/a/77354254 but didnt feel like doing at
this time. (luajit supports this via 5.2 extensions). additionally see issue:
https://github.com/minetest/minetest/issues/15133
1 change: 1 addition & 0 deletions init.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ xcompat.sounds = dofile(modpath .. "/src/sounds.lua")
xcompat.materials = dofile(modpath .. "/src/materials.lua")
xcompat.textures = dofile(modpath .. "/src/textures.lua")
xcompat.functions = dofile(modpath .. "/src/functions.lua")
xcompat.player = dofile(modpath .. "/src/player.lua")

local function validate_sound(key)
if key and xcompat.sounds[key] then
Expand Down
2 changes: 1 addition & 1 deletion mod.conf
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
name = xcompat
description = Provides cross compatibility between mods and games for sounds and crafting materials.
optional_depends = default, fl_stone, fl_trees, mcl_sounds, hades_sounds, ks_sounds, nodes_nature, fl_topsoil, fl_trees, mcl_core, farming, x_farming, sounds, mtt
optional_depends = default, fl_stone, fl_trees, mcl_sounds, hades_sounds, ks_sounds, nodes_nature, fl_topsoil, fl_trees, mcl_core, farming, x_farming, sounds, mtt, player_api, mcl_player, fl_player
8 changes: 8 additions & 0 deletions src/player.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
local filename = xcompat.gameid

--if we dont have a player file for the game, use minetest
if not xcompat.utilities.file_exists(xcompat.modpath .. "/src/player/" .. filename .. ".lua") then
filename = "xcompat_agnostic"
end

return dofile(xcompat.modpath .. "/src/player/" .. filename .. ".lua")
51 changes: 51 additions & 0 deletions src/player/farlands_reloaded.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
local papi = {}

local models = {}
function papi.register_model(name, def)
models[name] = def
end

function papi.set_model(player, model_name)
local model = models[model_name]

if not model then return end

player:set_properties({
mesh = model_name,
textures = model.textures,
visual = "mesh",
visual_size = model.visual_size,
stepheight = model.stepheight
})
end

function papi.get_animation(_)
--stub to keep from crashing
end

function papi.get_textures(player)
return player:get_properties().textures
end

function papi.set_textures(player, textures)
player:set_properties({textures = textures})
end

function papi.set_animation(player, anim_name, speed, loop)
player:set_animation(fl_player.animations[anim_name], speed, 0, loop)
end

local metatable = {
__index = function (_, key)
return fl_player.ignore[key]
end,
__newindex = function (_, key, value)
rawset(fl_player.ignore, key, value)
end
}

papi.player_attached = {}

setmetatable(papi.player_attached, metatable)

return papi
40 changes: 40 additions & 0 deletions src/player/mineclonia.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
local papi = {}

function papi.register_model(name, def)
return mcl_player.player_register_model(name, def)
end

function papi.set_model(player, model)
return mcl_player.player_set_model(player, model)
end

function papi.get_animation(player)
return mcl_player.player_get_animation(player)
end

function papi.get_textures(player)
return player:get_properties().textures
end

function papi.set_textures(player, textures)
player:set_properties({textures = textures})
end

function papi.set_animation(player, anim_name, speed, _)
return mcl_player.player_set_animation(player, anim_name, speed)
end

local metatable = {
__index = function (_, key)
return mcl_player.player_attached[key]
end,
__newindex = function (_, key, value)
rawset(mcl_player.player_attached, key, value)
end
}

papi.player_attached = {}

setmetatable(papi.player_attached, metatable)

return papi
41 changes: 41 additions & 0 deletions src/player/minetest.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
local papi = {}

function papi.register_model(name, def)
return player_api.register_model(name, def)
end

function papi.set_model(player, model)
return player_api.set_model(player, model)
end

function papi.get_animation(player)
return player_api.get_animation(player)
end

function papi.get_textures(player)
return player_api.get_textures(player)
end

function papi.set_textures(player, texture)
return player_api.set_textures(player, texture)
end

function papi.set_animation(player, anim_name, speed, loop)
return player_api.set_animation(player, anim_name, speed, loop)
end


local metatable = {
__index = function (_, key)
return player_api.player_attached[key]
end,
__newindex = function (_, key, value)
rawset(player_api.player_attached, key, value)
end
}

papi.player_attached = {}

setmetatable(papi.player_attached, metatable)

return papi
41 changes: 41 additions & 0 deletions src/player/xcompat_agnostic.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
local papi = {}

local models = {}
function papi.register_model(name, def)
models[name] = def
end

function papi.set_model(player, model_name)
local model = models[model_name]

if not model then return end

player:set_properties({
mesh = model_name,
textures = model.textures,
visual = "mesh",
visual_size = model.visual_size,
stepheight = model.stepheight
})
end

function papi.get_animation(_)
--stub to keep from crashing
end

function papi.get_textures(player)
return player:get_properties().textures
end

function papi.set_textures(player, textures)
player:set_properties({textures = textures})
end

function papi.set_animation(_, _, _, _)
--stub to keep from crashing
end

--nothing to do here as we have no globalstep .....that we know about anyways
papi.player_attached = {}

return papi

0 comments on commit b18dc7b

Please sign in to comment.