示例#1
0
        private static BaseCombatant LoadCombatantFromReference(ISaveGame saveGame, CombatantReference reference)
        {
            var character = BaseCharacterDatabase.Instance.GetCharacter(reference.CharacterId);

            if (saveGame != null)
            {
                var savedCharacter = saveGame.GetCharacterByName(reference.Name);
                if (savedCharacter != null)
                {
                    character = savedCharacter;
                }
            }

            var id = reference.Id;

            if (id == null)
            {
                id = Guid.NewGuid().ToString();
            }

            var result = new BaseCombatant(character, reference.Army)
            {
                Position = reference.Position,
                Id       = id
            };

            return(result);
        }
示例#2
0
        public override void Execute()
        {
            var view       = SpawningUnit.GetComponent <CombatantView>();
            var dimensions = Model.Dimensions;
            var position   = dimensions.GetGridPositionForWorldPosition(SpawningUnit.transform.position);
            var save       = SaveGameService.CurrentSave;

            ICharacter character;

            if (save != null)
            {
                character = save.GetCharacterByName(view.CharacterName);
            }
            else
            {
                character = BaseCharacterDatabase.Instance.GetCharacter(view.CharacterId);
            }

            var combatant = new BaseCombatant(character, view.Army)
            {
                Position = position,
                Id       = view.CombatantId
            };

            Model.Battle.SpawnCombatant(combatant);
        }
示例#3
0
 public RandomEffectAreaSpell(Spell spell, BaseCombatant holder)
     : base(spell, holder)
 {
     Timer = new Timer();
     CurrentEffectCount = 0;
     IsEnding = false;
 }
示例#4
0
        public void TestBasicFight()
        {
            var attackerCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(2)
                                                .Special(0)
                                                .Speed(13)
                                                .Strength(7)
                                                .Build())
                                    .Weapons("Shortsword")
                                    .Build();

            var defenderCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(2)
                                                .Special(0)
                                                .Speed(13)
                                                .Strength(3)
                                                .Build())
                                    .Weapons("Shortsword")
                                    .Build();

            var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly);
            var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly);

            attacker.Position = new Vector2(0, 1);
            defender.Position = new Vector2(0, 0);

            var map = new Map();

            map.AddCombatant(attacker);
            map.AddCombatant(defender);

            var skillDatabase = new SkillDatabase(map);

            var forecaster = new FightForecaster(map, skillDatabase);
            var forecast   = forecaster.Forecast(attacker, defender, SkillType.Melee);
            var finalizer  = new FightFinalizer(skillDatabase);

            var final        = finalizer.Finalize(forecast, new ConstantRandomizer(100));
            var initialPhase = final.InitialPhase;

            Assert.NotNull(initialPhase);

            var initialDamage = initialPhase.Effects.GetDefenderDamage();

            Assert.AreEqual(5, initialDamage);
            var counterPhase = final.CounterPhase;

            Assert.NotNull(counterPhase);

            var counterDamage = counterPhase.Effects.GetDefenderDamage();

            Assert.AreEqual(1, counterDamage);
        }
示例#5
0
        public void TakeDamage()
        {
            var barrelCharacter = new CharacterBuilder()
                                  .Attributes(new AttributesBuilder()
                                              .Health(50)
                                              .Defense(0)
                                              .Build())
                                  .Build();
            var fuckingBarrel = new BaseCombatant(barrelCharacter, ArmyType.Other);
            var damage        = new Damage(100);

            damage.Apply(fuckingBarrel);
            Assert.AreEqual(0, fuckingBarrel.Health);
            Assert.IsFalse(fuckingBarrel.IsAlive);
        }
示例#6
0
        public void TestAttackerKillsOnDouble()
        {
            var attackerCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(2)
                                                .Special(0)
                                                .Speed(33)
                                                .Strength(10)
                                                .Build())
                                    .Weapons("Shortsword")
                                    .Build();

            var defenderCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(0)
                                                .Special(0)
                                                .Speed(13)
                                                .Strength(7)
                                                .Build())
                                    .Stats(new StatsBuilder()
                                           .ParryChance(0)
                                           .Build())
                                    .Weapons("Shortsword")
                                    .Build();

            var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly);
            var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly);

            attacker.Position = new Vector2(0, 0);
            defender.Position = new Vector2(0, 1);

            var map           = new Map();
            var skillDatabase = new SkillDatabase(map);
            var forecaster    = new FightForecaster(map, skillDatabase);
            var forecast      = forecaster.Forecast(attacker, defender, SkillType.Melee);
            var finalizer     = new FightFinalizer(skillDatabase);
            var final         = finalizer.Finalize(forecast, new ConstantRandomizer(100));

            Assert.NotNull(final.InitialPhase);
            Assert.NotNull(final.CounterPhase);
            Assert.NotNull(final.DoubleAttackPhase);
            Assert.Null(final.FlankerPhase);
        }
示例#7
0
        public override void Build(InfoPanelBox.BuildInfo buildInfo)
        {
            base.Build(buildInfo);

            if (CurrentCombatant != null)
                CurrentCombatant.OnStatusChange -= new CombatantStatusChangeEventHandler(CurrentCombatant_OnStatusChange);

            CurrentCombatant = buildInfo.GetArg<BaseCombatant>("Combatant");
            CurrentCombatant.OnStatusChange += new CombatantStatusChangeEventHandler(CurrentCombatant_OnStatusChange);

            UpdateData();

            AddItem(0, NameLabel);
            AddItem(0, HpLabel);
            AddItem(0, SpLabel);
            AddItem(0, MpLabel);
        }
示例#8
0
        public CombatSpell(Spell spell, BaseCombatant holder)
        {
            Spell = spell;

            Holder = holder;
        }
示例#9
0
 void CurrentCombatant_OnMoveEnding(BaseCombatant sender, CombatantMoveEventArgs e)
 {
     CurrentCombatant.OnMoveEnding -= new CombatantMoveEventHandler(CurrentCombatant_OnMoveEnding);
     Combat.ChangeState(BlazeraLib.Combat.EState.ActionSelection);
 }
示例#10
0
 void CurrentCombatant_OnStatusChange(BaseCombatant sender, CombatantStatusChangeEventArgs e)
 {
     UpdateData();
 }
示例#11
0
        public void TestRangedCounter()
        {
            var attackerCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(2)
                                                .Special(0)
                                                .Speed(13)
                                                .Strength(7)
                                                .Build())
                                    .Stats(new StatsBuilder()
                                           .ParryChance(0)
                                           .Build())
                                    .Weapons("Slim Recurve")
                                    .Build();

            var defenderCharacter = new CharacterBuilder()
                                    .Attributes(new AttributesBuilder()
                                                .Health(15)
                                                .Skill(12)
                                                .Defense(2)
                                                .Special(0)
                                                .Speed(13)
                                                .Strength(7)
                                                .Build())
                                    .Stats(new StatsBuilder()
                                           .ParryChance(0)
                                           .Build())
                                    .Weapons("Slim Recurve")
                                    .Build();

            var attacker = new BaseCombatant(attackerCharacter, ArmyType.Friendly);
            var defender = new BaseCombatant(defenderCharacter, ArmyType.Friendly);

            attacker.Position = new Vector2(0, 0);
            defender.Position = new Vector2(0, 2);

            var map = new Map();

            map.AddCombatant(attacker);
            map.AddCombatant(defender);

            var skillDatabase = new SkillDatabase(map);
            var forecaster    = new FightForecaster(map, skillDatabase);
            var forecast      = forecaster.Forecast(attacker, defender, SkillType.Ranged);

            var finalizer = new FightFinalizer(skillDatabase);
            var final     = finalizer.Finalize(forecast, new ConstantRandomizer(100));

            var initialPhase = final.InitialPhase;

            Assert.NotNull(initialPhase);

            var initialEffects = initialPhase.Effects;

            Assert.AreEqual(5, initialEffects.GetDefenderDamage());

            var counterPhase = final.CounterPhase;

            Assert.NotNull(counterPhase);

            var counterEffects = counterPhase.Effects;

            Assert.AreEqual(5, counterEffects.GetDefenderDamage());

            Assert.Null(final.DoubleAttackPhase);
            Assert.Null(final.FlankerPhase);
        }