Files
UltimateFishing/Assets/Scripts/Assembly-CSharp/vp_FPPlayerDamageHandler.cs
2026-02-21 16:45:37 +08:00

149 lines
3.1 KiB
C#

using UnityEngine;
[RequireComponent(typeof(vp_FPPlayerEventHandler))]
public class vp_FPPlayerDamageHandler : vp_PlayerDamageHandler
{
public float CameraShakeFactor = 0.02f;
protected float m_DamageAngle;
protected float m_DamageAngleFactor = 1f;
protected vp_FPPlayerEventHandler m_FPPlayer;
protected vp_FPCamera m_FPCamera;
protected CharacterController m_CharacterController;
protected vp_FPPlayerEventHandler FPPlayer
{
get
{
if (m_FPPlayer == null)
{
m_FPPlayer = base.transform.GetComponent<vp_FPPlayerEventHandler>();
}
return m_FPPlayer;
}
}
protected vp_FPCamera FPCamera
{
get
{
if (m_FPCamera == null)
{
m_FPCamera = base.transform.GetComponentInChildren<vp_FPCamera>();
}
return m_FPCamera;
}
}
protected CharacterController CharacterController
{
get
{
if (m_CharacterController == null)
{
m_CharacterController = base.transform.root.GetComponentInChildren<CharacterController>();
}
return m_CharacterController;
}
}
protected override void OnEnable()
{
if (FPPlayer != null)
{
FPPlayer.Register(this);
}
RefreshColliders();
}
protected override void OnDisable()
{
if (FPPlayer != null)
{
FPPlayer.Unregister(this);
}
}
protected virtual void Update()
{
if (FPPlayer.Dead.Active && Time.timeScale < 1f)
{
vp_TimeUtility.FadeTimeScale(1f, 0.05f);
}
}
public override void Damage(float damage)
{
if (base.enabled && vp_Utility.IsActive(base.gameObject))
{
base.Damage(damage);
FPPlayer.HUDDamageFlash.Send(new vp_DamageInfo(damage, null));
FPPlayer.HeadImpact.Send((!(Random.value < 0.5f)) ? (0f - damage * CameraShakeFactor) : (damage * CameraShakeFactor));
}
}
public override void Damage(vp_DamageInfo damageInfo)
{
if (base.enabled && vp_Utility.IsActive(base.gameObject))
{
base.Damage(damageInfo);
FPPlayer.HUDDamageFlash.Send(damageInfo);
if (damageInfo.Source != null)
{
m_DamageAngle = vp_3DUtility.LookAtAngleHorizontal(FPCamera.Transform.position, FPCamera.Transform.forward, damageInfo.Source.position);
m_DamageAngleFactor = ((!(Mathf.Abs(m_DamageAngle) > 30f)) ? Mathf.Lerp(0f, 1f, Mathf.Abs(m_DamageAngle) * 0.033f) : 1f);
FPPlayer.HeadImpact.Send(damageInfo.Damage * CameraShakeFactor * m_DamageAngleFactor * (float)((m_DamageAngle < 0f) ? 1 : (-1)));
}
}
}
public override void Die()
{
base.Die();
if (base.enabled && vp_Utility.IsActive(base.gameObject))
{
FPPlayer.InputAllowGameplay.Set(false);
}
}
public virtual void RefreshColliders()
{
if (!(CharacterController != null) || !CharacterController.enabled)
{
return;
}
foreach (Collider collider in base.Colliders)
{
if (collider.enabled)
{
Physics.IgnoreCollision(CharacterController, collider, true);
}
}
}
protected override void Reset()
{
base.Reset();
if (Application.isPlaying)
{
FPPlayer.InputAllowGameplay.Set(true);
FPPlayer.HUDDamageFlash.Send(null);
RefreshColliders();
}
}
private void OnStart_Crouch()
{
RefreshColliders();
}
private void OnStop_Crouch()
{
RefreshColliders();
}
}