-
-
Notifications
You must be signed in to change notification settings - Fork 7
/
actor.go
58 lines (50 loc) · 1.14 KB
/
actor.go
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
package game
import "encoding/gob"
func init() {
gob.Register(Actor{})
}
const PlayerActorID = "PLAYER"
// Actor represents a player or enemy.
type Actor struct {
GUID string `lua:"guid"`
TypeID string
Name string
Description string
HP int
MaxHP int
Gold int
Artifacts *StringSet
Cards *StringSet
StatusEffects *StringSet
}
func (a Actor) IsNone() bool {
return len(a.GUID) == 0
}
// Sanitize ensures that the actor has all the required fields.
func (a Actor) Sanitize() Actor {
if a.Artifacts == nil {
a.Artifacts = NewStringSet()
}
if a.Cards == nil {
a.Cards = NewStringSet()
}
if a.StatusEffects == nil {
a.StatusEffects = NewStringSet()
}
return a
}
func (a Actor) Clone() Actor {
// The sets are backed by maps, so we need to clone them to create new pointer instances.
a.Artifacts = a.Artifacts.Clone()
a.Cards = a.Cards.Clone()
a.StatusEffects = a.StatusEffects.Clone()
return a
}
func NewActor(ID string) Actor {
return Actor{
GUID: ID,
Artifacts: NewStringSet(),
Cards: NewStringSet(),
StatusEffects: NewStringSet(),
}
}