feat: store battles and bombings
This commit is contained in:
@@ -2,12 +2,16 @@ package controller
|
||||
|
||||
import (
|
||||
// "github.com/iliadenisov/galaxy/internal/game/battle"
|
||||
"maps"
|
||||
"slices"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/iliadenisov/galaxy/internal/model/game"
|
||||
)
|
||||
|
||||
func MakeTurn(c *Controller, r Repo, g *game.Game) error {
|
||||
func MakeTurn(c *Controller, r Repo) error {
|
||||
// Next turn
|
||||
g.Age += 1
|
||||
c.Cache.g.Turn += 1
|
||||
|
||||
// 01. Корабли, где это возможно, объединяются в группы.
|
||||
c.Cache.TurnMergeEqualShipGroups()
|
||||
@@ -28,7 +32,7 @@ func MakeTurn(c *Controller, r Repo, g *game.Game) error {
|
||||
battles = append(battles, ProduceBattles(c.Cache)...)
|
||||
|
||||
// 07. Корабли бомбят вражеские планеты.
|
||||
_ = c.Cache.ProduceBombings()
|
||||
bombings := c.Cache.ProduceBombings()
|
||||
|
||||
// 08. На планетах строятся корабли.
|
||||
// 09. Корабли, где это возможно, объединяются в группы.
|
||||
@@ -49,12 +53,33 @@ func MakeTurn(c *Controller, r Repo, g *game.Game) error {
|
||||
|
||||
/*** Last steps ***/
|
||||
|
||||
// Store bombings
|
||||
if len(bombings) > 0 {
|
||||
if err := r.SaveBombings(c.Cache.g.Turn, bombings); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
// Store battles
|
||||
if len(battles) > 0 {
|
||||
battleMeta := make([]game.BattleMeta, len(battles))
|
||||
for i := range battles {
|
||||
// TODO: add In_Battle / Out_Battle participants?
|
||||
br := TransformBattle(c.Cache, battles[i])
|
||||
if err := r.SaveBattle(g.Age, br); err != nil {
|
||||
b := battles[i]
|
||||
|
||||
observers := make(map[uuid.UUID]bool)
|
||||
for sgi := range b.observerGroups {
|
||||
observers[c.Cache.ShipGroup(sgi).OwnerID] = true
|
||||
}
|
||||
|
||||
battleMeta[i] = game.BattleMeta{
|
||||
Turn: c.Cache.g.Turn,
|
||||
Planet: b.Planet,
|
||||
BattleID: b.ID,
|
||||
ObserverIDs: slices.Collect(maps.Keys(observers)),
|
||||
}
|
||||
|
||||
report := TransformBattle(c.Cache, b)
|
||||
if err := r.SaveBattle(c.Cache.g.Turn, report, &battleMeta[i]); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
@@ -68,5 +93,6 @@ func MakeTurn(c *Controller, r Repo, g *game.Game) error {
|
||||
// TODO: Store individual reports
|
||||
|
||||
_ = winners
|
||||
// [ ] monitor memory consumption at this point?
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user