Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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--); 
	}	
}
Ejemplo n.º 3
0
Archivo: ship.c Proyecto: kiddos/meteor
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;
    }
  }
}
Ejemplo n.º 4
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);
	}

}