Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Separate player code into new mod
  • Loading branch information
rubenwardy authored and paramat committed Aug 1, 2017
1 parent 7ffd176 commit 5d19fd6
Show file tree
Hide file tree
Showing 16 changed files with 122 additions and 99 deletions.
106 changes: 51 additions & 55 deletions game_api.txt
Expand Up @@ -284,8 +284,58 @@ Give Initial Stuff API
^ 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.register_tnt(definition)`

Expand Down Expand Up @@ -634,60 +684,6 @@ GUI and formspecs
* 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
---------

Expand Down
7 changes: 0 additions & 7 deletions mods/default/README.txt
Expand Up @@ -54,12 +54,6 @@ Calinou (CC BY-SA 3.0):
default_mineral_copper.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):
default_jungleleaves.png
default_junglesapling.png
Expand Down Expand Up @@ -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/bulbastre/sounds/126887/ CC-BY-3.0
- http://www.freesound.org/people/Yoyodaman234/sounds/183541/ CC0

1 change: 1 addition & 0 deletions mods/default/depends.txt
@@ -0,0 +1 @@
player_api?
1 change: 0 additions & 1 deletion mods/default/init.lua
Expand Up @@ -47,6 +47,5 @@ dofile(default_path.."/item_entity.lua")
dofile(default_path.."/craftitems.lua")
dofile(default_path.."/crafting.lua")
dofile(default_path.."/mapgen.lua")
dofile(default_path.."/player.lua")
dofile(default_path.."/aliases.lua")
dofile(default_path.."/legacy.lua")
11 changes: 11 additions & 0 deletions mods/default/legacy.lua
Expand Up @@ -23,3 +23,14 @@ LIGHT_MAX = default.LIGHT_MAX

-- Formspecs
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 changes: 20 additions & 0 deletions mods/player_api/README.txt
@@ -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
49 changes: 13 additions & 36 deletions mods/default/player.lua → mods/player_api/api.lua
@@ -1,42 +1,29 @@
-- Minetest 0.4 mod: player
-- See README.txt for licensing and other information.

player_api = {}

-- Player animation blending
-- Note: This is currently broken due to a bug in Irrlicht, leave at 0
local animation_blend = 0

default.registered_player_models = { }
player_api.registered_models = { }

-- 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
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
local player_model = {}
local player_textures = {}
local player_anim = {}
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()
return {
model = player_model[name],
Expand All @@ -46,7 +33,7 @@ function default.player_get_animation(player)
end

-- 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 model = models[model_name]
if model then
Expand All @@ -59,7 +46,7 @@ function default.player_set_model(player, model_name)
visual = "mesh",
visual_size = model.visual_size or {x=1, y=1},
})
default.player_set_animation(player, "stand")
player_api.set_animation(player, "stand")
else
player:set_properties({
textures = { "player.png", "player_back.png", },
Expand All @@ -69,13 +56,13 @@ function default.player_set_model(player, model_name)
player_model[name] = model_name
end

function default.player_set_textures(player, textures)
function player_api.set_textures(player, textures)
local name = player:get_player_name()
player_textures[name] = textures
player:set_properties({textures = textures,})
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()
if player_anim[name] == anim_name then
return
Expand All @@ -89,16 +76,6 @@ function default.player_set_animation(player, anim_name, speed)
player:set_animation(anim, speed or model.animation_speed, animation_blend)
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)
local name = player:get_player_name()
player_model[name] = nil
Expand All @@ -107,8 +84,8 @@ minetest.register_on_leaveplayer(function(player)
end)

-- Localize for better performance.
local player_set_animation = default.player_set_animation
local player_attached = default.player_attached
local player_set_animation = player_api.set_animation
local player_attached = player_api.player_attached

-- Check each player and apply animations
minetest.register_globalstep(function(dtime)
Expand Down
26 changes: 26 additions & 0 deletions mods/player_api/init.lua
@@ -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)
File renamed without changes.
File renamed without changes.
File renamed without changes
File renamed without changes.
File renamed without changes
File renamed without changes
File renamed without changes

0 comments on commit 5d19fd6

Please sign in to comment.