// 远程与近战武器携带时的角度调整 -- 如果是远程就调整子弹生成点 -- 如果是近战,就调整伤害框 private void AdjustCurrentWeapon(WeaponType type, int index) { switch (type) { case WeaponType.MeleeType: Hands.transform.localEulerAngles = new Vector3(0, 0, -80f); CurrentTakeWeaponSprite.transform.localEulerAngles = new Vector3(0, 0, 90f); TakeDamager takeDamager = MeleeAttackDamager.GetComponent <TakeDamager>(); takeDamager.offset = ((MeleeWeapon)CurrentTakeWeapons[index]).offset; takeDamager.size = ((MeleeWeapon)CurrentTakeWeapons[index]).size; takeDamager.hitPoint = ((MeleeWeapon)CurrentTakeWeapons[index]).HitPoint; break; case WeaponType.RangeType: Hands.transform.localEulerAngles = new Vector3(0, 0, -45f); CurrentTakeWeaponSprite.transform.localEulerAngles = new Vector3(0, 0, 0f); //if (CurrentTakeWeapons[index].getWeaponType() == WeaponType.RangeType) BulletPoint.localPosition = ((RangedWeapon)CurrentTakeWeapons[index]).OffsetPoint; // resert bullet pool GameObject bullet = ((RangedWeapon)CurrentTakeWeapons[index]).bullet; BulletsPool.prefab = bullet; GameObject[] bullets = BulletsPool.Restart(PoolGameobj.transform, 5); foreach (GameObject obj in bullets) { m_Status.RegisteredTakeDamger(obj.GetComponent <TakeDamager>()); } m_Status.TakeDamagerFlush(); break; } }
public void OnHurt(TakeDamager damager, TakeDamageable damageable) { //if the player don't have control, we shouldn't be able to be hurt as this wouldn't be fair if (!PlayerInput.Instance.HaveControl) { return; } UpdateFacing(damageable.GetDamageDirection().x > 0f); damageable.EnableInvulnerability(); m_Animator.SetTrigger(m_HashHurtPara); //we only force respawn if health > 0, otherwise both forceRespawn & Death trigger are set in the animator, messing with each other. if (damageable.CurrentHealth > 0 && damager.forceRespawn) { m_Animator.SetTrigger(m_HashForcedRespawnPara); } m_Animator.SetBool(m_HashGroundedPara, false); hurtAudioPlayer.PlayRandomSound(); //if the health is < 0, mean die callback will take care of respawn if (damager.forceRespawn && damageable.CurrentHealth > 0) { //StartCoroutine(DieRespawnCoroutine(false, true)); } }
public void unRegisteredTakeDamger(TakeDamager takeDamager) { if (TakeDamagers.Contains(takeDamager)) { TakeDamagers.Remove(takeDamager); takeDamager.status = null; } }
public void RegisteredTakeDamger(TakeDamager takeDamager) { if (!TakeDamagers.Contains(takeDamager)) { TakeDamagers.Add(takeDamager); takeDamager.status = this; } }
public void ShowNum(TakeDamager damager, TakeDamageable able) { Text text = FindFreeText(); text.text = damager.CurrentDamagNum.ToString(); text.transform.localPosition = Vector3.zero; text.gameObject.SetActive(true); StartCoroutine(ShowAndFindPath(text)); }
//public GameObject BlowoutObj; public void OnHit(TakeDamager takeDamagerBase, TakeDamageable damageable) { //GameObject vfx = Instantiate(Resources.Load<GameObject>("VFX/Blowout/PistolBulletHit")); //vfx.transform.position = transform.position; //vfx.GetComponent<Animation>().Play(); //Destroy(this.gameObject); //gameObject.SetActive(false); // GameObject obj = MonoBehaviour.Instantiate(BlowoutObj); //obj.transform.position = transform.position; }
public void TakeDamagerFlush() { for (int i = 0; i < TakeDamagers.Count; i++)//foreach (TakeDamager damager in TakeDamagers) { TakeDamager damager = TakeDamagers[i]; if (damager == null || damager.gameObject == null) { unRegisteredTakeDamger(damager); } } }
/// <summary> /// 目前的弹射未携带之前的攻击特效 -- 同时可以优化,缓存GameObject.FindGameObjectsWithTag("Enemy"); /// 不用每次都计算 /// </summary> /// <param name="_damager"></param> /// <param name="_damageable"></param> public void Calculat(TakeDamager _damager, TakeDamageable _damageable) { GameObject calculatObj = FindOtherEnemyInRange(_damageable.transform); if (calculatObj == null) { return; } VFXControllerM.Instance.MakeLighting(_damageable.transform, calculatObj.transform, 0.2f); calculatObj.GetComponent <TakeDamageable>().TakeDamage(_damager); }
public void Die(TakeDamager damager, TakeDamageable damageable) { m_Animator.SetTrigger(m_HashDeathPara); dieAudio.PlayRandomSound(); m_Dead = true; //Debug.Log(moveVector); //m_Collider.enabled = false; //gameObject.layer = 20; //CameraShaker.Shake(0.15f, 0.3f); plots[end - 1].gameObject.SetActive(true); }
public void Die(TakeDamager damager, TakeDamageable damageable) { //Vector2 throwVector = new Vector2(0, 2.0f); //Vector2 damagerToThis = damager.transform.position - transform.position; //throwVector.x = Mathf.Sign(damagerToThis.x) * -4.0f; //SetMoveVector(throwVector); m_Animator.SetTrigger(m_HashDeathPara); dieAudio.PlayRandomSound(); m_Dead = true; //Debug.Log(moveVector); //m_Collider.enabled = false; gameObject.layer = 20; CameraShaker.Shake(0.15f, 0.3f); }
void OnSceneGUI() { TakeDamager damager = (TakeDamager)target; if (!damager.enabled) { return; } Matrix4x4 handleMatrix = damager.transform.localToWorldMatrix; ////Hotkang 2018.7.24 疑问: 用处何在? 注释掉后暂未发现区别 ////Debug.Log(handleMatrix); handleMatrix.SetRow(0, Vector4.Scale(handleMatrix.GetRow(0), new Vector4(1f, 1f, 0f, 1f))); handleMatrix.SetRow(1, Vector4.Scale(handleMatrix.GetRow(1), new Vector4(1f, 1f, 0f, 1f))); handleMatrix.SetRow(2, new Vector4(0f, 0f, 1f, damager.transform.position.z)); ////Debug.Log(handleMatrix); using (new Handles.DrawingScope(handleMatrix)) { s_BoxBoundsHandle.center = damager.offset; s_BoxBoundsHandle.size = damager.size; s_BoxBoundsHandle.SetColor(s_EnabledColor); EditorGUI.BeginChangeCheck(); s_BoxBoundsHandle.DrawHandle(); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(damager, "Modify Damager"); damager.size = s_BoxBoundsHandle.size; damager.offset = s_BoxBoundsHandle.center; } } // 画点 //Handles.DotHandleCap(0, damager.hitPoint+ new Vector2(10, 0), Quaternion.identity, 2, EventType.DragUpdated); //Handles.DotHandleCap(0, damager.hitPoint + new Vector2(0, 5), Quaternion.identity, 2, EventType.DragUpdated); //Debug.Log("drow nice"); }
public void Hit(TakeDamager damager, TakeDamageable damageable) { if (damageable.CurrentHealth <= 0) { return; } m_Animator.SetTrigger(m_HashHitPara); //Vector2 throwVector = new Vector2(0, 3.0f); //Vector2 damagerToThis = damager.transform.position - transform.position; //throwVector.x = Mathf.Sign(damagerToThis.x) * -2.0f; //m_MoveVector = throwVector; if (m_FlickeringCoroutine != null) { StopCoroutine(m_FlickeringCoroutine); m_SpriteRenderer.color = m_OriginalColor; } m_FlickeringCoroutine = StartCoroutine(Flicker(damageable)); CameraShaker.Shake(0.15f, 0.3f); }
public void ToPool(TakeDamager damager, TakeDamageable damageable) { base.ReturnToPool(); }
public void Blowout(TakeDamager damager, TakeDamageable damageable) { GameObject vfx = MonoBehaviour.Instantiate(BlowoutEffect); vfx.transform.position = damageable.AttackPoint; }
public void OnDie(TakeDamager damager, TakeDamageable able) { m_Animator.SetTrigger(m_HashDeadPara); StartCoroutine(DieRespawnCoroutine(true, false)); }
public void HitEnemy(TakeDamager take, TakeDamageable takeDamageable) { MeleeAcAudio.Stop(); MeleeAcAudio.PlayRandomSound(HitObject.Enemy); }
public void HitAir(TakeDamager take) { MeleeAcAudio.PlayRandomSound(HitObject.Air); }
void PlayerDied(TakeDamager d, TakeDamageable da) { BackgroundMusicPlayer.Instance.PushClip(playerDeathClip); }
/// <summary> /// 造成伤害 /// </summary> /// <param name="damager"></param> /// <param name="ignoreInvincible"></param> public void TakeDamage(TakeDamager damager, List <IBuff> buffs = null, bool ignoreInvincible = false) { AttackPoint = damager.hitPoint;//damager.AttackPoints[0].point; // 无敌,或忽略伤害 if ((m_Invulnerable && !ignoreInvincible) || CurrentHealth <= 0) { return; } //we can reach that point if the damager was one that was ignoring invincible state. //We still want the callback that we were hit, but not the damage to be removed from health. if (!m_Invulnerable) { // 如果身上带有buff, 则刷新buff时间持续时间和效果 -- 需求变为可以有相同 buff if (buffs != null) { foreach (IBuff buff in buffs) { if (buff != null) { status.AddStatusBuff(buff); //buff.BuffOnEnter(gameObject); } /* 需求变为可以有相同 buff * if (buff != null) * { * if (!status.ContainsStatusBuff(buff.getBuffType())) * { * status.AddStatusBuff(buff); * buff.BuffOnEnter(gameObject); * } * else * { * IBuff b = status.FindStatusBuff(buff.getBuffType()); * if (b != null && buff.LV > b.LV) b.FlushLV(b.LV); * } * }*/ } } if (damager.IsSpike() && status.StatusType != CharacterType.Boss) { status.HP -= float.MaxValue; } else { status.HP -= damager.CurrentDamagNum * status.HurtInfluences; } //Debug.Log( status.HP); OnHealthSet.Invoke(this); } m_DamageDirection = transform.position + (Vector3)centreOffset - damager.transform.position; OnTakeDamage.Invoke(damager, this); if (status.HP <= 0) { OnDie.Invoke(damager, this); //m_ResetHealthOnSceneReload = true; EnableInvulnerability(); if (disableOnDeath) { gameObject.SetActive(false); } } }
public void Miss(TakeDamager damager, TakeDamageable able) { }