예제 #1
0
/**********************************
Compose select cursor
**********************************/
static void compose_select(context_t * ctx)
{
	item_t * item;
	anim_t * anim;
	int pos_tx;
	int pos_ty;
	int x;
	int y;
	context_t * selected_context = NULL;

	/* Tile selection */
	if( option && option->cursor_tile ) {
		if( ctx->selection.map[0] != 0) {
			if( !strcmp(ctx->selection.map, ctx->map) ) {
				pos_tx = ctx->selection.map_coord[0];
				pos_ty = ctx->selection.map_coord[1];

				if( pos_tx != -1 && pos_ty != -1) {
					anim = imageDB_get_anim(ctx,option->cursor_tile);

					item = item_list_add(&item_list);

					/* get pixel coordinate from tile coordinate */
					x = map_t2p_x(pos_tx,pos_ty,default_layer);
					y = map_t2p_y(pos_tx,pos_ty,default_layer);

					item_set_pos(item,x,y);
					item_set_anim(item,anim,0);
				}
			}
		}
	}

	/* Sprite selection */
	if( option && option->cursor_sprite ) {
		if( ctx->selection.id[0] != 0) {
			selected_context = context_find(ctx->selection.id);
			if( selected_context == NULL ) {
				return;
			}

			set_up_sprite(selected_context, option->cursor_sprite);
		}
	}
}
예제 #2
0
/**********************************
Draw the "list" keyword of a layer
**********************************/
static void compose_map_scenery(context_t * ctx, int layer_index)
{
	int i = 0;
	int x = 0;
	int y = 0;
	char * image_name = NULL;
	anim_t * anim;
	item_t * item;
	char ** scenery_list = NULL;
	char layer_name[SMALL_BUF];

	sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index);
	if(entry_get_group_list(MAP_TABLE, ctx->map, &scenery_list,layer_name,MAP_KEY_SCENERY,NULL) == RET_NOK ) {
		return;
	}

	while(scenery_list[i] != NULL ) {
		if(entry_read_int(MAP_TABLE, ctx->map, &x,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_X,NULL) == RET_NOK ) {
			i++;
			continue;
		}
		if(entry_read_int(MAP_TABLE, ctx->map, &y,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_Y,NULL) == RET_NOK ) {
			i++;
			continue;
		}
		if(entry_read_string(MAP_TABLE, ctx->map, &image_name,layer_name,MAP_KEY_SCENERY,scenery_list[i],MAP_KEY_SCENERY_IMAGE,NULL) == RET_NOK ) {
			i++;
			continue;
		}

		anim = imageDB_get_anim(ctx,image_name);

		item = item_list_add(&item_list);
		item_set_pos(item, x, y);
		item_set_anim(item,anim,0);
		//item_set_anim(item, x*ctx->tile_width, y*ctx->tile_height, anim,0);

		i++;
	}

	deep_free(scenery_list);
}
예제 #3
0
/**********************************
Draw the "set" keyword of a layer
**********************************/
static void compose_map_set(context_t * ctx, int layer_index)
{
	int i = 0;
	int x = 0;
	int y = 0;
	anim_t * anim;
	item_t * item;
	char ** tile_set = NULL;
	char layer_name[SMALL_BUF];
	layer_t * layer;

	sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index);
	if(entry_read_list(MAP_TABLE, ctx->map, &tile_set,layer_name,MAP_KEY_SET,NULL) == RET_NOK ) {
		return;
	}

	layer = map_layer_new(ctx->map,layer_index,default_layer);

	while(tile_set[i] != NULL ) {
		/* Skip empty tile */
		if( tile_set[i][0] != 0 ) {
			item = item_list_add(&item_list);
			anim = imageDB_get_anim(ctx,tile_set[i]);
			item_set_pos(item,map_t2p_x(x,y,layer),map_t2p_y(x,y,layer));
			item_set_anim(item,anim,0);
		}

		x++;
		if(x>=layer->map_w) {
			x=0;
			y++;
		}
		i++;
	}

	deep_free(tile_set);

	map_layer_delete(layer);
}
예제 #4
0
static int draw_tile(game_t * game)
{
	int tile_x,tile_y;
	int index;
	item_t * item_cur;
	int num_tile_w = ORIGINAL_GAME_WIDTH/TILE_SIZE_W ;
	int num_tile_h = ORIGINAL_GAME_HEIGHT/TILE_SIZE_H +2 ;
	int x,y;
	int count_w;
	int count_h;
	int tile_index;

	if( item_tile == NULL ) {
		item_tile = (item_t*)malloc(sizeof(item_t)*game->map->width*game->map->height);
	}

	index=0;
	for( count_w = -num_tile_w/2; count_w < num_tile_w/2; count_w ++) {
		for( count_h=(-num_tile_h/2); count_h<num_tile_h/2; count_h++) {
			tile_y=cur_tile_y+count_h;
			if(tile_y < 0 || tile_y >= game->map->height) {
				continue;
			}
			tile_x=(cur_tile_x+game->map->width+count_w)%game->map->width;
			item_cur = &item_tile[index];
			item_init(item_cur);
			x=orig_x+(count_w*TILE_SIZE_W);
			y=orig_y+(count_h*TILE_SIZE_H);
			tile_index=game->map->side[cur_side].tile[tile_x][tile_y];
			item_set_anim(item_cur,x,y,&tile[tile_index]);
			item_set_click_right(item_cur,cb_move_map,(void*)(((intptr_t)tile_x<<16)+(intptr_t)tile_y));
			index++;
		}
	}

	return index;
}
예제 #5
0
/**********************************
Compose item on map
**********************************/
static void compose_item(context_t * ctx,int layer_index)
{
	char * sprite_name = NULL;
	int sprite_align = ALIGN_CENTER;
	int sprite_offset_y = 0;
	anim_t * anim;
	item_t * item;
	int x;
	int y;
	int temp_x;
	int temp_y;
	char ** item_id;
	int i;
	static TTF_Font * font = NULL;
	char * mytemplate;
	int quantity;
	char buf[SMALL_BUF];
	char layer_name[SMALL_BUF];

	sprintf(layer_name,"%s%d",MAP_KEY_LAYER,layer_index);

	if(entry_get_group_list(MAP_TABLE,ctx->map,&item_id,layer_name,MAP_ENTRY_ITEM_LIST,NULL) == RET_NOK ) {
		return;
	}

	font = font_get(ctx,ITEM_FONT, ITEM_FONT_SIZE);

	i=0;
	while( item_id[i] != NULL ) {
		sprite_align = ALIGN_CENTER;

		if(entry_read_int(MAP_TABLE,ctx->map,&x,layer_name,MAP_ENTRY_ITEM_LIST,item_id[i],MAP_ITEM_POS_X,NULL) == RET_NOK ) {
			i++;
			continue;
		}

		if(entry_read_int(MAP_TABLE,ctx->map,&y,layer_name,MAP_ENTRY_ITEM_LIST,item_id[i],MAP_ITEM_POS_Y,NULL) == RET_NOK ) {
			i++;
			continue;
		}

		mytemplate = item_is_resource(item_id[i]);

		if ( mytemplate == NULL ) {
			if(entry_read_string(ITEM_TABLE,item_id[i],&sprite_name,ITEM_SPRITE,NULL) == RET_NOK ) {
				i++;
				continue;
			}
			entry_read_int(ITEM_TABLE,item_id[i],&sprite_align,ITEM_ALIGN,NULL);
			entry_read_int(ITEM_TABLE,item_id[i],&sprite_offset_y,ITEM_OFFSET_Y,NULL);
		} else {
			if(entry_read_string(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_name,ITEM_SPRITE,NULL) == RET_NOK ) {
				free(mytemplate);
				i++;
				continue;
			}
			entry_read_int(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_align,ITEM_ALIGN,NULL);
			entry_read_int(ITEM_TEMPLATE_TABLE,mytemplate,&sprite_offset_y,ITEM_OFFSET_Y,NULL);
			free(mytemplate);
		}

		item = item_list_add(&item_list);

		anim = imageDB_get_anim(ctx,sprite_name);
		free(sprite_name);

		temp_x = map_t2p_x(x,y,default_layer);
		temp_y = map_t2p_y(x,y,default_layer);
		x = temp_x;
		y = temp_y;
		/* Align on tile */
		if( sprite_align == ALIGN_CENTER ) {
			x -= ((anim->w*default_layer->map_zoom)-default_layer->tile_width)/2;
			y -= ((anim->h*default_layer->map_zoom)-default_layer->tile_height)/2;
		}
		if( sprite_align == ALIGN_LOWER ) {
			x -= ((anim->w*default_layer->map_zoom)-default_layer->tile_width)/2;
			y -= (anim->h*default_layer->map_zoom)-default_layer->tile_height;
		}

		y += sprite_offset_y;

		item_set_pos(item,x,y);
		item_set_anim(item,anim,0);
		item_set_zoom_x(item, default_layer->map_zoom );
		item_set_zoom_y(item, default_layer->map_zoom );
		if(font) {
			quantity = resource_get_quantity(item_id[i]);
			sprintf(buf,"%d",quantity);
			item_set_string(item,buf);
			item_set_font(item,font);
		}

		i++;
	}

	deep_free(item_id);
}