diff --git a/internal/controller/battle.go b/internal/controller/battle.go index 4c6f273..fe1d551 100644 --- a/internal/controller/battle.go +++ b/internal/controller/battle.go @@ -84,6 +84,15 @@ func FilterBattleOpponents(c *Cache, attIdx, defIdx int, cacheProbability map[in } +/* +FIXME: Сражение происходит раундами + +Случайным образом из всех участвующих в сражении вооруженных кораблей выбирается один... +...Затем вновь случайным образом выбирается корабль, который будет стрелять... +Так продолжается до тех пор, пока не отстреляются все корабли. Если после +этого еще остались корабли и с той и с другой стороны, все повторяется с +самого начала (происходит еще один цикл сражения). +*/ func ProduceBattles(c *Cache) []*Battle { cacheProbability := make(map[int]map[int]float64) defer func() { clear(cacheProbability) }() diff --git a/internal/controller/generate_turn.go b/internal/controller/generate_turn.go index eb4a195..0929f9a 100644 --- a/internal/controller/generate_turn.go +++ b/internal/controller/generate_turn.go @@ -14,45 +14,47 @@ func (c *Controller) MakeTurn() error { c.Cache.g.Turn += 1 c.Cache.g.Stage = 0 - // 00. Вышедшие расы удаляются из списка участвующих рас перед началом просчета очередного хода + // 01. Вышедшие расы удаляются из списка участвующих рас перед началом просчета очередного хода c.Cache.TurnWipeExtinctRaces() - // 01. Корабли, где это возможно, объединяются в группы. - c.Cache.TurnMergeEqualShipGroups() + // TODO: передача кораблей между расами - // 02. Враждующие корабли вступают в схватку. - battles := ProduceBattles(c.Cache) - - // 03. Товары загружаются на корабли, находящиеся в начале грузовых маршрутов, и корабли входят в гиперпространство (но ещё не полетели) + // 02. Товары загружаются на корабли, находящиеся в начале грузовых маршрутов, и корабли входят в гиперпространство (но ещё не полетели) c.Cache.SendRoutedGroups() - // 04. Корабли пролетают сквозь гиперпространство. - c.Cache.MoveShipGroups() - - // 05. Корабли, где это возможно, объединяются в группы. + // 03. Корабли, где это возможно, объединяются в группы. c.Cache.TurnMergeEqualShipGroups() - // 06. Враждующие корабли снова вступают в схватку (это происходит после выхода из гиперпространства). + // 04. Враждующие корабли вступают в схватку. + battles := ProduceBattles(c.Cache) + + // 05. Корабли пролетают сквозь гиперпространство. + c.Cache.MoveShipGroups() + + // 06. Корабли, где это возможно, объединяются в группы. + c.Cache.TurnMergeEqualShipGroups() + + // 07. Враждующие корабли снова вступают в схватку (это происходит после выхода из гиперпространства). battles = append(battles, ProduceBattles(c.Cache)...) - // 07. Корабли бомбят вражеские планеты. + // 08. Корабли бомбят вражеские планеты. bombings := c.Cache.ProduceBombings() - // 08. На планетах строятся корабли. - // 09. Корабли, где это возможно, объединяются в группы. - // 10. На планетах производится промышленность, добывается сырье, разрабатываются новые технологии. - // 11. Увеличивается население планет. + // 09. На планетах строятся корабли. + // 10. Корабли, где это возможно, объединяются в группы. + // 11. На планетах производится промышленность, добывается сырье, разрабатываются новые технологии. + // 12. Увеличивается население планет. c.Cache.TurnPlanetProductions() - // 12. Товары выгружаются в конце грузовых маршрутов. - // 13. Выгруженные колонисты увеличивают население планеты (если население планеты ниже её размера). - // 14. Накопленная и выгруженная промышленность увеличивает производственный уровень планеты (если производственный уровень планеты ниже уровня населения). + // 13. Товары выгружаются в конце грузовых маршрутов. + // 14. Выгруженные колонисты увеличивают население планеты (если население планеты ниже её размера). + // 15. Накопленная и выгруженная промышленность увеличивает производственный уровень планеты (если производственный уровень планеты ниже уровня населения). c.Cache.TurnUnloadEnroutedGroups() - // 15. Происходит отмена маршрутов, выходящих за зону полета кораблей. + // 16. Происходит отмена маршрутов, выходящих за зону полета кораблей. c.Cache.RemoveUnreachableRoutes() - // 16. Происходит голосование. + // 17. Происходит голосование. winners := c.Cache.TurnCalculateVotes() c.Cache.TurnAcceptWinners(winners) diff --git a/internal/controller/route.go b/internal/controller/route.go index 117ecb7..929f1db 100644 --- a/internal/controller/route.go +++ b/internal/controller/route.go @@ -113,12 +113,15 @@ func (c *Cache) SendRoutedGroups() { case game.RouteMaterial: res = &p.Material ct = game.CargoMaterial - default: + case game.RouteEmpty: + // empty routes launched immediately so the're not required to be loaded for _, sgi := range groups { c.LaunchShips(sgi, dest) } groups = reorderGroups(groups) continue + default: + continue } for res != nil && *res > 0 && len(groups) > 0 { sgi := groups[0] diff --git a/internal/controller/ship_group.go b/internal/controller/ship_group.go index 7c6b91c..9a5d508 100644 --- a/internal/controller/ship_group.go +++ b/internal/controller/ship_group.go @@ -327,6 +327,20 @@ func (c *Cache) unsafeUnloadCargo(sgi int, q float64) { p.UnpackCapital() } +/* +TODO: Позволить передавать одноимённые группы. + + При генерировании нового имени необходимо убедиться, что оно не превысит 30 символов. + + > Если у расы, которой передается группа кораблей, уже определен класс кораблей с таким же + > названием, но другими характеристиками, принимающая раса так же получит новый + > класс кораблей, к названию которого будет добавлен случайный суффикс. + +TODO: Убедиться, что раса не покинула игру. + + При производстве хода раса может покинуть, а может и не покинуть игру, + в зхависимости от того, были ли ею отданы новые приказы. +*/ func (c *Cache) shipGroupTransfer(ri, riAccept int, groupID uuid.UUID) (err error) { c.validateRaceIndex(ri) if ri == riAccept { diff --git a/internal/controller/ship_group_send.go b/internal/controller/ship_group_send.go index 7e615ea..49dd8e4 100644 --- a/internal/controller/ship_group_send.go +++ b/internal/controller/ship_group_send.go @@ -7,6 +7,12 @@ import ( "github.com/iliadenisov/galaxy/internal/util" ) +/* +TODO: остались ли планеты у расы + +Если у расы не осталось планет, то оставшиеся корабли не смогут +покинуть своего места пребывания. +*/ func (c *Cache) shipGroupSend(ri int, groupID uuid.UUID, planetNumber uint) error { c.validateRaceIndex(ri) diff --git a/internal/model/game/group.go b/internal/model/game/group.go index 200aec4..29fa90d 100644 --- a/internal/model/game/group.go +++ b/internal/model/game/group.go @@ -39,7 +39,7 @@ const ( StateLaunched ShipGroupState = "Launched" StateInSpace ShipGroupState = "In_Space" StateUpgrade ShipGroupState = "Upgrade" - StateTransfer ShipGroupState = "Transfer" + StateTransfer ShipGroupState = "Transfer" // TODO: Группы будут передаваться мгновенно в начале производства хода ) func (sgs ShipGroupState) String() string { diff --git a/internal/model/report/planet.go b/internal/model/report/planet.go index a9d46aa..7b2d3aa 100644 --- a/internal/model/report/planet.go +++ b/internal/model/report/planet.go @@ -12,6 +12,7 @@ type LocalPlanet struct { Colonists Float `json:"colonists"` // COL C - Количество колонистов Production string `json:"production"` FreeIndustry Float `json:"freeInductry"` // Параметр "L" - Свободный производственный потенциал + // TODO: FreeIndustry - неактуальная информация, т.к. модернизация происходит в процессе производства хода } type UninhabitedPlanet struct {