Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_BloodEditorAttribute.c
Go to the documentation of this file.
1
6{
7 //------------------------------------------------------------------------------------------------
8 override SCR_BaseEditorAttributeVar ReadVariable(Managed item, SCR_AttributesManagerEditorComponent manager)
9 {
11 if (!editableEntity)
12 return null;
13
14 IEntity owner = editableEntity.GetOwner();
15 if (!owner)
16 return null;
17
19 if (!characterDamageManager)
20 return null;
21
22 if (characterDamageManager.GetState() == EDamageState.DESTROYED)
23 return null;
24
25 HitZone bloodHitzone = characterDamageManager.GetBloodHitZone();
26 if (!bloodHitzone)
27 return null;
28
29 //~Todo: Once an unconscious character can be revived, just use raw GetHealthScaled
30 float bloodLevelLoseDeath = bloodHitzone.GetDamageStateThreshold(ECharacterBloodState.DESTROYED);
31 float bloodLevelContiousness = bloodHitzone.GetDamageStateThreshold(ECharacterBloodState.UNCONSCIOUS);
32 float bloodLevel = Math.InverseLerp(bloodLevelLoseDeath, 1, bloodHitzone.GetHealthScaled());
33
34 //~Safty Clamp
35 bloodLevel = Math.Clamp(bloodLevel, 0, 1);
36
37 //~ Sends over current blood level, % needed to fall Unconscious and if Unconsciousness is premitted
38 return SCR_BaseEditorAttributeVar.CreateVector(Vector(Math.Round(bloodLevel * 100), bloodLevelContiousness, characterDamageManager.GetPermitUnconsciousness()));
39 }
40
41 //------------------------------------------------------------------------------------------------
42 override void WriteVariable(Managed item, SCR_BaseEditorAttributeVar var, SCR_AttributesManagerEditorComponent manager, int playerID)
43 {
44 if (!var)
45 return;
47
48 IEntity owner = editableEntity.GetOwner();
49 if (!owner)
50 return;
51
53 if (!characterDamageManager)
54 return;
55
56 if (characterDamageManager.GetState() == EDamageState.DESTROYED)
57 return;
58
59 HitZone bloodHitzone = characterDamageManager.GetBloodHitZone();
60 if (!bloodHitzone)
61 return;
62
63 if (!characterDamageManager.IsDamageHandlingEnabled())
64 return;
65
66 //~Todo: Once an unconscious character can be revived, just use raw SetHealthScaled
67 float bloodLevelLoseDeath = bloodHitzone.GetDamageStateThreshold(ECharacterBloodState.DESTROYED);
68 float bloodLevel = Math.Lerp(bloodLevelLoseDeath, 1, var.GetFloat() * 0.01);
69 bloodLevel = Math.Clamp(bloodLevel, 0, 1);
70 if (bloodLevel == 0)
71 {
72 Instigator killer = Instigator.CreateInstigatorGM(playerID);
73 characterDamageManager.Kill(killer);
74 return;
75 }
76
77 bloodHitzone.SetHealthScaled(bloodLevel);
78 }
79}
SCR_AIAnimation_Loitering BaseContainerProps
Commanding menu commanding element class.
ECharacterBloodState
proto external Managed FindComponent(typename typeName)
Definition Math.c:13
static SCR_BaseEditorAttributeVar CreateVector(vector value)
bool GetPermitUnconsciousness()
Returns whether unconsciousness is permitted. Character prefab has highest authority,...
EDamageState
proto native vector Vector(float x, float y, float z)