Broker subscribers updates

This commit is contained in:
Pedro Gomes 2025-09-29 19:54:01 +01:00
parent 592a55cecc
commit 098ff5d0d8
14 changed files with 254 additions and 28 deletions

View File

@ -112,6 +112,7 @@ Transform:
- {fileID: 5990858872549904705}
- {fileID: 6088225706018485977}
- {fileID: 5849716072256962441}
- {fileID: 1984011823945327289}
- {fileID: 8352337540601452143}
m_Father: {fileID: 1695802727639733595}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
@ -366,8 +367,53 @@ Transform:
m_Children:
- {fileID: 670601208020570842}
- {fileID: 3145042774550608289}
- {fileID: 2860111524623448099}
m_Father: {fileID: 1695802727639733595}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &7059394560846269332
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1984011823945327289}
- component: {fileID: 3923038257450023262}
m_Layer: 0
m_Name: Temp Incoming Mod Interceptor
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &1984011823945327289
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7059394560846269332}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 1232807570145535296}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &3923038257450023262
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 7059394560846269332}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: ea668dfbd9dd0b94a8ff9d3f2062c14e, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::TemporaryIncomeModifierInterceptor
--- !u!1 &8090521145083935055
GameObject:
m_ObjectHideFlags: 0
@ -466,6 +512,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 8352337540601452143}
- component: {fileID: 2749120375536215551}
m_Layer: 0
m_Name: AbsorbInterceptor
m_TagString: Untagged
@ -488,3 +535,59 @@ Transform:
m_Children: []
m_Father: {fileID: 1232807570145535296}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &2749120375536215551
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8299296301867067610}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 6de99a6f4bb244b4f98a4f762ad5c485, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::AbsorbInterceptor
--- !u!1 &8365795067992873118
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 2860111524623448099}
- component: {fileID: 7846247177940105072}
m_Layer: 0
m_Name: Temp Outgoing Mod Interceptor
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &2860111524623448099
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8365795067992873118}
serializedVersion: 2
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2853615639420944899}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &7846247177940105072
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 8365795067992873118}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: bc32ad4c0ff248e4aa48487bcab21545, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::TemporaryOutgoingModifierInterceptor

View File

@ -78,7 +78,7 @@ Material:
- _Mode: 0
- _OcclusionStrength: 1
- _Parallax: 0.02
- _Rotation: 4.523739
- _Rotation: 6.450734
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1

View File

@ -396,6 +396,11 @@ RectTransform:
m_CorrespondingSourceObject: {fileID: 2863526721979749937, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
m_PrefabInstance: {fileID: 3666263940844339160}
m_PrefabAsset: {fileID: 0}
--- !u!1 &977202633 stripped
GameObject:
m_CorrespondingSourceObject: {fileID: 3603665853181784676, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
m_PrefabInstance: {fileID: 3666263940844339160}
m_PrefabAsset: {fileID: 0}
--- !u!1 &997678533
GameObject:
m_ObjectHideFlags: 0
@ -2017,12 +2022,16 @@ PrefabInstance:
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.size
value: 1
value: 2
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Mode
value: 5
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Mode
value: 6
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Target
value:
@ -2030,19 +2039,31 @@ PrefabInstance:
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Target
value:
objectReference: {fileID: 1992835500}
objectReference: {fileID: 977202633}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_CallState
value: 2
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_MethodName
value: Play
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_MethodName
value: SetActive
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_TargetAssemblyTypeName
value: UnityEngine.Animator, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_TargetAssemblyTypeName
value: UnityEngine.GameObject, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_StringArgument
value: SwirlToCorner
@ -2051,6 +2072,10 @@ PrefabInstance:
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[0].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
- target: {fileID: 4504414350240688175, guid: 99cd14f3361426a43b42af870871d83d, type: 3}
propertyPath: m_OnClick.m_PersistentCalls.m_Calls.Array.data[1].m_Arguments.m_ObjectArgumentAssemblyTypeName
value: UnityEngine.Object, UnityEngine
objectReference: {fileID: 0}
m_RemovedComponents: []
m_RemovedGameObjects: []
m_AddedGameObjects: []

View File

@ -2,12 +2,47 @@ using UnityEngine;
public class AbsorbInterceptor : BrokerInterceptor
{
AbsorbEffectInstance absorbEffect;
float finalValue;
protected override void Awake()
{
base.Awake();
absorbEffect = GetComponentInParent<AbsorbEffectInstance>();
broker.OnIncomingDamage.Subscribe(HandleAbsorbEffects, GameConstants.BrokerEventPriority.BasicStatMitigation);
}
private void HandleAbsorbEffects(DamageArgs args)
{
finalValue = args.currentValue;
if (finalValue >= 0) return;
AbsorbArgs absorbArgs = new AbsorbArgs()
{
user = user,
absorbedDamage = false,
absorbDepleted = false
};
if (absorbEffect.IsActive)
{
finalValue = absorbEffect.AbsorbDamage(finalValue);
if (finalValue > 0) //avoid complete absorbs turning into healing
finalValue = 0;
absorbArgs.absorbedDamage = true;
absorbArgs.absorbDepleted = absorbEffect.currentAmount <= 0;
args.currentValue = finalValue;
}
broker.OnAbsorb.Invoke(absorbArgs);
}
}

View File

@ -40,6 +40,8 @@ public class BasicStatMitigationCalculator : BrokerInterceptor
if (finalValue > 0) //avoid damage ultra mitigated turning into healing
finalValue = 0;
args.currentValue = finalValue;
}

View File

@ -8,16 +8,16 @@ public class DebugBroker : MonoBehaviour
{
broker = GetComponentInParent<EntityEventBroker>();
broker.OnIncomingDamage.Subscribe((x) => DebugDamageArgs("dealing damage to", x));
broker.OnIncomingDamageProcessed.Subscribe((x) => DebugDamageArgs("dealing damage to", x));
broker.OnIncomingDamage.Subscribe((x) => DebugDamageArgs("OnIncomingDamage", x));
broker.OnIncomingDamageProcessed.Subscribe((x) => DebugDamageArgs("OnIncomingDamageProcessed", x));
broker.OnOutgoingDamage.Subscribe((x) => DebugDamageArgs("dealing damage to", x));
broker.OnOutgoingDamageProcessed.Subscribe((x) => DebugDamageArgs("dealing damage to", x));
broker.OnOutgoingDamage.Subscribe((x) => DebugDamageArgs("OnOutgoingDamage", x));
broker.OnOutgoingDamageProcessed.Subscribe((x) => DebugDamageArgs("OnOutgoingDamageProcessed", x));
}
private void DebugDamageArgs(string prefix, DamageArgs args)
{
Debug.Log($"Broker Debugger: {args.user}'s {args.effect.name} {prefix}: {args.target} => {args.currentValue}, isCrit? {args.isCrit}, dmgType={args.damageType}, targets hit total ={args.totalTargetsHit}");
Debug.Log($"Broker Debugger || {prefix} ||: {args.user}'s {args.effect.name} dealing damage to: {args.target} => {args.currentValue}, isCrit? {args.isCrit}, dmgType={args.damageType}, targets hit total ={args.totalTargetsHit}");
}
}

View File

@ -0,0 +1,36 @@
using UnityEngine;
public class TemporaryIncomeModifierInterceptor : BrokerInterceptor
{
DamageIncomeModifierEffectInstance incomeModifier;
float finalValue;
protected override void Awake()
{
base.Awake();
incomeModifier = GetComponentInParent<DamageIncomeModifierEffectInstance>();
broker.OnIncomingDamage.Subscribe(HandleDamageIncomeModifierEffects, GameConstants.BrokerEventPriority.TemporaryMitigationMods);
}
private void HandleDamageIncomeModifierEffects(DamageArgs args)
{
finalValue = args.currentValue;
if (finalValue >= 0) return;
if (incomeModifier.IsActive)
{
//Debug.Log("Incoming damage b4 mitigation: " + incomingValue);
finalValue = incomeModifier.ModifyDamageIncome(finalValue);
if (finalValue > 0) //avoid damage ultra mitigated turning into healing
finalValue = 0;
args.currentValue = finalValue;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ea668dfbd9dd0b94a8ff9d3f2062c14e

View File

@ -0,0 +1,31 @@
using UnityEngine;
public class TemporaryOutgoingModifierInterceptor : BrokerInterceptor
{
DamageOutputModifierEffectInstance outgoingModifier;
float finalValue;
protected override void Awake()
{
base.Awake();
outgoingModifier = GetComponentInParent<DamageOutputModifierEffectInstance>();
broker.OnOutgoingDamage.Subscribe(HandleDamageOutgoingModifierEffects, GameConstants.BrokerEventPriority.TemporaryAmplificationMods);
}
private void HandleDamageOutgoingModifierEffects(DamageArgs args)
{
finalValue = args.currentValue;
if (outgoingModifier.IsActive)
{
//Debug.Log("Incoming damage b4 mitigation: " + incomingValue);
finalValue = outgoingModifier.ModifyDamageOutput(finalValue);
args.currentValue = finalValue;
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: bc32ad4c0ff248e4aa48487bcab21545

View File

@ -25,6 +25,7 @@ public class EntityEventBroker : MonoBehaviour
public OrderedEvent<InvulnerabilityArgs> OnInvulnerable = new OrderedEvent<InvulnerabilityArgs>();
public OrderedEvent<DodgeArgs> OnDodge = new OrderedEvent<DodgeArgs>();
public OrderedEvent<BlockArgs> OnBlock = new OrderedEvent<BlockArgs>();
public OrderedEvent<AbsorbArgs> OnAbsorb = new OrderedEvent<AbsorbArgs>();
}

View File

@ -45,4 +45,11 @@ public class BlockArgs
{
public Taggable user;
public bool blockedSuccessfully;
}
public class AbsorbArgs
{
public Taggable user;
public bool absorbedDamage;
public bool absorbDepleted;
}

View File

@ -85,7 +85,7 @@ public static class GameConstants
public static class BrokerEventPriority
{
public const int BasicStatAmplification = 0;
public const int PassiveEffects = 5;
public const int PassiveAmplificationEffects = 5;
public const int TemporaryAmplificationMods = 10;
@ -93,6 +93,7 @@ public static class GameConstants
public const int Dodge = 2;
public const int Block = 3;
public const int BasicStatMitigation = 5;
public const int PassiveMitigationEffects = 7;
public const int TemporaryMitigationMods = 10;
public const int Absorb = 15;
public const int Procs = 30;

View File

@ -89,23 +89,6 @@ public class Health : Resource
}
}
protected void HandleAbsorbEffects()
{
if (incomingValue < 0)
{
if (absorbEffectInstance.IsActive)
{
//Debug.Log("Incoming damage b4 absorbs: " + incomingValue);
incomingValue = absorbEffectInstance.AbsorbDamage(incomingValue);
if (incomingValue > 0) //avoid complete absorbs turning into healing
incomingValue = 0;
}
//Debug.Log("Incoming damage after absorbs: " + incomingValue);
}
}
public void ApplyDamage(DamageArgs args)
{
if (isDead) return;
@ -161,7 +144,6 @@ public class Health : Resource
HandleDamageIncomeModifierEffects();
HandleAbsorbEffects();
currentValue += incomingValue;
@ -230,7 +212,6 @@ public class Health : Resource
HandleDamageIncomeModifierEffects();
HandleAbsorbEffects();
currentValue += incomingValue;