public static void StartBattle(GameModel gameModel, String backgroundName, EnemyLayout enemyLayout) { //WPF requires dependency objects to be created on the UI thread. //TODO: How can I fix this? UiThread.Execute(() => { BattleModel.Instance.BattlefieldData = BattlefieldData.New(backgroundName); BattleModel.Instance.BattleData = BattleData.New(gameModel.PartyMember1, gameModel.PartyMember2, gameModel.PartyMember3, gameModel.PartyMember4, enemyLayout); }); GameModel.Instance.State = GameState.InBattleNoInput; //start listening for messages 2 seconds after we start the process. This should give enough time //for the animation to play out, and the player to get his bearings. Also, start listening to messages at this point TimerUtility.ExecuteAfterDelay(DelayedAction.New(() => { BattleModel.Instance.SubscribeToMessages(); GameModel.Instance.State = GameState.InBattle; }, 2 * Constants.TIMING_TICKS_PER_SECOND)); }
private static EnemyInBattle[] CreateEnemiesInBattle(EnemyLayout enemyLayout) => enemyLayout.Positions.Select(x => EnemyInBattle.New(x)).ToArray();
public static BattleData New(PartyMember partyMember1, PartyMember partyMember2, PartyMember partyMember3, PartyMember partyMember4, EnemyLayout enemyLayout) { return new BattleData(partyMember1, partyMember2, partyMember3, partyMember4, enemyLayout); }
protected BattleData(PartyMember partyMember1, PartyMember partyMember2, PartyMember partyMember3, PartyMember partyMember4, EnemyLayout enemyLayout) { PartyMemberInBattle1 = CreatePartyMemberInBattle(partyMember1); PartyMemberInBattle2 = CreatePartyMemberInBattle(partyMember2); PartyMemberInBattle3 = CreatePartyMemberInBattle(partyMember3); PartyMemberInBattle4 = CreatePartyMemberInBattle(partyMember4); Enemies = CreateEnemiesInBattle(enemyLayout); //wire up the 6 helper properties for party members/enemies/battle entities in battle/alive var allPartyMembersInBattleBinding = new MultiBinding { Converter = new BattlefieldDataAllPartyMembersInBattleConverter() }; allPartyMembersInBattleBinding.Bindings.Add(new Binding("PartyMemberInBattle1") { Source = this }); allPartyMembersInBattleBinding.Bindings.Add(new Binding("PartyMemberInBattle2") { Source = this }); allPartyMembersInBattleBinding.Bindings.Add(new Binding("PartyMemberInBattle3") { Source = this }); allPartyMembersInBattleBinding.Bindings.Add(new Binding("PartyMemberInBattle4") { Source = this }); BindingOperations.SetBinding(this, AllPartyMembersInBattleProperty, allPartyMembersInBattleBinding); var allEnemiesInBattleBinding = new Binding("Enemies") { Source = this, Converter = new BattlefieldDataAllEnemiesInBattleConverter() }; BindingOperations.SetBinding(this, AllEnemiesInBattleProperty, allEnemiesInBattleBinding); var allAlivePartyMembersInBattleBinding = new MultiBinding { Converter = new BattlefieldDataAllAliveBattleEntitiesInBattleConverter<PartyMemberInBattle>() }; allAlivePartyMembersInBattleBinding.Bindings.Add(new Binding("AllPartyMembersInBattle") { Source = this }); allAlivePartyMembersInBattleBinding.Bindings.Add(new Binding("IsAlive") { Source = PartyMemberInBattle1 }); allAlivePartyMembersInBattleBinding.Bindings.Add(new Binding("IsAlive") { Source = PartyMemberInBattle2 }); allAlivePartyMembersInBattleBinding.Bindings.Add(new Binding("IsAlive") { Source = PartyMemberInBattle3 }); allAlivePartyMembersInBattleBinding.Bindings.Add(new Binding("IsAlive") { Source = PartyMemberInBattle4 }); BindingOperations.SetBinding(this, AllAlivePartyMembersInBattleProperty, allAlivePartyMembersInBattleBinding); var allAliveEnemiesInBattleBinding = new MultiBinding { Converter = new BattlefieldDataAllAliveBattleEntitiesInBattleConverter<EnemyInBattle>() }; allAliveEnemiesInBattleBinding.Bindings.Add(new Binding("AllEnemiesInBattle") { Source = this }); foreach (var enemy in AllEnemiesInBattle) { allAliveEnemiesInBattleBinding.Bindings.Add(new Binding("IsAlive") { Source = enemy }); } BindingOperations.SetBinding(this, AllAliveEnemiesInBattleProperty, allAliveEnemiesInBattleBinding); var allBattleEntitiesInBattleBinding = new MultiBinding { Converter = new BattlefieldDataBattleEntitiesInBattleConverter() }; allBattleEntitiesInBattleBinding.Bindings.Add(new Binding("AllPartyMembersInBattle") { Source = this }); allBattleEntitiesInBattleBinding.Bindings.Add(new Binding("AllEnemiesInBattle") { Source = this }); BindingOperations.SetBinding(this, AllBattleEntitiesInBattleProperty, allBattleEntitiesInBattleBinding); var allAliveBattleEntitiesInBattleBinding = new MultiBinding { Converter = new BattlefieldDataBattleEntitiesInBattleConverter() }; allAliveBattleEntitiesInBattleBinding.Bindings.Add(new Binding("AllAlivePartyMembersInBattle") { Source = this }); allAliveBattleEntitiesInBattleBinding.Bindings.Add(new Binding("AllAliveEnemiesInBattle") { Source = this }); BindingOperations.SetBinding(this, AllAliveBattleEntitiesInBattleProperty, allAliveBattleEntitiesInBattleBinding); //once the bindings are established... _actionMultiplier = CalculateActionMultiplier(); }