aboutsummaryrefslogtreecommitdiff
path: root/display_lib/API.md
blob: 148db60f0fbce9351b1a0fbf78e3f02400707297 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# Display Lib API
This document describes Display Lib API. Display Lib allows to add a dynamic display on a node. Display Lib limits node rotations. For wallmounted, only vertical positionning is available, and for facedir, only first four position are availabel (those with default axis).

## Provided methods
### update\_entities
**display\_lib.update\_entities(pos)**

This method triggers entities update for the display node at pos. Actual entity update is made by **on\_display\_update** callback associated to the entity.

**pos**: Position of the node
### register\_display\_entity
**display\_lib.register\_display\_entity(entity_name)**

This is a helper to register entities used for display. 

**entity_name**: Name of the entity to register.
## Provided callback implementations
### on_place
**display\_lib.on\_place(itemstack, placer, pointed\_thing)**

**On_place** node callback implementation. Display nodes should have this callback (avoid placement of horizontal display node).
### on_construct
**display\_lib.on\_construct(pos)**

**On_construct** node callback implementation. Display nodes should have this callback (creates, places and updates display entities on node construction).
### on_destruct
**display\_lib.on_destruct(pos)**

**On_destruct** node callback implementation. Display nodes should have this callback (removes display entities on node destruction). 
### on_rotate
**display\_lib.on\_rotate(pos, node, user, mode, new_param2)**

**On_rotate** node callback implementation. Display nodes should have this callback (restricts rotations and rotates display entities associated with node).
### on_activate
**display\_lib.on_activate(entity, staticdata)**

**On_activate** entity callback implementation for display entities. No need of this method if display entities have been registered using **register\_display\_entity** (callback is already set). 
## Howto register a display node
* Register display entities with **register\_display\_entity**
* Register node with :
	- **on\_place**, **on\_construct**, **on\_destruct** and **on\_rotate** callbacks using **display\_lib** callbacks.
	- a **display\_entities** field in node definition containing a entity name indexed table. See below for description of each display\_entities fields.

### Display_entities fields
**depth**, **right** and **height** : Entity position regarding to node facedir/wallmounted main axis. Values for these fields can be any number between -0.5 and 0.5 (default value is 0). Position 0,0,0 is the center of the node. **depth** goes from front (-0.5) to rear (0.5), **height** goes from bottom (-0.5) to top (0.5) and **height** goes from left (-0.5) to right (0.5).

**on_display_update** is a callback in charge of setting up entity texture. If not set, entity will have no texture and will be displayed as unknown item.

### Example

		display_lib.register_display_entity("mymod:entity1")
		display_lib.register_display_entity("mymod:entity2")

		function my_display_update1(pos, objref) 
			objref:set_properties({ textures= {"mytexture1.png"},
									visual_size = {x=1, y=1} })
		end

		function my_display_update2(pos, objref) 
			objref:set_properties({ textures= {"mytexture2.png"},
									visual_size = {x=1, y=1} })
		end

		minetest.register_node("mymod:test_display_node", {
			...
			paramtype2 = "wallmounted",
			...
			display_entities = {
				["mymod:entity1"] = { depth = 0.3,
					on_display_update = my_display_update1},
				["mymod:entity1"] = { depth = 0.2, height = 0.1,
					on_display_update = my_display_update2},
			},
			...
			on_place = display_lib.on_place,
			on_construct = display_lib.on_construct,
			on_destruct = display_lib.on_destruct,
			on_rotate = display_lib.on_rotate,
			...
		})