From c2926c5ec74d7e37da395c8c32a7ff2b4cae7d06 Mon Sep 17 00:00:00 2001 From: Alexander M Pickering Date: Mon, 29 Jan 2024 16:20:10 -0600 Subject: All the files --- src/party.moon | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/party.moon (limited to 'src/party.moon') diff --git a/src/party.moon b/src/party.moon new file mode 100644 index 0000000..1c2fb7b --- /dev/null +++ b/src/party.moon @@ -0,0 +1,58 @@ +-- 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 -- cgit v1.2.3-70-g09d2