Esempio n. 1
0
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();
}
Esempio n. 2
0
File: map.c Progetto: slaeshjag/Muon
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;
		
	}
}
Esempio n. 3
0
File: map.c Progetto: slaeshjag/Muon
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;
}
Esempio n. 4
0
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]);
	}
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
/* 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;
}