| 200 | } |
| 201 | |
| 202 | void xEntDriveUpdate(xEntDrive* drv, xScene* s, F32 dt, const xCollis* coll) |
| 203 | { |
| 204 | if ((drv != NULL && (drv->odriver != NULL || drv->driver != NULL))) |
| 205 | { |
| 206 | if (drv->driven == NULL || drv->driven->frame == NULL || |
| 207 | (drv->odriver != NULL && drv->odriver->frame == NULL)) |
| 208 | { |
| 209 | xEntDriveInit(drv, drv->driven); |
| 210 | return; |
| 211 | } |
| 212 | |
| 213 | if (drv->otmr > 0.0f) |
| 214 | { |
| 215 | drv->otmr -= dt; |
| 216 | if (drv->otmr <= 0.0f) |
| 217 | { |
| 218 | drv->os = 0.0f; |
| 219 | drv->otmr = 0.0f; |
| 220 | } |
| 221 | else |
| 222 | { |
| 223 | drv->os = drv->otmr / drv->otm; |
| 224 | } |
| 225 | } |
| 226 | |
| 227 | if (drv->tmr > 0.0f) |
| 228 | { |
| 229 | drv->tmr -= dt; |
| 230 | if (drv->tmr <= 0.0f) |
| 231 | { |
| 232 | drv->s = 1.0f; |
| 233 | drv->tmr = 0.0f; |
| 234 | } |
| 235 | else |
| 236 | { |
| 237 | drv->s = 1.0f - drv->tmr / drv->tm; |
| 238 | } |
| 239 | } |
| 240 | |
| 241 | if (!drv->os && !drv->s) |
| 242 | { |
| 243 | return; |
| 244 | } |
| 245 | |
| 246 | xVec3 euler; |
| 247 | xMat3x3 rot; |
| 248 | xMat3x3 a_descaled; |
| 249 | if (drv->s && drv->flags & 1) |
| 250 | { |
| 251 | if (drv->driver == NULL || drv->driver->frame == NULL) |
| 252 | { |
| 253 | xEntDriveInit(drv, drv->driven); |
| 254 | return; |
| 255 | } |
| 256 | |
| 257 | { |
| 258 | F32 len2 = SQR(drv->driver->frame->mat.right.x) + |
| 259 | SQR(drv->driver->frame->mat.right.y) + |
no test coverage detected