/// <summary> /// Use every time before sent result of skill. /// </summary> public List <EffectReceiver> SetEffectOwnerIdAndDamage(Poring poring) { List <EffectReceiver> resultList = new List <EffectReceiver>(); EffectsReceiver.ForEach(fx => { float d = 0; if (fx.Damage == -1) { d = ((DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; d *= DamageMultiple; } else { d = fx.Damage; } EffectReceiver result = new EffectReceiver() { OwnerId = PrototypeGameMode.Instance.GetPoringIndexByPoring(poring), Damage = d, EffectDuration = fx.EffectDuration, Status = fx.Status, Particle = fx.Particle }; resultList.Add(result); }); return(resultList); }
public EffectReceiver(EffectReceiver baseObj) { OwnerId = baseObj.OwnerId; EffectDuration = baseObj.EffectDuration; Status = baseObj.Status; Particle = baseObj.Particle; Damage = baseObj.Damage; }
public override OnDefenseSkillResult OnDefense(Poring attacker, Poring poring, FaceDice faceDice) { if (faceDice == ActiveOnType && CurrentCD <= 0) { // Debug.LogError($"{poring.name} : {this.name}!!"); float damage = 0; switch (DefenseType) { case DefenseTypeResult.None: damage = 0; break; case DefenseTypeResult.Counter: damage = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damage *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePower != null) ? maximizePower.Damage : 1; if (attacker.Node != poring.Node) { DefenseType = DefenseTypeResult.None; damage = 0; } if (poring.CheckHasStatus(SkillStatus.Blind)) { damage = 0; } break; case DefenseTypeResult.Dodge: damage = 0; break; } return(new OnDefenseSkillResult() { Type = DefenseType, DamageType = DamageType, EffectStatusResults = SetEffectOwnerIdAndDamage(poring), DamageResult = damage, EffectOnSelf = EffectOnSelf, EffectOnTarget = EffectOnHit, }); } else { return(new OnDefenseSkillResult() { Type = DefenseTypeResult.None, DamageType = DamageType, EffectStatusResults = new List <EffectReceiver>(), DamageResult = 0 }); } }
public float GetBlessingBuff() { EffectReceiver fx = m_currentEffects.Find(s => SkillStatus.Blessing == s.Status); if (fx != null) { return(fx.Damage); } else { return(1); } }
public EffectReceiver GetStatus(SkillStatus status) { EffectReceiver fx = m_currentEffects.Find(s => status == s.Status); if (fx != null) { return(fx); } else { return(null); } }
public override void OnFinish(Poring poring, Node node) { var e = new EffectReceiver() { EffectDuration = 1, Status = SkillStatus.Ambursh }; InstantiateParticleEffect.CreateFx(particle, poring.transform.position); poring.OnReceiverEffect(new List <EffectReceiver>() { e }); }
public void PoringKeepValueOnTile(Poring poring, bool ignoreOnFinish = false) { EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); int value = (maximizePower != null) ? AppleList.Count / 2 : AppleList.Count; poring.Property.CurrentPoint += value; AppleList.ForEach(apple => DestroyImmediate(apple)); AppleList.Clear(); if (!ignoreOnFinish) { TileProperty.OnFinish(poring, this); } }
public bool AddPoring(Poring poring) { poring.transform.position = transform.position; poring.Node = this; porings.Add(poring); if (porings.Count > 1 && porings[0].CheckHasStatus(SkillStatus.Ambursh) && !poring.CheckHasStatus(SkillStatus.Ambursh)) { porings[0].Animator.Play("Skill"); float damage = porings[0].Property.CurrentPAtk; damage *= porings[0].GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damage *= (maximizePower != null) ? maximizePower.Damage : 1; if (porings[0].CheckHasStatus(SkillStatus.Blind)) { damage = 0; } poring.TakeDamage(porings[0], damage, porings[0].Property.NormalAttackEffect); } TileProperty.OnEnter(poring, this); List <EffectReceiver> effectsResult = new List <EffectReceiver>(); for (int i = 0; i < effectsOnTile.Count; i++) { BaseEffectOnTile baseFx = effectsOnTile[i]; List <EffectReceiver> listEffect = baseFx.OnEnter(this); effectsResult.AddRange(listEffect); } bool isAlive = poring.OnReceiverEffect(effectsResult); if (!isAlive) { return(false); } foreach (var fx in effectsResult) { SkillStatus e = SkillStatus.Freeze | SkillStatus.Root | SkillStatus.Sleep | SkillStatus.Stun; if (fx.Status.CheckHasStatus(e)) { return(false); } } return(true); }
public override void OnEnter(Poring poring, Node node) { var e = new EffectReceiver() { OwnerId = -1, Damage = tileDamage, EffectDuration = 5, Status = SkillStatus.Posion, Particle = particle }; InstantiateParticleEffect.CreateFx(particle, poring.transform.position); poring.OnReceiverEffect(new List <EffectReceiver>() { e }); }
private void SkillEffectActivate(Poring poring, Poring targetPoring = null, Node targetNode = null) { float damageResult = (DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; damageResult *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); damageResult *= (maximizePower != null) ? maximizePower.Damage : 1; damageResult *= DamageMultiple; if (poring.CheckHasStatus(SkillStatus.Blind) && targetNode == null) { damageResult = 0; } PrototypeGameMode.Instance.StartCoroutine(WaitForAnimation(poring, damageResult, targetPoring, targetNode)); }
public void SetDetail(BaseSkill baseSkill, Poring poring) { float d = (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk; d *= poring.GetBlessingBuff(); EffectReceiver maximizePower = poring.GetStatus(SkillStatus.MaximizePower); d *= (maximizePower != null) ? maximizePower.Damage : 1; Damage = (int)((baseSkill.SkillMode == SkillMode.Activate) ? (baseSkill.DamageType == DamageType.PAtk) ? baseSkill.DamageMultiple * poring.Property.CurrentPAtk : baseSkill.DamageMultiple * poring.Property.CurrentMAtk : (baseSkill.DamageType == DamageType.PAtk) ? poring.Property.CurrentPAtk : poring.Property.CurrentMAtk); DamageType = baseSkill.DamageType; TargetTypestr = (baseSkill.TargetType == TargetType.Another) ? "Poring" : baseSkill.TargetType.ToString(); MoveToTarget = baseSkill.MoveToTarget; AOE = baseSkill.AOEValue; Range = $"{baseSkill.MinRangeValue} - {baseSkill.MaxRangeValue}"; CD = baseSkill.TurnCD; Description = baseSkill.Description; }
public bool OnReceiverEffect(List <EffectReceiver> effectList) { foreach (EffectReceiver baseEffect in effectList) { EffectReceiver newEffect = new EffectReceiver(baseEffect); if ((int)newEffect.Status == 0) { if (!TakeDamage(PrototypeGameMode.Instance.GetPoringByIndex(newEffect.OwnerId), newEffect.Damage)) { return(false); } continue; } if (newEffect.Status.CheckHasStatus(SkillStatus.Posion) && PrototypeGameMode.Instance.IsMineTurn()) { newEffect.EffectDuration -= 1; } var v = m_currentEffects.Find(fx => fx.Status == newEffect.Status); if (v != null) { m_currentEffects[m_currentEffects.IndexOf(v)] = newEffect; } else { m_currentEffects.Add(newEffect); StatusIconData icon = new StatusIconData() { status = newEffect.Status, image = StatusIconCreater.Instance.CreateIcon(newEffect.Status, iconRoot) }; m_currentIconEffects.Add(icon); } } return(true); }
private bool TryHit(LogicEntity target) { EffectReceiver receiver = target.GetComponent <EffectReceiver>(); if (receiver == null) { return(false); } LogicEntity releaser = EntityManager.Instance.GetEntity(this._releaserKey); if (releaser == null) { return(true); } AttrComponent attr = releaser.GetComponent <AttrComponent>(); EffectData data = new EffectData(); data.OpEntityKey = this._releaserKey; data.ChagneAttr = new AttrPair[] { new AttrPair(Attr.Hp, attr.GetAttr(Attr.Attack)) }; receiver.ReciveEffect(data); return(true); }