示例#1
0
void wid_game_map_client_scroll_adjust (uint8_t adjust) 
{
    if (!player) {
        return;
    }

    widp w = player->wid;
    if (!w) {
        return;
    }

    uint32_t gridw;
    uint32_t gridh;

    wid_get_grid_dim(wid_game_map_client_grid_container, &gridw, &gridh);

    double fgridw = (double)gridw;
    double fgridh = (double)gridh;

    double winw = wid_get_width(wid_game_map_client_window);
    double winh = wid_get_height(wid_game_map_client_window);

    gridw -= winw;
    gridh -= winh;

    double playerx = wid_get_cx(w);
    double playery = wid_get_cy(w);

    playerx -= winw / 2.0;
    playery -= winh / 2.0;

    playerx /= fgridw;
    playery /= fgridh;

    if (adjust || (last_playery != playery)) {
        wid_move_to_vert_pct(wid_game_map_client_vert_scroll, playery);
    }

    if (adjust || (last_playerx != playerx)) {
        wid_move_to_horiz_pct(wid_game_map_client_horiz_scroll, playerx);
    }

    /*
     * Lock the level scroll bar so we don't adjust the level size when 
     * explosions or anything else leaks over the edge.
     */
    wid_game_map_client_grid_container->grid->bounds_locked = 1;

    last_playerx = playerx;
    last_playery = playery;
}
示例#2
0
void cloud_move (int jumped)
{
    cloud *f;
    cloud *f_eo = clouds + nclouds;

    f = clouds;

    if (!player) {
        return;
    }

    widp w = player->wid;
    if (!w) {
        return;
    }

    verify(w);

    double playerx = wid_get_cx(w);
    double playery = wid_get_cy(w);

    static double last_playerx;
    static double last_playery;

    if (!last_playerx && !last_playery) {
        last_playerx = playerx;
        last_playery = playery;
    }

    double dx = playerx - last_playerx;
    double dy = playery - last_playery;

    last_playerx = playerx;
    last_playery = playery;

    if (jumped) {
        return;
    }

    f = clouds;

    while (f < f_eo) {

        f->x -= dx;
        f->y -= dy;

        double w = game.video_gl_width;
        double h = game.video_gl_height;

        if (f->x > w * 1.5) {
            f->x = -(w / 2) - myrand() % (int)(w / 2);
            f->y = myrand() % (int)h;
        }

        if (f->x < -w * 1.5) {
            f->x = w + myrand() % (int)(w / 2);
            f->y = myrand() % (int)h;
        }

        f++;
    }
}