int main(int argc, char **argv) { DARNIT_TILESHEET *ts; DARNIT_TILEMAP *tm; int i, t; d_init("orthotest", "orthotest", NULL); ts = d_render_tilesheet_load("grid.png", 24, 24, DARNIT_PFORMAT_RGB5A1); tm = d_tilemap_new(0xFFF, ts, 0xFFF, 10, 18); for (i = 0; i < 180; i++) tm->data[i] = 1; d_tilemap_recalc(tm); d_tilemap_camera_move(tm, -1, 0); t = d_time_get(); for (i = 0;; i++) { fprintf(stderr, "Moving camera %i\n", -i / 30); d_tilemap_camera_move(tm, 0, -i / 30); d_render_begin(); d_tilemap_draw(tm); d_render_end(); d_loop(); } d_quit(); }
void map_flare_draw() { struct MAP_FLARE_LIST **ll, *l; int j=0; for(ll=&map_flares; *ll; ll=&((*ll)->next), j++) { l=*ll; if(d_time_get()>l->created+l->duration) { *ll=l->next; int i; for(i=0; i<4; i++) d_render_circle_free(l->circle[i]); d_render_circle_free(l->minimap_circle); free(l); if(*ll) continue; else break; } d_render_tint(player_color[l->player].r, player_color[l->player].g, player_color[l->player].b, 255); d_render_circle_draw(l->circle[l->index/10]); l->index++; if(l->index>=40) l->index=0; } }
void map_flare_add(int index, int player, unsigned int duration, unsigned int radius) { int w=map->layer[map->layers-2].tilemap->w; int h=map->layer[map->layers-2].tilemap->h; int tile_w=map->layer[map->layers-2].tile_w; int tile_h=map->layer[map->layers-2].tile_h; int x=index%w; int y=index/w; struct MAP_FLARE_LIST **l; for(l=&map_flares; *l; l=&((*l)->next)); *l=malloc(sizeof(struct MAP_FLARE_LIST)); (*l)->circle[0]=d_render_circle_new(16, 1); d_render_circle_move((*l)->circle[0], x*tile_w+tile_w/2, y*tile_h+tile_h/2, radius/4); (*l)->circle[1]=d_render_circle_new(16, 1); d_render_circle_move((*l)->circle[1], x*tile_w+tile_w/2, y*tile_h+tile_h/2, radius/2); (*l)->circle[2]=d_render_circle_new(24, 1); d_render_circle_move((*l)->circle[2], x*tile_w+tile_w/2, y*tile_h+tile_h/2, 3*radius/4); (*l)->circle[3]=d_render_circle_new(24, 1); d_render_circle_move((*l)->circle[3], x*tile_w+tile_w/2, y*tile_h+tile_h/2, radius); (*l)->minimap_circle=d_render_circle_new(6, 1); d_render_circle_move((*l)->minimap_circle, game_sidebar_minimap->x+(x*(game_sidebar_minimap->w))/(w), game_sidebar_minimap->y+(y*(game_sidebar_minimap->h))/(h), 3); (*l)->index=0; (*l)->player=player; (*l)->duration=duration; (*l)->created=d_time_get(); (*l)->next=NULL; }
void game_handle(DARNIT_KEYS *keys, DARNIT_MOUSE *mouse) { if(keys->start||keys->select) gamestate(GAMESTATE_PAUSE); map_loop(); player_loop(keys); if(boss_shooting&&(d_time_get()>boss_shooting)) { boss_shooting=0; particle_emitter_stop(boss_emitter[0]); particle_emitter_stop(boss_emitter[1]); } }
static void d_gl_idle () { if (d_ui->quit) { glutLeaveMainLoop (); } static double last = 0; double now = d_time_get (); double delta = now - last; d_ui_step (now, delta); if (d_ui->request_redraw) { glutPostRedisplay (); } last = now; }
/* Bästa Snyggkoden™ i stan! */ int player_loop(DARNIT_KEYS *keys) { SHAPE_COPY *shape; DARNIT_KEYS set; static int shoot_key=0; static int grenade_key=0; int dir; if (!player) return 0; shape=shapesprite_get_current_shape(player->shape); if(keys->up) player->gun_angle=-200; else if(keys->down) player->gun_angle=200; else player->gun_angle=0; if(keys->a&&!shoot_key) { int x=player->x/1000+28, y=player->y/1000+(player->gun_angle?player->gun_angle/20:0); player->bullet=bullet_add(player->bullet, x, y, player->gun_angle, model.bullet, BULLET_OWNER_PLAYER); d_sound_play(sound.shoot, 0, 127, 127, 0); particle_emitter_new(30, 100, 8000, 10000, 255, 0, 0, PARTICLE_TYPE_PULSE, x, y, 0, player->gun_angle-100, player->gun_angle+100); particle_emitter_new(30, 100, 8000, 10000, 255, 255, 0, PARTICLE_TYPE_PULSE, x, y, 0, player->gun_angle-100, player->gun_angle+100); } if(keys->b&&(!grenade_key)&&player->grenades) grenade_time=d_time_get(); if((grenade_key&&!keys->b)||(grenade_time&&d_time_get()>=GRENADE_LIFE+grenade_time)) { int x=player->x/1000+28, y=player->y/1000+(player->gun_angle?player->gun_angle/20:0); if(player->grenades) { player->grenade=grenade_add(player->grenade, x, y, player->gun_angle, grenade_time+GRENADE_LIFE-d_time_get(), model.grenade); player->grenades--; } grenade_time=0; } shoot_key=keys->a; grenade_key=keys->b; if (keys->left) player->vel_x -= (PLAYER_ACCELERATION * d_last_frame_time()) / 1000; else if (keys->right) player->vel_x += (PLAYER_ACCELERATION * d_last_frame_time()) / 1000; else if (player->vel_x) { if (abs(player->vel_x) < (PLAYER_ACCELERATION * d_last_frame_time()) / 1000) player->vel_x = 0; else player->vel_x += ((player->vel_x < 0 ? 1 : -1) * (PLAYER_FRICTION) * d_last_frame_time()) / 1000; } if (abs(player->vel_x) > PLAYER_SPEED_X_MAX) player->vel_x = (player->vel_x < 0 ? -1 : 1) * PLAYER_SPEED_X_MAX; if (keys->l && !player->vel_y) { set = d_keys_zero(); set.l = 1; d_keys_set(set); player->vel_y -= PLAYER_JUMP_ACCELERATION; } player->vel_y += PLAYER_GRAVITY * d_last_frame_time(); if (abs(player->vel_y) > PLAYER_SPEED_Y_MAX) player->vel_y = (player->vel_y < 0 ? -1 : 1) * PLAYER_SPEED_Y_MAX; dir=map_collide_dir(shape->coord, shape->lines, player->x / 1000, player->y / 1000, player->vel_x); if(dir==MAP_SLOPE_UP) { player->x += player->vel_x * d_last_frame_time()/ 1000; player->y-=abs(player->vel_x) * d_last_frame_time() / 1000; } else if(dir==MAP_SLOPE_VERTICAL) { player->x-=player->vel_x/ 200; player->vel_x*=-1; player->y+=2000; } else if(dir!=MAP_SLOPE_VERTICAL) { if (dir != -1) player->y-=50; player->x += player->vel_x * d_last_frame_time() / 1000; } if (player->x < 32000) player->x = 32000; if (!map_collide(shape->coord, shape->lines, player->x / 1000, player->y / 1000) || player->vel_y < 0) player->y += player->vel_y * d_last_frame_time() / 1000; else { player->vel_y = 0; } if (player->y / 1000 >= PLAYER_KILLZONE||map_enemy_collide(shapesprite_get_current_shape(player->shape), player->x, player->y)) { player_kill(); return -1; } if (player->x < camera_x + 32000) player->x = camera_x + 32000; if(player->vel_x) { shapesprite_animate(player->shape); } if(boss_shooting&&((player->x-camera_x)>300000)&&((boss_shooting-d_time_get())>1000)) { player->health--; if(player->health<0) { player_kill(); return 1; } } map_check_powerup(player->x/1000/*+camera_x/1000*/, player->y/1000); score++; return 1; }