コード例 #1
0
bool CThunderCloud::isNearby(CSpriteObject &theObject)
{

	if( CPlayerLevel *player = dynamic_cast<CPlayerLevel*>(&theObject) )
	{
		const unsigned int cloudX = getXMidPos();
		const unsigned int playXLeft = player->getXMidPos() - DIST_TO_AWAKE;
		const unsigned int playXRight = player->getXMidPos() + DIST_TO_AWAKE;

		if( playXLeft < cloudX &&
				playXRight > cloudX )
		{
			if( getActionStatus(A_CLOUD_ASLEEP) && getProbability(180) )
				setAction(A_CLOUD_WAKING);
		}
		else
		{
			if( !getActionStatus(A_CLOUD_ASLEEP) )
			{
				setAction(A_CLOUD_ASLEEP);
				setActionSprite();
				return true;
			}

		}


		if( getActionStatus(A_CLOUD_WAKING) )
		{
			if( player->getXMidPos() < getXMidPos() )
				xDirection = LEFT;
			else
				xDirection = RIGHT;
		}
		
		if( getActionStatus(A_CLOUD_MOVING) )
		{

		if( mpBolt == nullptr && player->getYMidPos() > getYMidPos() )
		{		    
			const unsigned int playXStrikeLeft = player->getXMidPos() - DIST_TO_STRIKE;
			const unsigned int playXStrikeRight = player->getXMidPos() + DIST_TO_STRIKE;			

			if( playXStrikeLeft < cloudX &&
					playXStrikeRight > cloudX && (mTimer>TIME_TO_STRIKE_2 || (mSecondTry && mTimer>TIME_TO_STRIKE_1) ) )
			{
				mTimer = 0;
				mSecondTry = !mSecondTry;
				setAction(A_CLOUD_STRIKING);
				playSound(SOUND_THUNDERCLOUD_STRIKE);
                mpBolt = new CThunderBolt( mp_Map, getXLeftPos() + (12<<STC), getYDownPos() + (32<<STC), mSprVar );
				spawnObj( mpBolt );
			}
		}
		}
	}

	return true;
}
コード例 #2
0
CCouncilMember::CCouncilMember(CMap *pmap, Uint32 x, Uint32 y) :
CObject(pmap, x, y, OBJ_NONE)
{
	m_ActionBaseOffset = 0x1FB8;
	setActionForce(A_COUNCIL_MEMBER_MOVE);
	setActionSprite();
	calcBouncingBoxes();
}
コード例 #3
0
CBullet::CBullet(CMap *pmap, const Uint16 foeID, const Uint32 x, const Uint32 y,
                 const int xDir, const int yDir, const int sprVar) :
CGalaxySpriteObject(pmap, foeID, x, y, sprVar),
mReversed(false)
{
	xDirection = xDir;
	yDirection = yDir;

	const size_t ep = g_pBehaviorEngine->getEpisode();

	setupGalaxyObjectOnMap(bulletActionMap[ep-4], A_KEENSHOT_MOVING);
	setActionSprite();
	calcBoundingBoxes();
	playSound( SOUND_KEEN_FIRE );
}
コード例 #4
0
void CThunderCloud::processStriking()
{
	if( getActionStatus(A_CLOUD_STRIKING+1) )
	{
		setAction(A_CLOUD_STRIKING);
	}

	if( mpBolt == NULL && mTimer > STRIKE_TIME)
	{
	    mTimer = 0;
	    setAction(A_CLOUD_MOVING);
	    setActionSprite();
	}

}
コード例 #5
0
ファイル: CBullet.cpp プロジェクト: Shayster/Commander-Genius
CBullet::CBullet(CMap *pmap, const Uint32 x, const Uint32 y, const direction_t dir) :
    CObject(pmap, x, y, OBJ_RAY)
{
    m_hDir = NONE;
    m_vDir = NONE;

    if(dir == LEFT || dir == RIGHT)
        m_hDir = dir;
    else if(dir == UP || dir == DOWN)
        m_vDir = dir;

    setupGalaxyObjectOnMap(0x1738, A_KEENSHOT_MOVING);
    setActionSprite();
    calcBouncingBoxes();
    playSound( SOUND_KEEN_FIRE );
}
コード例 #6
0
CSlicestar::CSlicestar(CMap *pmap, const Uint16 foeID, 
		       const Uint32 x, const Uint32 y, 
		       const bool useBlocker, direction_t horDir, 
		       direction_t verDir) :
CStunnable(pmap, foeID, x, y),
mUseBlocker(useBlocker)
{
	m_ActionBaseOffset = 0x23BC;
	
	xDirection = horDir;
	yDirection = verDir;
	
	setActionForce(A_SLICESTAR_MOVE);
	setActionSprite();
	calcBoundingBoxes();
}
コード例 #7
0
CRedShot::CRedShot(CMap* pmap, 
		   const Uint16 foeID, 
		   const Uint32 x, const Uint32 y, 
		   const int xDir, const int yDir) : 
CStunnable(pmap, foeID, x, y),
mTimer(0)
{
	xDirection = xDir;
	yDirection = yDir;
	
	mActionMap[A_REDSHOT_MOVE] = (GASOFctr) &CRedShot::processMove;
	mActionMap[A_REDSHOT_SMASH] = (GASOFctr) &CRedShot::smash;

	setupGalaxyObjectOnMap(0x27AC, A_REDSHOT_MOVE);
	setActionSprite();
	calcBoundingBoxes();
}
コード例 #8
0
ファイル: CBullet.cpp プロジェクト: mcmire/Commander-Genius
CBullet::CBullet(CMap *pmap, const Uint16 foeID, const Uint32 x, const Uint32 y, const int xDir, const int yDir) :
CGalaxySpriteObject(pmap, foeID, x, y)
{
	xDirection = xDir;
	yDirection = yDir;

	const size_t ep = g_pBehaviorEngine->getEpisode();

	setupGalaxyObjectOnMap(bulletActionMap[ep-4], A_KEENSHOT_MOVING);
	setActionSprite();
	calcBoundingBoxes();
	playSound( SOUND_KEEN_FIRE );
	
	// For testing sounds.
	/*g_pSound->playStereosoundSlot(slot, PLAY_NOW, 0);
	printf("Sound %d played!\n", slot-64);
	slot++;*/
}
コード例 #9
0
void CGalaxySpriteObject::setupGalaxyObjectOnMap(const size_t ActionBaseOffset,
						 const size_t ActionNumber )
{
	m_ActionBaseOffset = ActionBaseOffset;
	m_climbing = false;
	m_jumped = false;

	setActionForce(ActionNumber);

	setActionSprite();
	
	calcBoundingBoxes();
		
	alignToTile();
	
	performCollisions();
	
	if(!processActionRoutine())
			exists = false;
}
コード例 #10
0
CVarPlatform::CVarPlatform(CMap *pmap, const Uint16 foeID, Uint32 x, Uint32 y,
                           const direction_t horidir,
                           const direction_t vertdir,
                           const int actionOffset, const int sprVar) :
    CGalaxySpriteObject(pmap, foeID, x, y, sprVar),
    CPlatform(pmap, foeID, x, y),
    CMoveTarget(m_Pos, xDirection, yDirection)
{
    m_ActionBaseOffset = actionOffset;

    setActionForce(A_PLATFORM_MOVE);
    setActionSprite();

    xDirection = horidir;
    yDirection = vertdir;

    solid = false; // I think they must be false, because some plats like those in Keen6
    // should only obey to the set markers

    calcBoundingBoxes();
}
コード例 #11
0
/**
 * Called when Flag is flying to the pole
 */
void CFlag::processFlipping()
{
	if(m_Pos != m_destination)
	{        
        Vector2D<int> dir = m_destination - m_Pos;
        const float length = dir.GetLength();
        Vector2D<float> base_dir( dir.x/length, dir.y/length );

		if( fabs(length) < SPEED )
		{
			moveTo(m_destination);
		}
		else
		{
			moveDir(base_dir*SPEED);
		}
	}
	else
	{
	    setAction(A_FLAG_WAVE);        
	    setActionSprite();
	    g_pSound->playSound( SOUND_FLAG_LAND );
	    
	    const auto episode = gpBehaviorEngine->getEpisode();
        if(episode == 6)
        {
            Vector2D<int> tilePos = m_Pos;

            tilePos.y = getYDownPos();

            Uint32 new_tile_no = mp_Map->getPlaneDataAt(1, tilePos)+1;
            tilePos = tilePos>>CSF;
            mp_Map->setTile(tilePos.x, tilePos.y, new_tile_no, true);
        }
        mp_Map->unlock();
	}