Separate player code into new mod

This commit is contained in:
rubenwardy 2017-07-26 19:38:11 +01:00 committed by paramat
parent 7ffd176f48
commit 5d19fd6923
16 changed files with 122 additions and 99 deletions

@ -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

@ -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