//Chrisoft Bullet Lab Remix HGE
//Menu Implementations
//Copyright Chrisoft 2014
//Now this is being rewritten...
// --Announcement from Chirsno
//static const char* MENUS_H_FN="menus.h";
//Here's where new code grows...
void ConfigureQuad(hgeQuad *quad,double x,double y,double w,double h)
{
quad->tex=0;quad->blend=BLEND_ALPHABLEND;
quad->v[0].tx=0;quad->v[0].ty=0;
quad->v[1].tx=1;quad->v[1].ty=0;
quad->v[2].tx=1;quad->v[2].ty=1;
quad->v[3].tx=0;quad->v[3].ty=1;
quad->v[0].x=x;quad->v[0].y=y;
quad->v[1].x=x+w;quad->v[1].y=y;
quad->v[2].x=x+w;quad->v[2].y=y+h;
quad->v[3].x=x;quad->v[3].y=y+h;
}
static const char* MMStr[]={
"Start",
"Highscore",
"Options",
"About",
"Exit"
};
static const char* OMStr[]={
"Fullscreen",
"VSync",
"Clear Range Key",
"Resolution",
"Player Preference",
"Save and Exit",
"On",
"Off",
"X",
"Z",
"800x600",
"640x480",
"960x720",
"1024x768",
"1280x960",
"?"
};
class MainMenu
{
private:
bool active,onIn,onOut;
int selected;
double xoffset,yoffset,dyoffset;
hgeSprite *Ribb;
hgeQuad UpperGradient,LowerGradient;
public:
bool isActive(){return active;}
void Init_Once()
{
Ribb=new hgeSprite(MenuTex,256,350,64,16);
Ribb->SetColor(0xCCFFFFFF);
}
void Init(double start)
{
xoffset=start;onIn=true;active=true;
selected=0;dyoffset=yoffset=-selected*30;
ConfigureQuad(&UpperGradient,xoffset-140,100,320,50);
UpperGradient.v[0].col=UpperGradient.v[1].col=0xFF888820;
UpperGradient.v[2].col=UpperGradient.v[3].col=0x00888820;
ConfigureQuad(&LowerGradient,xoffset-140,300,320,100);
LowerGradient.v[0].col=LowerGradient.v[1].col=0x00888820;
LowerGradient.v[2].col=LowerGradient.v[3].col=0xFF888820;
}
void Leave(){onOut=true;}
int Update()
{
if(onIn)
{
if(fabs(xoffset-650)<hge->Timer_GetDelta()*1600)return xoffset=650,onIn=false,-1;
if(xoffset<650)
xoffset+=hge->Timer_GetDelta()*1600;
else
xoffset-=hge->Timer_GetDelta()*1600;
}
if(onOut)
{
xoffset+=hge->Timer_GetDelta()*1600;
if(xoffset>=850)active=onOut=false;
}
ConfigureQuad(&UpperGradient,xoffset-140,250,320,100);
ConfigureQuad(&LowerGradient,xoffset-140,400,320,110);
if(hge->Input_GetKeyStateEx(HGEK_UP)==HGEKST_HIT&&selected>0)--selected;
if(hge->Input_GetKeyStateEx(HGEK_DOWN)==HGEKST_HIT&&selected<5-1)++selected;
yoffset=-selected*30;
if(fabs(dyoffset-yoffset)<0.2)dyoffset=yoffset;
if(dyoffset<yoffset)dyoffset+=hge->Timer_GetDelta()*200;
if(dyoffset>yoffset)dyoffset-=hge->Timer_GetDelta()*200;
if(hge->Input_GetKeyStateEx(HGEK_Z)==HGEKST_HIT||hge->Input_GetKeyStateEx(HGEK_ENTER)==HGEKST_HIT)
return selected;
return -1;
}
void Render()
{
for(int i=0;i<5;++i)
{
double calcy=i*30+dyoffset+360;
if(calcy>249.9&&calcy<500.1)
MenuFont->printf(xoffset,calcy,HGETEXT_LEFT,MMStr[i]);
}
Ribb->RenderEx(xoffset-50,355,0,3,1);
Ribb->RenderEx(xoffset-50,382,0,3,1);
hge->Gfx_RenderQuad(&UpperGradient);
hge->Gfx_RenderQuad(&LowerGradient);
}
}mainMenu;
class StartMenu
{
private:
bool active,onIn,onOut;
double xoffset,yoffset,moffset;
int selected;
hgeQuad LeftGradient,RightGradient,LowerGradient;
hgeSprite *clzk,*azmt,*fpmd,*msel;
public:
bool isActive(){return active;}
void Init_Once()
{
clzk=new hgeSprite(MenuTex,0,0,256,128);
azmt=new hgeSprite(MenuTex,256,0,256,128);
fpmd=new hgeSprite(MenuTex,0,128,256,128);
msel=new hgeSprite(MenuTex,256,128,256,64);
clzk->SetHotSpot(128,64);
azmt->SetHotSpot(128,64);
fpmd->SetHotSpot(128,64);
}
void Init()
{
active=true;onIn=true;yoffset=275;
selected=0;xoffset=-selected*300;moffset=450;
ConfigureQuad(&LowerGradient,0,400+yoffset,800,120);
LowerGradient.v[0].col=LowerGradient.v[1].col=0x01888820;
LowerGradient.v[2].col=LowerGradient.v[3].col=0xFF888820;
ConfigureQuad(&LeftGradient,0,320+yoffset,100,200);
LeftGradient.v[0].col=LeftGradient.v[3].col=0xFF888820;
LeftGradient.v[1].col=LeftGradient.v[2].col=0x01888820;
ConfigureQuad(&RightGradient,700,320+yoffset,100,200);
RightGradient.v[0].col=RightGradient.v[3].col=0x01888820;
RightGradient.v[1].col=RightGradient.v[2].col=0xFF888820;
}
void Leave(){onOut=true;}
int Update()
{
if(onIn)
{
bool alldone=true;
if(fabs(yoffset-0)<hge->Timer_GetDelta()*800)
yoffset=0;
else
alldone=false,yoffset-=hge->Timer_GetDelta()*800;
if(fabs(moffset-0)<hge->Timer_GetDelta()*1200)
moffset=0;
else alldone=false,moffset-=hge->Timer_GetDelta()*1200;
if(alldone)onIn=false;
}
if(onOut)
{
bool alldone=true;
if(fabs(yoffset-275)<hge->Timer_GetDelta()*800)
yoffset=275;
else
alldone=false,yoffset+=hge->Timer_GetDelta()*800;
if(fabs(moffset-450)<hge->Timer_GetDelta()*1200)
moffset=450;
else alldone=false,moffset+=hge->Timer_GetDelta()*800;
if(alldone)onOut=active=false;
}
if(hge->Input_GetKeyStateEx(HGEK_LEFT)==HGEKST_HIT&&selected>0)--selected;
if(hge->Input_GetKeyStateEx(HGEK_RIGHT)==HGEKST_HIT&&selected<3-1)++selected;
if(fabs(xoffset-(-selected*300))<hge->Timer_GetDelta()*1000)
xoffset=-selected*300;
else
{
if(xoffset<-selected*300)xoffset+=hge->Timer_GetDelta()*1000;
if(xoffset>-selected*300)xoffset-=hge->Timer_GetDelta()*1000;
}
ConfigureQuad(&LowerGradient,0,400+yoffset,800,120);
ConfigureQuad(&LeftGradient,0,320+yoffset,100,200);
ConfigureQuad(&RightGradient,700,320+yoffset,100,200);
if(hge->Input_GetKeyStateEx(HGEK_Z)==HGEKST_HIT||hge->Input_GetKeyStateEx(HGEK_ENTER)==HGEKST_HIT)
return selected;
return -1;
}
void Render()
{
clzk->Render(400+xoffset,fabs((xoffset+0))*0.075+400+yoffset);
azmt->Render(700+xoffset,fabs((xoffset+300))*0.075+400+yoffset);
fpmd->Render(1000+xoffset,fabs((xoffset+600))*0.075+400+yoffset);
hge->Gfx_RenderQuad(&LowerGradient);
hge->Gfx_RenderQuad(&LeftGradient);
hge->Gfx_RenderQuad(&RightGradient);
msel->Render(0,moffset+200);
}
}startMenu;
class OptionsMenu
{
private:
bool active,onIn,onOut,onSwitch,onSwitchi;
int selected;
double xoffset,yoffset,dyoffset,swoffset,moffset;
hgeSprite *Ribb,*msel;
hgeQuad UpperGradient,LowerGradient;
public:
bool isActive(){return active;}
void Init_Once()
{
Ribb=new hgeSprite(MenuTex,256,350,64,16);
msel=new hgeSprite(MenuTex,256,192,256,64);
Ribb->SetColor(0xCCFFFFFF);
}
void Init(double start)
{
xoffset=start;onIn=active=true;onSwitch=onSwitchi=false;
selected=0;dyoffset=yoffset=-selected*30;moffset=350;
ConfigureQuad(&UpperGradient,xoffset-140,250,500,50);
UpperGradient.v[0].col=UpperGradient.v[1].col=0xFF888820;
UpperGradient.v[2].col=UpperGradient.v[3].col=0x00888820;
ConfigureQuad(&LowerGradient,xoffset-140,430,500,100);
LowerGradient.v[0].col=LowerGradient.v[1].col=0x00888820;
LowerGradient.v[2].col=LowerGradient.v[3].col=0xFF888820;
}
void Leave(){onOut=true;}
int Update()
{
if(onIn)
{
bool alldone=true;
if(fabs(xoffset-450)<hge->Timer_GetDelta()*1600)xoffset=450;else
{
alldone=false;
if(xoffset<450)
xoffset+=hge->Timer_GetDelta()*1600;
else
xoffset-=hge->Timer_GetDelta()*1600;
}
if(fabs(moffset-0)<hge->Timer_GetDelta()*1200)
moffset=0;
else alldone=false,moffset-=hge->Timer_GetDelta()*1200;
if(alldone)return onIn=false,-1;
}
if(onOut)
{
bool alldone=true;
xoffset+=hge->Timer_GetDelta()*1600;
if(xoffset<850)alldone=false;
if(fabs(moffset-450)<hge->Timer_GetDelta()*1200)
moffset=450;
else alldone=false,moffset+=hge->Timer_GetDelta()*800;
if(alldone)active=onOut=false;
}
ConfigureQuad(&UpperGradient,xoffset-140,250,500,100);
ConfigureQuad(&LowerGradient,xoffset-140,430,500,100);
if(!onSwitch)
{
if(hge->Input_GetKeyStateEx(HGEK_UP)==HGEKST_HIT&&selected>0)--selected;
if(hge->Input_GetKeyStateEx(HGEK_DOWN)==HGEKST_HIT&&selected<6-1)++selected;
}
yoffset=-selected*30;
if(fabs(dyoffset-yoffset)<0.2)dyoffset=yoffset;
if(dyoffset<yoffset)dyoffset+=hge->Timer_GetDelta()*200;
if(dyoffset>yoffset)dyoffset-=hge->Timer_GetDelta()*200;
if(hge->Input_GetKeyStateEx(HGEK_RIGHT)==HGEKST_HIT&&hge->Input_GetKeyStateEx(HGEK_LEFT)==HGEKST_HIT)return -1;
if(hge->Input_GetKeyStateEx(HGEK_RIGHT)==HGEKST_HIT||hge->Input_GetKeyStateEx(HGEK_Z)==HGEKST_HIT||hge->Input_GetKeyStateEx(HGEK_ENTER)==HGEKST_HIT)
{
if(onSwitch||onSwitchi)return -1;
if(selected<=3)
{
onSwitch=true;
swoffset=100;
}
if(selected==0)tfs=!tfs;
if(selected==1)
{
fpslvl=fpslvl==2?0:2;
if(fpslvl==2)hge->System_SetState(HGE_FPS,HGEFPS_VSYNC);
if(fpslvl==0)hge->System_SetState(HGE_FPS,61);
}
if(selected==2)diffkey=!diffkey;
if(selected==3)
{
++VidMode;
if(VidMode>4)VidMode=0;
}
return selected;
}
if(hge->Input_GetKeyStateEx(HGEK_LEFT)==HGEKST_HIT)
{
if(onSwitch||onSwitchi)return -1;
if(selected<=2){onSwitch=true;swoffset=100;}
if(selected==0)tfs=!tfs;
if(selected==1)
{
fpslvl=fpslvl==2?0:2;
if(fpslvl==2)hge->System_SetState(HGE_FPS,HGEFPS_VSYNC);
if(fpslvl==0)hge->System_SetState(HGE_FPS,61);
}
if(selected==2)diffkey=!diffkey;
if(selected==3)
{
--VidMode;onSwitchi=true;swoffset=0;
if(VidMode<0)VidMode=4;
}
return selected;
}
return -1;
}
void Render()
{
for(int i=0;i<6;++i)
{
double calcy=i*30+dyoffset+360;
if(calcy>249.9&&calcy<500.1)
{
MenuFont->SetColor(0xFFFFFFFF);
MenuFont->printf(xoffset,calcy,HGETEXT_LEFT,OMStr[i]);
if(i==0)
{
if(!onSwitch||selected!=0)
MenuFont->printf(xoffset+200,calcy,HGETEXT_LEFT,OMStr[tfs?6:7]);
else
{
MenuFont->SetColor(SETA(0xFFFFFF,255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+100+swoffset,calcy,HGETEXT_LEFT,OMStr[tfs?7:6]);
MenuFont->SetColor(SETA(0xFFFFFF,255.0f-255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+200+swoffset,calcy,HGETEXT_LEFT,OMStr[tfs?6:7]);
swoffset-=hge->Timer_GetDelta()*400;
if(swoffset<0)swoffset=0,onSwitch=false;
}
}
if(i==1)
{
if(!onSwitch||selected!=1)
MenuFont->printf(xoffset+200,calcy,HGETEXT_LEFT,OMStr[fpslvl==2?6:7]);
else
{
MenuFont->SetColor(SETA(0xFFFFFF,255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+100+swoffset,calcy,HGETEXT_LEFT,OMStr[fpslvl==2?7:6]);
MenuFont->SetColor(SETA(0xFFFFFF,255.0f-255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+200+swoffset,calcy,HGETEXT_LEFT,OMStr[fpslvl==2?6:7]);
swoffset-=hge->Timer_GetDelta()*400;
if(swoffset<0)swoffset=0,onSwitch=false;
}
}
if(i==2)
{
if(!onSwitch||selected!=2)
MenuFont->printf(xoffset+200,calcy,HGETEXT_LEFT,OMStr[diffkey?8:9]);
else
{
MenuFont->SetColor(SETA(0xFFFFFF,255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+100+swoffset,calcy,HGETEXT_LEFT,OMStr[diffkey?9:8]);
MenuFont->SetColor(SETA(0xFFFFFF,255.0f-255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+200+swoffset,calcy,HGETEXT_LEFT,OMStr[diffkey?8:9]);
swoffset-=hge->Timer_GetDelta()*400;
if(swoffset<0)swoffset=0,onSwitch=false;
}
}
if(i==3)
{
if(!(onSwitch||onSwitchi)||selected!=3)
MenuFont->printf(xoffset+200,calcy,HGETEXT_LEFT,VidMode>=0&&VidMode<=4?OMStr[VidMode+10]:OMStr[15]);
else
{
if(onSwitch)
{
MenuFont->SetColor(SETA(0xFFFFFF,255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+100+swoffset,calcy,HGETEXT_LEFT,VidMode>=0&&VidMode<=4?OMStr[VidMode==0?14:VidMode+9]:OMStr[15]);
MenuFont->SetColor(SETA(0xFFFFFF,255.0f-255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+200+swoffset,calcy,HGETEXT_LEFT,VidMode>=0&&VidMode<=4?OMStr[VidMode+10]:OMStr[15]);
swoffset-=hge->Timer_GetDelta()*400;
if(swoffset<0)swoffset=0,onSwitch=false;
}
if(onSwitchi)
{
MenuFont->SetColor(SETA(0xFFFFFF,255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+100+swoffset,calcy,HGETEXT_LEFT,VidMode>=0&&VidMode<=4?OMStr[VidMode+10]:OMStr[15]);
MenuFont->SetColor(SETA(0xFFFFFF,255.0f-255.0f*(swoffset/100.0f)));
MenuFont->printf(xoffset+200+swoffset,calcy,HGETEXT_LEFT,VidMode>=0&&VidMode<=4?OMStr[VidMode==4?10:VidMode+11]:OMStr[15]);
swoffset+=hge->Timer_GetDelta()*400;
if(swoffset>100)swoffset=0,onSwitchi=false;
}
}
}
}
}
Ribb->RenderEx(xoffset-50,355,0,6,1);
Ribb->RenderEx(xoffset-50,382,0,6,1);
hge->Gfx_RenderQuad(&UpperGradient);
hge->Gfx_RenderQuad(&LowerGradient);
msel->Render(300,moffset+300);
}
}optionMenu;
//==================================================================================
//Here's where old code dies...
hgeGUI *StartGUI,*DeathGUI,*CompleteGUI,*HighScoreGUI;
hgeGUI *HSViewGUI,*HSDetailGUI,*PauseGUI,*BkTTitleGUI;
hgeGUI *OptionsGUI,*PlayerProfGUI;
char ds1[255],ds2[255],ds3[255],ds4[255];
char hs1[255],hs2[255],hs3[255],hs4[255],hs5[255],hs6[255],hs7[255];
char HSVstr[7][255];
char HSDetstr[10][255];
char opt[10][255];
bool toogleundl;
int view,detv;
int lastkeypressed;
void HSViewGUI_Init();
void HighScoreGUI_Init();
void PauseGUI_Init();
void StartGUI_Init()
{
StartGUI=new hgeGUI();
StartGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Classic"));
StartGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,""));
StartGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Assessment Mode"));
StartGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Free Play Mode"));
StartGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Back"));
StartGUI->SetCursor(spr);
StartGUI->SetNavMode(HGEGUI_UPDOWN);
StartGUI->SetFocus(1);
StartGUI->Enter();
}
void StartGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=StartGUI->Update(dt);
if (id)
{
switch (id)
{
case 1:
playerpos.x=400,playerpos.y=400,playerrot=0;
frameleft=ThirtySeconds;infofade=0xFF;Dis8ref=t8special=false;
level=1,part=1;frms=0,averfps=0.0;bsscale=1;
towcnt=bulcnt=0;whrcnt=12;skyactive=false;PlayerSplit=false;
score=0;Mult_Init();//Music_Init("./Resources/Music/CanonTechno.ogg");
lpst=4625568;lped=9234584;//Music_Play();
coll=semicoll=clrusg=0;playerLockX=playerLockY=false;
Lock.Init(2);IfShowTip=true;lsc=0;
//Lock.SetTexture(SprSheet,151,264,2,8);
clrrad=pi/2;clrrange=0;re.SetSeed(time(NULL));
memset(tower,0,sizeof(tower));
memset(bullet,0,sizeof(bullet));
Complete=false;
Current_Position=1;
Level1Part1();
IfCallLevel=true;
mode=1;
break;
case 2:
case 3:
playerpos.x=400,playerpos.y=400,playerrot=0;
frameleft=ThirtySeconds;infofade=0xFF;Dis8ref=t8special=false;
level=-2,part=0;frms=0,averfps=0.0;bsscale=1;assetime=0;
towcnt=bulcnt=0;whrcnt=12;skyactive=false;PlayerSplit=false;
score=0;Mult_Init();//Music_Init("./Resources/Music/CanonTechno.ogg");
lpst=4625568;lped=9234584;//Music_Play();
coll=semicoll=clrusg=0;playerLockX=playerLockY=false;
Lock.Init(2);IfShowTip=true;lsc=0;
//Lock.SetTexture(SprSheet,151,264,2,8);
clrrad=pi/2;clrrange=0;re.SetSeed(time(NULL));
memset(tower,0,sizeof(tower));
memset(bullet,0,sizeof(bullet));
Complete=false;
Current_Position=1;
IfCallLevel=true;
mode=2;
break;
case 4:
playerpos.x=400,playerpos.y=400,playerrot=0;
frameleft=ThirtySeconds;infofade=0xFF;Dis8ref=t8special=false;
level=1,part=1;frms=0,averfps=0.0;bsscale=1;
towcnt=bulcnt=0;whrcnt=12;skyactive=false;PlayerSplit=false;
score=0;Mult_Init();//Music_Init("./Resources/Music/CanonTechno.ogg");
lpst=4625568;lped=9234584;//Music_Play();
coll=semicoll=clrusg=0;playerLockX=playerLockY=false;
Lock.Init(2);IfShowTip=true;lsc=0;
//Lock.SetTexture(SprSheet,151,264,2,8);
clrrad=pi/2;clrrange=0;re.SetSeed(time(NULL));
memset(tower,0,sizeof(tower));
memset(bullet,0,sizeof(bullet));
Complete=false;
Current_Position=1;
Level1Part1();
IfCallLevel=true;
mode=3;
break;
case 5:
Current_Position=0;
StartGUI->Leave();
gui->Enter();
}
}
}
void DeathGUI_Init()
{
DeathGUI=new hgeGUI();
Current_Position=5;Music_Stop();
DisableAllTower=true;DisablePlayer=true;
DeathGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,160,0.0f,"You Are Dead!"));
#ifdef WIN32
sprintf(ds1,"You scored %I64d at level %d",score,level);
#else
sprintf(ds1,"You scored %lld at level %d",score,level);
#endif
DeathGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,200,0.1f,ds1));
switch (mode)
{
case 1:sprintf(ds2,"Mode: Classic");break;
case 3:sprintf(ds2,"What Happened?! You died in Free Play Mode?!");break;
}
DeathGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,240,0.2f,ds2));
sprintf(ds3,"Average FPS: %.2f",averfps);
DeathGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,280,0.3f,ds3));
DeathGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,320,0.3f,""));
DeathGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,360,0.4f,"Continue from beginning of level? Your score will be set to minus!"));
DeathGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,400,0.5f,"Continue!"));
DeathGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,440,0.6f,"No thanks..."));
for (int i=1;i<=6;++i)DeathGUI->EnableCtrl(i,false);
DeathGUI->SetCursor(spr);
DeathGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
DeathGUI->SetFocus(7);
DeathGUI->Enter();
}
void DeathGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=DeathGUI->Update(dt);
if (id)
{
switch (id)
{
case 7:
IfCallLevel=true;
IfShowTip=true;
Current_Position=1;
DeathGUI->Leave();
score=-abs(score);
++restarts;
part=0;
clockrot=deltarot=0;
coll=towcnt=bulcnt=0;
DisableAllTower=DisablePlayer=false;
break;
case 8:Current_Position=0;gui->Enter();DeathGUI->Leave();break;
}
}
}
void NewHighScoreGUI_Init()
{
Current_Position=7;
memset(newname,0,sizeof(newname));newlen=0;tbframebrk=0;toogleundl=false;
TipFont->SetColor(0xFFFFFFFF);
}
void nameins(char a)
{
if (newlen<=14)
newname[newlen++]=a;
}
void namedel()
{
if (newlen>0)newname[--newlen]=0;
}
void NewHighScoreGUI_FrameFnk()
{
int key=hge->Input_GetKey();
if (key>=0x30&&key<=0x39)nameins('0'+key-0x30);
#ifdef WIN32
if (key>=0x41&&key<=0x5A)
if (GetKeyState(VK_CAPITAL)&1)nameins('A'+key-0x41);else nameins('a'+key-0x41);
#else
if (key>=0x41&&key<=0x5A)
nameins('A'+key-0x41);
#endif
if (key==HGEK_SPACE)nameins('_');
if (key==HGEK_BACKSPACE)namedel();
if (key==HGEK_ENTER)
{
InsertHighScore();
switch (mode)
{
case 4:view=1;HSViewGUI_Init();break;
case 1:view=2;HSViewGUI_Init();break;
case 2:view=3;HSViewGUI_Init();break;
case 3:view=4;HSViewGUI_Init();break;
}
}
}
void NewHighScoreGUI_Render()
{
if (LOWFPS)tbframebrk+=17;else ++tbframebrk;
if (tbframebrk>=500)toogleundl=!toogleundl,tbframebrk=0;
TipFont->printf(200,200,HGETEXT_LEFT,"Please Enter Your Honorable Name...");
if (!toogleundl)
TipFont->printf(200,240,HGETEXT_LEFT,"%s",newname);
else
TipFont->printf(200,240,HGETEXT_LEFT,"%s_",newname);
}
char *getRank()
{
static char retval[256];
//stub!
//sprintf something to retval
if(level<=3)sprintf(retval,"Try more...");
if(level<=6)sprintf(retval,"Still need more effort!");
if(level==7)sprintf(retval,"You've done it!");
if(level==-1)sprintf(retval,"Why do you come to Earth?");
return retval;
}
void CompleteGUI_Init()
{
CompleteGUI=new hgeGUI();
Current_Position=6;
DisableAllTower=true;DisablePlayer=true;
CompleteGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,120,0.0f,"It Ends Here!"));
#ifdef WIN32
if (CheckHighScore()!=-1)
sprintf(hs1,"New Highscore %I64d!",score);
else
sprintf(hs1,"Score %I64d",score);
#else
if (~CheckHighScore())
sprintf(hs1,"New Highscore %lld!",score);
else
sprintf(hs1,"Score %lld",score);
#endif
CompleteGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,160,0.1f,hs1));
sprintf(hs7,"Your Ranking: %s",getRank());
CompleteGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,200,0.1f,hs7));
switch (mode)
{
case 1:sprintf(hs2,"Restarts %d",restarts);break;
case 3:sprintf(hs2,"Collisions %d",coll);break;
}
CompleteGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,240,0.2f,hs2));
sprintf(hs3,"Semi-Collisions %d",semicoll);
CompleteGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,280,0.3f,hs3));
sprintf(hs4,"CLR usage %d",clrusg);
CompleteGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,320,0.3f,hs4));
sprintf(hs5,"Average FPS %.2f",averfps);
CompleteGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,360,0.4f,hs5));
if (CheckHighScore()!=-1)
{
CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.5f,"Keep this in your record?"));
CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.6f,"Yes"));
CompleteGUI->AddCtrl(new hgeGUIMenuItem(10,fnt,snd,400,480,0.7f,"No thanks..."));
}
else
{
CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.5f,""));
CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.6f,""));
CompleteGUI->AddCtrl(new hgeGUIMenuItem(10,fnt,snd,400,480,0.7f,"Back to menu"));
}
for (int i=1;i<=7;++i)CompleteGUI->EnableCtrl(i,false);
CompleteGUI->SetCursor(spr);
CompleteGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
CompleteGUI->SetFocus(8);
CompleteGUI->Enter();
}
void CompleteGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=CompleteGUI->Update(dt);
if (id)
{
switch (id)
{
case 9:NewHighScoreGUI_Init();CompleteGUI->Leave();break;
case 10:Current_Position=0;gui->Enter();CompleteGUI->Leave();break;
}
}
}
void HSDetGUI_Init()
{
HSDetailGUI=new hgeGUI();
Current_Position=10;
switch (view)
{
case 1:
memset(HSDetstr,0,sizeof(HSDetstr));
if (!ERec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
else
{
sprintf(HSDetstr[1],"No. %d of Easy Mode",detv);
#ifdef WIN32
sprintf(HSDetstr[2],"Scored %I64d by %s",ERec[detv].score,ERec[detv].name);
#else
sprintf(HSDetstr[2],"Scored %lld by %s",ERec[detv].score,ERec[detv].name);
#endif
sprintf(HSDetstr[3],"Restarts %d",ERec[detv].rescol);
sprintf(HSDetstr[4],"Semi-Collisions %d",ERec[detv].scoll);
sprintf(HSDetstr[5],"CLR Usage %d",ERec[detv].clrusg);
sprintf(HSDetstr[6],"Average FPS %d.%d",ERec[detv].af_int,ERec[detv].af_fric);
}
for (int i=1;i<=6;++i)
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
HSDetailGUI->EnableCtrl(i,false);
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
break;
case 2:
memset(HSDetstr,0,sizeof(HSDetstr));
if (!NRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
else
{
sprintf(HSDetstr[1],"No. %d of Normal Mode",detv);
#ifdef WIN32
sprintf(HSDetstr[2],"Scored %I64d by %s",NRec[detv].score,NRec[detv].name);
#else
sprintf(HSDetstr[2],"Scored %lld by %s",NRec[detv].score,NRec[detv].name);
#endif
sprintf(HSDetstr[3],"Restarts %d",NRec[detv].rescol);
sprintf(HSDetstr[4],"Semi-Collisions %d",NRec[detv].scoll);
sprintf(HSDetstr[5],"CLR Usage %d",NRec[detv].clrusg);
sprintf(HSDetstr[6],"Average FPS %d.%d",NRec[detv].af_int,NRec[detv].af_fric);
}
for (int i=1;i<=6;++i)
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
HSDetailGUI->EnableCtrl(i,false);
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
break;
case 3:
memset(HSDetstr,0,sizeof(HSDetstr));
if (!ExRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
else
{
sprintf(HSDetstr[1],"No. %d of Extreme Mode",detv);
#ifdef WIN32
sprintf(HSDetstr[2],"Scored %I64d by %s",ExRec[detv].score,ExRec[detv].name);
#else
sprintf(HSDetstr[2],"Scored %lld by %s",ExRec[detv].score,ExRec[detv].name);
#endif
sprintf(HSDetstr[3],"Restarts %d",ExRec[detv].rescol);
sprintf(HSDetstr[4],"Semi-Collisions %d",ExRec[detv].scoll);
sprintf(HSDetstr[5],"CLR Usage %d",ExRec[detv].clrusg);
sprintf(HSDetstr[6],"Average FPS %d.%d",ExRec[detv].af_int,ExRec[detv].af_fric);
}
for (int i=1;i<=6;++i)
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
HSDetailGUI->EnableCtrl(i,false);
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
break;
case 4:
memset(HSDetstr,0,sizeof(HSDetstr));
if (!FPMRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
else
{
sprintf(HSDetstr[1],"No. %d of Free Play Mode",detv);
#ifdef WIN32
sprintf(HSDetstr[2],"Scored %I64d by %s",FPMRec[detv].score,FPMRec[detv].name);
#else
sprintf(HSDetstr[2],"Scored %lld by %s",FPMRec[detv].score,FPMRec[detv].name);
#endif
sprintf(HSDetstr[3],"Collisions %d",FPMRec[detv].rescol);
sprintf(HSDetstr[4],"Semi-Collisions %d",FPMRec[detv].scoll);
sprintf(HSDetstr[5],"CLR Usage %d",FPMRec[detv].clrusg);
sprintf(HSDetstr[6],"Average FPS %d.%d",FPMRec[detv].af_int,FPMRec[detv].af_fric);
}
for (int i=1;i<=6;++i)
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
HSDetailGUI->EnableCtrl(i,false);
HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
break;
}
HSDetailGUI->SetCursor(spr);
HSDetailGUI->SetNavMode(HGEGUI_UPDOWN);
HSDetailGUI->SetFocus(7);
HSDetailGUI->Enter();
}
void HSDetGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=HSDetailGUI->Update(dt);
if (id)
{
switch (id)
{
case 7:Current_Position=9;HSDetailGUI->Leave();HSViewGUI->Enter();break;
}
}
}
void HSViewGUI_Init()
{
Current_Position=9;
HSViewGUI=new hgeGUI();
switch (view)
{
case 1:
HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Easy"));
for (unsigned i=1;i<=Ecnt;++i)
{
#ifdef WIN32
sprintf(HSVstr[i],"%u. %s - %I64d",i,ERec[i].name,ERec[i].score);
#else
sprintf(HSVstr[i],"%u. %s - %lld",i,ERec[i].name,ERec[i].score);
#endif
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
for (unsigned i=Ecnt+1;i<=5;++i)
{
sprintf(HSVstr[i],"%u. ----------",i);
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
break;
case 2:
HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Normal"));
for (unsigned i=1;i<=Ncnt;++i)
{
#ifdef WIN32
sprintf(HSVstr[i],"%u. %s - %I64d",i,NRec[i].name,NRec[i].score);
#else
sprintf(HSVstr[i],"%u. %s - %lld",i,NRec[i].name,NRec[i].score);
#endif
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
for (unsigned i=Ncnt+1;i<=5;++i)
{
sprintf(HSVstr[i],"%u. ----------",i);
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
break;
case 3:
HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Extreme"));
for (unsigned i=1;i<=Excnt;++i)
{
#ifdef WIN32
sprintf(HSVstr[i],"%u. %s - %I64d",i,ExRec[i].name,ExRec[i].score);
#else
sprintf(HSVstr[i],"%u. %s - %lld",i,ExRec[i].name,ExRec[i].score);
#endif
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
for (unsigned i=Excnt+1;i<=5;++i)
{
sprintf(HSVstr[i],"%u. ----------",i);
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
break;
case 4:
HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Free Play Mode"));
for (unsigned i=1;i<=FPMcnt;++i)
{
#ifdef WIN32
sprintf(HSVstr[i],"%u. %s - %I64d",i,FPMRec[i].name,FPMRec[i].score);
#else
sprintf(HSVstr[i],"%u. %s - %lld",i,FPMRec[i].name,FPMRec[i].score);
#endif
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
for (unsigned i=FPMcnt+1;i<=5;++i)
{
sprintf(HSVstr[i],"%u. ----------",i);
HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
}
break;
}
HSViewGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Select one record to view details."));
HSViewGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,410,0.7f,"Back"));
HSViewGUI->EnableCtrl(1,false);HSViewGUI->EnableCtrl(7,false);
HSViewGUI->SetCursor(spr);
HSViewGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
HSViewGUI->SetFocus(2);
HSViewGUI->Enter();
}
void HSViewGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=HSViewGUI->Update(dt);
if (id)
{
switch (id)
{
case 2:detv=1;HSDetGUI_Init();break;
case 3:detv=2;HSDetGUI_Init();break;
case 4:detv=3;HSDetGUI_Init();break;
case 5:detv=4;HSDetGUI_Init();break;
case 6:detv=5;HSDetGUI_Init();break;
case 8:Current_Position=8;HSViewGUI->Leave();if (!HighScoreGUI)HighScoreGUI_Init();HighScoreGUI->Enter();break;
}
}
}
void HighScoreGUI_Init()
{
HighScoreGUI=new hgeGUI();
Current_Position=8;
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,350,200,0.0f,"View Highscores && Records for..."));
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Classic"));
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Normal"));
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Assessment Mode"));
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Free Play Mode"));
HighScoreGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,400,0.5f,"Back"));
HighScoreGUI->EnableCtrl(1,false);
HighScoreGUI->SetCursor(spr);
HighScoreGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
HighScoreGUI->SetFocus(7);
HighScoreGUI->Enter();
}
void HighScoreGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=HighScoreGUI->Update(dt);
if (id)
{
switch (id)
{
case 2:view=1;HSViewGUI_Init();break;
case 3:view=2;HSViewGUI_Init();break;
case 4:view=3;HSViewGUI_Init();break;
case 5:view=4;HSViewGUI_Init();break;
case 6:Current_Position=0;HighScoreGUI->Leave();gui->Enter();break;
}
}
}
void BkTTitleGUI_Init()
{
BkTTitleGUI=new hgeGUI();
Current_Position=12;
BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Really?"));
BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,200,250,0.1f,"I've pressed the wrong key"));
BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,600,250,0.2f,"Do return to menu!"));
BkTTitleGUI->EnableCtrl(1,false);
BkTTitleGUI->SetCursor(spr);
BkTTitleGUI->SetNavMode(HGEGUI_LEFTRIGHT|HGEGUI_CYCLED);
BkTTitleGUI->SetFocus(2);
BkTTitleGUI->Enter();
}
void BkTTitleGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=BkTTitleGUI->Update(dt);
if (id)
{
switch (id)
{
case 2:
BkTTitleGUI->Leave();
Current_Position=11;
PauseGUI_Init();
break;
case 3:
Current_Position=0;BkTTitleGUI->Leave();gui->Enter();Music_Stop();
break;
}
}
}
void PauseGUI_Init()
{
PauseGUI=new hgeGUI();Music_Pause();
Current_Position=11;
DisableAllTower=DisablePlayer=true;
PauseGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Paused..."));
PauseGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Return to Game"));
PauseGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Return to Title"));
PauseGUI->EnableCtrl(1,false);
PauseGUI->SetCursor(spr);
PauseGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
PauseGUI->SetFocus(2);
PauseGUI->Enter();
}
void PauseGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=PauseGUI->Update(dt);
if (id)
{
switch (id)
{
case 2:
PauseGUI->Leave();
Current_Position=1;Music_Resume();
DisableAllTower=DisablePlayer=false;
break;
case 3:
BkTTitleGUI_Init();
break;
}
}
}
int AP_Update(int plrspd,int plrslospd,int clrbns)
{
int res=0;
if (plrspd<=4)res+=plrspd*1200;else res+=5000;
switch (plrslospd)
{
case 1:res+=4000;break;
case 2:res+=3200;break;
case 3:res+=2000;break;
case 4:res+=1500;break;
case 5:res+=700;break;
}
switch (clrbns)
{
case 0:break;
case 1:res+=1500;break;
case 2:res+=2700;break;
case 3:res+=4000;break;
case 4:res+=5500;break;
}
return res;
}
void Options_Writeback()
{
freopen("blr.cfg","w",stdout);
printf(";CBL");
printf("%c",fpslvl==2?1:0);
printf("%c",tfs?1:0);
printf("%c",VidMode);
printf("%c",diffkey?1:0);
printf("%c%c%c%c",plrspd,plrslospd,clrbns,clrmode);
fclose(stdout);
}
void OptionsGUI_Init()
{
OptionsGUI=new hgeGUI();
Current_Position=13;
if (!tfs)
sprintf(opt[0],"Fullscreen: Off");
else
sprintf(opt[0],"Fullscreen: On");
OptionsGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[0]));
switch (fpslvl)
{
case 0:sprintf(opt[1],"FPS Level: 60");break;
case 1:sprintf(opt[1],"FPS Level: ?");break;
case 2:sprintf(opt[1],"FPS Level: Vsync");break;
}
OptionsGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[1]));
if (diffkey)
sprintf(opt[2],"Use Key X for Clear Range");
else
sprintf(opt[2],"Use Key Z for Clear Range");
OptionsGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[2]));
OptionsGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Player Profile"));
OptionsGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Save and Exit"));
OptionsGUI->SetNavMode(HGEGUI_UPDOWN);
OptionsGUI->SetCursor(spr);
OptionsGUI->SetFocus(1);
OptionsGUI->Enter();
}
void PlayerProfGUI_Init()
{
PlayerProfGUI=new hgeGUI();
Current_Position=14;
sprintf(opt[3],"Moving Speed: -%d+",plrspd);
sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
sprintf(opt[6],"Clear Range Mode: %s",clrmode?"Rotate":"Expand");
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[3]));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[4]));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[5]));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,opt[6]));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,opt[7]));
PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,400,0.5f,"Back"));
PlayerProfGUI->SetNavMode(HGEGUI_UPDOWN);
PlayerProfGUI->SetCursor(spr);
PlayerProfGUI->SetFocus(1);
PlayerProfGUI->Enter();
}
void PlayerProfGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=PlayerProfGUI->Update(dt);
if (id==6&&AP_Update(plrspd,plrslospd,clrbns)<=10000)
{PlayerProfGUI->Leave();OptionsGUI_Init();}
if (id==4)
{
clrmode=!clrmode;
sprintf(opt[6],"Clear Range Mode: %s",clrmode?"Rotate":"Expand");
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
}
if (hge->Input_GetKeyState(HGEK_LEFT))
{
if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17;
if (lastkeypressed>=100)
{
switch (PlayerProfGUI->GetFocus())
{
case 1:
if (plrspd>1)--plrspd;
sprintf(opt[3],"Moving Speed: -%d+",plrspd);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(5))->RePos(400,360);
break;
case 2:
if (plrslospd>1)--plrslospd;
sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(5))->RePos(400,360);
break;
case 3:
if (clrbns>0)--clrbns;
sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(5))->RePos(400,360);
break;
}
lastkeypressed=0;
}
}
if (hge->Input_GetKeyState(HGEK_RIGHT))
{
if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17;
if (lastkeypressed>=100)
{
switch (PlayerProfGUI->GetFocus())
{
case 1:
if (plrspd<5)++plrspd;
sprintf(opt[3],"Moving Speed: -%d+",plrspd);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
break;
case 2:
if (plrslospd<5)++plrslospd;
sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
break;
case 3:
if (clrbns<4)++clrbns;
sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280);
sprintf(opt[7],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
break;
}
lastkeypressed=0;
}
}
}
void OptionsGUI_FrameFnk()
{
float dt=hge->Timer_GetDelta();
int id=OptionsGUI->Update(dt);
if (id)
{
switch (id)
{
case 1:
tfs=!tfs;
if (!tfs)
sprintf(opt[0],"Fullscreen: Off");
else
sprintf(opt[0],"Fullscreen: On");
((hgeGUIMenuItem*)OptionsGUI->GetCtrl(1))->RePos(400,200);
break;
case 2:
switch (fpslvl)
{
case 0:
fpslvl=2;LOWFPS=true;
hge->System_SetState(HGE_FPS,61);
TenSeconds=600;
TwentySeconds=1200;
ThirtySeconds=1800;
AMinute=3600;
if(fFast)TenSeconds/=2,TwentySeconds/=2,ThirtySeconds/=2,AMinute/=2;
break;
case 1:
/*fpslvl=2;LOWFPS=false;
hge->System_SetState(HGE_FPS,1000);
TenSeconds=10000;
TwentySeconds=20000;
ThirtySeconds=30000;
AMinute=60000;
if(fFast)TenSeconds/=2,TwentySeconds/=2,ThirtySeconds/=2,AMinute/=2;
break;*/
case 2:
fpslvl=0;LOWFPS=true;
hge->System_SetState(HGE_FPS,HGEFPS_VSYNC);
TenSeconds=600;
TwentySeconds=1200;
ThirtySeconds=1800;
AMinute=3600;
if(fFast)TenSeconds/=2,TwentySeconds/=2,ThirtySeconds/=2,AMinute/=2;
break;
}
switch (fpslvl)
{
case 0:sprintf(opt[1],"FPS Level: 60");break;
case 1:sprintf(opt[1],"FPS Level: ?");break;
case 2:sprintf(opt[1],"FPS Level: Vsync");break;
}
((hgeGUIMenuItem*)OptionsGUI->GetCtrl(2))->RePos(400,240);
break;
case 3:
diffkey=!diffkey;
if (diffkey)
sprintf(opt[2],"Use Key X for Clear Range");
else
sprintf(opt[2],"Use Key Z for Clear Range");
((hgeGUIMenuItem*)OptionsGUI->GetCtrl(3))->RePos(400,280);
break;
case 4:
PlayerProfGUI_Init();
break;
case 5:
Options_Writeback();
OptionsGUI->Leave();
gui->Enter();
Current_Position=0;
break;
}
}
}