29-07-2019, 05:22 PM
(Modification du message : 29-07-2019, 05:49 PM par Sephi-Chan.)
Aujourd'hui, j'ai écrit les tests et le code pour résoudre les "ticks" d'exploitations.
Je suis assez content de ce système parce que je le trouve assez simple et très facile à tester.
Je vais maintenant passer au convoyage : je crée un convoi, j'y ajoute/retire des unités (un convoi va aussi vite que son unité la plus lent), des ressources (la capacité de transport dépend du nombre et du type d'unités qui forment le convoi), je le lance, il arrive à destination au moment prévu.
test "Exploitation ticks make units bring some resources back to their territory" do
:ok = Seelies.Router.dispatch(%Seelies.StartGame{game_id: "42", board: board()})
:ok = Seelies.Router.dispatch(%Seelies.DeployStartingUnit{game_id: "42", unit_id: "u1", territory_id: "t1", species: :ant})
:ok = Seelies.Router.dispatch(%Seelies.DeployStartingUnit{game_id: "42", unit_id: "u2", territory_id: "t5", species: :ant})
:ok = Seelies.Router.dispatch(%Seelies.UnitStartsExploitingDeposit{game_id: "42", unit_id: "u1", deposit_id: "d1", time: 0})
:ok = Seelies.Router.dispatch(%Seelies.UnitStartsExploitingDeposit{game_id: "42", unit_id: "u2", deposit_id: "d5", time: 0})
:ok = Seelies.Router.dispatch(%Seelies.DepositsExploitationTicks{game_id: "42", time: 60})
{:error, :already_exploiting_deposit} = Seelies.Router.dispatch(%Seelies.UnitStartsExploitingDeposit{game_id: "42", unit_id: "u1", deposit_id: "d1", time: 60})
game = Commanded.Aggregates.Aggregate.aggregate_state(Seelies.Game, "42")
assert Seelies.Game.resources(game, "t1").gold > 0
assert Seelies.Game.resources(game, "t1").silver == 0
assert Seelies.Game.resources(game, "t5").gold == 0
assert Seelies.Game.resources(game, "t5").silver > 0
:ok = Seelies.Router.dispatch(%Seelies.DepositsExploitationTicks{game_id: "42", time: 120})
game_2 = Commanded.Aggregates.Aggregate.aggregate_state(Seelies.Game, "42")
assert Seelies.Game.resources(game_2, "t1").gold == Seelies.Game.resources(game, "t1").gold * 2
assert Seelies.Game.resources(game_2, "t1").silver == 0
assert Seelies.Game.resources(game_2, "t5").gold == 0
assert Seelies.Game.resources(game_2, "t5").silver == Seelies.Game.resources(game, "t5").silver * 2
end
Je suis assez content de ce système parce que je le trouve assez simple et très facile à tester.
Je vais maintenant passer au convoyage : je crée un convoi, j'y ajoute/retire des unités (un convoi va aussi vite que son unité la plus lent), des ressources (la capacité de transport dépend du nombre et du type d'unités qui forment le convoi), je le lance, il arrive à destination au moment prévu.