// 受伤 public override void getHurt(DamageDegree damageDegree, float damage, DamageType damageType) { base.getHurt(damageDegree, damage, damageType); Locked = true; Invoke("cure", 0.5f); MyAI.setState(AIState.HURT); }
// 受到攻击 public virtual void getHurt(DamageDegree damageDegree, float damage, DamageType damageType) { if (!Eternal) { foreach (Equipment equipment in EquipmentList) { equipment.onHurt(ref damage); } // 伤害计算公式 CurrentShieldValue -= damage; if (CurrentShieldValue <= 0) { CurrentShieldValue = 0; float temp = 0f; switch (damageType) { case DamageType.PHYSIC: temp = damage - PhysicDefence - CurrentShieldValue; CurrentHealth -= temp >= 0 ? temp : 0; break; case DamageType.MAGIC: temp = damage - MagicDefence - CurrentShieldValue; CurrentHealth -= temp >= 0 ? temp : 0; break; } } } }
/// <summary> /// 受到攻击 /// </summary> /// <param name="damageDegree">伤害类型</param> /// <param name="damage">伤害数值</param> public override void getHurt(DamageDegree damageDegree, float damage, DamageType damageType) { base.getHurt(damageDegree, damage, damageType); CurrentState = StateEnum.HURT; Anim.SetBool("hurt", true); switch (damageDegree) { case DamageDegree.LIGHT_ATTACK: Anim.SetBool("lightHurt", true); Invoke("finishLightHurt", 0.5f); break; case DamageDegree.HEAVY_ATTACK: Anim.SetBool("heavyHurt", true); Invoke("finishHeavyHurt", 0.5f); break; case DamageDegree.STRIKE_FLY: Anim.SetBool("strikeFly", true); Invoke("finishStrikeFly", 0.5f); break; default: break; } }
/// <summary> /// 受到攻击 /// </summary> /// <param name="damageType">伤害类型</param> /// <param name="damage">伤害数值</param> public override void getHurt(DamageDegree damageDegree, float damage, DamageType damageType) { base.getHurt(damageDegree, damage, damageType); if (Eternal) { return; } MoveAnim.SetBool("hurt", true); CurrentState = StateEnum.HURT; switch (damageDegree) { case DamageDegree.LIGHT_ATTACK: MoveAnim.SetBool("hurt", false); //MoveAnim.SetBool("lightHurt", true); IsLightHurt = true; CurrentFlashimes = 0; //Invoke("finishLightHurt", 0.5f); break; case DamageDegree.HEAVY_ATTACK: MoveAnim.SetBool("heavyHurt", true); Locked = true; //Invoke("finishHeavyHurt", 0.5f); break; case DamageDegree.STRIKE_FLY: MoveAnim.SetBool("strikeFly", true); Locked = true; //Invoke("finishStrikeFly", 0.5f); break; default: break; } }
// 单次攻击 public virtual bool hit(GameCharacter character, DamageDegree damageType, float damage, DamageType type) { if (checkHit(character)) { character.getHurt(damageType, damage, type); character.checkAlive(); return(true); } else { return(false); } }
/// <summary> /// 执行攻击行为 /// </summary> /// <param name="skill">攻击模式</param> /// <param name="damageDegree">伤害类型</param> /// <param name="damage">伤害数值</param> private void dealDamage(AttackEnum skill, DamageDegree damageDegree, float damage, DamageType damageType) { // 攻击NPC for (int i = 0; i < GameCharacterManager.Instance.NPCList.Count; i++) { if (checkHit(GameCharacterManager.Instance.NPCList[i])) { hit(GameCharacterManager.Instance.NPCList[i], damageDegree, damage, damageType); setAttackEffect(skill, GameCharacterManager.Instance.NPCList[i]); //GameCharacterManager.Instance.NPCList[i].MyAI.setTarget(this); GameCharacterManager.Instance.NPCList[i].Target = this; } } // 攻击敌人 for (int i = 0; i < GameCharacterManager.Instance.EnemyList.Count; i++) { if (checkHit(GameCharacterManager.Instance.EnemyList[i])) { hit(GameCharacterManager.Instance.EnemyList[i], damageDegree, damage, damageType); setAttackEffect(skill, GameCharacterManager.Instance.EnemyList[i]); } } }
/// <summary> /// 限定类型、伤害数值 /// </summary> /// <param name="target">目标</param> /// <param name="damageType">伤害类型</param> /// <param name="damage">伤害数值</param> public virtual void attack(GameCharacter target, DamageDegree damageType, float damage) { }
// 限定类型、伤害数值 public override void attack(GameCharacter target, DamageDegree damageType, float damage) { hit(target, damageType, damage, MyDamageType); }
// 攻击 public override bool hit(GameCharacter character, DamageDegree damageDegree, float damage, DamageType type) { return(base.hit(character, damageDegree, damage, type)); character.Locked = true; }