Separate player code into new mod
106
game_api.txt
@ -284,8 +284,58 @@ Give Initial Stuff API
|
|||||||
^ Adds items to the list of items to be given
|
^ Adds items to the list of items to be given
|
||||||
|
|
||||||
|
|
||||||
|
Players API
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The player API can register player models and update the player's appearence
|
||||||
|
|
||||||
|
* `player_api.register_model(name, def)`
|
||||||
|
* Register a new model to be used by players
|
||||||
|
* name: model filename such as "character.x", "foo.b3d", etc.
|
||||||
|
* def: See [#Model definition]
|
||||||
|
* saved to player_api.registered_models
|
||||||
|
|
||||||
|
* `player_api.registered_player_models[name]`
|
||||||
|
* Get a model's definition
|
||||||
|
* see [#Model definition]
|
||||||
|
|
||||||
|
* `player_api.set_model(player, model_name)`
|
||||||
|
* Change a player's model
|
||||||
|
* `player`: PlayerRef
|
||||||
|
* `model_name`: model registered with player_api.register_model()
|
||||||
|
|
||||||
|
* `player_api.set_animation(player, anim_name [, speed])`
|
||||||
|
* Applies an animation to a player
|
||||||
|
* anim_name: name of the animation.
|
||||||
|
* speed: frames per second. If nil, default from the model is used
|
||||||
|
|
||||||
|
* `player_api.set_textures(player, textures)`
|
||||||
|
* Sets player textures
|
||||||
|
* `player`: PlayerRef
|
||||||
|
* `textures`: array of textures, If `textures` is nil, the default textures from the model def are used
|
||||||
|
|
||||||
|
* `player_api.get_animation(player)`
|
||||||
|
* Returns a table containing fields `model`, `textures` and `animation`.
|
||||||
|
* Any of the fields of the returned table may be nil.
|
||||||
|
* player: PlayerRef
|
||||||
|
|
||||||
|
### Model Definition
|
||||||
|
|
||||||
|
{
|
||||||
|
animation_speed = 30, -- Default animation speed, in FPS.
|
||||||
|
textures = {"character.png", }, -- Default array of textures.
|
||||||
|
visual_size = {x = 1, y = 1}, -- Used to scale the model.
|
||||||
|
animations = {
|
||||||
|
-- <anim_name> = {x = <start_frame>, y = <end_frame>},
|
||||||
|
foo = {x = 0, y = 19},
|
||||||
|
bar = {x = 20, y = 39},
|
||||||
|
-- ...
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
TNT API
|
TNT API
|
||||||
----------
|
-------
|
||||||
|
|
||||||
`tnt.register_tnt(definition)`
|
`tnt.register_tnt(definition)`
|
||||||
|
|
||||||
@ -634,60 +684,6 @@ GUI and formspecs
|
|||||||
* Get the inactive furnace formspec using the defined GUI elements
|
* Get the inactive furnace formspec using the defined GUI elements
|
||||||
|
|
||||||
|
|
||||||
Player API
|
|
||||||
----------
|
|
||||||
|
|
||||||
The player API can register player models and update the player's appearence
|
|
||||||
|
|
||||||
`default.player_register_model(name, def)`
|
|
||||||
|
|
||||||
* Register a new model to be used by players.
|
|
||||||
* name: model filename such as "character.x", "foo.b3d", etc.
|
|
||||||
* def: See [#Model definition]
|
|
||||||
|
|
||||||
`default.registered_player_models[name]`
|
|
||||||
|
|
||||||
* Get a model's definition
|
|
||||||
* see [#Model definition]
|
|
||||||
|
|
||||||
`default.player_set_model(player, model_name)`
|
|
||||||
|
|
||||||
* Change a player's model
|
|
||||||
* `player`: PlayerRef
|
|
||||||
* `model_name`: model registered with player_register_model()
|
|
||||||
|
|
||||||
`default.player_set_animation(player, anim_name [, speed])`
|
|
||||||
|
|
||||||
* Applies an animation to a player
|
|
||||||
* anim_name: name of the animation.
|
|
||||||
* speed: frames per second. If nil, default from the model is used
|
|
||||||
|
|
||||||
`default.player_set_textures(player, textures)`
|
|
||||||
|
|
||||||
* Sets player textures
|
|
||||||
* `player`: PlayerRef
|
|
||||||
* `textures`: array of textures, If `textures` is nil, the default textures from the model def are used
|
|
||||||
|
|
||||||
default.player_get_animation(player)
|
|
||||||
|
|
||||||
* Returns a table containing fields `model`, `textures` and `animation`.
|
|
||||||
* Any of the fields of the returned table may be nil.
|
|
||||||
* player: PlayerRef
|
|
||||||
|
|
||||||
### Model Definition
|
|
||||||
|
|
||||||
{
|
|
||||||
animation_speed = 30, -- Default animation speed, in FPS.
|
|
||||||
textures = {"character.png", }, -- Default array of textures.
|
|
||||||
visual_size = {x = 1, y = 1}, -- Used to scale the model.
|
|
||||||
animations = {
|
|
||||||
-- <anim_name> = {x = <start_frame>, y = <end_frame>},
|
|
||||||
foo = {x = 0, y = 19},
|
|
||||||
bar = {x = 20, y = 39},
|
|
||||||
-- ...
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
Leafdecay
|
Leafdecay
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
@ -54,12 +54,6 @@ Calinou (CC BY-SA 3.0):
|
|||||||
default_mineral_copper.png
|
default_mineral_copper.png
|
||||||
default_glass_detail.png
|
default_glass_detail.png
|
||||||
|
|
||||||
MirceaKitsune (CC BY-SA 3.0):
|
|
||||||
character.x
|
|
||||||
|
|
||||||
Jordach (CC BY-SA 3.0):
|
|
||||||
character.png
|
|
||||||
|
|
||||||
PilzAdam (CC BY-SA 3.0):
|
PilzAdam (CC BY-SA 3.0):
|
||||||
default_jungleleaves.png
|
default_jungleleaves.png
|
||||||
default_junglesapling.png
|
default_junglesapling.png
|
||||||
@ -297,4 +291,3 @@ Chests sounds added by sofar, derived of several files mixed together:
|
|||||||
- http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0
|
- http://www.freesound.org/people/kingsamas/sounds/135576/ CC-BY-3.0
|
||||||
- http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0
|
- http://www.freesound.org/people/bulbastre/sounds/126887/ CC-BY-3.0
|
||||||
- http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0
|
- http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0
|
||||||
|
|
||||||
|
1
mods/default/depends.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
player_api?
|
@ -47,6 +47,5 @@ dofile(default_path.."/item_entity.lua")
|
|||||||
dofile(default_path.."/craftitems.lua")
|
dofile(default_path.."/craftitems.lua")
|
||||||
dofile(default_path.."/crafting.lua")
|
dofile(default_path.."/crafting.lua")
|
||||||
dofile(default_path.."/mapgen.lua")
|
dofile(default_path.."/mapgen.lua")
|
||||||
dofile(default_path.."/player.lua")
|
|
||||||
dofile(default_path.."/aliases.lua")
|
dofile(default_path.."/aliases.lua")
|
||||||
dofile(default_path.."/legacy.lua")
|
dofile(default_path.."/legacy.lua")
|
||||||
|
@ -23,3 +23,14 @@ LIGHT_MAX = default.LIGHT_MAX
|
|||||||
|
|
||||||
-- Formspecs
|
-- Formspecs
|
||||||
default.gui_suvival_form = default.gui_survival_form
|
default.gui_suvival_form = default.gui_survival_form
|
||||||
|
|
||||||
|
-- Players
|
||||||
|
if minetest.get_modpath("player_api") then
|
||||||
|
default.registered_player_models = player_api.registered_models
|
||||||
|
default.player_register_model = player_api.register_model
|
||||||
|
default.player_attached = player_api.player_attached
|
||||||
|
default.player_get_animation = player_api.get_animation
|
||||||
|
default.player_set_model = player_api.set_model
|
||||||
|
default.player_set_textures = player_api.set_textures
|
||||||
|
default.player_set_animation = player_api.set_animation
|
||||||
|
end
|
||||||
|
20
mods/player_api/README.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Minetest Game mod: player_api
|
||||||
|
============================
|
||||||
|
See license.txt for license information.
|
||||||
|
|
||||||
|
Provides an API to allow multiple mods to set player models and textures.
|
||||||
|
Also sets the default model, texture, and player flags.
|
||||||
|
|
||||||
|
Authors of source code
|
||||||
|
----------------------
|
||||||
|
Originally by celeron55, Perttu Ahola <celeron55@gmail.com> (LGPL 2.1)
|
||||||
|
Various Minetest developers and contributors (LGPL 2.1)
|
||||||
|
|
||||||
|
Authors of media (textures, models and sounds)
|
||||||
|
----------------------------------------------
|
||||||
|
|
||||||
|
MirceaKitsune (CC BY-SA 3.0):
|
||||||
|
character.x
|
||||||
|
|
||||||
|
Jordach (CC BY-SA 3.0):
|
||||||
|
character.png
|
@ -1,42 +1,29 @@
|
|||||||
-- Minetest 0.4 mod: player
|
-- Minetest 0.4 mod: player
|
||||||
-- See README.txt for licensing and other information.
|
-- See README.txt for licensing and other information.
|
||||||
|
|
||||||
|
player_api = {}
|
||||||
|
|
||||||
-- Player animation blending
|
-- Player animation blending
|
||||||
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
|
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
|
||||||
local animation_blend = 0
|
local animation_blend = 0
|
||||||
|
|
||||||
default.registered_player_models = { }
|
player_api.registered_models = { }
|
||||||
|
|
||||||
-- Local for speed.
|
-- Local for speed.
|
||||||
local models = default.registered_player_models
|
local models = player_api.registered_models
|
||||||
|
|
||||||
function default.player_register_model(name, def)
|
function player_api.register_model(name, def)
|
||||||
models[name] = def
|
models[name] = def
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Default player appearance
|
|
||||||
default.player_register_model("character.b3d", {
|
|
||||||
animation_speed = 30,
|
|
||||||
textures = {"character.png", },
|
|
||||||
animations = {
|
|
||||||
-- Standard animations.
|
|
||||||
stand = { x= 0, y= 79, },
|
|
||||||
lay = { x=162, y=166, },
|
|
||||||
walk = { x=168, y=187, },
|
|
||||||
mine = { x=189, y=198, },
|
|
||||||
walk_mine = { x=200, y=219, },
|
|
||||||
sit = { x= 81, y=160, },
|
|
||||||
},
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Player stats and animations
|
-- Player stats and animations
|
||||||
local player_model = {}
|
local player_model = {}
|
||||||
local player_textures = {}
|
local player_textures = {}
|
||||||
local player_anim = {}
|
local player_anim = {}
|
||||||
local player_sneak = {}
|
local player_sneak = {}
|
||||||
default.player_attached = {}
|
player_api.player_attached = {}
|
||||||
|
|
||||||
function default.player_get_animation(player)
|
function player_api.get_animation(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
return {
|
return {
|
||||||
model = player_model[name],
|
model = player_model[name],
|
||||||
@ -46,7 +33,7 @@ function default.player_get_animation(player)
|
|||||||
end
|
end
|
||||||
|
|
||||||
-- Called when a player's appearance needs to be updated
|
-- Called when a player's appearance needs to be updated
|
||||||
function default.player_set_model(player, model_name)
|
function player_api.set_model(player, model_name)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
local model = models[model_name]
|
local model = models[model_name]
|
||||||
if model then
|
if model then
|
||||||
@ -59,7 +46,7 @@ function default.player_set_model(player, model_name)
|
|||||||
visual = "mesh",
|
visual = "mesh",
|
||||||
visual_size = model.visual_size or {x=1, y=1},
|
visual_size = model.visual_size or {x=1, y=1},
|
||||||
})
|
})
|
||||||
default.player_set_animation(player, "stand")
|
player_api.set_animation(player, "stand")
|
||||||
else
|
else
|
||||||
player:set_properties({
|
player:set_properties({
|
||||||
textures = { "player.png", "player_back.png", },
|
textures = { "player.png", "player_back.png", },
|
||||||
@ -69,13 +56,13 @@ function default.player_set_model(player, model_name)
|
|||||||
player_model[name] = model_name
|
player_model[name] = model_name
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.player_set_textures(player, textures)
|
function player_api.set_textures(player, textures)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
player_textures[name] = textures
|
player_textures[name] = textures
|
||||||
player:set_properties({textures = textures,})
|
player:set_properties({textures = textures,})
|
||||||
end
|
end
|
||||||
|
|
||||||
function default.player_set_animation(player, anim_name, speed)
|
function player_api.set_animation(player, anim_name, speed)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
if player_anim[name] == anim_name then
|
if player_anim[name] == anim_name then
|
||||||
return
|
return
|
||||||
@ -89,16 +76,6 @@ function default.player_set_animation(player, anim_name, speed)
|
|||||||
player:set_animation(anim, speed or model.animation_speed, animation_blend)
|
player:set_animation(anim, speed or model.animation_speed, animation_blend)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Update appearance when the player joins
|
|
||||||
minetest.register_on_joinplayer(function(player)
|
|
||||||
default.player_attached[player:get_player_name()] = false
|
|
||||||
default.player_set_model(player, "character.b3d")
|
|
||||||
player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30)
|
|
||||||
|
|
||||||
player:hud_set_hotbar_image("gui_hotbar.png")
|
|
||||||
player:hud_set_hotbar_selected_image("gui_hotbar_selected.png")
|
|
||||||
end)
|
|
||||||
|
|
||||||
minetest.register_on_leaveplayer(function(player)
|
minetest.register_on_leaveplayer(function(player)
|
||||||
local name = player:get_player_name()
|
local name = player:get_player_name()
|
||||||
player_model[name] = nil
|
player_model[name] = nil
|
||||||
@ -107,8 +84,8 @@ minetest.register_on_leaveplayer(function(player)
|
|||||||
end)
|
end)
|
||||||
|
|
||||||
-- Localize for better performance.
|
-- Localize for better performance.
|
||||||
local player_set_animation = default.player_set_animation
|
local player_set_animation = player_api.set_animation
|
||||||
local player_attached = default.player_attached
|
local player_attached = player_api.player_attached
|
||||||
|
|
||||||
-- Check each player and apply animations
|
-- Check each player and apply animations
|
||||||
minetest.register_globalstep(function(dtime)
|
minetest.register_globalstep(function(dtime)
|
26
mods/player_api/init.lua
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
dofile(minetest.get_modpath("player_api") .. "/api.lua")
|
||||||
|
|
||||||
|
-- Default player appearance
|
||||||
|
player_api.register_model("character.b3d", {
|
||||||
|
animation_speed = 30,
|
||||||
|
textures = {"character.png", },
|
||||||
|
animations = {
|
||||||
|
-- Standard animations.
|
||||||
|
stand = { x= 0, y= 79, },
|
||||||
|
lay = { x=162, y=166, },
|
||||||
|
walk = { x=168, y=187, },
|
||||||
|
mine = { x=189, y=198, },
|
||||||
|
walk_mine = { x=200, y=219, },
|
||||||
|
sit = { x= 81, y=160, },
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
-- Update appearance when the player joins
|
||||||
|
minetest.register_on_joinplayer(function(player)
|
||||||
|
player_api.player_attached[player:get_player_name()] = false
|
||||||
|
player_api.set_model(player, "character.b3d")
|
||||||
|
player:set_local_animation({x=0, y=79}, {x=168, y=187}, {x=189, y=198}, {x=200, y=219}, 30)
|
||||||
|
|
||||||
|
player:hud_set_hotbar_image("gui_hotbar.png")
|
||||||
|
player:hud_set_hotbar_selected_image("gui_hotbar_selected.png")
|
||||||
|
end)
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 284 B After Width: | Height: | Size: 284 B |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 142 B After Width: | Height: | Size: 142 B |
Before Width: | Height: | Size: 140 B After Width: | Height: | Size: 140 B |