40 aiMobState::aiMobState()
43 _pProximitySound = NULL;
45 _bIsSelected = M_FALSE;
52 _pTouchSound = laSystemIntegrator::getSound()->soundCreate(
"sound\\mon_die(rattlesnake).mp3");
53 _pProximitySound = laSystemIntegrator::getSound()->soundCreate(
"sound\\mon_proximity(rattlesnake).mp3");
58 void aiMobState::perceive(
unsigned state, M_BOOL global,
unsigned id, aiPerceptData data)
69 case P__PLAYER_DISTANCE:
70 if( (state==PERCEPT_SET) || (state==PERCEPT_HOLD) )
72 this->perceive_Distance( data.dData );
73 _dPlayerDistance = data.dData;
77 case P__PLAYER_IN_TERRITORY:
78 this->perceive_InTerritory(state);
81 case P__PLAYER_IN_RANGE:
82 this->perceive_InRange(state);
85 case P__PLAYER_TOUCHED:
86 this->perceive_Touched(state);
89 case P__PLAYER_ATTACKS:
90 this->perceive_UnderAttack(state);
97 void aiMobState::perceive_Touched(
unsigned state)
102 if(! pMonster->isAlive() )
return;
109 if(state == PERCEPT_SET)
111 pPlayer->reflect( pMonster->boundingRect() );
112 pMonster->attack(M_MATTACK_TOUCH, pPlayer);
115 if(_pTouchSound) _pTouchSound->play();
121 void aiMobState::perceive_UnderAttack(
unsigned state)
126 if( ! pMonster->isAlive() )
return;
128 if(state == PERCEPT_SET)
132 if( pMonster->isAlive() )
134 if(pPlayer->attackIsQuick())
135 pPlayer->attack(M_PLAYER_ATTACK_QUICK, pMonster);
137 pPlayer->attack(M_PLAYER_ATTACK_BASIC, pMonster);
142 if( ! pMonster->isAlive() )
145 laPoint3 bmin = ptso->getModel(M_STATE_DIE)->boundaryMin();
146 laPoint3 bmax = ptso->getModel(M_STATE_DIE)->boundaryMax();
147 double deadH = bmax.y() - bmin.y();
149 _spawn_crystal( pMonster->getPosition() + laPoint3(0,-deadH/2,0) );
154 void aiMobState::_spawn_crystal( laPoint3 pos )
158 laLevel* pLevel = pMonster->getLevelObject();
160 laElement* pTSObject = pMonster->getObject();
165 unsigned nElementIndex = pTS->getElementIndex(
"loot crystal");
167 pBraveryCrystal->setObject(nElementIndex, (
laElement*)pTS->getElement(nElementIndex));
168 pBraveryCrystal->setTS(pTS);
169 pBraveryCrystal->setLevel(pLevel);
170 pBraveryCrystal->create( pos );
172 pMonster->nestedAdd( pBraveryCrystal );
176 void aiMobState::_select_creature(M_BOOL on)
180 if(! pMonster->isAlive() )
return;
182 if(_bIsSelected != on)
188 pMonster->setOutline(
laOutline(M_TRUE, laColor(255,200,200), 1.5) );
189 if(_pProximitySound) _pProximitySound->play();
192 pMonster->setOutline(
laOutline(M_TRUE, laColor(), 1) );
196 M_BOOL aiMobState::_within_left_range()
200 if( (pMonster->getOriginalPos().x() - pMonster->getPosition().x() ) > pMonster->getLeftRange() )
205 M_BOOL aiMobState::_within_right_range()
209 if( (pMonster->getPosition().x() - pMonster->getOriginalPos().x() ) > pMonster->getRightRange() )
Base Class for Tileset Elements.
Object outline properties.
Adds capabilities and percepts specific to monster creatures.
Collectable Level Object.