Arma Reforger Explorer 1.7.0.54
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
Loading...
Searching...
No Matches
SCR_AlternativeRequirementsDeployablePart.c
Go to the documentation of this file.
2{
3 [Attribute(desc: "Alternative Requirement")]
5
6 [Attribute(defvalue: "1", desc: "Can game use X elements from this requirement and Y elements from alternative requirement to reach this required number of elements")]
7 protected bool m_bCanMix;
8
9 protected bool m_bRequirementMet;
10
11 //------------------------------------------------------------------------------------------------
12 override bool EvaluateFoundEntity(vector origin, float distanceSqToFoundEntity, notnull BaseContainer foundPrefab, notnull IEntity foundEntity)
13 {
14 bool isAnAlternative = m_AlternativeRequirement.EvaluateFoundEntity(origin, distanceSqToFoundEntity, foundPrefab, foundEntity);
15 if (isAnAlternative)
16 {
17 if (!m_bCanMix)
18 return true;
19 }
20 else
21 {
22 bool result = super.EvaluateFoundEntity(origin, distanceSqToFoundEntity, foundPrefab, foundEntity);
23 if (result && m_iNumberOfRequiredPrefabs == m_aFoundEntities.Count())
24 m_bRequirementMet = true;
25
26 return result;
27 }
28
30 {
31 AddFoundEntity(foundEntity);
32 return true;
33 }
34
35 foreach (int id, IEntity foundElement : m_aFoundEntities)
36 {
37 if (vector.DistanceSq(foundElement.GetOrigin(), origin) <= distanceSqToFoundEntity)
38 continue;
39
40 ReplaceFoundEntity(foundEntity, id);
41 return true;
42 }
43
44 return false;
45 }
46
47 //------------------------------------------------------------------------------------------------
48 override bool IsRequirementMet(out int difference)
49 {
50 bool result = super.IsRequirementMet(difference);
51 if (m_bCanMix || result)
52 return result;
53
54 return m_AlternativeRequirement.IsRequirementMet(difference);
55 }
56
57 //------------------------------------------------------------------------------------------------
59 {
60 if (m_bCanMix)
61 return m_sPartName;
62
63 if (m_AlternativeRequirement.GetNumberOfFoundEntities() > 0 && super.GetNumberOfFoundEntities() == 0)
64 return m_AlternativeRequirement.GetMissingPartName();
65
66 return m_sPartName;
67 }
68
69 //------------------------------------------------------------------------------------------------
71 {
72 if (m_bCanMix)
73 return super.GetNumberOfFoundEntities();
74
75 int difference;
76 if (super.IsRequirementMet(difference))
77 return m_aFoundEntities.Count();
78
79 return m_AlternativeRequirement.GetNumberOfFoundEntities();
80 }
81
82 //------------------------------------------------------------------------------------------------
83 override array<IEntity> GetFoundEntities()
84 {
85 if (m_bCanMix)
86 return super.GetFoundEntities();
87
88 array<IEntity> combinedList = m_AlternativeRequirement.GetFoundEntities();
89 if (!combinedList)
90 return super.GetFoundEntities();
91
93 return combinedList;
94
95 combinedList.InsertAll(m_aFoundEntities);
96 return combinedList;
97 }
98
99 //------------------------------------------------------------------------------------------------
100 override bool DeleteFoundEntity(int id, notnull IEntity user)
101 {
102 if (!m_bCanMix)
103 {//if we cannot mix
104 //and we completed this requirement
106 return super.DeleteFoundEntity(id, user);
107
108 //otherwise we operate on the alternative requirement
109 return m_AlternativeRequirement.DeleteFoundEntity(id, user);
110 }
111
112 //if we have not found anything then pass the delition request to the alternative
113 if (!m_aFoundEntities || m_aFoundEntities.IsEmpty())
114 return m_AlternativeRequirement.DeleteFoundEntity(id, user);
115
116 int numberOfFoundElements = m_aFoundEntities.Count();
117 if (id >= numberOfFoundElements)
118 return m_AlternativeRequirement.DeleteFoundEntity(id - numberOfFoundElements, user);
119
120 return super.DeleteFoundEntity(id, user);
121 }
122
123 //------------------------------------------------------------------------------------------------
131
132 //------------------------------------------------------------------------------------------------
134 {
135 m_AlternativeRequirement = newRequirement;
136 }
137
138 //------------------------------------------------------------------------------------------------
144}
UI Textures DeployMenu Briefing conflict_HintBanner_1_UI desc
override bool EvaluateFoundEntity(vector origin, float distanceSqToFoundEntity, notnull BaseContainer foundPrefab, notnull IEntity foundEntity)
void AlternativeRequirementOverride(SCR_RequiredDeployablePart newRequirement)
override bool DeleteFoundEntity(int id, notnull IEntity user)
void AddFoundEntity(notnull IEntity entity)
void ReplaceFoundEntity(notnull IEntity entity, int id)
SCR_FieldOfViewSettings Attribute