Add rotation

main
Cameron Murphy Reikes 2 years ago
parent 6a38a7c3dd
commit 05d805f03d

@ -2,28 +2,41 @@
// do not use any global variables to process gamestate // do not use any global variables to process gamestate
static void integrate_acceleration(struct Body *body, float dt)
static void process_body(struct Body *body, float dt)
{ {
V2 current = body->position; // position
body->position = V2add(body->position, V2sub(current, body->old_position)); {
body->position = V2add(body->position, V2scale(body->acceleration, dt*dt)); V2 current = body->position;
body->old_position = current; body->position = V2add(body->position, V2sub(current, body->old_position));
} body->position = V2add(body->position, V2scale(body->acceleration, dt * dt));
body->old_position = current;
}
// rotation
{
float current = body->rotation;
body->rotation = body->rotation + (current - body->old_rotation);
body->rotation = body->rotation + body->angular_acceleration * dt * dt;
body->old_rotation = current;
}
}
void process(struct GameState * gs, float dt) { void process(struct GameState *gs, float dt)
for(int i = 0; i < MAX_PLAYERS; i++) {
for (int i = 0; i < MAX_PLAYERS; i++)
{ {
struct Player * p = &gs->players[i]; struct Player *p = &gs->players[i];
if(!p->connected) if (!p->connected)
continue; continue;
p->body.acceleration = V2scale(p->input, 5.0f); p->body.acceleration = V2scale(p->input, 5.0f);
process_body(&p->body, dt); p->body.angular_acceleration = p->input.x * 10.0f;
integrate_acceleration(&p->body, dt);
} }
for(int i = 0; i < gs->num_boxes; i++) for (int i = 0; i < gs->num_boxes; i++)
{ {
process_body(&gs->boxes[i].body, dt); integrate_acceleration(&gs->boxes[i].body, dt);
} }
} }

@ -195,7 +195,10 @@ static void frame(void)
if (!p->connected) if (!p->connected)
continue; continue;
sgp_set_color(1.0f, 1.0f, 1.0f, 1.0f); sgp_set_color(1.0f, 1.0f, 1.0f, 1.0f);
sgp_push_transform();
sgp_rotate_at(p->body.rotation,p->body.position.x, p->body.position.y);
sgp_draw_filled_rect(p->body.position.x - halfbox, p->body.position.y - halfbox, BOX_SIZE, BOX_SIZE); sgp_draw_filled_rect(p->body.position.x - halfbox, p->body.position.y - halfbox, BOX_SIZE, BOX_SIZE);
sgp_pop_transform();
} }
// boxes // boxes

@ -34,7 +34,12 @@ struct Body
{ {
P2 position; P2 position;
P2 old_position; P2 old_position;
float rotation;
float old_rotation;
V2 acceleration; V2 acceleration;
float angular_acceleration;
}; };
struct Player struct Player

Loading…
Cancel
Save