Beispiel #1
0
        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));
        }
Beispiel #2
0
 private static EnemyInBattle[] CreateEnemiesInBattle(EnemyLayout enemyLayout) =>
     enemyLayout.Positions.Select(x => EnemyInBattle.New(x)).ToArray();
Beispiel #3
0
 public static BattleData New(PartyMember partyMember1, PartyMember partyMember2, PartyMember partyMember3, PartyMember partyMember4,
     EnemyLayout enemyLayout)
 {
     return new BattleData(partyMember1, partyMember2, partyMember3, partyMember4, enemyLayout);
 }
Beispiel #4
0
        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();
        }