package game import ( "strings" "github.com/google/uuid" ) type Relation string const ( RelationWar Relation = "WAR" RelationPeace Relation = "PEACE" ) var ( relationSet = map[string]Relation{ strings.ToLower(RelationWar.String()): RelationWar, strings.ToLower(RelationPeace.String()): RelationPeace, } ) type Race struct { ID uuid.UUID `json:"id"` Name string `json:"name"` TTL uint `json:"ttl"` Extinct bool `json:"extinct"` Votes Float `json:"votes"` VoteFor uuid.UUID `json:"voteFor"` Relations []RaceRelation `json:"relations"` Tech TechSet `json:"tech"` Sciences []Science `json:"science,omitempty"` ShipTypes []ShipType `json:"shipType,omitempty"` } func ParseRelation(v string) (Relation, bool) { if v, ok := relationSet[strings.ToLower(v)]; ok { return v, ok } return Relation(""), false } func (r Relation) String() string { return string(r) } type RaceRelation struct { RaceID uuid.UUID `json:"raceId"` Relation Relation `json:"relation"` } func (r Race) TechLevel(t Tech) float64 { return r.Tech.Value(t) } func (r Race) FlightDistance() float64 { return r.TechLevel(TechDrive) * 40 } func (r Race) VisibilityDistance() float64 { return r.TechLevel(TechDrive) * 30 }