MCPcopy Create free account
hub / github.com/bfbbdecomp/bfbb / zEntHangable_Update

Function zEntHangable_Update

src/SB/Game/zEntHangable.cpp:142–213  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140}
141
142void zEntHangable_Update(zEntHangable* ent, xScene*, F32 dt)
143{
144 xVec3 sub;
145 xVec3 unitHang;
146 F32 dot;
147
148 xMat3x3GetEuler((xMat3x3*)ent->model->Mat, &ent->frame->oldrot.axis);
149 ent->frame->oldmat = *(xMat4x3*)(ent->model->Mat);
150
151 if ((ent->enabled < 0) && (ent->enabled++, ent->enabled == 0))
152 {
153 ent->enabled = 1;
154 }
155
156 zEntHangable_UpdateFX(ent);
157
158 if (!(ent->hangInfo->flags & 0x80000000))
159 {
160 ent->hangInfo->leverArm -= globals.player.ent.bound.cyl.r;
161 ent->hangInfo->flags |= 0x80000000;
162 }
163
164 ent->grabTimer = 0.0f > ent->grabTimer - dt ? 0.0f : ent->grabTimer - dt;
165
166 if (globals.player.HangEnt == ent)
167 {
168 return;
169 }
170
171 zEntHangable_FollowUpdate(ent);
172
173 unitHang.x = 0.0f;
174 unitHang.y = -ent->hangInfo->gravity;
175 unitHang.z = 0.0f;
176
177 xVec3Sub(&sub, &ent->endpos, &ent->pivot);
178 xVec3Normalize(&sub, &sub);
179
180 dot = xVec3Dot(&sub, &unitHang);
181 unitHang.x = -((dot * sub.x) - unitHang.x);
182 unitHang.y = -((dot * sub.y) - unitHang.y);
183 unitHang.z = -((dot * sub.z) - unitHang.z);
184
185 ent->vel.x = (unitHang.x * dt) + ent->vel.x;
186 ent->vel.y = (unitHang.y * dt) + ent->vel.y;
187 ent->vel.z = (unitHang.z * dt) + ent->vel.z;
188
189 dot = xVec3Dot(&sub, &ent->vel);
190 ent->vel.x = -((dot * sub.x) - ent->vel.x);
191 ent->vel.y = -((dot * sub.y) - ent->vel.y);
192 ent->vel.z = -((dot * sub.z) - ent->vel.z);
193
194 xVec3SMul(&ent->vel, &ent->vel, 0.97f);
195
196 if (xVec3Length2(&ent->vel) < 0.001f)
197 {
198 ent->vel.x = 0.0f;
199 ent->vel.y = 0.0f;

Callers

nothing calls this directly

Calls 9

xVec3SubFunction · 0.85
xVec3SMulFunction · 0.85
xVec3Length2Function · 0.85
xVec3AddFunction · 0.85
zEntHangable_UpdateFXFunction · 0.70
zEntHangable_SetMatrixFunction · 0.70
xMat3x3GetEulerFunction · 0.50
xVec3NormalizeFunction · 0.50

Tested by

no test coverage detected