예제 #1
0
        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);
                    }
                }
            }
        }
예제 #2
0
        public void OnDamage(VCharacter vCharacter)
        {
            MCharacter        mCharacter  = this.GetCharacterModel(vCharacter);
            MCharacter        targetModel = vCharacter.ViewModel.Target.Value;
            VCharacter        target      = this.GetCharacterView(targetModel);
            List <VCharacter> characters  = this.charactersManager.GetTargetCharacters(vCharacter, target, vCharacter.ViewModel.CurrentSkill.Value.Master);

            App.View.VTile tile = mapSearch.GetTile(mCharacter.CoordinateX, mCharacter.CoordinateY);
            foreach (VCharacter child in characters)
            {
                MCharacter childModel = this.GetCharacterModel(child);
                bool       hit        = calculateManager.AttackHitrate(mCharacter, childModel);
                if (!hit)
                {
                    child.SendMessage(CharacterEvent.OnBlock.ToString());
                    continue;
                }
                App.Model.Battle.MDamageParam arg = new App.Model.Battle.MDamageParam(-this.calculateManager.Hert(mCharacter, childModel, tile));
                child.SendMessage(CharacterEvent.OnDamage.ToString(), arg);
                if (child.ViewModel.CharacterId.Value != targetModel.CharacterId)
                {
                    continue;
                }
                if (mCharacter.CurrentSkill.Master.effect.enemy.time == App.Model.Master.SkillEffectBegin.enemy_hert)
                {
                    if (mCharacter.CurrentSkill.Master.effect.special == App.Model.Master.SkillEffectSpecial.vampire)
                    {
                        App.Model.Master.MStrategy strategy = App.Util.Cacher.StrategyCacher.Instance.Get(mCharacter.CurrentSkill.Master.effect.enemy.strategys[0]);
                        VCharacter currentCharacter         = this.GetCharacterView(mCharacter);

                        int addHp = -UnityEngine.Mathf.FloorToInt(arg.value * strategy.hert * 0.01f);
                        App.Model.Battle.MDamageParam arg2 = new App.Model.Battle.MDamageParam(addHp);
                        currentCharacter.SendMessage(CharacterEvent.OnHealWithoutAction.ToString(), arg2);
                    }
                }
                else if (mCharacter.CurrentSkill.Master.effect.enemy.time == App.Model.Master.SkillEffectBegin.attack_end)
                {
                    if (mCharacter.CurrentSkill.Master.effect.special == App.Model.Master.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);
                    }
                }
            }
        }
예제 #3
0
        public void OnHeal(VCharacter vCharacter)
        {
            //UnityEngine.Debug.LogError("OnHeal");
            MCharacter        mCharacter  = this.GetCharacterModel(vCharacter);
            MCharacter        targetModel = vCharacter.ViewModel.Target.Value;
            VCharacter        target      = this.GetCharacterView(targetModel);
            List <VCharacter> characters  = this.charactersManager.GetTargetCharacters(vCharacter, target, vCharacter.ViewModel.CurrentSkill.Value.Master);

            App.View.VTile tile = mapSearch.GetTile(mCharacter.CoordinateX, mCharacter.CoordinateY);
            foreach (VCharacter child in characters)
            {
                App.Model.Battle.MDamageParam arg = new App.Model.Battle.MDamageParam(this.calculateManager.Heal(mCharacter, this.GetCharacterModel(child), tile));
                child.SendMessage(CharacterEvent.OnHeal.ToString(), arg);
            }
        }
예제 #4
0
        public void OnHealWithoutAction(App.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.ViewModel.Hp, 0.2f, new TweenParms().Prop("Value", this.ViewModel.Hp.Value + arg.value, false).Ease(EaseType.EaseInQuart)));
            seqHp.Play();
        }
예제 #5
0
        public void OnDamage(App.Model.Battle.MDamageParam arg)
        {
            this.action   = ActionType.hert;
            this.num.text = arg.value.ToString();
            this.num.gameObject.SetActive(true);
            this.num.transform.localPosition = new Vector3(0, 0.2f, 0);
            this.num.color = Color.white;
            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();
        }
예제 #6
0
 public IEnumerator OnBoutFixedDamage(MCharacter mCharacter, App.Model.Master.MSkill skill, List <VCharacter> characters)
 {
     App.View.VTile targetTile = this.mapSearch.GetTile(mCharacter.CoordinateX, mCharacter.CoordinateY);
     foreach (VCharacter child in characters)
     {
         App.View.VTile tile = this.mapSearch.GetTile(child.ViewModel.CoordinateX.Value, child.ViewModel.CoordinateY.Value);
         if (this.mapSearch.GetDistance(targetTile, tile) <= skill.radius)
         {
             int hert = skill.strength;
             if (child.ViewModel.Hp.Value - hert <= 0)
             {
                 hert = child.ViewModel.Hp.Value - 1;
             }
             App.Model.Battle.MDamageParam arg = new App.Model.Battle.MDamageParam(-hert);
             child.SendMessage(CharacterEvent.OnDamage.ToString(), arg);
         }
     }
     while (HasDynamicCharacter())
     {
         yield return(new UnityEngine.WaitForEndOfFrame());
     }
 }