3class SCR_WallGroupContainer
6 float m_fMiddleObjectLength;
7 float m_fSmallestWall =
float.MAX;
10 protected ref array<float> m_aLengths = {};
12 protected ref array<ref SCR_WallGroup> m_aWallGroups = {};
18 return m_aWallGroups.IsEmpty();
24 SCR_WallPair GetRandomWall(
float biggestSmallerThan,
float value01)
26 for (
int i = m_aLengths.Count() - 1; i >= 0; --i)
28 if (m_aLengths[i] < biggestSmallerThan)
29 return m_aWallGroups[i].GetRandomWall(value01);
40 void PrepareWallGroups(notnull array<ref WallLengthGroup> groups,
bool forward,
string middleObj)
42 m_aWallGroups.Clear();
44 array<ref SCR_WallGroup> wallGroupsTmp = {};
50 if (!middleObj.IsEmpty())
51 m_fMiddleObjectLength = WallGeneratorEntity.MeasureEntity(middleObj, forwardAxis);
53 SCR_WallGroup wallGroup;
54 SCR_WallPair wallPair;
56 foreach (WallLengthGroup group : groups)
58 wallGroup =
new SCR_WallGroup();
60 foreach (WallWeightPair pair : group.m_aWallPrefabs)
62 wallPair =
new SCR_WallPair();
64 wallPair.m_sWallAsset = pair.m_sWallAsset;
65 wallPair.m_fPostPadding = pair.m_fPostPadding;
66 wallPair.m_fPrePadding = pair.m_fPrePadding;
67 wallGroup.m_aWeights.Insert(pair.m_fWeight);
69 wallLength = WallGeneratorEntity.MeasureEntity(wallPair.m_sWallAsset, forwardAxis);
71 wallPair.m_fWallLength = wallLength;
73 if (wallLength > wallGroup.m_fWallLength)
74 wallGroup.m_fWallLength = wallLength;
76 if (!wallPair.m_sWallAsset.IsEmpty())
77 wallGroup.m_aWallPairs.Insert(wallPair);
80 if (!wallGroup.m_aWallPairs.IsEmpty())
82 wallGroupsTmp.Insert(wallGroup);
88 while (!wallGroupsTmp.IsEmpty())
90 float smallestSize =
float.MAX;
92 foreach (
int i, SCR_WallGroup groupTmp : wallGroupsTmp)
94 if (groupTmp.m_fWallLength < smallestSize)
96 smallestSize = groupTmp.m_fWallLength;
97 if (smallestSize < m_fSmallestWall)
98 m_fSmallestWall = smallestSize;
104 m_aWallGroups.Insert(wallGroupsTmp[smallestIndex]);
105 m_aLengths.Insert(wallGroupsTmp[smallestIndex].m_fWallLength);
106 wallGroupsTmp.Remove(smallestIndex);
112 void SCR_WallGroupContainer(notnull array<ref WallLengthGroup> items,
bool forward,
string middleObj)
114 PrepareWallGroups(items, forward, middleObj);
proto native bool IsEmpty()