Switch to newer modlib.mod.configuration()

master
Lars Mueller 2021-04-01 00:56:32 +02:00
parent 34751e62f9
commit bcef6d2e39
7 changed files with 242 additions and 78 deletions

128
Readme.md
View File

@ -37,3 +37,131 @@ Depends on [`modlib`](https://github.com/appgurueu/modlib). Code written by Lars
4. Export the model as `glTF` and save it under `models/modelname.extension.gltf`
5. Do `/ca_import modelname.extension`
1. Install and use `character_anim` like any other mod
## Configuration
<!--modlib:conf:2-->
### `default`
#### `arm_right`
##### `radius`
* Type: number
* Default: `10`
* &gt;= -180
* &lt;= 180
##### `speed`
* Type: number
* Default: `1000`
* &gt; 0
* &lt;= 10000
##### `yaw`
###### `max`
* Type: number
* Default: `160`
* &gt;= -180
* &lt;= 180
###### `min`
* Type: number
* Default: `-30`
* &gt;= -180
* &lt;= 180
#### `body`
##### `turn_speed`
* Type: number
* Default: `0.2`
* &gt; 0
* &lt;= 1000
#### `head`
##### `pitch`
###### `max`
* Type: number
* Default: `80`
* &gt;= -180
* &lt;= 180
###### `min`
* Type: number
* Default: `-60`
* &gt;= -180
* &lt;= 180
##### `yaw`
###### `max`
* Type: number
* Default: `90`
* &gt;= -180
* &lt;= 180
###### `min`
* Type: number
* Default: `-90`
* &gt;= -180
* &lt;= 180
##### `yaw_restricted`
###### `max`
* Type: number
* Default: `45`
* &gt;= -180
* &lt;= 180
###### `min`
* Type: number
* Default: `0`
* &gt;= -180
* &lt;= 180
##### `yaw_restriction`
* Type: number
* Default: `60`
* &gt;= -180
* &lt;= 180
### `models`
Other models, same format as `default` model
<!--modlib:conf-->

View File

@ -1,37 +0,0 @@
local angle = { type = "number", range = { -180, 180 } }
local range = {
type = "table",
children = { angle, angle },
func = function(range)
if range[2] < range[1] then return "First range value is not <= second range value" end
end
}
local model = {
type = "table",
children = {
body = {
type = "table",
children = { turn_speed = { type = "number", range = { 0, 1e3 } } }
},
head = {
type = "table",
children = {
pitch = range,
yaw = range,
yaw_restricted = range,
yaw_restriction = angle
}
},
arm_right = {
type = "table",
children = { radius = angle, speed = { type = "number", range = { 0, 1e4 } }, yaw = range }
}
}
}
conf = modlib.conf.import(minetest.get_current_modname(), {
type = "table",
children = {
default = model,
models = { type = "table", keys = { type = "string" }, values = model }
}
})

View File

@ -1,13 +0,0 @@
{
"default": {
"body": { "turn_speed": 0.2 },
"head": {
"pitch": [ -60, 80 ],
"yaw": [ -90, 90 ],
"yaw_restricted": [ 0, 45 ],
"yaw_restriction": 60
},
"arm_right": { "radius": 10, "speed": 1e3, "yaw": [ -30, 160 ] }
},
"models": {}
}

View File

@ -1,9 +1,9 @@
setfenv(1, modlib.mod)
local namespace = create_namespace()
local mod = modlib.mod
local namespace = mod.create_namespace()
local quaternion = setmetatable({}, {__index = namespace})
include_env(get_resource"quaternion.lua", quaternion)
mod.include_env(mod.get_resource"quaternion.lua", quaternion)
namespace.quaternion = quaternion
extend"conf"
namespace.conf = mod.configuration()
namespace.insecure_environment = minetest.request_insecure_environment() or _G
extend"importer"
extend"main"
mod.extend"importer"
mod.extend"main"

View File

@ -53,12 +53,12 @@ local function disable_animation(player)
return player:set_animation({x = 0, y = 0}, 0, 0, false)
end
local function clamp(value, min, max)
if value > max then
return max
local function clamp(value, range)
if value > range.max then
return range.max
end
if value < min then
return min
if value < range.min then
return range.min
end
return value
end
@ -170,12 +170,12 @@ local function handle_player_animations(dtime, player)
if interacting then Arm_Right.y = Arm_Right.y + lag_behind end
end
Head.x = clamp(Head.x, unpack(conf.head.pitch))
Head.y = clamp(Head.y, unpack(conf.head.yaw))
Head.x = clamp(Head.x, conf.head.pitch)
Head.y = clamp(Head.y, conf.head.yaw)
if math.abs(Head.y) > conf.head.yaw_restriction then
Head.x = clamp(Head.x, unpack(conf.head.yaw_restricted))
Head.x = clamp(Head.x, conf.head.yaw_restricted)
end
Arm_Right.y = clamp(Arm_Right.y, unpack(conf.arm_right.yaw))
Arm_Right.y = clamp(Arm_Right.y, conf.arm_right.yaw)
for bone, values in pairs(bone_positions) do
player:set_bone_position(bone, values.position, values.euler_rotation)

66
schema.lua Normal file
View File

@ -0,0 +1,66 @@
local function angle(description, default)
return { type = "number", range = { min = -180, max = 180 }, description = description, default = default }
end
local function range(description, default_min, default_max)
return {
type = "table",
entries = {
min = angle(description .. " (min)", default_min),
max = angle(description .. " (max)", default_max)
},
func = function(range)
if range.max < range.min then return "Minimum range value is not <= maximum range value" end
end
}
end
local model = {
type = "table",
entries = {
body = {
type = "table",
entries = {
turn_speed = {
type = "number",
range = { min_exclusive = 0, max = 1e3 },
description = "Body turn speed",
default = 0.2
}
}
},
head = {
type = "table",
entries = {
pitch = range("Head pitch", -60, 80),
yaw = range("Head yaw", -90, 90),
yaw_restricted = range("Head yaw restricted", 0, 45),
yaw_restriction = angle("Head yaw restriction", 60)
}
},
arm_right = {
type = "table",
entries = {
radius = angle("Right arm spin radius", 10),
speed = {
type = "number",
range = { min_exclusive = 0, max = 1e4 },
description = "Right arm spin speed",
default = 1e3
},
yaw = range("Right arm yaw", -30, 160)
}
}
}
}
return {
type = "table",
entries = {
default = model,
models = {
type = "table",
keys = { type = "string" },
values = model,
description = "Other models, same format as `default` model"
}
}
}

View File

@ -1,13 +1,33 @@
character_anim.default.body.turn_speed (Character anim default body turn_speed) float 0.2 0.000000 1000.000000
character_anim.default.arm_right.yaw.1 (Character anim default arm_right yaw 1) float -30 -180.000000 180.000000
character_anim.default.arm_right.yaw.2 (Character anim default arm_right yaw 2) float 160 -180.000000 180.000000
character_anim.default.arm_right.radius (Character anim default arm_right radius) float 10 -180.000000 180.000000
character_anim.default.arm_right.speed (Character anim default arm_right speed) float 1000 0.000000 10000.000000
character_anim.default.head.yaw.1 (Character anim default head yaw 1) float -90 -180.000000 180.000000
character_anim.default.head.yaw.2 (Character anim default head yaw 2) float 90 -180.000000 180.000000
character_anim.default.head.yaw_restriction (Character anim default head yaw_restriction) float 60 -180.000000 180.000000
character_anim.default.head.pitch.1 (Character anim default head pitch 1) float -60 -180.000000 180.000000
character_anim.default.head.pitch.2 (Character anim default head pitch 2) float 80 -180.000000 180.000000
character_anim.default.head.yaw_restricted.1 (Character anim default head yaw_restricted 1) float 0 -180.000000 180.000000
character_anim.default.head.yaw_restricted.2 (Character anim default head yaw_restricted 2) float 45 -180.000000 180.000000
[*character_anim.default]
[**character_anim.default.arm_right]
# Right arm spin radius
character_anim.default.arm_right.radius (Character anim Default Arm right Radius) float 10
# Right arm spin speed
character_anim.default.arm_right.speed (Character anim Default Arm right Speed) float 1000
[***character_anim.default.arm_right.yaw]
# Right arm yaw (max)
character_anim.default.arm_right.yaw.max (Character anim Default Arm right Yaw Max) float 160
# Right arm yaw (min)
character_anim.default.arm_right.yaw.min (Character anim Default Arm right Yaw Min) float -30
[**character_anim.default.body]
# Body turn speed
character_anim.default.body.turn_speed (Character anim Default Body Turn speed) float 0.2
[**character_anim.default.head]
[***character_anim.default.head.pitch]
# Head pitch (max)
character_anim.default.head.pitch.max (Character anim Default Head Pitch Max) float 80
# Head pitch (min)
character_anim.default.head.pitch.min (Character anim Default Head Pitch Min) float -60
[***character_anim.default.head.yaw]
# Head yaw (max)
character_anim.default.head.yaw.max (Character anim Default Head Yaw Max) float 90
# Head yaw (min)
character_anim.default.head.yaw.min (Character anim Default Head Yaw Min) float -90
[***character_anim.default.head.yaw_restricted]
# Head yaw restricted (max)
character_anim.default.head.yaw_restricted.max (Character anim Default Head Yaw restricted Max) float 45
# Head yaw restricted (min)
character_anim.default.head.yaw_restricted.min (Character anim Default Head Yaw restricted Min) float 0
# Head yaw restriction
character_anim.default.head.yaw_restriction (Character anim Default Head Yaw restriction) float 60
[*character_anim.models]