34 #define M_ICON_SPACING 5
35 #define M_RESIZE_SPEED 100
37 uiInventory::uiInventory(rpgInventory* pi)
42 create(laPoint3(), laPoint3());
45 _mkPrevious.set(KEY_LBRACKET, 1,1);
46 _mkNext.set(KEY_RBRACKET, 1,1);
48 _bEnableSelection = _bHorizontal = M_TRUE;
51 uiInventory::~uiInventory(
void)
58 _lazy_create_all_icons();
62 laRenderer *pr = laSystemIntegrator::getRenderer();
63 rpgInventory::iterator i;
66 pr->transTranslate(
_ptPos + laPoint3( getDecorationSize().x(), getDecorationSize().y()*0.8) );
72 for(i=_pInventory->begin(); i!=_pInventory->end(); i++)
78 pIcon->
move( laPoint3(offset, 10) );
79 offset += pIcon->getSize().x() + M_ICON_SPACING;
83 pIcon->
move( laPoint3(0, offset));
84 offset += pIcon->getSize().y() + M_ICON_SPACING;
96 _lazy_create_all_icons();
101 for(rpgInventory::iterator i=_pInventory->begin(); i!=_pInventory->end(); i++)
102 (*i)->pIcon->reply();
106 if(_bEnableSelection) _reply_to_keyboard();
108 if(_bHorizontal) _reply_to_resize_h();
109 else _reply_to_resize_v();
114 void uiInventory::_reply_to_keyboard()
117 laTimer* pt = laSystemIntegrator::getEnvironment()->
getTimer();
121 if( _mkPrevious.animate(pi, *pt) )
124 select( selection() - 1);
127 if( _mkNext.animate(pi, *pt) )
130 select( selection() + 1);
133 if(pi->key(KEY_1) && (_pInventory->size()>=1) ) select(0);
134 if(pi->key(KEY_2) && (_pInventory->size()>=2) ) select(1);
135 if(pi->key(KEY_3) && (_pInventory->size()>=3) ) select(2);
136 if(pi->key(KEY_4) && (_pInventory->size()>=4) ) select(3);
137 if(pi->key(KEY_5) && (_pInventory->size()>=5) ) select(4);
138 if(pi->key(KEY_6) && (_pInventory->size()>=6) ) select(5);
139 if(pi->key(KEY_7) && (_pInventory->size()>=7) ) select(6);
140 if(pi->key(KEY_8) && (_pInventory->size()>=8) ) select(7);
141 if(pi->key(KEY_9) && (_pInventory->size()>=9) ) select(8);
142 if(pi->key(KEY_0) && (_pInventory->size()>=10) ) select(9);
146 if( (_nSelected < _pInventory->size()) && (_bEnableSelection) )
148 _lazy_create_icon( _pInventory->at(_nSelected) );
149 _pInventory->at(_nSelected)->pIcon->select();
150 _pInventory->activate(_nSelected);
152 caption.setText( _pInventory->at(_nSelected)->strName );
156 void uiInventory::_reply_to_resize_h()
159 laTimer* pt = laSystemIntegrator::getEnvironment()->
getTimer();
160 rpgInventory::iterator i;
167 for(i=_pInventory->begin(); i!=_pInventory->end(); i++)
169 _ptNewSize[0] += (*i)->pIcon->getSize().x();
170 if( (*i)->pIcon->getSize().y() > _ptNewSize.y()) _ptNewSize[1] = (*i)->pIcon->getSize().y();
173 _ptNewSize += laPoint3(tangle.w*2, tangle.h*2);
177 if( _ptNewSize.x() -
_ptSize.x() > 1 )
_ptSize[0] += M_RESIZE_SPEED*pt->delta();
178 else if( _ptNewSize.x() -
_ptSize.x() < -1 )
_ptSize[0] -= M_RESIZE_SPEED*pt->delta();
180 _ptSize[0] = M_MAX(
_ptSize.x(), tangle.w*2 + _pSkin->parameter(
"TX_ICON3D_SEL").texture().w);
181 _ptSize[1] = M_MAX(_ptNewSize.y(), tangle.h*2 + _pSkin->parameter(
"TX_ICON3D_SEL").texture().h);
186 void uiInventory::_reply_to_resize_v()
189 laTimer* pt = laSystemIntegrator::getEnvironment()->
getTimer();
190 rpgInventory::iterator i;
197 for(i=_pInventory->begin(); i!=_pInventory->end(); i++)
199 if( (*i)->pIcon->getSize().x() > _ptNewSize.x()) _ptNewSize[0] = (*i)->pIcon->getSize().x();
201 _ptNewSize[1] += (*i)->pIcon->getSize().y();
205 _ptNewSize += laPoint3(tangle.w*2, tangle.h*2);
209 if( _ptNewSize.x() - _ptSize.x() > 1 ) _ptSize[0] += M_RESIZE_SPEED*pt->delta();
210 else if( _ptNewSize.x() - _ptSize.x() < -1 ) _ptSize[0] -= M_RESIZE_SPEED*pt->delta();
212 if( _ptNewSize.y() - _ptSize.y() > 1 ) _ptSize[1] += M_RESIZE_SPEED*pt->delta();
213 else if( _ptNewSize.y() - _ptSize.y() < -1 ) _ptSize[1] -= M_RESIZE_SPEED*pt->delta();
219 void uiInventory::_lazy_create_icon( rpgItem *ps )
221 if( ! ( ps->pIcon ) )
223 MLOG(
"Creating icon for '%s'", ps->strName);
226 MLOG(
"Icon created.");
229 ASSERT(ps->pIcon,
"Nil icon");
234 void uiInventory::_lazy_create_all_icons()
236 rpgInventory::iterator i;
238 for(i=_pInventory->begin(); i!=_pInventory->end(); i++) {
239 _lazy_create_icon(*i);
243 void uiInventory::select(
int n )
245 if(! _bEnableSelection )
return;
247 if( n < 0) n = _pInventory->size() - 1;
248 else if( n >= _pInventory->size()) n = 0;
250 _lazy_create_icon( _pInventory->at(_nSelected) );
251 _lazy_create_icon( _pInventory->at(n) );
253 _pInventory->at(_nSelected)->pIcon->select(M_FALSE);
255 _pInventory->at(_nSelected)->pIcon->select();
259 uiIcon3D* uiInventory::getIcon(
unsigned n)
261 ASSERT(_pInventory,
"Nil inventory" );
262 ASSERT(n < _pInventory->size(),
"Icon out of bounds", n );
263 ASSERT(_pInventory->at(n)->pIcon,
"Nil icon" );
265 return _pInventory->at(n)->pIcon;
laPoint3 _ptPos
Windos position (relative to parent)
laTimer * getTimer()
Get inegrated timer.
virtual void move(laPoint3 ptNewPos, unsigned nHReference=M_AL, unsigned nVReference=M_AT)
Change window position.
virtual void create(laPoint3 pos, laPoint3 size)
Create new empty window.
laPoint3 _ptSize
Window size.
virtual void draw()
Display the window.
virtual void reply()
Handle input message.
Virtual interface for the Engine graphics renderer.
virtual void draw()
Display the window.
virtual void reply()
Handle input message.
GUI icon object that can siplay 3D models as icons.
virtual void draw()
Display the window.