tome_lib/effect.go

78 lines
1.5 KiB
Go

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)
}