moved code out of awkward bots repo
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bitbucket.org/hackerbots/bot"
|
||||
v "bitbucket.org/hackerbots/vector"
|
||||
"log"
|
||||
"sort"
|
||||
@@ -10,11 +9,46 @@ import (
|
||||
|
||||
const maxPlayer = 128
|
||||
|
||||
type Config struct {
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
// TODO: candidate for embedding?
|
||||
Stats Stats `json:"stats"`
|
||||
}
|
||||
|
||||
type Boardstate struct {
|
||||
Robots []Robot `json:"robots"`
|
||||
Projectiles []Projectile `json:"projectiles"`
|
||||
Splosions []Splosion `json:"splosions"`
|
||||
Reset bool `json:"reset"`
|
||||
Type string `json:"type"`
|
||||
Turn int `json:"turn"`
|
||||
}
|
||||
|
||||
func (bs *Boardstate) EmptySlices() {
|
||||
bs.Robots = bs.Robots[:0]
|
||||
bs.Projectiles = bs.Projectiles[:0]
|
||||
bs.Splosions = bs.Splosions[:0]
|
||||
}
|
||||
|
||||
func NewBoardstate() *Boardstate {
|
||||
return &Boardstate{
|
||||
Robots: []Robot{},
|
||||
Projectiles: []Projectile{},
|
||||
Type: "boardstate",
|
||||
}
|
||||
}
|
||||
|
||||
type Scanner struct {
|
||||
Position v.Point2d `json:"position"`
|
||||
Stats Stats `json:"stats"`
|
||||
}
|
||||
|
||||
type game struct {
|
||||
id string
|
||||
players map[*player]bool
|
||||
projectiles map[*bot.Projectile]bool
|
||||
splosions map[*bot.Splosion]bool
|
||||
projectiles map[*Projectile]bool
|
||||
splosions map[*Splosion]bool
|
||||
register chan *player
|
||||
unregister chan *player
|
||||
turn int
|
||||
@@ -30,8 +64,8 @@ func NewGame(id string, width, height float64) *game {
|
||||
id: id,
|
||||
register: make(chan *player),
|
||||
unregister: make(chan *player, maxPlayer),
|
||||
projectiles: make(map[*bot.Projectile]bool),
|
||||
splosions: make(map[*bot.Splosion]bool),
|
||||
projectiles: make(map[*Projectile]bool),
|
||||
splosions: make(map[*Splosion]bool),
|
||||
players: make(map[*player]bool),
|
||||
turn: 0,
|
||||
width: width,
|
||||
@@ -46,7 +80,7 @@ func NewGame(id string, width, height float64) *game {
|
||||
|
||||
func (g *game) run() {
|
||||
var t0, t1 time.Time
|
||||
payload := bot.NewBoardstate()
|
||||
payload := NewBoardstate()
|
||||
for {
|
||||
select {
|
||||
case <-g.kill:
|
||||
@@ -102,7 +136,7 @@ func (g *game) run() {
|
||||
}
|
||||
payload.Robots = append(payload.Robots, p.Robot)
|
||||
}
|
||||
sort.Sort(bot.RobotSorter{Robots: payload.Robots})
|
||||
sort.Sort(RobotSorter{Robots: payload.Robots})
|
||||
|
||||
payload.Projectiles = append(payload.Projectiles,
|
||||
g.nudgeProjectiles()...,
|
||||
@@ -150,8 +184,8 @@ func (g *game) run() {
|
||||
}
|
||||
}
|
||||
|
||||
func (g *game) nudgeProjectiles() (rprojectiles []bot.Projectile) {
|
||||
rprojectiles = make([]bot.Projectile, 0)
|
||||
func (g *game) nudgeProjectiles() (rprojectiles []Projectile) {
|
||||
rprojectiles = make([]Projectile, 0)
|
||||
for p := range g.projectiles {
|
||||
newPos := v.Move(p.Position, p.MoveTo, float64(p.Speed), delta)
|
||||
|
||||
@@ -170,7 +204,7 @@ func (g *game) nudgeProjectiles() (rprojectiles []bot.Projectile) {
|
||||
delete(g.projectiles, p)
|
||||
|
||||
// Spawn a splosion
|
||||
splo := &bot.Splosion{
|
||||
splo := &Splosion{
|
||||
Id: p.Id,
|
||||
Position: p.Position,
|
||||
Radius: p.Radius,
|
||||
|
||||
Reference in New Issue
Block a user