-- Describes a player or enemy's party -- Parties can exist without any members room = require("room") main = require("main") char = require("char") import Character from char import LobbyRoom from room mod = ... class Party new: => @members = {} @rnode = am.group! @node = am.translate(0,0) @rnode\append(@node) @room = LobbyRoom! member: (uname) => assert(uname, "cannot find a nil party member") assert(type(uname) == "string", "Member should be called with a peer id") @members[uname] nmembers: () => i = 0 for k,v in pairs(@members) i += 1 i add_member: (member) => assert(member.uname, "cannot add a nil party member") assert(type(member.uname) == "string", "Member should be called with a peer id") @members[member.uname] = member member.party = @ @node\append(member.node) remove_member: (member) => @members[member.uname] = nil member.party = nil @node\remove(member.node) set_room: (nroom) => @room = nroom for id, char in pairs(@members) char\enter_room(nroom) serialize: () => members = {} for _, member in pairs(@members) members[member.uname] = member\serialize! am.to_json(members) deserialize: (data) -> rp = Party! tbl = am.parse_json(data) for uname, payload in pairs(tbl) tchar = Character.deserialize(payload) rp\add_member(tchar) rp mod["Party"] = Party mod