package tome_lib import ( "log" "github.com/google/uuid" ) type Effect struct { Owner uuid.UUID Target uuid.UUID ID int Modifier int NeedsCard bool } func RemoveEffect(source uuid.UUID, c *Card) { if c.Type == EmptyValue { return } for i, e := range c.Effects { if e.Owner == source { c.Effects = append(c.Effects[:i], c.Effects[i+1:]...) } } } func RemovePlayerEffect(source uuid.UUID, p *Player) { if p == nil { return } for i, e := range p.Effects { if e.Owner == source { p.Effects = append(p.Effects[:i], p.Effects[i+1:]...) } } } func AddEffect(c *Card, e *Effect) { if c.Type == EmptyValue && e.NeedsCard { //can't apply effect to empty card return } if e.Target == uuid.Nil { log.Println("trying to apply targeted effect before target set") return } if c.Position < 0 || c.Position > 3 { log.Println("trying to apply effect to card not on the board") return } for _, v := range c.Effects { if v.Owner == e.Owner && v.ID == e.ID && v.Target == e.Target { //can't stack effects return } } log.Printf("applying %v to %v", e, c) c.Effects = append(c.Effects, e) } func AddPlayerEffect(p *Player, e *Effect) { if p == nil || e == nil { log.Println("adding nil player efect") return } if e.Target != uuid.Nil { log.Println("trying to apply targeted effect to player set") return } for _, v := range p.Effects { if v.Owner == e.Owner && v.ID == e.ID { //can't stack effects return } } log.Printf("applying %v to player %v", e, p) p.Effects = append(p.Effects, e) }