DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ CalculateBreadCrumbs()

void CalculateBreadCrumbs ( )
protected

См. определение в файле UndergroundHandlerClient.c строка 97

98 {
99 float closestDist = float.MAX;
100 array<float> distances = new array<float>();
101 array<float> distancesInverted = new array<float>();
102
103 int excludeMask = 0;
104 foreach (int indx, auto crumb:m_TransitionalTrigger.m_Data.Breadcrumbs)
105 {
106 if (indx > 32)//error handling for exceeding this limit is handled elsewhere
107 break;
108
109 float dist = vector.Distance(m_Player.GetPosition(), crumb.GetPosition());
110 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
111 float maxRadiusAllowed = DISTANCE_CUTOFF;
112
113 if (crumbRadius != -1)
114 maxRadiusAllowed = crumbRadius;
115 if (dist > maxRadiusAllowed)
116 excludeMask = (excludeMask | (1 << indx));
117 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
118 {
119 int idx = m_Player.GetBoneIndexByName("Head");
120 vector rayStart = m_Player.GetBonePositionWS(idx);
121 vector rayEnd = crumb.GetPosition();
122 vector hitPos, hitNormal;
123 float hitFraction;
124 Object hitObj;
125
126 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
127 {
128 excludeMask = (excludeMask | (1 << indx));
129 }
130 }
131
132 distances.Insert(dist);
133
134 #ifdef DIAG_DEVELOPER
135 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
136 Debug.DrawSphere(crumb.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
137 #endif
138 }
139
140 float baseDst = distances[0];
141 float sum = 0;
142
143 foreach (float dst:distances)
144 {
145 if (dst == 0)
146 dst = 0.1;
147 float dstInv = (baseDst / dst) * baseDst;
148 sum += dstInv;
149 distancesInverted.Insert(dstInv);
150 }
151
152 float sumCheck = 0;
153 float eyeAcco = 0;
154 foreach (int i, float dstInvert:distancesInverted)
155 {
156 if ((1 << i) & excludeMask)
157 continue;
158
159 float ratio = dstInvert / sum;
160 if (ratio > MAX_RATIO)
161 ratio = MAX_RATIO;
162
163 if (ratio > RATIO_CUTOFF)
164 {
165 #ifdef DIAG_DEVELOPER
166 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
167 {
168 float intensity = (1-ratio) * 255;
169 Debug.DrawLine(GetGame().GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
170 }
171 #endif
172
173 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
174 }
175 }
176
177 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
178 }
PhxInteractionLayers
Определения DayZPhysics.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
PlayerBase GetPlayer()
Определения ModifierBase.c:51
const float DISTANCE_CUTOFF
Определения UndergroundHandlerClient.c:15
UndergroundTrigger m_TransitionalTrigger
Определения UndergroundHandlerClient.c:34
const float ACCO_MODIFIER
Определения UndergroundHandlerClient.c:16
const float RATIO_CUTOFF
Определения UndergroundHandlerClient.c:14
float m_EyeAccoTarget
Определения UndergroundHandlerClient.c:26
const float MAX_RATIO
Определения UndergroundHandlerClient.c:13
static proto bool RayCastBullet(vector begPos, vector endPos, PhxInteractionLayers layerMask, Object ignoreObj, out Object hitObject, out vector hitPosition, out vector hitNormal, out float hitFraction)
Определения DayZPhysics.c:124
static Shape DrawSphere(vector pos, float size=1, int color=0x1fff7f7f, ShapeFlags flags=ShapeFlags.TRANSP|ShapeFlags.NOOUTLINE)
Определения Debug.c:319
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения Debug.c:382
Определения Debug.c:2
Определения EnDebug.c:233
Определения ObjectTyped.c:2
Result for an object found in CGame.IsBoxCollidingGeometryProxy.
static proto native float Distance(vector v1, vector v2)
Returns the distance between tips of two 3D vectors.
Определения EnConvert.c:106
proto native CGame GetGame()
const int COLOR_RED
Определения constants.c:64
ShapeFlags
Определения EnDebug.c:126
static proto bool GetBool(int id, bool reverse=false)
Get value as bool from the given script id.
class JsonUndergroundAreaTriggerData GetPosition
Определения UndergroundAreaLoader.c:9
int ARGB(int a, int r, int g, int b)
Определения proto.c:322

Перекрестные ссылки ACCO_MODIFIER, ARGB(), COLOR_RED, vector::Distance(), DISTANCE_CUTOFF, Debug::DrawLine(), Debug::DrawSphere(), DiagMenu::GetBool(), GetGame(), GetPlayer(), GetPosition, m_EyeAccoTarget, m_Player, m_TransitionalTrigger, MAX_RATIO, RATIO_CUTOFF и DayZPhysics::RayCastBullet().

Используется в CalculateEyeAccoTarget().