This commit is contained in:
Paul 2001-05-04 22:11:44 +00:00
parent 34ab293aa2
commit 257d9b1a67
2 changed files with 91 additions and 0 deletions

View file

@ -50,6 +50,14 @@
#include "player\psspring.h" #include "player\psspring.h"
#endif #endif
#ifndef __ENEMY_NPC_H__
#include "enemy\npc.h"
#endif
#ifndef __GAME_GAME_H__
#include "game\game.h"
#endif
/* Std Lib /* Std Lib
------- */ ------- */
@ -136,6 +144,9 @@ void CPlayerModeCoralBlower::enter()
Returns: Returns:
---------------------------------------------------------------------- */ ---------------------------------------------------------------------- */
int cbstate=0; int cbstate=0;
DVECTOR blowerCatchPos={-110,-20};
DVECTOR blowerCatchSize={180,150};
DVECTOR blowerSuckUpPoint={-40,-20};
void CPlayerModeCoralBlower::think() void CPlayerModeCoralBlower::think()
{ {
CPlayerModeBase::think(); CPlayerModeBase::think();
@ -146,6 +157,7 @@ void CPlayerModeCoralBlower::think()
if(getPadInputDown()&PI_ACTION&&getState()==STATE_IDLE) if(getPadInputDown()&PI_ACTION&&getState()==STATE_IDLE)
{ {
m_blowerState=BLOWER_STATE__SUCKING; m_blowerState=BLOWER_STATE__SUCKING;
m_enemy=NULL;
} }
break; break;
case BLOWER_STATE__SUCKING: case BLOWER_STATE__SUCKING:
@ -153,14 +165,70 @@ void CPlayerModeCoralBlower::think()
{ {
m_blowerState=BLOWER_STATE__EMPTY; m_blowerState=BLOWER_STATE__EMPTY;
} }
else if(m_enemy==NULL)
{
// Search for an enemy..
DVECTOR playerPos;
int playerFacing;
CRECT suckRect;
CThing *thing;
playerPos=m_player->getPos();
playerFacing=m_player->getFacing();
suckRect.x1=playerPos.vx+(blowerCatchPos.vx*playerFacing)-(blowerCatchSize.vx/2);
suckRect.y1=playerPos.vy+blowerCatchPos.vy-(blowerCatchSize.vy/2);
suckRect.x2=suckRect.x1+blowerCatchSize.vx;
suckRect.y2=suckRect.y1+blowerCatchSize.vy;
#ifdef __USER_paul__
{
CRECT area=suckRect;
DVECTOR ofs=CLevel::getCameraPos();
area.x1-=ofs.vx;
area.y1-=ofs.vy;
area.x2-=ofs.vx;
area.y2-=ofs.vy;
DrawLine(area.x1,area.y1,area.x2,area.y1,255,255,255,0);
DrawLine(area.x2,area.y1,area.x2,area.y2,255,255,255,0);
DrawLine(area.x2,area.y2,area.x1,area.y2,255,255,255,0);
DrawLine(area.x1,area.y2,area.x1,area.y1,255,255,255,0);
}
#endif
thing=CThingManager::checkCollisionAreaAgainstThings(&suckRect,CThing::TYPE_ENEMY,false);
while(thing)
{
if(((CNpcEnemy*)thing)->canBeSuckedUp())
{
m_enemy=(CNpcEnemy*)thing;
thing=NULL;
}
else
{
thing=CThingManager::checkCollisionAreaAgainstThings(&suckRect,CThing::TYPE_ENEMY,true);
}
}
}
else
{
// Got an enemy.. suck him up
if(m_enemy->suckUp(getSuckUpPoint(),1))
{
m_blowerState=BLOWER_STATE__FULL;
}
}
break; break;
case BLOWER_STATE__FULL: case BLOWER_STATE__FULL:
m_enemy->suckUp(getSuckUpPoint(),1);
if(getPadInputDown()&PI_ACTION&&getState()==STATE_IDLE) if(getPadInputDown()&PI_ACTION&&getState()==STATE_IDLE)
{ {
m_blowerState=BLOWER_STATE__AIMING; m_blowerState=BLOWER_STATE__AIMING;
} }
break; break;
case BLOWER_STATE__AIMING: case BLOWER_STATE__AIMING:
m_enemy->suckUp(getSuckUpPoint(),1);
if(getState()!=STATE_IDLE) if(getState()!=STATE_IDLE)
{ {
m_blowerState=BLOWER_STATE__FULL; m_blowerState=BLOWER_STATE__FULL;
@ -169,6 +237,7 @@ void CPlayerModeCoralBlower::think()
{ {
// Fire! // Fire!
m_blowerState=BLOWER_STATE__EMPTY; m_blowerState=BLOWER_STATE__EMPTY;
m_enemy->fireAsProjectile(1024+(1024*m_player->getFacing()));
} }
break; break;
} }
@ -221,5 +290,23 @@ CPlayerState **CPlayerModeCoralBlower::getStateTable()
return s_stateTable; return s_stateTable;
} }
/*----------------------------------------------------------------------
Function:
Purpose:
Params:
Returns:
---------------------------------------------------------------------- */
DVECTOR *CPlayerModeCoralBlower::getSuckUpPoint()
{
static DVECTOR suckUpPoint;
suckUpPoint=getPlayerPos();
suckUpPoint.vx+=blowerSuckUpPoint.vx*m_player->getFacing();
suckUpPoint.vy+=blowerSuckUpPoint.vy;
return &suckUpPoint;
}
/*=========================================================================== /*===========================================================================
end */ end */

View file

@ -55,7 +55,11 @@ private:
BLOWER_STATE__AIMING, BLOWER_STATE__AIMING,
} BlowerState; } BlowerState;
DVECTOR *getSuckUpPoint();
BlowerState m_blowerState; BlowerState m_blowerState;
class CNpcEnemy *m_enemy;
}; };