Skip to content

Instantly share code, notes, and snippets.

@xyzz
Created January 7, 2014 17:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xyzz/79abb066dd3772ff631d to your computer and use it in GitHub Desktop.
Save xyzz/79abb066dd3772ff631d to your computer and use it in GitHub Desktop.
export ^
step_intervals = {}
on_step_proxy = (func) ->
return (self_, dtime) ->
print self_.id
return self_.ms_object\step dtime
registered_classes = {}
max_id = 0
class Mob
new: (pos) =>
if not pos
-- used to load entity in on_activate
return
@pos = pos
@object = minetest.add_entity(@pos, @name)
entity = @object\get_luaentity!
entity.ms_object = @
entity.id = max_id
max_id += 1
register: =>
registered_classes[@name] = @@
minetest.register_entity(@name, {
on_step: on_step_proxy @step,
get_staticdata: (self_) ->
if self_.ms_object
self_.ms_object.object = nil
return minetest.serialize self_.ms_object
on_activate: (self_, staticdata) ->
data = minetest.deserialize staticdata
if not data
-- only happens when on_activate is called right after add_entity
return
self_.ms_object = registered_classes[@name]!
self_.ms_object.object = self_
for key, value in pairs data
self_.ms_object[key] = value
self_.id = max_id
max_id += 1
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment