| 649 | } |
| 650 | |
| 651 | void PhysicsDoSimLinear(const object &obj, const vector &pos, const vector &force, vector &velocity, |
| 652 | vector &movementVec, vector &movementPos, float simTime, int count) { |
| 653 | // Determine velocity |
| 654 | if (obj.mtype.phys_info.flags & PF_FIXED_VELOCITY) { |
| 655 | movementVec = velocity * simTime; |
| 656 | movementPos = pos + movementVec; |
| 657 | return; |
| 658 | } |
| 659 | |
| 660 | vector forceToUse = force; |
| 661 | if (!ROOMNUM_OUTSIDE(obj.roomnum) && !(obj.mtype.phys_info.flags & PF_LOCK_MASK) && |
| 662 | Rooms[obj.roomnum].wind != Zero_vector && count == 0 && obj.mtype.phys_info.drag > 0.0f && |
| 663 | !(obj.type == OBJ_POWERUP && Level_powerups_ignore_wind)) { |
| 664 | // Factor in outside wind |
| 665 | const vector &wind = Rooms[obj.roomnum].wind; |
| 666 | vector deltaForce = wind * obj.mtype.phys_info.drag * 16.0f; |
| 667 | forceToUse += deltaForce; |
| 668 | } |
| 669 | |
| 670 | PhysicsApplyConstantForce(obj, movementPos, velocity, movementVec, forceToUse, simTime); |
| 671 | |
| 672 | #ifdef _DEBUG |
| 673 | if (Physics_player_verbose && obj.type == OBJ_PLAYER) { |
| 674 | mprintf(0, "Player Velocity = %f(%f)\n", vm_GetMagnitude(&velocity), vm_GetMagnitude(&movementVec) / simTime); |
| 675 | } |
| 676 | #endif |
| 677 | } |
| 678 | |
| 679 | // ----------------------------------------------------------------------------------------------------------- |
| 680 | // Simulate a physics object for this frame |
no test coverage detected