74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package game
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"log"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Player struct {
|
|
Name string `json:"name"`
|
|
Id int `json:"id"`
|
|
Hand []Card `json:"hand"` //probably should be a Deck
|
|
Life int `json:"life"`
|
|
}
|
|
|
|
func NewPlayer(name string, id int) *Player {
|
|
return &Player{
|
|
Name: name,
|
|
Id: id,
|
|
Hand: []Card{},
|
|
Life: 3,
|
|
}
|
|
}
|
|
|
|
func (p *Player) MarshalJSON() ([]byte, error) {
|
|
var ported_hand []*PortableCard
|
|
for i, _ := range p.Hand {
|
|
ported_hand = append(ported_hand, p.Hand[i].Port())
|
|
}
|
|
res := []interface{}{p.Name, p.Id, ported_hand, p.Life}
|
|
return json.Marshal(res)
|
|
}
|
|
|
|
func (p *Player) UnmarshalJSON(data []byte) (err error) {
|
|
ported := []interface{}{}
|
|
err = json.Unmarshal(data, &ported)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
fmt.Println(ported)
|
|
p.Name = ported[0].(string)
|
|
p.Id = int(ported[1].(float64))
|
|
var tmp []interface{}
|
|
if ported[2] != nil {
|
|
tmp = ported[2].([]interface{})
|
|
} else {
|
|
tmp = []interface{}{}
|
|
}
|
|
p.Life = int(ported[3].(float64))
|
|
hand := []Card{}
|
|
for _, v := range tmp {
|
|
m := v.(map[string]interface{})
|
|
t := int(m["type"].(float64))
|
|
i := m["ID"].(string)
|
|
b := m["sick"].(bool)
|
|
uid, err := uuid.Parse(i)
|
|
if err != nil {
|
|
log.Println("invalid card parse")
|
|
} else {
|
|
c := NewCard(t, uid)
|
|
if b {
|
|
c.Act()
|
|
} else {
|
|
c.Refresh()
|
|
}
|
|
hand = append(hand, c)
|
|
}
|
|
}
|
|
p.Hand = hand
|
|
return
|
|
}
|