snengame/internal/game/card.go

90 lines
1.5 KiB
Go

package game
import (
"fmt"
"github.com/google/uuid"
)
type Card struct {
Type CardType `json:"type"`
BasePower int `json:"base_power"`
Power int `json:"power"`
Id uuid.UUID `json:"id"`
Sick bool `json:"sick"`
Counters int `json:"counters"`
Owner int `json:"owner"`
Position int `json:"position"`
Spell bool `json:"spell"`
Effects []*Effect `json:"effects"`
}
type CardType int
const (
Valk CardType = iota
Ace
Two
Three
Four
Five
Six
Seven
Eight
)
const (
EmptyValue CardType = -1
)
func (c CardType) String() string {
if c == -1 {
return " "
}
return []string{"V", "A", "2", "3", "4", "5", "6", "7", "8"}[c]
}
func NewCard(v, o, p int, id uuid.UUID) *Card {
if id == uuid.Nil {
id = uuid.New()
}
return &Card{
Type: CardType(v),
BasePower: OraclePower(CardType(v), nil),
Power: OraclePower(CardType(v), nil),
Id: id,
Sick: false,
Counters: 0,
Owner: o,
Position: p,
Spell: OracleSpell(CardType(v), nil),
Effects: []*Effect{},
}
}
func NewEmpty(p int) *Card {
return &Card{
Type: EmptyValue,
BasePower: -1,
Power: -1,
Id: uuid.New(),
Sick: false,
Counters: 0,
Owner: -1,
Position: p,
Spell: false,
Effects: []*Effect{},
}
}
func (c *Card) Empty() bool {
return c.Type == EmptyValue
}
func (c *Card) String() string {
ready := " "
if c.Sick {
ready = "*"
}
return fmt.Sprintf("%v%v%v", c.Type, c.Power, ready)
}