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 });
/// <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))); }
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); }
public Task <int> deleteBattleEffect(BattleEffect character) { return(database.DeleteAsync(character)); }