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

◆ CalculateBreadCrumbs()

void CalculateBreadCrumbs ( )
protected

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

97 {
98 float closestDist = float.MAX;
99 array<float> distances = new array<float>();
100 array<float> distancesInverted = new array<float>();
101
102 int excludeMask = 0;
103 foreach (int indx, auto crumb : m_TransitionalTrigger.m_Data.Breadcrumbs)
104 {
105 if (indx > 32)//error handling for exceeding this limit is handled elsewhere
106 break;
107
108 vector playerPosition = m_Player.GetPosition();
109 vector crumbPosition = crumb.GetPosition();
110 float dist = vector.Distance(playerPosition, crumbPosition);
111 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
112 float maxRadiusAllowed = DISTANCE_CUTOFF;
113
114 switch (crumb.ExternalValueController.Type)
115 {
116 case "DoorState":
117 {
118 BreadcrumbDoorStateController ctrl = new BreadcrumbDoorStateController(crumb.ExternalValueController.Params);
119 if (!ctrl || (ctrl && ctrl.SelectionName == ""))
120 break;
121
122 Building building = Building.Cast(m_TransitionalTrigger.GetTriggerParentObject());
123 if (!building)
124 break;
125
126 float animPhase = building.GetAnimationPhase(ctrl.SelectionName);
127 m_LightingLerpTarget = Math.Clamp(Easing.EaseInOutQuint(1 - animPhase), 0.0, 1.0);
128 m_LightingLerp = Easing.EaseInQuint(1 - Math.Remap(0.2, 0.5, 0.0, 1.0, animPhase));
129 m_EyeAccoTarget = Math.Remap(0.2, 0.5, 0.0, m_TransitionalTrigger.m_Data.Breadcrumbs[indx].EyeAccommodation, animPhase * ACCO_MODIFIER);
130
131 return;
132 }
133 }
134
135 if (crumbRadius != -1)
136 maxRadiusAllowed = crumbRadius;
137 if (dist > maxRadiusAllowed)
138 excludeMask = (excludeMask | (1 << indx));
139 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
140 {
141 vector rayStart = MiscGameplayFunctions.GetPlayerHeadPosition(m_Player);
142 vector rayEnd = crumbPosition;
143 vector hitPos, hitNormal;
144 float hitFraction;
145 Object hitObj;
146
147 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
148 {
149 excludeMask = (excludeMask | (1 << indx));
150 }
151 }
152
153 distances.Insert(dist);
154
155 #ifdef DIAG_DEVELOPER
156 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
157 Debug.DrawSphere(crumbPosition, 0.1, COLOR_RED, ShapeFlags.ONCE);
158 #endif
159 }
160
161 float baseDst = distances[0];
162 float sum = 0;
163
164 foreach (float dst:distances)
165 {
166 if (dst == 0)
167 dst = 0.1;
168 float dstInv = (baseDst / dst) * baseDst;
169 sum += dstInv;
170 distancesInverted.Insert(dstInv);
171 }
172
173 float sumCheck = 0;
174 float eyeAcco = 0;
175 foreach (int i, float dstInvert:distancesInverted)
176 {
177 if ((1 << i) & excludeMask)
178 continue;
179
180 float ratio = dstInvert / sum;
181 if (ratio > MAX_RATIO)
182 ratio = MAX_RATIO;
183
184 if (ratio > RATIO_CUTOFF)
185 {
186 #ifdef DIAG_DEVELOPER
187 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
188 {
189 float intensity = (1-ratio) * 255;
190 Debug.DrawLine(g_Game.GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
191 }
192 #endif
193
194 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
195 }
196 }
197
198 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
199 }
DayZGame g_Game
Определения DayZGame.c:4074
PhxInteractionLayers
Определения DayZPhysics.c:2
float hitFraction
Определения DustKickupEffects.c:23
DiagMenuIDs
Определения EDiagMenuIDs.c:2
DayZPlayer m_Player
Определения Hand_Events.c:42
void BreadcrumbDoorStateController(TStringArray params)
Определения UndergroundAreaLoader.c:63
const float DISTANCE_CUTOFF
Определения UndergroundHandlerClient.c:15
UndergroundTrigger m_TransitionalTrigger
Определения UndergroundHandlerClient.c:35
const float ACCO_MODIFIER
Определения UndergroundHandlerClient.c:16
const float RATIO_CUTOFF
Определения UndergroundHandlerClient.c:14
float m_LightingLerpTarget
Определения UndergroundHandlerClient.c:29
float m_EyeAccoTarget
Определения UndergroundHandlerClient.c:26
float m_LightingLerp
Определения UndergroundHandlerClient.c:30
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)
Определения 3_Game/DayZ/tools/Debug.c:395
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения 3_Game/DayZ/tools/Debug.c:474
Определения 3_Game/DayZ/tools/Debug.c:2
Определения EnDebug.c:241
static float EaseInQuint(float t)
Определения Easing.c:78
static float EaseInOutQuint(float t)
Определения Easing.c:89
Input value between 0 and 1, returns value adjusted by easing, no automatic clamping of input(do your...
Определения Easing.c:3
Определения EnMath.c:7
Определения 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:119
const int COLOR_RED
Определения 1_Core/DayZ/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.
static proto float Clamp(float value, float min, float max)
Clamps 'value' to 'min' if it is lower than 'min', or to 'max' if it is higher than 'max'.
static float Remap(float inputMin, float inputMax, float outputMin, float outputMax, float inputValue, bool clampedOutput=true)
Returns given value remaped from input range into output range.
Определения EnMath.c:740
int ARGB(int a, int r, int g, int b)
Определения proto.c:322

Перекрестные ссылки ACCO_MODIFIER, ARGB(), BreadcrumbDoorStateController(), Math::Clamp(), COLOR_RED, vector::Distance(), DISTANCE_CUTOFF, Debug::DrawLine(), Debug::DrawSphere(), Easing::EaseInOutQuint(), Easing::EaseInQuint(), g_Game, DiagMenu::GetBool(), hitFraction, m_EyeAccoTarget, m_LightingLerp, m_LightingLerpTarget, m_Player, m_TransitionalTrigger, MAX_RATIO, RATIO_CUTOFF, DayZPhysics::RayCastBullet() и Math::Remap().

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