File: physics_state.h

package info (click to toggle)
freespace2 24.2.0%2Brepack-1
  • links: PTS, VCS
  • area: non-free
  • in suites: forky, sid
  • size: 43,716 kB
  • sloc: cpp: 595,001; ansic: 21,741; python: 1,174; sh: 457; makefile: 248; xml: 181
file content (82 lines) | stat: -rw-r--r-- 4,210 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#pragma once

#include "globalincs/pstypes.h"
#include "math/vecmat.h"

// This is designed to be a small API that generalizes the FSO physics state of an object
// and allows interpolation between two states.  Timing is not handled here however.

struct physics_snapshot {
	vec3d position;						// the position at that moment.
	matrix orientation;					// the orientation at that moment.

	vec3d velocity;						// the velocity at that moment.
	vec3d desired_velocity;				// the desired velocity at that moment.

	vec3d rotational_velocity;			// the rotational velocity at that moment.
	vec3d desired_rotational_velocity;	// the desired rotational velocity at that moment.
};

/**
 * @brief Interpolate two physics snapshots and get the result
 *
 * @param[out] 	result Destination of the interpolated info
 * @param[in]	before The physics information that happened earlier in the simulation
 * @param[in]	after The physics information that happened later in the simulation
 * @param[in]	percent How much time has passed between the two states, in percent. 
 * 		0.00 means use only before, 1.00 means use only after, 0.50 would interpolate halfway between them.
 *
 * @details This takes two physics snapshots of objects and uses linear interpolation to figure out
 * 		where the objects would be given a specific time factor (percent "progress" towards after). 
 * 
 * @author J Fernandez
 */
void physics_interpolate_snapshots(physics_snapshot& result, const physics_snapshot& before, const physics_snapshot& after, const float percent);

/**
 * @brief Apply the contents of a physics state to manually specified variables
 *
 * @param[out] 	position Destination of the snapshot's position values
 * @param[out] 	orient Destination of the snapshot's orientation values
 * @param[out] 	velocity Destination of the snapshot's velocity values
 * @param[out] 	desired_velocity Destination of the snapshot's desired velocity
 * @param[in]	source Physics object that we are copying the values from
 * 
 * @details Apply a physics state to manually specified vectors and matrices.
 * 		This overload does not include rotational velocity or desired rotational velocity.
 * 
 * @author J Fernandez
 */
void physics_apply_snapshot_manual(vec3d& position, matrix& orient, vec3d& velocity, vec3d& desired_velocity, const physics_snapshot& source);

/**
 * @brief Apply the contents of a physics state to manually specified variables
 *
 * @param[out] 	position Destination of the snapshot's position values
 * @param[out] 	orient Destination of the snapshot's orientation values
 * @param[out] 	velocity Destination of the snapshot's velocity values
 * @param[out] 	desired_velocity Destination of the snapshot's desired velocity
 * @param[out] 	rotational_velocity Destination of the snapshot's rotational velocity
 * @param[out] 	desired_rotaional_velocity Destination of the snapshot's desired rotational velocity
 * @param[in]	source Physics object that we are copying the values from
 * 
 * @details Apply a physics state to manually specified vectors and matrices.
 * 
 * @author J Fernandez
 */
void physics_apply_snapshot_manual(vec3d& position, matrix& orient, vec3d& velocity, vec3d& desired_velocity, vec3d& rotational_velocity, vec3d& desired_rotational_velocity, const physics_snapshot& source);

/**
 * @brief Populate a physics snapshot by specifying each input vector and matrix
 *
 * @param[out]	destination Destination physics snapshot
 * @param[in]	position Position vector for populating the snapshot
 * @param[in]	orient Matrix orientation for populating the snapshot
 * @param[in]	velocity Velocity vector for populating the snapshot
 * @param[in]	desired_velocity The desired velocity vector for populating the snapshot
 * @param[in]	rotational_velocity The rotational velocity vector for populating the snapshot
 * @param[in]	desired_rotational_velocity The desired rotational velocity vector for populating the snapshot
 *
 * @author J Fernandez
 */
void physics_populate_snapshot_manual(physics_snapshot& destination, const vec3d& position, const matrix& orient, const vec3d& velocity, const vec3d& desired_velocity, const vec3d& rotational_velocity, const vec3d& desired_rotational_velocity);