Exemplo n.º 1
0
// ToWire converts the board to the wire representation with respect to the
// given faction (since the wire factions are us vs. them).
func (b *Board) ToWire(out botapi.Board, faction int) error {
	out.SetWidth(uint16(b.Size.X))
	out.SetHeight(uint16(b.Size.Y))
	out.SetRound(int32(b.Round))

	n := 0
	for _, r := range b.cells {
		if r != nil {
			n++
		}
	}
	robots, err := botapi.NewRobot_List(out.Segment(), int32(n))
	if err != nil {
		return err
	}
	if err = out.SetRobots(robots); err != nil {
		return err
	}
	n = 0
	for i, r := range b.cells {
		if r == nil {
			continue
		}
		outr := robots.At(n)
		outr.SetId(uint32(r.ID))
		outr.SetX(uint16(i % b.Size.X))
		outr.SetY(uint16(i / b.Size.X))
		outr.SetHealth(int16(r.Health))
		if r.Faction == faction {
			outr.SetFaction(botapi.Faction_mine)
		} else {
			outr.SetFaction(botapi.Faction_opponent)
		}
		n++
	}
	return nil
}