From 7e9794502181d394d6d5068fd0f4f3396542ca0f Mon Sep 17 00:00:00 2001 From: in0finite Date: Fri, 19 Feb 2021 02:55:09 +0100 Subject: [PATCH] add Ped.onDamaged event --- Assets/Scripts/Behaviours/Ped/Ped_Damage.cs | 21 ++++++++++++++++++- .../Behaviours/Ped/States/BaseScriptState.cs | 3 ++- .../Behaviours/Ped/States/IPedState.cs | 2 +- .../Ped/States/VehicleSittingState.cs | 6 +++--- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/Assets/Scripts/Behaviours/Ped/Ped_Damage.cs b/Assets/Scripts/Behaviours/Ped/Ped_Damage.cs index 4daaf839..58516cf3 100644 --- a/Assets/Scripts/Behaviours/Ped/Ped_Damage.cs +++ b/Assets/Scripts/Behaviours/Ped/Ped_Damage.cs @@ -23,6 +23,22 @@ namespace SanAndreasUnity.Behaviours private bool m_alreadyKilled = false; + public class DamageResult + { + public float DamageAmount { get; } + + public DamageResult() + { + } + + public DamageResult(float damageAmount) + { + DamageAmount = damageAmount; + } + } + + public static event System.Action onDamaged = delegate {}; + void AwakeForDamage () @@ -103,8 +119,11 @@ namespace SanAndreasUnity.Behaviours if (this.Health <= 0) return; - this.CurrentState.OnDamaged(this.Damageable.LastDamageInfo); + var damageInfo = this.Damageable.LastDamageInfo; + var damageResult = this.CurrentState.OnDamaged(damageInfo); + + F.InvokeEventExceptionSafe(onDamaged, this, damageInfo, damageResult); } public void SendDamagedEventToClients(DamageInfo damageInfo, float damageAmount) diff --git a/Assets/Scripts/Behaviours/Ped/States/BaseScriptState.cs b/Assets/Scripts/Behaviours/Ped/States/BaseScriptState.cs index 09d4ee2d..fd437218 100644 --- a/Assets/Scripts/Behaviours/Ped/States/BaseScriptState.cs +++ b/Assets/Scripts/Behaviours/Ped/States/BaseScriptState.cs @@ -308,7 +308,7 @@ namespace SanAndreasUnity.Behaviours.Peds.States weapon.PlayFireSound(); } - public virtual void OnDamaged(DamageInfo damageInfo) + public virtual Ped.DamageResult OnDamaged(DamageInfo damageInfo) { float amount = damageInfo.raycastHitTransform != null ? m_model.GetAmountOfDamageForBone(damageInfo.raycastHitTransform, damageInfo.amount) @@ -325,6 +325,7 @@ namespace SanAndreasUnity.Behaviours.Peds.States // notify clients m_ped.SendDamagedEventToClients(damageInfo, amount); + return new Ped.DamageResult(amount); } public virtual void KillPed() diff --git a/Assets/Scripts/Behaviours/Ped/States/IPedState.cs b/Assets/Scripts/Behaviours/Ped/States/IPedState.cs index 9244cbbd..d2017ee5 100644 --- a/Assets/Scripts/Behaviours/Ped/States/IPedState.cs +++ b/Assets/Scripts/Behaviours/Ped/States/IPedState.cs @@ -32,7 +32,7 @@ namespace SanAndreasUnity.Behaviours.Peds.States void OnWeaponFiredFromServer(Weapon weapon, Vector3 firePos); - void OnDamaged(DamageInfo damageInfo); + Ped.DamageResult OnDamaged(DamageInfo damageInfo); } diff --git a/Assets/Scripts/Behaviours/Ped/States/VehicleSittingState.cs b/Assets/Scripts/Behaviours/Ped/States/VehicleSittingState.cs index b16d95d1..fcd430d9 100644 --- a/Assets/Scripts/Behaviours/Ped/States/VehicleSittingState.cs +++ b/Assets/Scripts/Behaviours/Ped/States/VehicleSittingState.cs @@ -195,15 +195,15 @@ namespace SanAndreasUnity.Behaviours.Peds.States return base.GetCameraFocusPos(); } - public override void OnDamaged(DamageInfo damageInfo) + public override Ped.DamageResult OnDamaged(DamageInfo damageInfo) { if (damageInfo.damageType == DamageType.Explosion) { // ped should not be damaged by explosion while he is in vehicle - return; + return new Ped.DamageResult(); } - base.OnDamaged(damageInfo); + return base.OnDamaged(damageInfo); } }