Convert TruceTurnBackPhaseAction to use Scala types internally (#4668)

- Replace LegacyFactionUtils.hasTruceOrAlliance with FactionUtils.hasTruceOrAlliance
- Use Scala FactionT and ProvinceT instead of proto types
- Remove GameStateConverter.toProto() call (was converting Scala to proto unnecessarily)
- Update BUILD.bazel deps: remove legacy_faction_utils and proto_converters/game_state,
  add faction_utils and state/faction

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-16 16:37:56 -08:00
committed by GitHub
co-authored by Claude Opus 4.5
parent 2982927200
commit 486e99a02d
2 changed files with 11 additions and 12 deletions
@@ -1861,7 +1861,7 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/library/actions/impl/common:protoless_sequential_results_action",
"//src/main/scala/net/eagle0/eagle/library/actions/impl/common:random_state_trait_sequencer",
"//src/main/scala/net/eagle0/eagle/library/actions/impl/common:t_random_sequential_results_action",
"//src/main/scala/net/eagle0/eagle/library/util/faction_utils:legacy_faction_utils",
"//src/main/scala/net/eagle0/eagle/library/util/faction_utils",
"//src/main/scala/net/eagle0/eagle/model/action_result:action_result_trait",
"//src/main/scala/net/eagle0/eagle/model/action_result:changed_battalion_trait",
"//src/main/scala/net/eagle0/eagle/model/action_result:changed_hero_trait",
@@ -1873,10 +1873,10 @@ scala_library(
"//src/main/scala/net/eagle0/eagle/model/action_result/generated_text_request",
"//src/main/scala/net/eagle0/eagle/model/action_result/types:end_truce_turn_back_phase_result_type",
"//src/main/scala/net/eagle0/eagle/model/action_result/types:withdrawal_for_truce_result_type",
"//src/main/scala/net/eagle0/eagle/model/proto_converters/game_state",
"//src/main/scala/net/eagle0/eagle/model/proto_converters/province",
"//src/main/scala/net/eagle0/eagle/model/state:army",
"//src/main/scala/net/eagle0/eagle/model/state:round_phase",
"//src/main/scala/net/eagle0/eagle/model/state/faction",
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
"//src/main/scala/net/eagle0/eagle/model/state/province",
],
@@ -2,23 +2,22 @@ package net.eagle0.eagle.library.actions.impl.action
import net.eagle0.common.{FunctionalRandom, RandomState}
import net.eagle0.eagle.{FactionId, ProvinceId}
import net.eagle0.eagle.internal.game_state.GameState as GameStateProto
import net.eagle0.eagle.internal.province.Province as ProvinceProto
import net.eagle0.eagle.library.actions.applier.ActionResultTApplier
import net.eagle0.eagle.library.actions.impl.common.{RandomStateTSequencer, TRandomSequentialResultsAction}
import net.eagle0.eagle.library.util.faction_utils.LegacyFactionUtils
import net.eagle0.eagle.library.util.faction_utils.FactionUtils
import net.eagle0.eagle.model.action_result.changed_province.concrete.{ChangedProvinceC, HostileArmyStatusChange}
import net.eagle0.eagle.model.action_result.concrete.ActionResultC
import net.eagle0.eagle.model.action_result.types.{EndTruceTurnBackPhaseResultType, WithdrawalForTruceResultType}
import net.eagle0.eagle.model.action_result.ActionResultT
import net.eagle0.eagle.model.proto_converters.game_state.GameStateConverter
import net.eagle0.eagle.model.proto_converters.province.ProvinceConverter
import net.eagle0.eagle.model.state.faction.FactionT
import net.eagle0.eagle.model.state.game_state.GameState
import net.eagle0.eagle.model.state.province.ProvinceT
import net.eagle0.eagle.model.state.HostileArmyGroupStatus
import net.eagle0.eagle.model.state.RoundPhase
case class TruceTurnBackPhaseAction(gameState: GameState) extends TRandomSequentialResultsAction(gameState) {
private val startingState: GameStateProto = GameStateConverter.toProto(gameState)
private val factions: Vector[FactionT] = gameState.factions.values.toVector
private def checkOneAttackingArmyGroup(
attackingFactionId: FactionId,
@@ -26,10 +25,10 @@ case class TruceTurnBackPhaseAction(gameState: GameState) extends TRandomSequent
provinceId: ProvinceId
): Option[ActionResultT] =
Option.when(
LegacyFactionUtils.hasTruceOrAlliance(
FactionUtils.hasTruceOrAlliance(
defendingFid,
attackingFactionId,
startingState
factions
)
) {
ActionResultC(
@@ -48,7 +47,7 @@ case class TruceTurnBackPhaseAction(gameState: GameState) extends TRandomSequent
)
}
private def checkOneProvince(province: ProvinceProto): Vector[ActionResultT] =
private def checkOneProvince(province: ProvinceT): Vector[ActionResultT] =
province.rulingFactionId.map { defendingFid =>
province.hostileArmies.flatMap { attackingArmy =>
checkOneAttackingArmyGroup(
@@ -56,7 +55,7 @@ case class TruceTurnBackPhaseAction(gameState: GameState) extends TRandomSequent
defendingFid = defendingFid,
provinceId = province.id
)
}.toVector
}
}
.getOrElse(Vector())
@@ -69,7 +68,7 @@ case class TruceTurnBackPhaseAction(gameState: GameState) extends TRandomSequent
actionResultApplier = actionResultTApplier,
functionalRandom = functionalRandom
)
.withActionResults(_ => startingState.provinces.values.toVector.flatMap(checkOneProvince))
.withActionResults(_ => gameState.provinces.values.toVector.flatMap(checkOneProvince))
.withProtolessSequentialResultsAction(gs =>
WithdrawnArmiesReturnHomeAction(
gs.currentRoundId,