*** empty log message ***
[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   return (pphysic->state != -1);
56 }
57
58 float physic_get_velocity(physic_type* pphysic)
59 {
60   if(pphysic->state == PH_VT)
61     return - (pphysic->start_vy - gravity* ((float)(st_get_ticks() - pphysic->start_time))/1000.);
62   else if(pphysic->state == PH_HA)
63     return - (pphysic->start_vx - pphysic->acceleration * ((float)(st_get_ticks() - pphysic->start_time))/1000.);
64   else
65     return 0;
66 }
67
68 float physic_get_max_distance(physic_type* pphysic)
69 {
70   return (pphysic->start_vy * pphysic->start_vy / 2.*gravity);
71 }
72
73 unsigned int physic_get_max_time(physic_type* pphysic)
74 {
75   return (unsigned int)((pphysic->start_vy / gravity) * 1000);
76 }
77
78 unsigned int physic_get_time_gone(physic_type* pphysic)
79 {
80   return st_get_ticks() - pphysic->start_time;
81 }
82
83