示例#1
0
文件: rgs_ui.c 项目: cnsoft/librgs
RGS_UIButton *RGS_CreateUIButton(RGS_Screen *screen, char *text, short x, short y, short w, short h) {
	RGS_UIButton *newButton;
	newButton = (RGS_UIButton*)malloc(sizeof(RGS_UIButton));
	memset(newButton, 0, sizeof(RGS_UIButton));


	RGS_InitializeObject(&newButton->uiObject.object, x, y);
	newButton->uiObject.object.w = w;
	newButton->uiObject.object.h = h;

	strcpy(newButton->uiObject.object.typeString, "button");
	
	newButton->uiObject.object.focusable = 1;
	
	newButton->uiObject.object.onRollOver = RGS_UIObjectRollOver;
	newButton->uiObject.object.onRollOut = RGS_UIObjectRollOut;
	newButton->uiObject.object.onRelease = RGS_UIObjectOnRelease;
	newButton->uiObject.object.Render = RGS_RenderUIButton;

	newButton->color = 0xffffff;

	RGS_AddScreenObject(screen, (RGS_Object*)newButton);
	newButton->bg = RGS_CreateShape(screen, RGS_SHAPE_RECT, 0x2c2c2c, x,y,w,h);
	newButton->label = RGS_CreateLabel(screen, text,  RGS_FONT_SMALL, x+((w-BFont_TextWidth(text))/2), y+((h-8)/2)-1, 0xffffff);	
	return newButton;
}
示例#2
0
void DrawStatus(int turn,struct Stats *Players)
{
	SDL_Rect recta,rectb;
	int i,j;
	char b[4];
//	print players' names
	recta.w=70;recta.h=16;recta.y=13+4;
	if (turn) recta.x=555+4;
		else recta.x=8+4;
	SDL_FillRect(GfxData[SCREEN],&recta,SDL_MapRGB(GfxData[SCREEN]->format,(Uint8)(0xC0*!turn),0,(Uint8)(0xC0*turn)));
	BFont_PutString(GfxData[SCREEN], 15+32-BFont_TextWidth(Players[0].Name)/2,20,Players[0].Name);
	BFont_PutString(GfxData[SCREEN],562+32-BFont_TextWidth(Players[1].Name)/2,20,Players[1].Name);
	for (i=0;i<2;i++)
		for (j=0;j<3;j++)
		{
			recta.w=22;recta.h=17;
			recta.x=13+547*i;recta.y=91+j*72;
			if (j==0) rectb.x=22*Players[i].q;
			if (j==1) rectb.x=22*Players[i].m;
			if (j==2) rectb.x=22*Players[i].d;
			rectb.y=0;
			rectb.w=22;rectb.h=17;
		//	print big (yellow) numbers (quarry,magic,dungeons)
			SDL_BlitSurface(GfxData[NUMSBIG],&rectb,GfxData[SCREEN],&recta);
			if (j==0) {sprintf(b,"%d",Players[i].b);b[0]-='0'-'!';if (b[1]) b[1]-='0'-'!';if (b[2]) b[2]-='0'-'!';}
			if (j==1) {sprintf(b,"%d",Players[i].g);b[0]-='0'-'+';if (b[1]) b[1]-='0'-'+';if (b[2]) b[2]-='0'-'+';}
			if (j==2) {sprintf(b,"%d",Players[i].r);b[0]-='0'-'5';if (b[1]) b[1]-='0'-'5';if (b[2]) b[2]-='0'-'5';}
		//	print small numbers (bricks,gems,recruits)
			BFont_PutStringFont(GfxData[SCREEN],numssmall,10+i*547,115+j*72,b);
		}
//	print tower/wall numbers
	sprintf(b,"%d",Players[0].t);BFont_PutString(GfxData[SCREEN],160-BFont_TextWidth(b)/2,317,b);
	sprintf(b,"%d",Players[0].w);BFont_PutString(GfxData[SCREEN],242-BFont_TextWidth(b)/2,317,b);
	sprintf(b,"%d",Players[1].w);BFont_PutString(GfxData[SCREEN],398-BFont_TextWidth(b)/2,317,b);
	sprintf(b,"%d",Players[1].t);BFont_PutString(GfxData[SCREEN],resY-BFont_TextWidth(b)/2,317,b);
//	draw left tower
	rectb.x=0;rectb.y=0;rectb.w=68;rectb.h=292-(200-Players[0].t);
	recta.x=126;recta.y=16+(200-Players[0].t);recta.w=68;recta.h=292-(200-Players[0].t);
	SDL_BlitSurface(GfxData[CASTLE],&rectb,GfxData[SCREEN],&recta);
//	draw right tower
	rectb.x=68;rectb.y=0;rectb.w=68;rectb.h=292-(200-Players[1].t);
	recta.x=446;recta.y=16+(200-Players[1].t);recta.w=68;recta.h=292-(200-Players[1].t);
	SDL_BlitSurface(GfxData[CASTLE],&rectb,GfxData[SCREEN],&recta);
//	draw left wall
	rectb.x=68*2;rectb.y=0;rectb.w=68;rectb.h=292-(200-Players[0].w);
	recta.x=230;recta.y=16+(200-Players[0].w);recta.w=68;recta.h=292-(200-Players[0].w);
	SDL_BlitSurface(GfxData[CASTLE],&rectb,GfxData[SCREEN],&recta);
//	draw right wall
	rectb.x=68*2;rectb.y=0;rectb.w=68;rectb.h=292-(200-Players[1].w);
	recta.x=386;recta.y=16+(200-Players[1].w);recta.w=68;recta.h=292-(200-Players[1].w);
	SDL_BlitSurface(GfxData[CASTLE],&rectb,GfxData[SCREEN],&recta);
}
示例#3
0
char *DialogBox(int type,const char *fmt,...)
{
	SDL_Rect rect;
	char *val;
	int vallen;
	va_list args;
	char *buf;
	int i,h,cnt=0;
	char *ptr[20];
	char *p;

	buf=(char *)malloc(4096);
	val=(char *)malloc(4096);
	va_start(args,fmt);
	vsnprintf(buf,4095,fmt,args);
	va_end(args);

	p=buf;
	ptr[0]=p;cnt=1;
	while (*p)
	{
		if (*p=='\n')
		{
			ptr[cnt++]=p+1;
			*p=0;
		}
		p++;
	}
	rect.w=352;
	rect.h=128;
	rect.x=(resX-rect.w) >> 1;
	rect.y=(resY-rect.h) >> 1;
	SDL_BlitSurface(GfxData[type],NULL,GfxData[SCREEN],&rect);
	rect.w-=4;
	rect.h-=4;
	rect.x+=2;
	rect.y+=2;
	
	if (type==DLGWINNER || type==DLGLOOSER)
		BFont_SetCurrentFont(bigfont);
	
	h=BFont_FontHeight(BFont_GetCurrentFont());
	for (i=0;i<cnt;i++)
		BFont_CenteredPutString(GfxData[SCREEN],240-h*cnt/2+h*i,ptr[i]);
	UpdateScreenRect(rect.x-2,rect.y-2,rect.w+4,rect.h+4);
	
	if (type==DLGWINNER || type==DLGLOOSER)
		BFont_SetCurrentFont(font);

	free(buf);

	if (type!=DLGNETWORK) return NULL;

	val[0]='_';val[1]=0;vallen=1;h=0;

	while (!h)
	{
		rect.x=160;
		rect.y=272;
		rect.w=320;
		rect.h=16;
		SDL_FillRect(GfxData[SCREEN],&rect,0);
		i=BFont_TextWidth(val);
		if (i<312)
			BFont_PutString(GfxData[SCREEN],164,276,val);
		else
			BFont_PutString(GfxData[SCREEN],164+(312-i),276,val);
		SDL_UpdateRect(GfxData[SCREEN],160,272,320,16);

		while (event.type!=SDL_KEYDOWN)
		{
			SDL_PollEvent(&event);		// wait for keypress
			SDL_Delay(CPUWAIT);
		}
		if (event.type==SDL_KEYDOWN)
		{
			i=ValidInputChar(event.key.keysym.sym);
			if (i&&(vallen<4095))
			{
				val[vallen-1]=i;
				val[vallen++]='_';
				val[vallen]=0;
			}
			if (((vallen>1)&&(event.key.keysym.sym==SDLK_BACKSPACE))||(event.key.keysym.sym==SDLK_DELETE))
			{
				val[--vallen]=0;
				val[vallen-1]='_';
			}
			if ((event.key.keysym.sym==SDLK_KP_ENTER)||(event.key.keysym.sym==SDLK_RETURN)) h=1;
			if (event.key.keysym.sym==SDLK_ESCAPE) h=2;
			while (event.type!=SDL_KEYUP)
			{
				SDL_PollEvent(&event);	// wait for keyrelease
					SDL_Delay(CPUWAIT);
			}
		}
	}
	if (h==2)
		return NULL;
	else
	{
		val[vallen-1]=0;
		return val;
	}
}