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 if(pphysic->state != -1)
61 float physic_get_velocity(physic_type* pphysic)
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.);
69 float physic_get_max_distance(physic_type* pphysic)
71 return (pphysic->start_vy * pphysic->start_vy / 2.*gravity);
74 unsigned int physic_get_max_time(physic_type* pphysic)
76 return (unsigned int)((pphysic->start_vy / gravity) * 1000);
79 unsigned int physic_get_time_gone(physic_type* pphysic)
81 return st_get_ticks() - pphysic->start_time;