-
-
Save xyzz/79abb066dd3772ff631d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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