| 310 | } |
| 311 | |
| 312 | void update_state(z_disco_floor& df, F32 dt) |
| 313 | { |
| 314 | df.state_time += dt; |
| 315 | |
| 316 | if (df.state_time < df.state_delay) |
| 317 | { |
| 318 | return; |
| 319 | } |
| 320 | |
| 321 | if (df.state_time - dt < df.state_delay) |
| 322 | { |
| 323 | dt = df.state_time - df.state_delay; |
| 324 | } |
| 325 | |
| 326 | df.state_time = 0.0f; |
| 327 | df.next_state = df.state + (df.flag.forward ? 1 : -1); |
| 328 | |
| 329 | if (df.next_state < df.min_state) |
| 330 | { |
| 331 | if (df.asset->flags & 0x1) |
| 332 | { |
| 333 | df.next_state = df.max_state; |
| 334 | } |
| 335 | else |
| 336 | { |
| 337 | df.next_state = df.state; |
| 338 | } |
| 339 | } |
| 340 | |
| 341 | if (df.next_state > df.max_state) |
| 342 | { |
| 343 | if (df.asset->flags & 0x1) |
| 344 | { |
| 345 | df.next_state = df.min_state; |
| 346 | } |
| 347 | else |
| 348 | { |
| 349 | df.next_state = df.state; |
| 350 | } |
| 351 | } |
| 352 | |
| 353 | translate_mask(df.next_state_mask, df.state_masks[df.next_state], df.tiles_size); |
| 354 | |
| 355 | if (df.transition_delay <= dt) |
| 356 | { |
| 357 | df.state = df.next_state; |
| 358 | df.state_counter++; |
| 359 | |
| 360 | memcpy(df.active_state_mask, df.next_state_mask, |
| 361 | state_byte_size(df.asset->state_mask_size)); |
| 362 | } |
| 363 | else |
| 364 | { |
| 365 | df.transition_time = 0.0f; |
| 366 | } |
| 367 | |
| 368 | refresh_state(df); |
| 369 | } |
no test coverage detected