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; }
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); }
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; } }