feat: store battles and bombings

This commit is contained in:
Ilia Denisov
2026-01-30 18:57:43 +03:00
parent 824f6609ab
commit 4c14234afb
16 changed files with 274 additions and 103 deletions
+32 -6
View File
@@ -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
}