- more menu cleanup
[supertux.git] / src / physic.cpp
1 //
2 // C Implementation: physic
3 //
4 // Description:
5 //
6 //
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2004
8 //
9 // Copyright: See COPYING file that comes with this distribution
10 //
11 //
12
13 #include <stdio.h>
14 #include "defines.h"
15 #include "physic.h"
16
17 float gravity;
18
19 void physic_init(physic_type* pphysic)
20 {
21   pphysic->state = -1;
22   pphysic->start_time = 0;
23   pphysic->start_vy = 0;
24 }
25
26 int physic_get_state(physic_type* pphysic)
27 {
28   return pphysic->state;
29 }
30
31 void physic_set_state(physic_type* pphysic, int nstate)
32 {
33   pphysic->state = nstate;
34   pphysic->start_time = st_get_ticks();
35 }
36
37 void physic_set_start_vy(physic_type* pphysic, float start_vy)
38 {
39   pphysic->start_vy = start_vy;
40 }
41
42 void physic_set_start_vx(physic_type* pphysic, float start_vx)
43 {
44   pphysic->start_vx = start_vx;
45 }
46
47 void physic_set_acceleration(physic_type* pphysic, float acceleration)
48 {
49   pphysic->acceleration = acceleration;
50 }
51
52
53 int physic_is_set(physic_type* pphysic)
54 {
55   if(pphysic->state != -1)
56     return YES;
57   else
58     return NO;
59 }
60
61 float physic_get_velocity(physic_type* pphysic)
62 {
63   if(pphysic->state == PH_VT)
64     return - (pphysic->start_vy - gravity* ((float)(st_get_ticks() - pphysic->start_time))/1000.);
65   else if(pphysic->state == PH_HA)
66     return - (pphysic->start_vx - pphysic->acceleration * ((float)(st_get_ticks() - pphysic->start_time))/1000.);
67   else
68     return 0;
69 }
70
71 float physic_get_max_distance(physic_type* pphysic)
72 {
73   return (pphysic->start_vy * pphysic->start_vy / 2.*gravity);
74 }
75
76 unsigned int physic_get_max_time(physic_type* pphysic)
77 {
78   return (unsigned int)((pphysic->start_vy / gravity) * 1000);
79 }
80
81 unsigned int physic_get_time_gone(physic_type* pphysic)
82 {
83   return st_get_ticks() - pphysic->start_time;
84 }
85
86