blob: 1c2fb7bc2533c3fccefc18bffdb5777b7a0ff683 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
|