Esempio n. 1
0
bool CRoboRed::isNearby(CSpriteObject &theObject)
{
    if( dynamic_cast<CPlayerLevel*>(&theObject) )
    {
        mLookTimer++;
        if(mLookTimer < TIME_UNTIL_LOOK)
            return true;

        mLookTimer = 0;

        mKeenNearby = false;

        const int objX = theObject.getXMidPos();
        const int roboX = getXMidPos();
        const int dx = objX - roboX;

        if( theObject.getYDownPos() > getYUpPos() && theObject.getYUpPos() < getYDownPos() )
        {
            if(getActionNumber(A_RED_PAUSE))
            {
                if( theObject.getXMidPos() < getXMidPos() )
                    xDirection = LEFT;
                else
                    xDirection = RIGHT;
            }

            if( std::abs(dx) < CSF_DISTANCE_TO_SHOOT )
            {
                mKeenNearby = true;
            }
        }
    }

    return true;
}
Esempio n. 2
0
bool CShelly::isNearby(CSpriteObject &theObject)
{
	if( CPlayerLevel *player = dynamic_cast<CPlayerLevel*>(&theObject) )
	{
		if( player->getXMidPos() < getXMidPos() )
			mKeenAlignment = LEFT;
		else
			mKeenAlignment = RIGHT;
		
		
		const int objX = theObject.getXMidPos();
		const int objY = theObject.getYMidPos();
		const int shellyX = getXMidPos();
		const int shellyY = getYMidPos();
		
		mGoodJumpChance = false;
		
		if( objX < shellyX - CSF_DISTANCE_TO_JUMP ||
			objX > shellyX + CSF_DISTANCE_TO_JUMP )
			return false;

		if( objY < shellyY - CSF_DISTANCE_TO_JUMP ||
			objY > shellyY + CSF_DISTANCE_TO_JUMP )
			return false;
		
		mGoodJumpChance = true;
	}
	
	return true;
}
bool CBlooguard::isNearby(CSpriteObject& theObject)
{
    if( CPlayerLevel *player = dynamic_cast<CPlayerLevel*>(&theObject) )
    {
		const int objX = theObject.getXMidPos();
		const int objY = theObject.getYMidPos();
		const int blooguardX = getXMidPos();
		const int blooguardY = getYMidPos();
		
		// Code for setting player stunned here!
		if(mStubPlayer)
		{
		    mStubPlayer = false;
		    if(player->stun())
		    {
		      player->m_camera.m_relcam.y = (8<<CSF);
		    }
		    
		    return true;
		}
		
		mGoodClubChance = false;
		
		if( objX < blooguardX - CSF_DISTANCE_TO_CLUB ||
			objX > blooguardX + CSF_DISTANCE_TO_CLUB )
			return false;

		if( objY < blooguardY - CSF_DISTANCE_TO_CLUB ||
			objY > blooguardY + CSF_DISTANCE_TO_CLUB )
			return false;
		
		mGoodClubChance = true;
    }
    return true;
}
Esempio n. 4
0
bool CSparky::isNearby(CSpriteObject &theObject)
{
	if( !getProbability(10) )
		return false;

	if( CPlayerLevel *player = dynamic_cast<CPlayerLevel*>(&theObject) )
	{
		if( player->getXMidPos() < getXMidPos() )
			mKeenAlignment = LEFT;
		else
			mKeenAlignment = RIGHT;
		
		
		const int objX = theObject.getXMidPos();
		const int objY = theObject.getYMidPos();
		const int sparkyX = getXMidPos();
		const int sparkyY = getYMidPos();
		
		mGoodChargeChance = false;
		
		if( objX < sparkyX - CSF_DISTANCE_TO_FOLLOW ||
			objX > sparkyX + CSF_DISTANCE_TO_FOLLOW )
			return false;

		if( objY < sparkyY - CSF_DISTANCE_TO_FOLLOW ||
			objY > sparkyY + CSF_DISTANCE_TO_FOLLOW )
			return false;
		
		mGoodChargeChance = true;
	}

	return true;
}
Esempio n. 5
0
bool CDopeFish::isNearby(CSpriteObject &theObject)
{
	if( dynamic_cast<CPlayerBase*>(&theObject) ||
		dynamic_cast<CSchoolFish*>(&theObject) )
	{
		const int objX = theObject.getXMidPos();
		const int objY = theObject.getYMidPos();
		const int fishX = getXMidPos();
		const int fishY = getYMidPos();
		const int dx = objX - fishX;
		const int dy = objY - fishY;


		if( objX < fishX - CSF_DISTANCE_TO_FOLLOW ||
			objX > fishX + CSF_DISTANCE_TO_FOLLOW )
			return false;

		if( objY < fishY - CSF_DISTANCE_TO_FOLLOW ||
			objY > fishY + CSF_DISTANCE_TO_FOLLOW )
			return false;


		if( dx<-CSF_DISTANCE_TO_FOLLOW_TOLERANCE )
			xDirection = LEFT;
		else if( dx>+CSF_DISTANCE_TO_FOLLOW_TOLERANCE )
			xDirection = RIGHT;

		if( dy<-CSF_DISTANCE_TO_FOLLOW_TOLERANCE )
			yDirection = (rand()%5) ? UP : DOWN;
		else if( dy>+CSF_DISTANCE_TO_FOLLOW_TOLERANCE )
			yDirection = (rand()%5) ? DOWN : UP;

		if(getActionNumber(A_DOPEFISH_SWIM))
		{
			int absdx = (dx<0) ? -dx : dx;
			int absdy = (dy<0) ? -dy : dy;

			if( absdx < CSF_MIN_DISTANCE_TO_CHARGE &&
			    absdy < CSF_MIN_DISTANCE_TO_CHARGE )
			{
				setAction(A_DOPEFISH_EAT);
				mp_processState = &CDopeFish::processEat;
				m_eatTimer = DOPE_EAT_TIMER;
			}
		}

	}

	return true;
}