This commit is contained in:
984
JGE/src/JInputSystem.cpp
Normal file
984
JGE/src/JInputSystem.cpp
Normal file
@@ -0,0 +1,984 @@
|
||||
#include <stdio.h>
|
||||
#include "../include/JGE.h"
|
||||
#include "../include/JRenderer.h"
|
||||
#include "../include/JLBFont.h"
|
||||
#include "../include/JGBKFont.h"
|
||||
#include "../include/JInputSystem.h"
|
||||
|
||||
char input_table[3][9][4]={
|
||||
{{',','a','b','c'},{'.','d','e','f'},{'!','g','h','i'},
|
||||
{'-','j','k','l'},{' ','m',' ','n'},{'?','o','p','q'},
|
||||
{'(','r','s','t'},{':','u','v','w'},{')','x','y','z'}},
|
||||
|
||||
{{'^','A','B','C'},{'@','D','E','F'},{'*','G','H','I'},
|
||||
{'_','J','K','L'},{' ','M',' ','N'},{'"','O','P','Q'},
|
||||
{'=','R','S','T'},{';','U','V','W'},{'/','X','Y','Z'}},
|
||||
|
||||
{{'=','+','0','-'},{'^','*','1','/'},{'|','(','2',')'},
|
||||
{'%','[','3',']'},{' ','4',' ','5'},{'&','{','6','}'},
|
||||
{'!','<','7','>'},{'$','#','8','~'},{':','\'','9','"'}}};
|
||||
|
||||
JInputSystem* JInputSystem::m_pJInputSystem=NULL;
|
||||
JInputSystem * JInputSystem::GetInstance()
|
||||
{
|
||||
if(m_pJInputSystem==NULL)
|
||||
m_pJInputSystem = new JInputSystem();
|
||||
return m_pJInputSystem;
|
||||
}
|
||||
void JInputSystem::Destory()
|
||||
{
|
||||
if (m_pJInputSystem!=NULL)
|
||||
{
|
||||
delete m_pJInputSystem;
|
||||
}
|
||||
m_pJInputSystem = NULL;
|
||||
}
|
||||
JInputSystem::JInputSystem(void)
|
||||
{
|
||||
//SetInputActive(false);
|
||||
mIsInputActive=false;
|
||||
mBitmapFont12 = NULL;
|
||||
mBitmapFont12 = new JGBKFont();
|
||||
mBitmapFont12->Init("ASC12", "GBK12", 12,true);
|
||||
|
||||
mTimer=0.0f;
|
||||
mInPut[0]=0;
|
||||
mpInput=NULL;
|
||||
mPY[0]=0;
|
||||
mStatus = eInputEng;
|
||||
|
||||
mEnablePYSel=false;
|
||||
mPYShowFirstIndex=0;
|
||||
mPYSelIndex=0;
|
||||
mPYSelTableSize=1;
|
||||
|
||||
mHZShowFirstIndex=0;
|
||||
mHZSelIndex=0;
|
||||
mHZSelTableSize=6;
|
||||
mIsHZ_H=true;
|
||||
mHZ=NULL;
|
||||
}
|
||||
|
||||
JInputSystem::~JInputSystem(void)
|
||||
{
|
||||
if(mBitmapFont12)
|
||||
delete mBitmapFont12;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/// Update:
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void JInputSystem::Update()
|
||||
{
|
||||
if (JGE::GetInstance()->GetButtonState(PSP_CTRL_DOWN) && JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS)) // exit when the CROSS is pressed
|
||||
{
|
||||
JInputSystem::GetInstance()->DisableInputMode();
|
||||
return;
|
||||
}
|
||||
|
||||
switch(mStatus)
|
||||
{
|
||||
case eInputEng:
|
||||
UpdateInputEng();
|
||||
break;
|
||||
case eInputChi:
|
||||
UpdateInputChi();
|
||||
break;
|
||||
case eSelPY:
|
||||
UpdateSelPY();
|
||||
break;
|
||||
case eSelHZ:
|
||||
mIsHZ_H?UpdateSelHZ_H():UpdateSelHZ();
|
||||
//UpdateSelHZ_H();
|
||||
break;
|
||||
case eInputNum:
|
||||
UpdateInputNum();
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// switch the input type.
|
||||
if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_RTRIGGER))
|
||||
{
|
||||
switch(mStatus)
|
||||
{
|
||||
case eInputEng:
|
||||
mStatus = eInputChi;
|
||||
break;
|
||||
case eInputChi:
|
||||
case eSelPY:
|
||||
case eSelHZ:
|
||||
mStatus = eInputNum;
|
||||
mPY[0]=0;
|
||||
break;
|
||||
case eInputNum:
|
||||
mStatus = eInputEng;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Update Timer
|
||||
mTimer += JGE::GetInstance()->GetDelta();
|
||||
if (mTimer > 400 || mTimer < 0)
|
||||
{
|
||||
mTimer = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::UpdateInputEng()
|
||||
{
|
||||
char* pBuf = mpInput;
|
||||
int a,b,c;
|
||||
if (GetInputKey(a,b,c))
|
||||
{
|
||||
if(b==4 && c==0)
|
||||
{
|
||||
int len = strlen(pBuf);
|
||||
if(len>0)
|
||||
{
|
||||
if(pBuf[len-1]>0)
|
||||
{
|
||||
pBuf[len-1]=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(len>=2)
|
||||
{
|
||||
if(pBuf[len-2]<0)
|
||||
{
|
||||
pBuf[len-2]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char cc[2];
|
||||
cc[0]=input_table[a][b][c];
|
||||
cc[1]=0;
|
||||
strcat(pBuf,(cc));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::UpdateInputChi()
|
||||
{
|
||||
if(mStatus != eInputChi)
|
||||
return;
|
||||
|
||||
int a,b,c;
|
||||
if (GetInputKey(a,b,c))
|
||||
{
|
||||
if(b==4 && c==0)
|
||||
{// press Backspace.
|
||||
int len = strlen(mPY);
|
||||
if(len>0)
|
||||
{
|
||||
mPY[len-1]=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
len = strlen(mpInput);
|
||||
if(len>0)
|
||||
{
|
||||
if(mpInput[len-1]>0)
|
||||
{
|
||||
mpInput[len-1]=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(len>=2)
|
||||
{
|
||||
if(mpInput[len-2]<0)
|
||||
{
|
||||
mpInput[len-2]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(b==4 && c==2 && mPY[0]!=0){//press Space
|
||||
mStatus = mEnablePYSel?eSelPY:eSelHZ;
|
||||
//mStatus = eSelPY;
|
||||
}
|
||||
else if(a==0 && c!=0 && !(b==4 && c==2))
|
||||
{// Input PY
|
||||
char cc[2];
|
||||
cc[0]=input_table[a][b][c];
|
||||
cc[1]=0;
|
||||
strcat(mPY,(cc));
|
||||
}
|
||||
else
|
||||
{// Input String
|
||||
char cc[2];
|
||||
cc[0]=input_table[a][b][c];
|
||||
cc[1]=0;
|
||||
strcat(mpInput,(cc));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if((JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN)) && mPY[0]!=0)
|
||||
mStatus = mEnablePYSel?eSelPY:eSelHZ;
|
||||
//mStatus = eSelPY;
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::UpdateSelPY()
|
||||
{
|
||||
if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS))
|
||||
{
|
||||
mStatus = eInputChi;
|
||||
mPYSelIndex = 0;
|
||||
mPYShowFirstIndex=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP))
|
||||
{
|
||||
mPYSelIndex--;
|
||||
if (mPYSelIndex<0)
|
||||
mPYSelIndex = 0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN))
|
||||
{
|
||||
PY_index* pyindex=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
if(len>0 && mPYSelIndex < len-1 )
|
||||
mPYSelIndex++;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT) || JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE))
|
||||
mStatus = eSelHZ;
|
||||
}
|
||||
|
||||
void JInputSystem::UpdateSelHZ()
|
||||
{
|
||||
PY_index* pyindex=NULL;
|
||||
int totalLen = 0;
|
||||
char* str=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
if(len>0 && mPYSelIndex < len)
|
||||
{
|
||||
str = pyindex[mPYSelIndex].PY_mb;
|
||||
totalLen=strlen(str)/2;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS))
|
||||
{
|
||||
mStatus = eInputChi;
|
||||
mPYSelIndex = 0;
|
||||
mPYShowFirstIndex=0;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
mPY[0]=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE))
|
||||
{
|
||||
mStatus = mEnablePYSel?eSelPY:eInputChi;
|
||||
//mStatus = eSelPY;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE))
|
||||
{
|
||||
int inlen = strlen(mpInput);
|
||||
mpInput[inlen]=str[mHZSelIndex*2];
|
||||
mpInput[inlen+1]=str[mHZSelIndex*2+1];
|
||||
mpInput[inlen+2]=0;
|
||||
|
||||
mStatus = eInputChi;
|
||||
mPYSelIndex = 0;
|
||||
mPYShowFirstIndex=0;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
mPY[0]=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP))
|
||||
{
|
||||
mHZSelIndex--;
|
||||
if (mHZSelIndex<0)
|
||||
mHZSelIndex = 0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN))
|
||||
{
|
||||
if(len>0 && mHZSelIndex < totalLen -1)
|
||||
mHZSelIndex++;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT))
|
||||
{
|
||||
if(totalLen - mHZSelIndex > mHZSelTableSize)
|
||||
{
|
||||
mHZSelIndex+=mHZSelTableSize;
|
||||
mHZShowFirstIndex+=mHZSelTableSize;
|
||||
}
|
||||
else if(totalLen - mHZShowFirstIndex > mHZSelTableSize && totalLen > mHZSelIndex)
|
||||
{
|
||||
mHZSelIndex = totalLen-1;
|
||||
mHZShowFirstIndex+=mHZSelTableSize;
|
||||
}
|
||||
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT))
|
||||
{
|
||||
if(mHZSelIndex>=mHZSelTableSize)
|
||||
{
|
||||
mHZSelIndex-=mHZSelTableSize;
|
||||
mHZShowFirstIndex-=mHZSelTableSize;
|
||||
if(mHZShowFirstIndex<0)
|
||||
mHZShowFirstIndex=0;
|
||||
}
|
||||
else if(mHZSelIndex > 0 && mHZShowFirstIndex > 0)
|
||||
{
|
||||
mHZSelIndex=0;
|
||||
mHZShowFirstIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
void JInputSystem::UpdateInputNum()
|
||||
{
|
||||
if(mStatus != eInputNum)
|
||||
return;
|
||||
char* pBuf = mpInput;
|
||||
int a,b,c;
|
||||
if (GetInputKey(a,b,c))
|
||||
{
|
||||
a=2;
|
||||
if(b==4 && c==0)
|
||||
{
|
||||
int len = strlen(pBuf);
|
||||
if(len>0)
|
||||
{
|
||||
if(pBuf[len-1]>0)
|
||||
{
|
||||
pBuf[len-1]=0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(len>=2)
|
||||
{
|
||||
if(pBuf[len-2]<0)
|
||||
{
|
||||
pBuf[len-2]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
char cc[2];
|
||||
cc[0]=input_table[a][b][c];
|
||||
cc[1]=0;
|
||||
strcat(pBuf,(cc));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
/// Draw
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void JInputSystem::Draw()
|
||||
{
|
||||
DrawInputHelp(2,181);
|
||||
//DrawStatus(450,3/*17*//*5*/);
|
||||
|
||||
float x,y;
|
||||
x=SCREEN_WIDTH_F/2;
|
||||
y=SCREEN_HEIGHT_F/2;
|
||||
|
||||
DrawStatus(x-25,y-8);
|
||||
DrawInputString(x,y);
|
||||
if(mStatus!=eInputEng)
|
||||
{
|
||||
DrawPYInput(x,y+14);
|
||||
//if(mEnablePYSel)
|
||||
//DrawPYSel(220,15);
|
||||
|
||||
mIsHZ_H?DrawHZSel_H(x,y+28):DrawHZSel(x,y+28);
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::DrawInputString( float x,float y )
|
||||
{
|
||||
// render text
|
||||
int len = strlen12(mpInput);
|
||||
|
||||
int dlen=5;
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-8,len+dlen+7,15,ARGB(255,0,0,0));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-8,x+len+dlen,y-8,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len+dlen+1,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-8,x-7,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+len+dlen,y-8,x+len+dlen,y+7,ARGB(255,255,255,255));
|
||||
|
||||
if(mTimer > 200)
|
||||
printf12("|",x+len+1,y);
|
||||
|
||||
if(len<=0)
|
||||
return;
|
||||
|
||||
printf12(mpInput, x+1, y);
|
||||
//DrawStr1(mInPut,x,y);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void JInputSystem::DrawStr1( char* str, float x, float y, u32 color)
|
||||
{
|
||||
y+=7;
|
||||
int len = strlen12(str);
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,color);
|
||||
printf12(str,x,y);
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-7,x+len,y-7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-7,x-7,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+len,y-7,x+len,y+7,ARGB(255,255,255,255));
|
||||
}
|
||||
|
||||
void JInputSystem::DrawStatus( float x,float y )
|
||||
{
|
||||
switch(mStatus)
|
||||
{
|
||||
case eInputEng:
|
||||
DrawStr1("Eng",x,y);
|
||||
break;
|
||||
case eInputChi:
|
||||
DrawStr1("Chi",x,y);
|
||||
break;
|
||||
case eSelPY:
|
||||
DrawStr1("PYSel",x,y);
|
||||
break;
|
||||
case eSelHZ:
|
||||
DrawStr1("HZSel",x,y);
|
||||
break;
|
||||
case eInputNum:
|
||||
DrawStr1("Num",x,y);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::DrawPYInput( float x,float y )
|
||||
{
|
||||
if(mStatus == eInputNum || mStatus == eInputEng)
|
||||
return;
|
||||
PY_index* pyindex=NULL;
|
||||
int indexlen = GetNexPYIndex(mPY,pyindex);
|
||||
if(!pyindex || indexlen == 0)
|
||||
{
|
||||
int pylen = strlen(mPY);
|
||||
if (pylen > 0)
|
||||
{
|
||||
mPY[strlen(mPY)-1]=0;
|
||||
}
|
||||
else
|
||||
mPY[0]=0;
|
||||
}
|
||||
|
||||
int len = 6+strlen12(mPY);
|
||||
if(mStatus==eInputChi)
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,ARGB(255,100,100,100));
|
||||
else
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7,len+7,14,ARGB(255,0,0,0));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-7,x+len,y-7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y+7,x+len,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-7,y-7,x-7,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+len,y-7,x+len,y+7,ARGB(255,255,255,255));
|
||||
|
||||
if(mTimer > 200 && mStatus == eInputChi)
|
||||
{
|
||||
char bb[8];
|
||||
sprintf(bb,"%s_",mPY);
|
||||
printf12(bb, x+1, y);
|
||||
}
|
||||
else
|
||||
{
|
||||
char bb[8];
|
||||
sprintf(bb,"%s",mPY);
|
||||
printf12(bb, x+1, y);
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::DrawPYSel( float x,float y )
|
||||
{
|
||||
PY_index* pyindex=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
//if(len==1)
|
||||
//mStatus=eSelHZ;
|
||||
if(pyindex && len>0)
|
||||
{
|
||||
int totalLen=len;
|
||||
int startIndex=mPYShowFirstIndex;
|
||||
int endIndex=mPYShowFirstIndex+(mPYSelTableSize-1);
|
||||
int curIndex=mPYSelIndex-startIndex;
|
||||
|
||||
if(endIndex+1 >= totalLen)
|
||||
endIndex=totalLen-1;
|
||||
if(mPYSelIndex > endIndex)
|
||||
{
|
||||
startIndex += mPYSelIndex-endIndex;
|
||||
mPYShowFirstIndex = startIndex;
|
||||
endIndex = mPYSelIndex;
|
||||
curIndex = endIndex-startIndex;
|
||||
}
|
||||
else if(mPYSelIndex < startIndex)
|
||||
{
|
||||
endIndex -= startIndex - mPYSelIndex;
|
||||
mPYShowFirstIndex = endIndex -(mPYSelTableSize-1);
|
||||
startIndex = mPYSelIndex;
|
||||
curIndex = 0;
|
||||
}
|
||||
|
||||
int i;
|
||||
unsigned int slen=0;
|
||||
|
||||
// count the max string len.
|
||||
for(i = startIndex; i<=endIndex; i++)
|
||||
{
|
||||
char buf[8];
|
||||
sprintf(buf," %s",((PY_index*)(pyindex+i))->PY);
|
||||
buf[0]=mPY[0];
|
||||
if(slen<strlen(buf))
|
||||
slen = strlen(buf);
|
||||
}
|
||||
|
||||
// Draw back ground
|
||||
slen*=6;
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
if(mStatus==eSelPY && curIndex==i)
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,100,100,100));
|
||||
else
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,0,0,0));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x+slen-2,y-7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y+7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x-8,y+7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+slen-2,y-7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255));
|
||||
}
|
||||
|
||||
|
||||
//return;
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
char buf[8];
|
||||
sprintf(buf," %s",((PY_index*)(pyindex+i+startIndex))->PY);
|
||||
buf[0]=mPY[0];
|
||||
printf12(buf,x,y+14*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void JInputSystem::DrawHZSel( float x,float y )
|
||||
{
|
||||
PY_index* pyindex=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
if(len>0 && mPYSelIndex < len)
|
||||
{
|
||||
char* str = pyindex[mPYSelIndex].PY_mb;
|
||||
//PSPCommonDrawUtility::GetInstance()->printf12(str,x,y);
|
||||
|
||||
int totalLen=strlen(str)/2;
|
||||
int startIndex=mHZShowFirstIndex;
|
||||
int endIndex=mHZShowFirstIndex+(mHZSelTableSize-1);
|
||||
int curIndex=mHZSelIndex-startIndex;
|
||||
|
||||
if(endIndex+1 >= totalLen)
|
||||
endIndex=totalLen-1;
|
||||
if(mHZSelIndex > endIndex)
|
||||
{
|
||||
startIndex += mHZSelIndex-endIndex;
|
||||
mHZShowFirstIndex = startIndex;
|
||||
endIndex = mHZSelIndex;
|
||||
curIndex = endIndex-startIndex;
|
||||
}
|
||||
else if(mHZSelIndex < startIndex)
|
||||
{
|
||||
endIndex -= startIndex - mHZSelIndex;
|
||||
mHZShowFirstIndex = endIndex -(mHZSelTableSize-1);
|
||||
startIndex = mHZSelIndex;
|
||||
curIndex = 0;
|
||||
}
|
||||
|
||||
int i;
|
||||
int slen=12;
|
||||
|
||||
// Draw back ground
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
if(mStatus==eSelHZ && curIndex==i)
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,100,100,100));
|
||||
else
|
||||
JRenderer::GetInstance()->FillRect(x-7,y-7+14*i,slen-2+7,14,ARGB(255,0,0,0));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x+slen-2,y-7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y+7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8,y-7+14*i,x-8,y+7+14*i,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+slen-2,y-7+14*i,x+slen-2,y+7+14*i,ARGB(255,255,255,255));
|
||||
}
|
||||
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
char buf[8];
|
||||
buf[0]=str[(startIndex+i)*2];
|
||||
buf[1]=str[(startIndex+i)*2+1];
|
||||
buf[2]=0;
|
||||
buf[3]=0;
|
||||
printf12(buf,x+1,1+y+14*i);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::DrawInputHelp( float x, float y )
|
||||
{
|
||||
int a,b,c,i,j;
|
||||
GetInputKey(a,b,c);
|
||||
|
||||
float L=90;
|
||||
u32 color = ARGB(255,255,255,255);
|
||||
JRenderer* renderer = JRenderer::GetInstance();
|
||||
|
||||
for(j=0; j<3; j++)
|
||||
{
|
||||
for(i=0; i<3; i++)
|
||||
{
|
||||
if(j+i*3==b)
|
||||
renderer->FillRect(x+j*L/3,y+i*L/3,L/3,L/3,ARGB(255,100,100,100));
|
||||
else
|
||||
renderer->FillRect(x+j*L/3,y+i*L/3,L/3,L/3,ARGB(255,0,0,0));
|
||||
}
|
||||
}
|
||||
|
||||
renderer->DrawLine(x, y, x+L, y, color);
|
||||
renderer->DrawLine(x, y+L/3, x+L, y+L/3, color);
|
||||
renderer->DrawLine(x, y+L*2/3,x+L, y+L*2/3,color);
|
||||
renderer->DrawLine(x-1, y+L, x+L+1, y+L, color);
|
||||
renderer->DrawLine(x, y, x, y+L,color);
|
||||
renderer->DrawLine(x+L/3, y, x+L/3, y+L,color);
|
||||
renderer->DrawLine(x+L*2/3,y, x+L*2/3,y+L,color);
|
||||
renderer->DrawLine(x+L, y, x+L, y+L,color);
|
||||
|
||||
for(j=0; j<3; j++)
|
||||
{
|
||||
for(i=0; i<3; i++)
|
||||
{
|
||||
char cc[2];
|
||||
cc[1]=0;
|
||||
|
||||
cc[0]=input_table[a][j*3+i][0];
|
||||
printf12(cc, (int)(x+L/3/2+i*L/3+2), (int)(j*L/3+y+8), JGETEXT_CENTER);
|
||||
cc[0]=input_table[a][j*3+i][1];
|
||||
printf12(cc, (int)(x+8+i*L/3+2), (int)(j*L/3+y+L/3/2), JGETEXT_CENTER);
|
||||
cc[0]=input_table[a][j*3+i][3];
|
||||
printf12(cc, (int)(x+L/3-8+i*L/3+2), (int)(j*L/3+y+L/3/2), JGETEXT_CENTER);
|
||||
cc[0]=input_table[a][j*3+i][2];
|
||||
printf12(cc, (int)(x+L/3/2+i*L/3+2), (int)(j*L/3+y+L/3-7), JGETEXT_CENTER);
|
||||
}
|
||||
}
|
||||
|
||||
x+=L/2/**1.5f*/;
|
||||
y+=L/2-8;
|
||||
printf12("%f%f",x,y);
|
||||
|
||||
x--;
|
||||
y+=19;
|
||||
JRenderer::GetInstance()->DrawLine(x-4,y,x+4,y,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-4,y-3,x-4,y,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+4,y-3,x+4,y,ARGB(255,255,255,255));
|
||||
|
||||
|
||||
return;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
///
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool JInputSystem::GetInputKey( int& a, int& b, int& c )
|
||||
{
|
||||
if(JGE::GetInstance()->GetButtonState(PSP_CTRL_LTRIGGER))
|
||||
a=1;
|
||||
else
|
||||
a=0;
|
||||
|
||||
if (mStatus == eInputNum)
|
||||
{
|
||||
a=2;
|
||||
}
|
||||
|
||||
if(JGE::GetInstance()->GetAnalogX() < 50 && JGE::GetInstance()->GetAnalogY() < 50)
|
||||
b=0;
|
||||
else if(JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200 && JGE::GetInstance()->GetAnalogY() < 50)
|
||||
b=1;
|
||||
else if(JGE::GetInstance()->GetAnalogX() > 200 && JGE::GetInstance()->GetAnalogY() < 50)
|
||||
b=2;
|
||||
else if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() < 50)
|
||||
b=3;
|
||||
if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200)
|
||||
b=4;
|
||||
if(JGE::GetInstance()->GetAnalogY() > 50 && JGE::GetInstance()->GetAnalogY() < 200 && JGE::GetInstance()->GetAnalogX() > 200)
|
||||
b=5;
|
||||
if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() < 50)
|
||||
b=6;
|
||||
if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() > 50 && JGE::GetInstance()->GetAnalogX() < 200)
|
||||
b=7;
|
||||
if(JGE::GetInstance()->GetAnalogY() > 200 && JGE::GetInstance()->GetAnalogX() > 200)
|
||||
b=8;
|
||||
|
||||
if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE))
|
||||
c=0;
|
||||
else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_SQUARE))
|
||||
c=1;
|
||||
else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE))
|
||||
c=3;
|
||||
else if (JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS))
|
||||
c=2;
|
||||
else
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
char* JInputSystem::GetChinese( char* str)
|
||||
{
|
||||
char first = str[0];
|
||||
char* after = str+1;
|
||||
if(first=='i')return NULL; /*´úêóÆ´ÒôÊäÈ<C3A4>E */
|
||||
if(first=='u')return NULL;
|
||||
if(first=='v')return NULL;
|
||||
|
||||
PY_index* py_index = PY_index_headletter[first-'a'];
|
||||
const int len = PY_index_headsize[first-'a'];
|
||||
for (int i=0; i<len; i++)
|
||||
{
|
||||
//char *PY;
|
||||
//char *PY_mb;
|
||||
if(stricmp(after,py_index[i].PY)==0)
|
||||
return py_index[i].PY_mb;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int JInputSystem::GetNexPYIndex( char* str, PY_index* &py_index )
|
||||
{
|
||||
const unsigned int pylen = strlen(str);
|
||||
if(pylen == 0 || pylen > 7)// > 6
|
||||
return 0;
|
||||
|
||||
int i,j;
|
||||
PY_index* rt_py_index=NULL;
|
||||
char first = str[0];
|
||||
rt_py_index = PY_index_headletter[first-'a'];
|
||||
int index_len = PY_index_headsize[first-'a'];
|
||||
py_index = rt_py_index;
|
||||
|
||||
for(i=1; i < (int)pylen; i++)
|
||||
{
|
||||
for(j=0; j<index_len; j++)
|
||||
{
|
||||
if(str[i] == rt_py_index[j].PY[i-1])
|
||||
{
|
||||
rt_py_index = rt_py_index+j;
|
||||
index_len -= j;
|
||||
j=-1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(j!=-1)
|
||||
{
|
||||
py_index = NULL;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
py_index = rt_py_index;
|
||||
|
||||
for(i=0; i<index_len; i++)
|
||||
{
|
||||
for(j=1;j<(int)pylen;j++)
|
||||
{
|
||||
if(str[j]!=py_index[i].PY[j-1])
|
||||
{
|
||||
index_len = i;
|
||||
return index_len;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return index_len;
|
||||
}
|
||||
|
||||
void JInputSystem::DrawHZSel_H( float x,float y )
|
||||
{
|
||||
x++;
|
||||
PY_index* pyindex=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
if(len>0 && mPYSelIndex < len)
|
||||
{
|
||||
char* str = pyindex[mPYSelIndex].PY_mb;
|
||||
//PSPCommonDrawUtility::GetInstance()->printf12(str,x,y);
|
||||
|
||||
int totalLen=strlen(str)/2;
|
||||
int startIndex=mHZShowFirstIndex;
|
||||
int endIndex=mHZShowFirstIndex+(mHZSelTableSize-1);
|
||||
int curIndex=mHZSelIndex-startIndex;
|
||||
|
||||
if(endIndex+1 >= totalLen)
|
||||
endIndex=totalLen-1;
|
||||
if(mHZSelIndex > endIndex)
|
||||
{
|
||||
startIndex += mHZSelIndex-endIndex;
|
||||
mHZShowFirstIndex = startIndex;
|
||||
endIndex = mHZSelIndex;
|
||||
curIndex = endIndex-startIndex;
|
||||
}
|
||||
else if(mHZSelIndex < startIndex)
|
||||
{
|
||||
endIndex -= startIndex - mHZSelIndex;
|
||||
mHZShowFirstIndex = endIndex -(mHZSelTableSize-1);
|
||||
startIndex = mHZSelIndex;
|
||||
curIndex = 0;
|
||||
}
|
||||
|
||||
int i;
|
||||
int slen=12;
|
||||
|
||||
// Draw back ground
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
if(mStatus==eSelHZ && curIndex==i)
|
||||
JRenderer::GetInstance()->FillRect(x-7+15*i,y-7,15,slen+3,ARGB(255,100,100,100));
|
||||
else
|
||||
JRenderer::GetInstance()->FillRect(x-7+15*i,y-7,15,slen+3,ARGB(255,0,0,0));
|
||||
JRenderer::GetInstance()->DrawLine(x-8+15*i,y-7,x+slen-5+15*i,y-7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8+15*i,y+7,x+slen-4+15*i,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x-8+15*i,y-7,x-8+15*i,y+7,ARGB(255,255,255,255));
|
||||
JRenderer::GetInstance()->DrawLine(x+slen-5+15*i,y-7,x+slen-5+15*i,y+7,ARGB(255,255,255,255));
|
||||
}
|
||||
|
||||
for(i=0; i <= endIndex - startIndex; i++)
|
||||
{
|
||||
char buf[8];
|
||||
buf[0]=str[(startIndex+i)*2];
|
||||
buf[1]=str[(startIndex+i)*2+1];
|
||||
buf[2]=0;
|
||||
buf[3]=0;
|
||||
printf12(buf,x+15*i,1+y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::UpdateSelHZ_H()
|
||||
{
|
||||
PY_index* pyindex=NULL;
|
||||
int totalLen = 0;
|
||||
char* str=NULL;
|
||||
int len = GetNexPYIndex(mPY,pyindex);
|
||||
if(len>0 && mPYSelIndex < len)
|
||||
{
|
||||
str = pyindex[mPYSelIndex].PY_mb;
|
||||
totalLen=strlen(str)/2;
|
||||
}
|
||||
else
|
||||
return;
|
||||
|
||||
if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CROSS))
|
||||
{
|
||||
mStatus = eInputChi;
|
||||
mPYSelIndex = 0;
|
||||
mPYShowFirstIndex=0;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
mPY[0]=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_TRIANGLE))
|
||||
{
|
||||
mStatus = mEnablePYSel?eSelPY:eInputChi;
|
||||
//mStatus = eSelPY;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_CIRCLE))
|
||||
{
|
||||
int inlen = strlen(mpInput);
|
||||
mpInput[inlen]=str[mHZSelIndex*2];
|
||||
mpInput[inlen+1]=str[mHZSelIndex*2+1];
|
||||
mpInput[inlen+2]=0;
|
||||
|
||||
mStatus = eInputChi;
|
||||
mPYSelIndex = 0;
|
||||
mPYShowFirstIndex=0;
|
||||
mHZSelIndex = 0;
|
||||
mHZShowFirstIndex=0;
|
||||
mPY[0]=0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_LEFT))
|
||||
{
|
||||
mHZSelIndex--;
|
||||
if (mHZSelIndex<0)
|
||||
mHZSelIndex = 0;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_RIGHT))
|
||||
{
|
||||
if(len>0 && mHZSelIndex < totalLen -1)
|
||||
mHZSelIndex++;
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_DOWN))
|
||||
{
|
||||
if(totalLen - mHZSelIndex > mHZSelTableSize)
|
||||
{
|
||||
mHZSelIndex+=mHZSelTableSize;
|
||||
mHZShowFirstIndex+=mHZSelTableSize;
|
||||
}
|
||||
else if(totalLen - mHZShowFirstIndex > mHZSelTableSize && totalLen > mHZSelIndex)
|
||||
{
|
||||
mHZSelIndex = totalLen-1;
|
||||
mHZShowFirstIndex+=mHZSelTableSize;
|
||||
}
|
||||
|
||||
}
|
||||
else if(JGE::GetInstance()->GetButtonClick(PSP_CTRL_UP))
|
||||
{
|
||||
if(mHZSelIndex>=mHZSelTableSize)
|
||||
{
|
||||
mHZSelIndex-=mHZSelTableSize;
|
||||
mHZShowFirstIndex-=mHZSelTableSize;
|
||||
if(mHZShowFirstIndex<0)
|
||||
mHZShowFirstIndex=0;
|
||||
}
|
||||
else if(mHZSelIndex > 0 && mHZShowFirstIndex > 0)
|
||||
{
|
||||
mHZSelIndex=0;
|
||||
mHZShowFirstIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void JInputSystem::printf12( char* str,float x, float y, float scale/*=1.0f*/, PIXEL_TYPE color/*=ARGB(255,255,255,255)*/,int type/*=JGETEXT_LEFT*/ )
|
||||
{
|
||||
mBitmapFont12->SetScale(scale);
|
||||
mBitmapFont12->SetColor(color);
|
||||
mBitmapFont12->RenderString((u8*)str,x,y,type);
|
||||
}
|
||||
|
||||
int JInputSystem::strlen12( char* buff, float scale/*=1.0f*/ )
|
||||
{
|
||||
mBitmapFont12->SetScale(scale);
|
||||
return mBitmapFont12->GetStringWidth((u8*)buff);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user