2 // C Implementation: physic
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2004
9 // Copyright: See COPYING file that comes with this distribution
19 void physic_init(physic_type* pphysic)
22 pphysic->start_time = 0;
23 pphysic->start_vy = 0;
26 int physic_get_state(physic_type* pphysic)
28 return pphysic->state;
31 void physic_set_state(physic_type* pphysic, int nstate)
33 pphysic->state = nstate;
34 pphysic->start_time = st_get_ticks();
37 void physic_set_start_vy(physic_type* pphysic, float start_vy)
39 pphysic->start_vy = start_vy;
42 void physic_set_start_vx(physic_type* pphysic, float start_vx)
44 pphysic->start_vx = start_vx;
47 void physic_set_acceleration(physic_type* pphysic, float acceleration)
49 pphysic->acceleration = acceleration;
53 int physic_is_set(physic_type* pphysic)
55 return (pphysic->state != -1);
58 float physic_get_velocity(physic_type* pphysic)
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.);
68 float physic_get_max_distance(physic_type* pphysic)
70 return (pphysic->start_vy * pphysic->start_vy / 2.*gravity);
73 unsigned int physic_get_max_time(physic_type* pphysic)
75 return (unsigned int)((pphysic->start_vy / gravity) * 1000);
78 unsigned int physic_get_time_gone(physic_type* pphysic)
80 return st_get_ticks() - pphysic->start_time;