DayZ 1.29
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 float dist = vector.Distance(m_Player.GetPosition(), crumb.GetPosition());
109 float crumbRadius = m_TransitionalTrigger.m_Data.Breadcrumbs[indx].Radius;
110 float maxRadiusAllowed = DISTANCE_CUTOFF;
111
112 switch (crumb.ExternalValueController.Type)
113 {
114 case "DoorState":
115 {
116 BreadcrumbDoorStateController ctrl = new BreadcrumbDoorStateController(crumb.ExternalValueController.Params);
117 if (!ctrl || (ctrl && ctrl.SelectionName == ""))
118 break;
119
120 Building building = Building.Cast(m_TransitionalTrigger.GetTriggerParentObject());
121 if (!building)
122 break;
123
124 float animPhase = building.GetAnimationPhase(ctrl.SelectionName);
125 m_LightingLerpTarget = Math.Clamp(Easing.EaseInOutQuint(1 - animPhase), 0.0, 1.0);
126 m_LightingLerp = Easing.EaseInQuint(1 - Math.Remap(0.2, 0.5, 0.0, 1.0, animPhase));
127 m_EyeAccoTarget = Math.Remap(0.2, 0.5, 0.0, m_TransitionalTrigger.m_Data.Breadcrumbs[indx].EyeAccommodation, animPhase * ACCO_MODIFIER);
128
129 return;
130 }
131 }
132
133 if (crumbRadius != -1)
134 maxRadiusAllowed = crumbRadius;
135 if (dist > maxRadiusAllowed)
136 excludeMask = (excludeMask | (1 << indx));
137 else if (m_TransitionalTrigger.m_Data.Breadcrumbs[indx].UseRaycast)
138 {
139 vector rayStart;
140 MiscGameplayFunctions.GetHeadBonePos(m_Player, rayStart);
141 vector rayEnd = crumb.GetPosition();
142 vector hitPos, hitNormal;
143 float hitFraction;
144 Object hitObj;
145
146 if (DayZPhysics.RayCastBullet(rayStart, rayEnd,PhxInteractionLayers.TERRAIN | PhxInteractionLayers.ROADWAY| PhxInteractionLayers.BUILDING, null, hitObj, hitPos, hitNormal, hitFraction))
147 {
148 excludeMask = (excludeMask | (1 << indx));
149 }
150 }
151
152 distances.Insert(dist);
153
154 #ifdef DIAG_DEVELOPER
155 if ( DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
156 Debug.DrawSphere(crumb.GetPosition(),0.1, COLOR_RED, ShapeFlags.ONCE);
157 #endif
158 }
159
160 float baseDst = distances[0];
161 float sum = 0;
162
163 foreach (float dst:distances)
164 {
165 if (dst == 0)
166 dst = 0.1;
167 float dstInv = (baseDst / dst) * baseDst;
168 sum += dstInv;
169 distancesInverted.Insert(dstInv);
170 }
171
172 float sumCheck = 0;
173 float eyeAcco = 0;
174 foreach (int i, float dstInvert:distancesInverted)
175 {
176 if ((1 << i) & excludeMask)
177 continue;
178
179 float ratio = dstInvert / sum;
180 if (ratio > MAX_RATIO)
181 ratio = MAX_RATIO;
182
183 if (ratio > RATIO_CUTOFF)
184 {
185 #ifdef DIAG_DEVELOPER
186 if (DiagMenu.GetBool(DiagMenuIDs.UNDERGROUND_SHOW_BREADCRUMB) )
187 {
188 float intensity = (1-ratio) * 255;
189 Debug.DrawLine(g_Game.GetPlayer().GetPosition() + "0 1 0", m_TransitionalTrigger.m_Data.Breadcrumbs[i].GetPosition(),ARGB(0,255,intensity,intensity),ShapeFlags.ONCE);
190 }
191 #endif
192
193 eyeAcco += ratio * m_TransitionalTrigger.m_Data.Breadcrumbs[i].EyeAccommodation;
194 }
195 }
196
197 m_EyeAccoTarget = eyeAcco * ACCO_MODIFIER;
198 }
map m_Player
DayZGame g_Game
Определения DayZGame.c:3942
PhxInteractionLayers
Определения DayZPhysics.c:2
DiagMenuIDs
Определения EDiagMenuIDs.c:2
void BreadcrumbDoorStateController(TStringArray params)
Определения UndergroundAreaLoader.c:62
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:382
static Shape DrawLine(vector from, vector to, int color=0xFFFFFFFF, int flags=0)
Определения 3_Game/DayZ/tools/Debug.c:461
Определения 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(), m_EyeAccoTarget, m_LightingLerp, m_LightingLerpTarget, m_TransitionalTrigger, MAX_RATIO, RATIO_CUTOFF, DayZPhysics::RayCastBullet() и Math::Remap().

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