aboutsummaryrefslogtreecommitdiff
path: root/data/luaobjects/test/server.lua
blob: ac7b4800d8e147247078bc2791f38f94ee0875b8 (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
84
85
86
87
88
89
90
-- Server-side code of the test lua object

counter = 0
counter2 = 0
death_counter = 0
position = {X=math.random(-2,2),Y=6,Z=math.random(-2,2)}
rotation = {X=0, Y=math.random(0,360), Z=0}
dir = 1

function step(self, dtime)
	--[[if position.Y > 9.5 then
		position.Y = 6
	end
	if position.Y < 5.5 then
		position.Y = 9
		
	counter2 = counter2 - dtime
	if counter2 < 0 then
		counter2 = counter2 + 3
		dir = -dir
	end]]

	-- Limit step to a sane value; it jumps a lot while the map generator
	-- is in action
	if dtime > 0.5 then
		dtime = 0.5
	end

	-- Returned value has these fields:
	-- * bool walkable
	-- * int content
	n = object_get_node(self, position.X,position.Y-0.35,position.Z)
	if n.walkable then
		dir = 1
	else
		dir = -1
	end
	-- Keep the object approximately at ground level
	position.Y = position.Y + dtime * 1.0 * dir

	-- Move the object around
	position.X = position.X + math.cos(math.pi+rotation.Y/180*math.pi)
			* dtime * 2.0
	position.Z = position.Z + math.sin(math.pi+rotation.Y/180*math.pi)
			* dtime * 2.0

	-- This value has to be set; it determines to which player the
	-- object is near to and such
	object_set_base_position(self, position.X,position.Y,position.Z)

	rotation.Y = rotation.Y + dtime * 180
	
	-- Send some custom messages at a custom interval
	
	counter = counter - dtime
	if counter < 0 then
		counter = counter + 0.175

		message = "pos " .. position.X .. " " .. position.Y .. " " .. position.Z
		object_add_message(self, message)

		message = "rot " .. rotation.X .. " " .. rotation.Y .. " " .. rotation.Z
		object_add_message(self, message)
	end

	-- Remove the object after some time
	death_counter = death_counter + dtime
	if death_counter > 30 then
		object_remove(self)
	end

end

-- This stuff is passed to a newly created client-side counterpart of this object
function get_client_init_data(self)
	return "result of get_client_init_data"
end

-- This should return some data that mostly saves the state of this object
-- Not implemented yet
function get_server_init_data(self)
	return "result of get_server_init_data"
end

-- At reload time, the output of get_server_init_data is passed to this
-- Not implemented yet
function initialize(self, data)
	print("server object got initialization: " .. data)
end