35 #include "Core-Level-JR.h"
42 laMonster::laMonster(
void):
45 _dDeltaL = _dDeltaR =
M_UNIT;
49 _IndicatorAttack.setColor(laColor(200,200,200));
50 _IndicatorAttack.setSize(M_HPBAR_W, M_HPBAR_H/2);
51 _IndicatorAttack.setMaxValue( 1 );
54 _bAgressiveMode = M_TRUE;
55 enableBattleGUI(M_TRUE);
56 enableNPCGUI(M_FALSE);
59 laMonster::~laMonster(
void) {
64 void laMonster::respawn()
66 laFightingCreature::respawn();
77 laFightingCreature::load(fp);
81 fp->readDouble(&_dDeltaL);
82 fp->readDouble(&_dDeltaR);
92 _IndicatorHP.setColor(laColor(200,0,0));
93 _IndicatorHP.setSize(M_HPBAR_W, M_HPBAR_H);
94 _IndicatorHP.setMaxValue( ((rpgSheet_Fighter*)_pSheet)->properties()->nHP_Max );
96 if(_texInRange.id()==NULL)
97 _texInRange.load(
"gui\\within_range_marker.png",
M_TEX_TMAP);
99 if(_texNPCInRange.id()==NULL)
100 _texNPCInRange.load(
"gui\\within_range_marker_NPC.gif");
103 _fxTrail.enable(M_FALSE);
110 void laMonster::_execute_ai(laTimer &t)
114 laLine2 ln(pPlayer->getPosition(), _ptPivot);
115 double dPlayer = ln.lenght();
117 if( (
M_ABS(pPlayer->getMonsterDistance() ) > dPlayer) && isAlive() )
119 if( _ptPivot.x() > pPlayer->getPivot()->x() ) pPlayer->setMonsterDistance(dPlayer);
120 else pPlayer->setMonsterDistance( -1*dPlayer );
125 if(
M_ABS( pPlayer->getPosition().y() - _ptPivot.y() ) <
M_UNIT*3 )
129 if( pPlayer->boundingRect().intersecting(boundingRect()) )
131 _ai.perceive(P__PLAYER_TOUCHED);
136 if( _isInRange(pPlayer,
this) && pPlayer->attackIsCharged() &&
137 (( (pPlayer->getFaceDirection()<0) && (pPlayer->getPosition().x()>_ptPivot.x()) )
138 || ( (pPlayer->getFaceDirection()>0) && (pPlayer->getPosition().x()<_ptPivot.x()) )) )
140 _ai.perceive(P__PLAYER_ATTACKS);
148 if( _isInRange(
this, pPlayer) )
150 _ai.perceive(P__PLAYER_IN_RANGE);
151 _ai.perceive(P__PLAYER_IN_TERRITORY);
157 if( (pPlayer->getPosition().x() >= (_ptOriginPos.x() - _dDeltaL)) &&
158 (pPlayer->getPosition().x() <= (_ptOriginPos.x() + _dDeltaR)) )
160 _ai.perceive(P__PLAYER_IN_TERRITORY);
166 laFightingCreature::_execute_ai(t);
176 rpgAttack atk = pAgressor->selectedAttack();
178 if(
M_ABS(pAgressor->getPosition().x() - pTarget->getPosition().x()) > atk.dRange )
return M_FALSE;
179 if(
M_ABS(pAgressor->getPosition().y() - pTarget->getPosition().y()) > 1.5 *
M_UNIT )
return M_FALSE;
186 void laMonster::_drawFx_positioned(
laRenderer *r)
192 laPoint3 ptCamAng = r->getCameraAngles();
195 r->transRotate(-1*ptCamAng.y(), laPoint3(0,1,0));
198 if(_bEnable_Battle_GUI) _draw_battle_gui(r);
199 if(_bEnable_NPC_GUI) _draw_npc_gui(r);
205 laFightingCreature::_drawFx_positioned(r);
210 void laMonster::drawInterface(
laRenderer *r, laPoint3 ptBasePos) {
211 laFightingCreature::drawInterface(r, ptBasePos);
216 void laMonster::_draw_battle_gui(
laRenderer *r)
220 laPoint3 pos(M_BATTLEICON_SZ/2, _ptPivot.size.y() + M_HPBAR_HOVER + M_HPBAR_H + M_BATTLEICON_SZ*1.1+ 0.24*
M_UNIT);
225 r->styleSet(laColor(255));
230 pos = laPoint3(M_HPBAR_W/2, _ptPivot.size.y() + M_HPBAR_HOVER + M_HPBAR_H + 0.24*
M_UNIT);
234 _IndicatorHP.value( ((rpgSheet_Fighter*)_pSheet)->properties()->nHP );
235 _IndicatorHP.draw(r, pos);
239 if( _ttAttackCharge.isEnabled() || _ttAttack.isEnabled() )
241 pos.y( pos.y() +
M_UNIT/6.0);
242 _IndicatorAttack.value( 1 - _ttAttackCharge.reminder() );
243 _IndicatorAttack.draw(r, pos);
251 laPoint3 pos(M_BATTLEICON_SZ/2, _ptPivot.size.y() + M_HPBAR_HOVER + M_HPBAR_H + M_BATTLEICON_SZ*1.1+ 0.24*
M_UNIT);
255 _texNPCInRange.use();
256 r->styleSet(laColor(255));
virtual void modeTexture(M_BOOL bOn)=0
Enable/disable texturing.
#define M_UNIT
Unit of 1 meter.
virtual void vquadsDrawSingle(laPoint2 *ar_uv=NULL)=0
Draw a single VQ (Note this is slower than drawing an array of VQ and should be avoided) ...
void vquadsMakeXYRect(unsigned nIndex, const laPoint3 &pos, const laPoint3 &sz, const laPoint2 &uv, const laPoint2 &uv_sz)
Makes a quad aligned to the XY plane; (handy for GUI rendering )
#define M_ABS(a)
Return abs(a)
virtual void modeDepthBuffer(M_BOOL bOn)=0
Enable/disable depth buffer.
Virtual interface for the Engine graphics renderer.
#define M_TEX_TMAP
Transparent texture with an alpha channel.