aboutsummaryrefslogtreecommitdiff
path: root/data/luaobjects/test/server.lua
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2011-02-21 16:10:36 +0200
committerPerttu Ahola <celeron55@gmail.com>2011-02-21 16:10:36 +0200
commit69dbc046eb5a82b38c6d5c3302e9b3b0b3c1bcf1 (patch)
treee892b50187ba7343cb75f359ccbb55bdde19afd5 /data/luaobjects/test/server.lua
parentc57637b4c39319e0c0d5d80d0ae2884aec66d691 (diff)
downloadminetest-69dbc046eb5a82b38c6d5c3302e9b3b0b3c1bcf1.tar.gz
minetest-69dbc046eb5a82b38c6d5c3302e9b3b0b3c1bcf1.tar.bz2
minetest-69dbc046eb5a82b38c6d5c3302e9b3b0b3c1bcf1.zip
preliminary lua scripting framework for objects
Diffstat (limited to 'data/luaobjects/test/server.lua')
-rw-r--r--data/luaobjects/test/server.lua90
1 files changed, 90 insertions, 0 deletions
diff --git a/data/luaobjects/test/server.lua b/data/luaobjects/test/server.lua
new file mode 100644
index 000000000..ac7b4800d
--- /dev/null
+++ b/data/luaobjects/test/server.lua
@@ -0,0 +1,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
+