Switch to newer modlib.mod.configuration()
parent
34751e62f9
commit
bcef6d2e39
128
Readme.md
128
Readme.md
|
@ -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`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
##### `speed`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `1000`
|
||||
* > 0
|
||||
* <= 10000
|
||||
|
||||
##### `yaw`
|
||||
|
||||
###### `max`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `160`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
###### `min`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `-30`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
|
||||
|
||||
#### `body`
|
||||
|
||||
##### `turn_speed`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `0.2`
|
||||
* > 0
|
||||
* <= 1000
|
||||
|
||||
|
||||
#### `head`
|
||||
|
||||
##### `pitch`
|
||||
|
||||
###### `max`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `80`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
###### `min`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `-60`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
|
||||
##### `yaw`
|
||||
|
||||
###### `max`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `90`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
###### `min`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `-90`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
|
||||
##### `yaw_restricted`
|
||||
|
||||
###### `max`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `45`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
###### `min`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `0`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
|
||||
##### `yaw_restriction`
|
||||
|
||||
|
||||
* Type: number
|
||||
* Default: `60`
|
||||
* >= -180
|
||||
* <= 180
|
||||
|
||||
|
||||
|
||||
### `models`
|
||||
|
||||
Other models, same format as `default` model
|
||||
<!--modlib:conf-->
|
37
conf.lua
37
conf.lua
|
@ -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 }
|
||||
}
|
||||
})
|
|
@ -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": {}
|
||||
}
|
12
init.lua
12
init.lua
|
@ -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"
|
18
main.lua
18
main.lua
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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]
|
Loading…
Reference in New Issue