예제 #1
0
 public static List <BattleEffectInfo> GetEffectInfo(IRenderView renderView, BattleEffect battleEffect, uint sourceTile, uint targetTile,
                                                     Character[] battleField, float scale = 1.0f)
 {
     return(battleEffect switch
     {
         BattleEffect.HurtMonster => Effects(CreateSimpleEffect(renderView, targetTile, CombatGraphicIndex.Blood, battleField, Game.TicksPerSecond / 3)),
         BattleEffect.HurtPlayer => Effects(CreateSimpleEffect(renderView, targetTile, CombatGraphicIndex.AttackClaw, battleField, Game.TicksPerSecond / 2, _ => - 28)),
         BattleEffect.MonsterArrowAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.ArrowGreenMonster, battleField)),
         BattleEffect.MonsterBoltAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.ArrowRedMonster, battleField)),
         BattleEffect.PlayerArrowAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.ArrowGreenHuman, battleField)),
         BattleEffect.PlayerBoltAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.ArrowRedHuman, battleField)),
         BattleEffect.SlingstoneAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.Slingstone, battleField)),
         BattleEffect.SlingdaggerAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.Slingdagger, battleField)),
         BattleEffect.SickleAttack => Effects(CreateFlyingEffect(renderView, sourceTile, targetTile, CombatGraphicIndex.FlyingSickle, battleField, 1.5f)),
         BattleEffect.Death => Effects(CreateSimpleEffect(renderView, targetTile, CombatGraphicIndex.DeathAnimation, battleField, Game.TicksPerSecond * 5 / 4, null, scale, true)),
         BattleEffect.BlockSpell => Effects(CreateSimpleEffect(renderView, targetTile, CombatGraphicIndex.SpellBlock, battleField, Game.TicksPerSecond / 2, monster => monster ? -32 : -46)),
         BattleEffect.PlayerAtack => Effects(CreateSimpleEffect(renderView, targetTile, CombatGraphicIndex.AttackSword, battleField, Game.TicksPerSecond / 4, _ => - 10)),
         _ => null
     });
예제 #2
0
        /// <summary>
        /// 攻击计算
        /// </summary>
        /// <param name="target">攻击目标</param>
        /// <param name="attackType">攻击类型(普通、战法、策略)</param>
        /// <param name="effectType">攻击效果(闪避、格挡、重击)</param>
        /// <param name="damageRatio">伤害系数</param>
        /// <returns></returns>
        public IEnumerable <BattleEffect> DoAttack(CombatUnit target, AttackType attackType, BattleEffectType effectType, float damageRatio)
        {
            var ratio = (int)effectType;

            var damage = this._attack[attackType] - target._defence[attackType] + this.Level * 50;

            if (damage < 1)
            {
                damage = 1;
            }
            damage = (int)(damage * ratio * 0.5 * damageRatio);

            target.Health -= damage;

            var effect = new BattleEffect {
                UnitSID = target.BattleID, PlusHP = -damage, Type = effectType
            };

            return(Enumerable.Repeat(effect, 1)
                   .Concat(target.UnderAttack(effect)));
        }
예제 #3
0
 public Task <int> UpdateBattleEffect(BattleEffect monster)
 {
     return(database.UpdateAsync(monster));
 }
    public void ExecuteBattleEffect(BattleSimulationUnit initiator, BattleSimulationUnit activator, BattleSimulationTarget target, BattleEffect battleEffect, BattleActionContext actionContext)
    {
        Diagnostics.Assert(this.battleEffectsContexts != null, "this.battleEffectsContexts != null");
        BattleEffectController battleEffectController;

        if (this.battleEffectsContexts.ContainsKey(target))
        {
            battleEffectController = this.battleEffectsContexts[target];
        }
        else
        {
            battleEffectController = new BattleEffectController(target, this.Simulation);
            this.battleEffectsContexts.Add(target, battleEffectController);
        }
        Diagnostics.Assert(battleEffectController != null);
        battleEffectController.Execute(battleEffect, initiator, activator, this, actionContext);
    }
예제 #5
0
 public Task <int> deleteBattleEffect(BattleEffect character)
 {
     return(database.DeleteAsync(character));
 }