void step_game(struct moag *m) { crate_update(m); for (int i = 0; i < MAX_PLAYERS; i++) tank_update(m, i); for (int i = 0; i < MAX_BULLETS; i++) bullet_update(m, i); for (int i = 0; i < MAX_TIMERS; i++) timer_update(m, i); m->frame += 1; }
void shmup_game_update(shmup_game *g, double t, double dt) { bullet *b; static int mx, my; glfwGetMousePos(&mx, &my); g->emitter.x = (double) mx; g->emitter.y = (double) g->window_height-my; if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_LEFT)) shmup_game_fire(g, 40, 0, v2zero, v2zero, v2zero); if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_RIGHT)) shmup_game_fire(g, 40, 1, v2zero, v2zero, v2zero); if (glfwGetKey('1')) g->render_type=1; if (glfwGetKey('2')) g->render_type=2; player_update(g, &g->player[0], dt); /* * be careful with this pointer, as this data may be moved by the * bpool_resize function! Make sure it points to the right place. */ b = g->bpool->bdata; /* do updates */ for (int i=0; i < g->bpool->n_active; ++i) { bullet_update(&b[i], dt); } /* do collisions */ for (int i=0; i < g->bpool->n_active; ++i) { if (!point_vs_aabb(b[i].pos, v2zero, v2(g->window_width, g->window_height))) bpool_deactivate(g->bpool, i--); } }
void ship_update(ship *s, const size window_size) { const double ship_diag = SHIP_SIZE * sqrt(2) / 2; double new_dx = s->v.dx, new_dy = s->v.dy; // update movement if (s->m.movement[LEFT]) new_dx -= s->a.ax; if (s->m.movement[RIGHT]) new_dx += s->a.ax; if (new_dx < SHIP_MAX_SPEED && new_dx > -SHIP_MAX_SPEED) { s->v.dx = new_dx; } if (s->m.movement[UP]) new_dy -= s->a.ay; if (s->m.movement[DOWN]) new_dy += s->a.ay; if (new_dy < SHIP_MAX_SPEED && new_dy > -SHIP_MAX_SPEED) { s->v.dy = new_dy; } if (s->center.x - ship_diag + s->v.dx > 0 && s->center.x + ship_diag + s->v.dx < window_size.w) { s->center.x += s->v.dx; } if (s->center.y - ship_diag + s->v.dy > 0 && s->center.y + ship_diag + s->v.dy < window_size.h) { s->center.y += s->v.dy; } // compute speed and velocity s->direction = velocity_compute_direction(s->v); s->speed = velocity_compute_speed(s->v); // update ship bullets if (s->bullets != NULL) { bullet_update(s->bullets, window_size); s->bullet_count = bullet_get_count(s->bullets); bullet *temp = NULL; if (!bullet_is_inside_screen(s->bullets, window_size) || bullet_is_used(s->bullets)) { regular_message("this bullet not inside screen, cleaning up"); temp = s->bullets->next; free(s->bullets); s->bullets = temp; s->bullet_count --; } } // increase mana ship_increase_mana(s, SHIP_MANA_GAIN); // check immune duration if (s->attr.is_immune) { const double time_passed = al_get_time() - s->attr.time_stamp; if (time_passed >= SHIP_IMMUNE_DURATION) { s->attr.is_immune = false; s->attr.time_stamp = 0; } } }
void shmup_game_update(shmup_game *g, double t, double dt) { static int tick = 0; static int mx, my; int i; ENetEvent event; ENetPacket *packet; bullet *b; tick++; while (enet_host_service(g->host, &event, 0) > 0) { switch (event.type) { case ENET_EVENT_TYPE_CONNECT: printf("A new client connected from %x:%u.\n", event.peer->address.host, event.peer->address.port); // sprintf(event.peer->data, "client %x.", event.peer->address.host); g->player[g->num_players].pos = v2(g->window_width/2, g->window_height/2); g->player[g->num_players].vel = v2zero; g->player[g->num_players].acc = v2zero; g->num_players++; break; case ENET_EVENT_TYPE_RECEIVE: g->player[1].keyflags = (short) *event.packet->data; // event.packet->dataLength, // event.packet->data, // event.peer->data, // event.channelID); enet_packet_destroy(event.packet); break; case ENET_EVENT_TYPE_DISCONNECT: printf("%s disconected.\n", event.peer->data); /* Reset the peer's client information. */ event.peer->data = NULL; break; case ENET_EVENT_TYPE_NONE: break; } } glfwGetMousePos(&mx, &my); g->emitter.x = (double) mx; g->emitter.y = (double) g->window_height-my; if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_LEFT)) shmup_game_fire(g, 40, 0, v2zero, v2zero, v2zero); if (glfwGetMouseButton(GLFW_MOUSE_BUTTON_RIGHT)) shmup_game_fire(g, 40, 1, v2zero, v2zero, v2zero); if (glfwGetKey('1')) g->render_type = 1; if (glfwGetKey('2')) g->render_type = 2; g->player->keyflags = KF_NONE; if (glfwGetKey('A')) g->player->keyflags |= KF_MOV_L; if (glfwGetKey('D')) g->player->keyflags |= KF_MOV_R; if (glfwGetKey('W')) g->player->keyflags |= KF_MOV_U; if (glfwGetKey('S')) g->player->keyflags |= KF_MOV_D; if (glfwGetKey(GLFW_KEY_SPACE)) g->player->keyflags |= KF_FIR_1; for (i=0; i < g->num_players; i++) { player_update(g, &g->player[i], dt); } b = g->bpool->bdata; /* * be careful with this pointer, as this data may be moved by the * bpool_resize function! Make sure it points to the right place. */ /* do updates */ for (i=0; i < g->bpool->n_active; i++) { bullet_update(&b[i], dt); } /* do collisions */ for (i=0; i < g->bpool->n_active; i++) { if (!point_vs_aabb(b[i].pos, v2zero, v2(g->window_width, g->window_height))) bpool_deactivate(g->bpool, i--); } if (g->network_type == CLIENT) { packet = enet_packet_create(&g->player->keyflags, sizeof(short), ENET_PACKET_FLAG_RELIABLE); enet_peer_send(g->peer, 0, packet); } else { packet = enet_packet_create(&g->player->keyflags, sizeof(short), ENET_PACKET_FLAG_RELIABLE); enet_host_broadcast(g->host, 0, packet); } }