32 #include "laObj_TerminalInterface.h"
34 #define TERMI_SPACING 20
35 #define TERMI_OFFSET 50
37 void uiContainer_SkillInfo::load(rpgSkill *pSkill,
unsigned col,
unsigned row)
39 uiContainer::load(
"ui\\dialogs\\jr-skill-info.cui");
48 _ptPos.x( _ptPos.x() + _col*(getSize().x()+30) + 20 );
55 _pIcon =
new uiIcon3D(
new uiSkillDescriptor(_pSkill) );
56 _pIcon->move( laPoint3(-20, -5),
M_AL,
M_AT);
60 uiContainer_SkillInfo::uiContainer_SkillInfo(
void)
65 uiContainer_SkillInfo::~uiContainer_SkillInfo(
void)
67 if(_pIcon)
delete _pIcon;
70 void uiContainer_SkillInfo::reply()
72 double dt = ::laSystemIntegrator::getEnvironment()->getTimer()->delta();
74 if( _ptPos.y() < _row*(getSize().y()+TERMI_SPACING) + TERMI_OFFSET) _ptPos.y( _ptPos.y() + 150 * dt );
84 _ptPos.x( _ptPos.x() + dt * sin(ang) * 10 );
85 _ptPos.y( _ptPos.y() + dt * cos(ang) * 10 );
88 char strSkillName[64];
89 sprintf(strSkillName,
"%s %d", _pSkill->name(), _pSkill->getCurrentIndex()+1 );
90 caption.setText(strSkillName);
95 void uiContainer_SkillInfo::draw()
99 col = _pSkin->parameter(
"CL_CONTAINER_SELECTED").color();
103 col = _pSkin->parameter(
"CL_CONTAINER").color();
104 _pIcon->select(M_FALSE);
113 mkL.set(KEY_LEFT, 1, 1);
114 mkR.set(KEY_RIGHT, 1, 1);
115 mkU.set(KEY_UP, 1, 1);
116 mkD.set(KEY_DOWN, 1, 1);
118 mkEnter.set(KEY_RETURN, 1, 1);
120 nSel = nRow = nCol = 0;
122 _bProceed = _bCompleted = M_FALSE;
130 laSystemIntegrator::getRenderer()->font(
"plain"),
131 0.1*
M_UNIT, 1.5, laColor(50,50,50, 200), 0.8,
M_AL);
133 pText->enableSlideFX(1, 15,0);
135 pText->replace(
"$point",
"%d", npt);
136 if(npt==1) pText->replace(
"Points",
"Point");
138 _baloon.create( pAO->getPosition() + laPoint3(-1*pText->width()*0.2, -1.5*
M_UNIT),
139 laPoint3(pText->width() + 0.1*
M_UNIT, pText->height() + 0.1*
M_UNIT) );
140 _baloon.setMouthPos( pAO->getPosition() );
141 _baloon.setAnimText(pText);
150 rpgSkillsInventory *laObj_TerminalInterface::_skills_inventory(){
151 return &( _player_sheet()->properties()->skills );
154 void laObj_TerminalInterface::_init_skills()
156 double h = laSystemIntegrator::getSettings()->graphics_resolution_h;
158 rpgSkillsInventory* psi = _skills_inventory();
159 unsigned nLevel = _player_sheet()->properties()->nLevel;
161 unsigned col=0, row=0;
166 for(
unsigned i=0; i< psi->size(); i++)
168 rpgSkill* pSkill = psi->skill(i);
170 if( nLevel >= pSkill->prerequisite() )
172 _vSkillWindows.push_back(
new uiContainer_SkillInfo() );
173 _vSkillWindows[i]->load( pSkill, col, row );
177 nRow_Max = h / ( TERMI_SPACING + _vSkillWindows[i]->getSize().y() + TERMI_OFFSET ) + 1;
180 if(row>=nRow_Max) { row=0; col++; nCol_Max++; };
186 ASSERT(psi->size(),
"0 skills registered.");
187 _vSkillWindows[0]->select(M_TRUE);
190 laObj_TerminalInterface::~laObj_TerminalInterface(
void)
192 rpgSkillsInventory* psi = _skills_inventory();
194 for(
unsigned i=0; i< psi->size(); i++)
195 delete _vSkillWindows[i];
200 void laObj_TerminalInterface::drawGeometry(
laRenderer *r, laPoint3 ptBasePos)
204 void laObj_TerminalInterface::drawFx(
laRenderer *r, laPoint3 ptBasePos)
207 r->transTranslate( ptBasePos );
209 _baloon.mode3D(M_TRUE);
216 void laObj_TerminalInterface::drawInterface(
laRenderer *r, laPoint3 ptBasePos)
222 glEnable(GL_STENCIL_TEST);
223 glStencilFunc(GL_ALWAYS, 1 , 0xFFF );
224 glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
225 glDisable(GL_DEPTH_TEST);
227 if( (pText->currentEmotion()==1) || _bProceed)
228 for(
unsigned i=0; i<_vSkillWindows.size(); i++)
229 _vSkillWindows[i]->draw();
235 char str1[] =
"[Use Arrows to Select a Skill]";
236 char str2[] =
"[Press ENTER to Train]";
237 char str3[] =
"[Press ENTER to Quit Terminal]";
238 char str4[] =
"[Press Q to Quit Terminal]";
240 double w = laSystemIntegrator::getSettings()->graphics_resolution_w;
241 double h = laSystemIntegrator::getSettings()->graphics_resolution_h;
246 laSystemIntegrator::getRenderer()->
font(
"plain")->ctlSize( 15 );
247 laSystemIntegrator::getRenderer()->
font(
"plain")->ctlAlignV(
M_AM);
248 laSystemIntegrator::getRenderer()->
font(
"plain")->ctlAlignH(
M_AC);
250 r->styleSet(laColor(50,50,50,255));
252 if(_bProceed) laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-50+2), str3 );
253 else if(pText->currentEmotion()==1)
255 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-80+2), str1 );
256 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-60+2), str2 );
257 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-20+2), str4 );
261 r->styleSet(laColor(255,255,255,255));
263 if(_bProceed) laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-50+2), str3 );
264 else if(pText->currentEmotion()==1)
266 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2, h-80), str1);
267 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2, h-60), str2);
268 laSystemIntegrator::getRenderer()->
font(
"plain")->draw(laPoint3(w/2+2, h-20+2), str4 );
274 glDisable(GL_STENCIL_TEST);
279 void laObj_TerminalInterface::animate(laTimer &t)
283 if( (pText->currentEmotion()==0) || (_bProceed) ) pText->animate(t);
285 if( (pText->currentEmotion()==1) || _bProceed)
286 for(
unsigned i=0; i<_vSkillWindows.size(); i++)
287 _vSkillWindows[i]->reply();
290 mkEnter.animate(pi, t);
292 if(mkEnter.isActivated())
298 if(pText->currentEmotion()==1)
300 _upgrade_skill(_vSkillWindows[nSel]->getSkill());
305 _vSkillWindows[nSel]->select(M_FALSE);
309 else _bCompleted = M_TRUE;
312 if(in::key(KEY_Q)) _bCompleted = M_TRUE;
314 if(pText->currentEmotion()==1)
322 if(mkL.isActivated())
329 if(mkR.isActivated())
336 if(mkU.isActivated())
343 if(mkD.isActivated())
352 void laObj_TerminalInterface::_update_sel()
359 if(nCol>=nCol_Max) nCol = nCol_Max-1;
360 if(nRow>=nRow_Max) nRow = nRow_Max-1;
362 if( nCol==(nCol_Max-1) && (nRow >= nRow_Min) ) nRow = nRow_Min-1;
366 _vSkillWindows[nSel]->select(M_FALSE);
368 nSel = nCol*nRow_Max + nRow;
369 _vSkillWindows[nSel]->select(M_TRUE);
372 void laObj_TerminalInterface::_upgrade_skill(rpgSkill *pSkill)
374 rpgSkillsInventory* psi = _skills_inventory();
376 if( psi->skill(nSel)->getCurrentIndex() + 1 < psi->skill(nSel)->getUpgradeCount() )
381 sprintf(strN,
"%d", nPoints--);
382 pText->replace(strN,
"%d", nPoints);
386 pPlayer->skillUp( nSel );
387 _player_sheet()->properties()->nTrainingPoints = nPoints;
laFont * font(char *strName)
Get a font renderer.
#define M_UNIT
Unit of 1 meter.
#define M_AM
Text align middle.
#define M_AL
Text align left.
#define M_AT
Text align top.
virtual void draw()
Display the window.
Object that can be activated by the player.
#define M_AC
Text align center.
Virtual interface for the Engine graphics renderer.
virtual void modeInterface()=0
Switch to interface rendering (2D projection mode)
virtual void reply()
Handle input message.
GUI icon object that can siplay 3D models as icons.