Arma Reforger Explorer  1.1.0.42
Arma Reforger Code Explorer by Zeroy - Thanks to MisterOutofTime
SCR_WeightedArray.c
Go to the documentation of this file.
1 class SCR_WeightedArray<Class TValue>: Managed
2 {
3  protected ref array<TValue> m_Values = new array<TValue>();
4  protected ref array<float> m_Weights = new array<float>();
5  protected float m_TotalWeight;
6 
7  int GetRandomValue(out TValue outValue)
8  {
9  float weightedValue = Math.RandomFloat(0, m_TotalWeight);
10  return GetWeightedValue(outValue, weightedValue);
11  }
12  int GetRandomValue(out TValue outValue, RandomGenerator randomGenerator)
13  {
14  float weightedValue = randomGenerator.RandFloatXY(0, m_TotalWeight);
15  return GetWeightedValue(outValue, weightedValue);
16  }
17  int GetWeightedValue(out TValue outValue, float weightedValue)
18  {
19  float weight;
20  for (int i = 0, count = m_Values.Count(); i < count; i++)
21  {
22  weight += m_Weights[i];
23  if (weightedValue < weight)
24  {
25  outValue = m_Values[i];
26  return i;
27  }
28  }
29  return -1;
30  }
31  float GetTotalWeight()
32  {
33  return m_TotalWeight;
34  }
35  TValue Get(int n)
36  {
37  return m_Values.Get(n);
38  }
39  void Set(int n, TValue value)
40  {
41  m_Values.Set(n, value);
42  }
43  int Insert(TValue value, float weight)
44  {
45  m_Weights.Insert(weight);
46  m_TotalWeight += weight;
47  return m_Values.Insert(value);
48  }
49  void Remove(int i)
50  {
51  m_TotalWeight -= m_Weights[i];
52  m_Values.Remove(i);
53  m_Weights.Remove(i);
54  }
55  void RemoveOrdered(int i)
56  {
57  m_TotalWeight -= m_Weights[i];
58  m_Values.RemoveOrdered(i);
59  m_Weights.RemoveOrdered(i);
60  }
61  float GetWeight(int i)
62  {
63  return m_Weights[i];
64  }
65  TValue GetValue(int i)
66  {
67  return m_Values[i];
68  }
69  int Count()
70  {
71  return m_Values.Count();
72  }
73  bool IsEmpty()
74  {
75  return m_Values.IsEmpty();
76  }
77  bool Contains(TValue value)
78  {
79  return m_Values.Contains(value);
80  }
81  int Find(TValue value)
82  {
83  return m_Values.Find(value);
84  }
85 
86  int CopyFrom(notnull SCR_WeightedArray<TValue> from)
87  {
88  Clear();
89  int count = from.Count();
90  for (int i = 0; i < count; i++)
91  {
92  m_Weights.Insert(from.m_Weights[i]);
93  m_Values.Insert(from.m_Values[i]);
94  }
95  return count;
96  }
97  void Clear()
98  {
99  m_Weights.Clear();
100  m_Values.Clear();
101  }
102  int ToArray(out notnull array<TValue> outArray)
103  {
104  return outArray.Copy(m_Values);
105  }
106  void Debug()
107  {
108  PrintFormat("H_WeightedArray count: %1, total weight: %2", Count(), GetTotalWeight());
109  for (int i, count = Count(); i < count; i++)
110  {
111  PrintFormat("[%1] => %2: %3", i, m_Weights[i], m_Values[i]);
112  }
113  }
114 }
Clear
void Clear(GenericEntity entity)
Definition: SCR_GadgetManagerComponent.c:105
CopyFrom
void CopyFrom(SCR_AITargetInfo other)
Definition: SCR_AITargetInfo.c:125
Remove
proto external void Remove(notnull IEntity mine)
Removes the given mine entity.
m_Weights
protected ref array< float > m_Weights
Definition: PrefabGeneratorEntity.c:16
GetValue
override int GetValue()
Definition: SCR_VotingBase.c:69
Contains
proto external sealed bool Contains(IEntity item)
Get
proto external sealed IEntity Get(int slotID)