spawn point infrastructure
This commit is contained in:
parent
e80f51a700
commit
a41d012008
|
@ -2,6 +2,11 @@ package game
|
||||||
|
|
||||||
import "math/rand"
|
import "math/rand"
|
||||||
|
|
||||||
|
type SpawnPoint struct {
|
||||||
|
TeamID int
|
||||||
|
Pos Position
|
||||||
|
}
|
||||||
|
|
||||||
type Obstacle struct {
|
type Obstacle struct {
|
||||||
Position Position
|
Position Position
|
||||||
}
|
}
|
||||||
|
|
95
game/game.go
95
game/game.go
|
@ -4,6 +4,43 @@ import (
|
||||||
"log"
|
"log"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type State struct {
|
||||||
|
Teams []Team
|
||||||
|
SpawnPoints map[int]SpawnPoint // keys are racer IDs
|
||||||
|
Obstacles []Obstacle
|
||||||
|
GameOver bool
|
||||||
|
}
|
||||||
|
|
||||||
|
type Team struct {
|
||||||
|
id int
|
||||||
|
Racers []Racer
|
||||||
|
Baton Baton
|
||||||
|
won bool
|
||||||
|
Lane int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Racer struct {
|
||||||
|
ID int
|
||||||
|
TeamID int
|
||||||
|
Position Position
|
||||||
|
Kinetics Kinetics
|
||||||
|
Battery Battery
|
||||||
|
}
|
||||||
|
|
||||||
|
type Kinetics struct {
|
||||||
|
V int
|
||||||
|
A int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Battery struct {
|
||||||
|
Capacity int
|
||||||
|
Charge int
|
||||||
|
}
|
||||||
|
|
||||||
|
type Baton struct {
|
||||||
|
HolderID int
|
||||||
|
}
|
||||||
|
|
||||||
func UpdateState(s State, sOld State, cmds []Command) State {
|
func UpdateState(s State, sOld State, cmds []Command) State {
|
||||||
for i, cmd := range cmds {
|
for i, cmd := range cmds {
|
||||||
s = doCommand(cmd, s, i)
|
s = doCommand(cmd, s, i)
|
||||||
|
@ -87,7 +124,7 @@ func destroyRacer(s State, r Racer) State {
|
||||||
s.Obstacles = append(s.Obstacles, Obstacle{Position: r.Position})
|
s.Obstacles = append(s.Obstacles, Obstacle{Position: r.Position})
|
||||||
|
|
||||||
// spawn racer back at starting position
|
// spawn racer back at starting position
|
||||||
r.Position = r.StartPos
|
r.Position = s.SpawnPoints[r.ID].Pos
|
||||||
r.Kinetics = Kinetics{}
|
r.Kinetics = Kinetics{}
|
||||||
r.Battery.Charge = r.Battery.Capacity
|
r.Battery.Charge = r.Battery.Capacity
|
||||||
|
|
||||||
|
@ -130,49 +167,9 @@ func abs(n int) int {
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
type State struct {
|
|
||||||
Teams []Team
|
|
||||||
Obstacles []Obstacle
|
|
||||||
GameOver bool
|
|
||||||
}
|
|
||||||
|
|
||||||
type Team struct {
|
|
||||||
id int
|
|
||||||
Racers []Racer
|
|
||||||
Baton Baton
|
|
||||||
won bool
|
|
||||||
Lane int
|
|
||||||
}
|
|
||||||
|
|
||||||
type Racer struct {
|
|
||||||
ID int
|
|
||||||
TeamID int
|
|
||||||
Position Position
|
|
||||||
StartPos Position
|
|
||||||
Kinetics Kinetics
|
|
||||||
Battery Battery
|
|
||||||
}
|
|
||||||
|
|
||||||
type Kinetics struct {
|
|
||||||
V int
|
|
||||||
A int
|
|
||||||
}
|
|
||||||
|
|
||||||
type Position struct {
|
|
||||||
Lane int
|
|
||||||
Pos int
|
|
||||||
}
|
|
||||||
|
|
||||||
type Battery struct {
|
|
||||||
Capacity int
|
|
||||||
Charge int
|
|
||||||
}
|
|
||||||
|
|
||||||
type Baton struct {
|
|
||||||
HolderID int
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewState() State {
|
func NewState() State {
|
||||||
|
spawns := make(map[int]SpawnPoint)
|
||||||
|
|
||||||
var teams []Team
|
var teams []Team
|
||||||
for i := 0; i < NumTeams; i++ {
|
for i := 0; i < NumTeams; i++ {
|
||||||
var racers []Racer
|
var racers []Racer
|
||||||
|
@ -180,7 +177,7 @@ func NewState() State {
|
||||||
r := Racer{
|
r := Racer{
|
||||||
ID: i*NumTeams + j,
|
ID: i*NumTeams + j,
|
||||||
TeamID: i,
|
TeamID: i,
|
||||||
StartPos: Position{
|
Position: Position{
|
||||||
Lane: i,
|
Lane: i,
|
||||||
Pos: j * (Steps / numRacers),
|
Pos: j * (Steps / numRacers),
|
||||||
},
|
},
|
||||||
|
@ -189,7 +186,10 @@ func NewState() State {
|
||||||
Charge: baseCharge,
|
Charge: baseCharge,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
r.Position = r.StartPos
|
spawns[r.ID] = SpawnPoint{
|
||||||
|
TeamID: i,
|
||||||
|
Pos: r.Position,
|
||||||
|
}
|
||||||
racers = append(racers, r)
|
racers = append(racers, r)
|
||||||
}
|
}
|
||||||
teams = append(teams, Team{
|
teams = append(teams, Team{
|
||||||
|
@ -201,8 +201,9 @@ func NewState() State {
|
||||||
}
|
}
|
||||||
|
|
||||||
return State{
|
return State{
|
||||||
Teams: teams,
|
Teams: teams,
|
||||||
Obstacles: randomObstacles(teams),
|
SpawnPoints: spawns,
|
||||||
|
Obstacles: randomObstacles(teams),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,10 @@
|
||||||
package game
|
package game
|
||||||
|
|
||||||
|
type Position struct {
|
||||||
|
Lane int
|
||||||
|
Pos int
|
||||||
|
}
|
||||||
|
|
||||||
func accelerate(r Racer) Racer {
|
func accelerate(r Racer) Racer {
|
||||||
if r.Kinetics.A < -MaxA {
|
if r.Kinetics.A < -MaxA {
|
||||||
r.Kinetics.A = -MaxA
|
r.Kinetics.A = -MaxA
|
||||||
|
|
Loading…
Reference in New Issue