public System.Collections.IEnumerator OnBoutFixedDamage(MCharacter mCharacter, Model.Master.MSkill skill, List <VCharacterBase> characters) { TileMap mapSearch = Global.mapSearch; Manager.BattleCharactersManager charactersManager = Global.charactersManager; VTile targetTile = mapSearch.GetTile(mCharacter.coordinate); foreach (VCharacter child in characters) { VTile tile = mapSearch.GetTile(child.mCharacter.coordinate); if (mapSearch.GetDistance(targetTile, tile) <= skill.radius) { int hert = skill.strength; if (child.hp - hert <= 0) { hert = child.hp - 1; } Model.Battle.MDamageParam arg = new Model.Battle.MDamageParam(-hert); child.SendMessage(CharacterEvent.OnDamage.ToString(), arg); } } while (charactersManager.HasDynamicCharacter()) { yield return(new UnityEngine.WaitForEndOfFrame()); } }
public void OnDamage(VCharacterBase vCharacter) { Manager.BattleCalculateManager calculateManager = Global.battleManager.calculateManager; Manager.BattleCharactersManager charactersManager = Global.charactersManager; MCharacter mCharacter = vCharacter.mCharacter; MCharacter targetModel = mCharacter.target; VCharacterBase target = charactersManager.GetVCharacter(targetModel); List <VCharacterBase> characters = charactersManager.GetTargetCharacters(vCharacter, target, mCharacter.currentSkill.master); VTile tile = Global.mapSearch.GetTile(mCharacter.coordinate); foreach (VCharacter child in characters) { MCharacter childModel = child.mCharacter; bool hit = calculateManager.AttackHitrate(mCharacter, childModel); if (!hit) { child.SendMessage(CharacterEvent.OnBlock.ToString()); continue; } Model.Battle.MDamageParam arg = new App.Model.Battle.MDamageParam(-calculateManager.Hert(mCharacter, childModel, tile)); child.SendMessage(CharacterEvent.OnDamage.ToString(), arg); if (child.mCharacter.characterId != targetModel.characterId) { continue; } if (mCharacter.currentSkill.master.effect.enemy.time == SkillEffectBegin.enemy_hert) { if (mCharacter.currentSkill.master.effect.special == SkillEffectSpecial.vampire) { Model.Master.MStrategy strategy = Cacher.StrategyCacher.Instance.Get(mCharacter.currentSkill.master.effect.enemy.strategys[0]); int addHp = -UnityEngine.Mathf.FloorToInt(arg.value * strategy.hert * 0.01f); Model.Battle.MDamageParam arg2 = new Model.Battle.MDamageParam(addHp); vCharacter.SendMessage(CharacterEvent.OnHealWithoutAction.ToString(), arg2); } } else if (mCharacter.currentSkill.master.effect.enemy.time == SkillEffectBegin.attack_end) { if (mCharacter.currentSkill.master.effect.special == SkillEffectSpecial.status) { int specialValue = mCharacter.currentSkill.master.effect.special_value; if (specialValue > 0 && UnityEngine.Random.Range(0, 50) > specialValue) { continue; } childModel.attackEndEffects.Add(mCharacter.currentSkill.master.effect.enemy); } } } }
public void OnHealWithoutAction(Model.Battle.MDamageParam arg) { this.num.text = string.Format("+{0}", arg.value); this.num.gameObject.SetActive(true); this.num.transform.localPosition = new Vector3(0, 0.2f, 0); this.num.color = Color.green; this.num.transform.localScale = Vector3.zero; Sequence seqHp = new Sequence(); seqHp.Insert(0f, HOTween.To(this.num.transform, 0.2f, new TweenParms().Prop("localScale", numScale * 2f, false).Ease(EaseType.EaseInQuart))); seqHp.Insert(0.2f, HOTween.To(this.num.transform, 0.3f, new TweenParms().Prop("localScale", numScale, false).Ease(EaseType.EaseOutBounce))); seqHp.Insert(0.5f, HOTween.To(this.num, 0.2f, new TweenParms().Prop("color", new Color(this.num.color.r, this.num.color.g, this.num.color.b, 0f), false).OnComplete(() => { this.num.gameObject.SetActive(false); }))); seqHp.Insert(0f, HOTween.To(this, 0.2f, new TweenParms().Prop("hp", this.mCharacter.hp + arg.value, false).Ease(EaseType.EaseInQuart))); seqHp.Play(); }
public void OnHeal(Model.Battle.MDamageParam arg) { this.action = ActionType.block; OnHealWithoutAction(arg); }