예제 #1
0
int main(int argc, char **argv) {
	DARNIT_KEYS keys;
	DARNIT_MOUSE mouse;
	//particle_emitter_new(30, 5000, 8000, 10000, 255, 0, 0, PARTICLE_TYPE_PULSE, 400, 240, 0, -100, 100);
	//particle_emitter_new(30, 5000, 8000, 10000, 255, 255, 0, PARTICLE_TYPE_PULSE, 400, 240, 0, -100, 100);
	
	init();
	gamestate(GAMESTATE_MENU);
	
	while(_gamestate!=GAMESTATE_QUIT) {
		keys=d_keys_get();
		mouse=d_mouse_get();
		
		if(handle[_gamestate])
			handle[_gamestate](&keys, &mouse);
		d_render_begin();
		if(render[_gamestate])
			render[_gamestate]();
		d_render_end();
		d_loop();
	}
	
	d_quit();
	return 0;
}
예제 #2
0
파일: Robot.c 프로젝트: slaeshjag/kiruna
void do_stuff(DARNIT_TEXT_SURFACE *textplace){
	
	DARNIT_MOUSE mus = d_mouse_get();
	//Calling a function which gives us various mouse data.
	
	d_text_surface_string_append(textplace, " X: ");
	//"Printing" stuff. (Adds text to the text object.)
	
	char femton[256]; 
	sprintf(femton, "%i", mus.x);
	//Converts the mouse x-coordinate to printable text.
	
	d_text_surface_string_append(textplace, femton);
	//Prints said x-coordinate.

	sprintf(femton, "%i", mus.y);
	
	d_text_surface_string_append(textplace, " Y: ");
	d_text_surface_string_append(textplace, femton);
	//Converts and prints Y-coordinate.
	
	if((((looked.x - 75) < mus.x) 
	&& (mus.x < (looked.x + 75))) 
	&& (((looked.y - 75) < mus.y) 
	&& (mus.y < (looked.y + 75)))){
	
		//We check to see if the mouse is within distance
		//of the saved point.
	
		//If it passes this check we count another frame.
		
		looked.frames_looked = looked.frames_looked + 1;
		
		if(stickyness < looked.frames_looked){
		
		//Then, if we've looked at the same area for 100 frames...
			
			click(looked.x, looked.y, textplace);
			//And call the click function, clicking the point
			//from which we defined the area.
		}
	}
	
	else{
		//If we are outside of the area we first looked at,
		//we'll set the new area of looking to the point where 
		//the mouse is, and set the frames looked to 0.
		
		looked.frames_looked = 0;
		looked.x = mus.x;
		looked.y = mus.y;
	}
	
	d_text_surface_draw(textplace);
	//Then we call the function which draws the textobject we've
	//appended our text to.
}
예제 #3
0
파일: event.c 프로젝트: slaeshjag/Muon
void ui_events(struct UI_PANE_LIST *panes, int render) {
	//override for dialogues such as message boxes.
	if(ui_panelist_dialogue.pane) {
		ui_panelist_render(panes);
		panes=&ui_panelist_dialogue;
	}
	
	UI_EVENT e;
	UI_EVENT_MOUSE e_m;
	UI_EVENT_BUTTONS e_b;
	UI_EVENT_UI e_u;
	static UI_EVENT_KEYBOARD e_k={0, 0, 0}, e_k_repeat={0, 0, 0};
	static int repeat=0;
	
	DARNIT_KEYS buttons;
	buttons=d_keys_get();
	memcpy(&e_b, &buttons, sizeof(UI_EVENT_BUTTONS));
	
	DARNIT_MOUSE mouse;
	mouse=d_mouse_get();
	
	e_m.x=mouse.x; e_m.y=mouse.y;
	e_m.buttons=(mouse.lmb)|(mouse.rmb<<2);
	e_m.wheel=mouse.wheel;
	
	int key_action=0;
	DARNIT_KEY_RAW rawkey=d_key_raw_pop();
	key_action=rawkey.action;
	e_k.keysym=rawkey.keysym;
	
	switch(e_k.keysym) {
		case KEY(LCTRL): SETMOD(LCTRL); break;
		case KEY(RCTRL): SETMOD(RCTRL); break;
		case KEY(LSHIFT): SETMOD(LSHIFT); break;
		case KEY(RSHIFT): SETMOD(RSHIFT); break;
		case KEY(LALT): SETMOD(LALT); break;
		case KEY(RALT): SETMOD(RALT); break;
		case KEY(LSUPER): SETMOD(LSUPER); break;
		case KEY(RSUPER): SETMOD(RSUPER); break;
	}
	
	e_k.character=rawkey.unicode;
	
	
	e.keyboard=&e_k;
	if(ui_selected_widget) {
		//Keyboard events for selected widget
		if(e_k_repeat.character||e_k_repeat.keysym==8) {
			if(repeat>KEYBOARD_REPEAT_DELAY&&!((repeat-KEYBOARD_REPEAT_DELAY)%KEYBOARD_REPEAT_SPEED)) {
				UI_EVENT e_repeat={.keyboard=&e_k_repeat};
				ui_selected_widget->event_handler->send(ui_selected_widget, UI_EVENT_TYPE_KEYBOARD_PRESS, &e_repeat);
			}
			repeat++;
		}
		if(key_action==DARNIT_KEYACTION_PRESS) {
			if(e_k.character||e_k.keysym==8) {
				e_k_repeat=e_k;
				repeat=0;
			}
			ui_selected_widget->event_handler->send(ui_selected_widget, UI_EVENT_TYPE_KEYBOARD_PRESS, &e);
		} else if(key_action==DARNIT_KEYACTION_RELEASE) {
			if(e_k.keysym==e_k_repeat.keysym) {
				e_k_repeat.character=0; e_k_repeat.keysym=0; e_k_repeat.modifiers=0;
				repeat=0;
			}
			ui_selected_widget->event_handler->send(ui_selected_widget, UI_EVENT_TYPE_KEYBOARD_RELEASE, &e);
		}
	} else {
예제 #4
0
파일: testapp.c 프로젝트: h4xxel/libdarnit
int main(int argc, char **argv) {
	int i, j, js0_x, js0_y, js1_x, js1_y;
	void *font, *surface, *text, *mapsheet, *sprite, *textinput, *mtsprite, *fps_text, *tilebuf, *fancy_text;
	void *music;
	char test[256], fps[16];
	char *test_text;
	DARNIT_MOUSE mouse;
	DARNIT_KEYS keys;
	DARNIT_MAP *map;
	DARNIT_SPRITE *mapsprite;

	if (!d_init("TESTAPP - libDarnit", "testapp", NULL))
		return -1;

	compression_test();

	/* Sound/music */
	music = d_sound_tracked_load("latyl-greasy_duck_v1.mod", DARNIT_AUDIO_STREAM, DARNIT_AUDIO_STEREO);
	d_sound_play(music, 0, 127, 127, 0);

	/* Text rendering */
	test_text = malloc(64);
	font = d_font_load("dejavu_sans.ttf", 28, 512, 512);
	text = d_text_surface_new(font, 80, 800, 0, 460);
	fancy_text = d_text_surface_color_new(font, 16, 800, 0, 420);
	colorTest(fancy_text);
	fps_text = d_text_surface_new(font, 16, 200, 0, 40);


	/* Menutk test */
	surface = d_menu_vertical_new("Hello\nGoodbye\nOther\nNothing\nLess than nothing", 50, 100, font, 200, 10, 3);
	sprintf(test_text, "Héllo, world. Modify m€! Test of offsets");
	textinput = d_menu_textinput_new(0, 0, font, test_text, 64, 200);

	/* Sprites */
	sprite = d_sprite_load("test.spr", 0, DARNIT_PFORMAT_RGB5A1);
	mapsprite = d_sprite_load("baurn.spr", 0, DARNIT_PFORMAT_RGB5A1);
	d_sprite_move(sprite, 50, 50);
	d_sprite_move(mapsprite, 0, 0);
	d_sprite_animate_start(sprite);
	d_sprite_animate_start(mapsprite);
	
	mtsprite = d_mtsprite_load("testspr.mts");
	d_mtsprite_animate_start(mtsprite);

	/* Maps */

	mapsheet = d_render_tilesheet_load("mapsheet.png", 32, 32, DARNIT_PFORMAT_RGBA8);
	if ((map = d_map_load("testmap_iso.ldmz")) == NULL)
		fprintf(stderr, "Map load failed\n");
	d_tilemap_sprite_add(map->layer[0].tilemap, mapsprite);

	/* Tile caches */
	tilebuf = d_render_tile_new(1, mapsheet);
	d_render_tile_move(tilebuf, 0, 64, 64);
	d_render_tile_tilesheet_coord_set(tilebuf, 0, 16, 16, 32, 32);

	/* Misc */
	fprintf(stderr, "String lenght: %i\n", d_font_string_w(font, "ASDFÅÄÖ,,"));


	for (i = j = 0;;) {
		d_sprite_move(mapsprite, 64, j * 4);
		keys = d_keys_get();
		d_text_surface_reset(text); d_text_surface_reset(fps_text);
		mouse = d_mouse_get();
		d_joystick_get(&js0_x, &js0_y, &js1_x, &js1_y);
		sprintf(test, "X: %i, Y: %i, W: %i;; TX: %i, TY: %i;; nub0 (%i,%i) ;; nub1(%i,%i)", mouse.x, mouse.y, mouse.wheel, i*4, j*4, js0_x, js0_y, js1_x, js1_y);
		sprintf(fps, "%i", d_last_frame_time());
		d_text_surface_string_append(text, test);
		d_text_surface_string_append(fps_text, "ASDFÅÄÖ,,");

		if (keys.lmb)
			d_render_fade_in(1000, 1.0f, 0.0f, 0.0f);
		if (keys.rmb)
			d_render_fade_out(1000);

		d_render_begin();

		if (keys.left == 1)
			i--;
		if (keys.right == 1)
			i++;
		if (keys.up == 1)
			j--;
		if (keys.down == 1)
			j++;
		if (keys.select)
			fprintf(stderr, "Blololol\n");

		if (keys.r == 1)
			d_tilemap_camera_move(map->layer->tilemap, i*4, j*4);
		d_render_blend_enable();
		d_tilemap_draw(map->layer->tilemap);
		if (keys.l == 1)
			if (d_menu_loop(surface) != -1)
				return 0;
		d_menu_loop(textinput); 
		d_sprite_draw(sprite);
		d_text_surface_draw(text);
		d_text_surface_draw(fancy_text);
		d_text_surface_draw(fps_text);

		d_render_offset(-200, -200);
		d_mtsprite_draw(mtsprite);
		d_render_offset(0, 0);

		d_render_blend_disable();
		d_render_tile_draw(tilebuf, 1);
		d_render_end();
		d_loop();
	}


	return 0;
}
예제 #5
0
파일: game.c 프로젝트: slaeshjag/Muon
void game_view_buttons(UI_WIDGET *widget, unsigned int type, UI_EVENT *e) {
	int scroll_x=0, scroll_y=0;
	int screen_w=platform.screen_w, screen_h=platform.screen_h;
	
	//darnit buttons have no press or release events, we have to handle this ourselves
	
	//View movement
	if(!chat_is_visible(&panelist_game_sidebar)) {
		if(e->buttons->left&&map->cam_x>-((screen_w-sidebar_width)/2))
			scroll_x=-SCROLL_SPEED;
		else if(e->buttons->right&&map->cam_x<map_w-(screen_w-sidebar_width)/2)
			scroll_x=SCROLL_SPEED;
		if(e->buttons->up&&map->cam_y>-(screen_h)/2)
			scroll_y=-SCROLL_SPEED;
		else if(e->buttons->down&&map->cam_y<map_h-screen_h/2)
			scroll_y=SCROLL_SPEED;
			
		if(e->buttons->l) {
			scroll_x*=2;
			scroll_y*=2;
		}
		if(scroll_x||scroll_y) {
			d_map_camera_move(map, map->cam_x+scroll_x, map->cam_y+scroll_y);
			map_minimap_update_viewport();
		}
	}
	if(!(platform.platform&DARNIT_PLATFORM_MAEMO)||e->buttons->select) {
		//Interaction keys
		if(e->buttons->start&&!prevbuttons.start)
			game_state(GAME_STATE_GAME_MENU);
		if(e->buttons->a&&!prevbuttons.a)
			chat_toggle(&panelist_game_sidebar);
		if(e->buttons->b&&!prevbuttons.b) {
			if(building_place>-1) {
				building_place=-1;
			} else if(map_selected_building()) {
				client_message_send(player_id, MSG_SEND_PLACE_BUILDING, BUILDING_NONE, map_selected_index(), NULL);
				map_select_nothing();
			}
		}
		if(e->buttons->x&&!prevbuttons.x) {
			DARNIT_MOUSE m=d_mouse_get();
			UI_EVENT_MOUSE e_m={
				0,
				0,
				UI_EVENT_MOUSE_BUTTON_LEFT,
				0,
			};
			e_m.x=m.x; e_m.y=m.y;
			UI_EVENT e={.mouse=&e_m};
			ui_event_global_send(UI_EVENT_TYPE_MOUSE_PRESS, &e);
		}
		if(e->buttons->y&&!prevbuttons.y) {
			if(building_place==-1&&ability_place==0) {
				int selected_building=map_selected_building();
				if(attacker_target)
					attacker_target=0;
				else if(map_selected_owner()==player_id&&(selected_building==BUILDING_ATTACKER||selected_building==BUILDING_SCOUT))
					attacker_target=1;
			}
		}
	}