@@ -0,0 +1,62 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user