aboutsummaryrefslogtreecommitdiff
path: root/src/party.moon
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