mirror of
https://github.com/nolen777/eagle0.git
synced 2026-07-29 00:55:43 +00:00
Route tutorial create requests to tutorial games (#8351)
This commit is contained in:
@@ -155,6 +155,7 @@ scala_library(
|
||||
"//src/main/scala/net/eagle0/eagle/library/settings:max_supported_players",
|
||||
"//src/main/scala/net/eagle0/eagle/model/proto_converters:tutorial_phase_converter",
|
||||
"//src/main/scala/net/eagle0/eagle/model/proto_converters/game_state",
|
||||
"//src/main/scala/net/eagle0/eagle/model/state:tutorial_phase",
|
||||
"//src/main/scala/net/eagle0/eagle/model/state/game_state",
|
||||
"//src/main/scala/net/eagle0/eagle/service/new_game_creation:game_parameters_utils",
|
||||
"//src/main/scala/net/eagle0/eagle/service/persistence:save_directory",
|
||||
|
||||
@@ -17,6 +17,7 @@ import net.eagle0.eagle.common.tutorial_phase.TutorialPhase as TutorialPhaseProt
|
||||
import net.eagle0.eagle.library.settings.MaxSupportedPlayers
|
||||
import net.eagle0.eagle.library.EagleClientException
|
||||
import net.eagle0.eagle.model.proto_converters.TutorialPhaseConverter
|
||||
import net.eagle0.eagle.model.state.TutorialPhase
|
||||
import net.eagle0.eagle.service.new_game_creation.GameParametersUtils
|
||||
import net.eagle0.eagle.service.CustomBattleManager.CreateCustomBattleResponse
|
||||
import net.eagle0.eagle.UserId
|
||||
@@ -65,21 +66,22 @@ class EagleServiceImpl(
|
||||
def createGame(
|
||||
request: CreateGameRequest
|
||||
): Future[CreateGameResponse] =
|
||||
if request.tutorialStartPhase != TutorialPhaseProto.TUTORIAL_PHASE_UNKNOWN then
|
||||
val startPhase = TutorialPhaseConverter.fromProto(request.tutorialStartPhase)
|
||||
lockAndUpdateGamesWith(uid =>
|
||||
gamesManager.createTutorialGameForUser(uid, new Random().nextLong(), startPhase = startPhase)
|
||||
)
|
||||
else
|
||||
lockAndUpdateGamesWith(uid =>
|
||||
gamesManager.createGameForUser(
|
||||
expandedGameParameters = GameParametersUtils.defaultExpandedGameParameters,
|
||||
userId = uid,
|
||||
desiredLeaderTextId = request.desiredLeaderTextId,
|
||||
maxHumanPlayers = request.humanPlayerCount,
|
||||
totalPlayers = request.totalPlayerCount
|
||||
EagleServiceImpl.tutorialStartPhaseForCreateGame(request) match {
|
||||
case Some(startPhase) =>
|
||||
lockAndUpdateGamesWith(uid =>
|
||||
gamesManager.createTutorialGameForUser(uid, new Random().nextLong(), startPhase = startPhase)
|
||||
)
|
||||
)
|
||||
case None =>
|
||||
lockAndUpdateGamesWith(uid =>
|
||||
gamesManager.createGameForUser(
|
||||
expandedGameParameters = GameParametersUtils.defaultExpandedGameParameters,
|
||||
userId = uid,
|
||||
desiredLeaderTextId = request.desiredLeaderTextId,
|
||||
maxHumanPlayers = request.humanPlayerCount,
|
||||
totalPlayers = request.totalPlayerCount
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
private def createCustomBattle(
|
||||
request: CustomBattleRequest
|
||||
@@ -685,6 +687,13 @@ class EagleServiceImpl(
|
||||
}
|
||||
|
||||
object EagleServiceImpl {
|
||||
private[service] def tutorialStartPhaseForCreateGame(request: CreateGameRequest): Option[TutorialPhase] =
|
||||
if request.tutorialStartPhase != TutorialPhaseProto.TUTORIAL_PHASE_UNKNOWN then
|
||||
Some(TutorialPhaseConverter.fromProto(request.tutorialStartPhase))
|
||||
else if request.skipTutorialBattle then Some(TutorialPhase.Expansion)
|
||||
else if request.isTutorial then Some(TutorialPhase.OpeningBattle)
|
||||
else None
|
||||
|
||||
def apply(
|
||||
gamesManager: GamesManager,
|
||||
customBattleManager: CustomBattleManager,
|
||||
|
||||
@@ -28,6 +28,18 @@ scala_test(
|
||||
],
|
||||
)
|
||||
|
||||
scala_test(
|
||||
name = "eagle_service_impl_test",
|
||||
timeout = "short",
|
||||
srcs = ["EagleServiceImplTest.scala"],
|
||||
deps = [
|
||||
"//src/main/protobuf/net/eagle0/eagle/api:eagle_scala_grpc",
|
||||
"//src/main/protobuf/net/eagle0/eagle/common:tutorial_phase_scala_proto",
|
||||
"//src/main/scala/net/eagle0/eagle/model/state:tutorial_phase",
|
||||
"//src/main/scala/net/eagle0/eagle/service",
|
||||
],
|
||||
)
|
||||
|
||||
scala_test(
|
||||
name = "sqlite_history_test",
|
||||
timeout = "moderate",
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
package net.eagle0.eagle.service
|
||||
|
||||
import net.eagle0.eagle.api.eagle.CreateGameRequest
|
||||
import net.eagle0.eagle.common.tutorial_phase.TutorialPhase as TutorialPhaseProto
|
||||
import net.eagle0.eagle.model.state.TutorialPhase
|
||||
import org.scalatest.flatspec.AnyFlatSpec
|
||||
import org.scalatest.matchers.should.Matchers
|
||||
|
||||
class EagleServiceImplTest extends AnyFlatSpec with Matchers {
|
||||
|
||||
"tutorialStartPhaseForCreateGame" should "start tutorial requests at the opening battle by default" in {
|
||||
EagleServiceImpl.tutorialStartPhaseForCreateGame(
|
||||
CreateGameRequest(isTutorial = true)
|
||||
) shouldBe Some(TutorialPhase.OpeningBattle)
|
||||
}
|
||||
|
||||
it should "start skip-battle tutorial requests at expansion" in {
|
||||
EagleServiceImpl.tutorialStartPhaseForCreateGame(
|
||||
CreateGameRequest(isTutorial = true, skipTutorialBattle = true)
|
||||
) shouldBe Some(TutorialPhase.Expansion)
|
||||
}
|
||||
|
||||
it should "prefer an explicit tutorial start phase" in {
|
||||
EagleServiceImpl.tutorialStartPhaseForCreateGame(
|
||||
CreateGameRequest(
|
||||
isTutorial = true,
|
||||
skipTutorialBattle = true,
|
||||
tutorialStartPhase = TutorialPhaseProto.TUTORIAL_PHASE_MOBILIZATION
|
||||
)
|
||||
) shouldBe Some(TutorialPhase.Mobilization)
|
||||
}
|
||||
|
||||
it should "leave normal game requests on the normal creation path" in {
|
||||
EagleServiceImpl.tutorialStartPhaseForCreateGame(CreateGameRequest()) shouldBe None
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user