//-----------------------------------------------------------------------------
// Purpose: 
//-----------------------------------------------------------------------------
void CTFCompoundBow::WeaponIdle( void )
{
	CTFPlayer *pOwner = GetTFPlayerOwner();

	if ( m_flChargeBeginTime > 0 && pOwner->GetAmmoCount( GetPrimaryAmmoType() ) > 0 )
	{
		FireArrow();
	}
	else
	{
		BaseClass::WeaponIdle();
	}
}
Esempio n. 2
0
	void Robot::OnKeyPress(int a_iKey)
	{
		bool bMoved = false; // Will determine if the player moves this step or not
		char cTemp = NULL; // Will hold the tile value the user wants to mark as questionable 

		Clear();

		System::Print("Turn        : <- or ->", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Move Forward: Up Arrow", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Mark Tile   : W - Wumpus | P - Pit | G - Gold", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Clear Mark  : X - Clear", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Shoot Arrow : F - Fire", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;
		System::Print("Shoot Arrow : F - Fire", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;

		switch (a_iKey)
		{
		case VK_LEFT: ++m_iFacing; break;
		case VK_RIGHT: --m_iFacing; break;
		case VK_UP:
		{
			if (m_iFacing == DIRECTION::UP)
				--m_iPosY;
			if (m_iFacing == DIRECTION::LEFT)
				--m_iPosX;
			if (m_iFacing == DIRECTION::DOWN)
				++m_iPosY;
			if (m_iFacing == DIRECTION::RIGHT)
				++m_iPosX;

			bMoved = true;

			break;
		}

		case 0x57: cTemp = TILE::WUMPUS_Q; break; // W Key
		case 0x50: cTemp = TILE::PIT_Q; break; // P Key
		case 0x47: cTemp = TILE::GOLD_Q; break; // G Key
		case 0x58: cTemp = TILE::EMPTY; break; // X Key

		case 0x46: FireArrow(); break; // F Key

		default: break;
		}

		if (cTemp > 0)
		{
			switch (m_iFacing)
			{
			case DIRECTION::UP:	m_oPercievedGrid.m_vcGrid[m_iPosX][m_iPosY - 1] = cTemp; break;
			case DIRECTION::LEFT: m_oPercievedGrid.m_vcGrid[m_iPosX - 1][m_iPosY] = cTemp; break;
			case DIRECTION::DOWN: m_oPercievedGrid.m_vcGrid[m_iPosX][m_iPosY + 1] = cTemp; break;
			case DIRECTION::RIGHT:	m_oPercievedGrid.m_vcGrid[m_iPosX + 1][m_iPosY] = cTemp; break;
			}
		}

		if (!Collision())
		{
			m_oPercievedGrid.Draw();
			Draw();

			if (bMoved && !m_bHasGold)
				RecieveSignal();
		}
	}
Esempio n. 3
0
	void Robot::Handle()
	{
		Clear();

		System::ShowCursor(); // Shows the console cursor
		System::Print("Capitalization does *not* matter", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;
		System::Print("Face:  N / North | S / South | E / East | W / West", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Move:   U / Up   | M / Move  |  Forward |  Walk", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Mark:   Wumpus   |    Pit    |   Gold   |  Clear", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("Arrow: F / Fire  | A / Arrow |   Shoot  |  Kill", PRINT_WIDTH, PRINT_POSX, m_iPrintLine++);
		System::Print("--------------------------------------------------", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;

		System::Print("Position:", PRINT_WIDTH, PRINT_POSX, m_iPrintLine);
		System::SetCursor(PRINT_POSX + 10, m_iPrintLine, 0);
		printf_s("%d : %d", m_iPosX, m_iPosY); m_iPrintLine += 2;

		System::Print("What will you do?", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;
		System::Print(">> ", PRINT_WIDTH, PRINT_POSX, m_iPrintLine); m_iPrintLine += 2;

		char cBuffer[256]; // Will hold user input to be parsed later
		System::ShowCursor();
		std::cin.getline(cBuffer, 256);
		System::ToLower(cBuffer, 256); // Will convert the input string to all lower case letters

		if (!strcmp(cBuffer, "n") || !strcmp(cBuffer, "north"))
			m_iFacing = DIRECTION::UP;
		if (!strcmp(cBuffer, "w") || !strcmp(cBuffer, "west"))
			m_iFacing = DIRECTION::LEFT;
		if (!strcmp(cBuffer, "s") || !strcmp(cBuffer, "south"))
			m_iFacing = DIRECTION::DOWN;
		if (!strcmp(cBuffer, "e") || !strcmp(cBuffer, "east"))
			m_iFacing = DIRECTION::RIGHT;

		bool bMoved = false; // If the player moves, this value will be set to true and the screen will be redrawn
		if (!strcmp(cBuffer, "u") || !strcmp(cBuffer, "up") ||
			!strcmp(cBuffer, "m") || !strcmp(cBuffer, "move") ||
			!strcmp(cBuffer, "forward") ||
			!strcmp(cBuffer, "walk"))
		{
			System::SetCursor(m_iPosX, m_iPosY, 0); std::cout << m_oGrid.m_vcGrid[m_iPosX][m_iPosY];
			switch (m_iFacing)
			{
			case DIRECTION::UP: --m_iPosY; break;
			case DIRECTION::LEFT: --m_iPosX; break;
			case DIRECTION::DOWN: ++m_iPosY; break;
			case DIRECTION::RIGHT: ++m_iPosX; break;
			}
			bMoved = true;
			Collision();
		}

		char cTemp = NULL; // Will hold the tile value the user wants to mark as questionable
		if (!strcmp(cBuffer, "wumpus"))
			cTemp = TILE::WUMPUS_Q;
		if (!strcmp(cBuffer, "pit"))
			cTemp = TILE::PIT_Q;
		if (!strcmp(cBuffer, "gold"))
			cTemp = TILE::GOLD_Q;
		if (!strcmp(cBuffer, "clear"))
			cTemp = TILE::EMPTY;

		if (!strcmp(cBuffer, "f") || !strcmp(cBuffer, "fire") ||
			!strcmp(cBuffer, "a") || !strcmp(cBuffer, "arrow") ||
			!strcmp(cBuffer, "shoot") ||
			!strcmp(cBuffer, "kill"))
			FireArrow(); // Attempts to shoot the Wumpus

		if (cTemp > 0) // If the user wants to mark a tile as a possible trap...
		{
			switch (m_iFacing) // Check the tile they want to mark
			{
			case DIRECTION::UP:	m_oPercievedGrid.m_vcGrid[m_iPosX][m_iPosY - 1] = cTemp; break;
			case DIRECTION::LEFT: m_oPercievedGrid.m_vcGrid[m_iPosX - 1][m_iPosY] = cTemp; break;
			case DIRECTION::DOWN: m_oPercievedGrid.m_vcGrid[m_iPosX][m_iPosY + 1] = cTemp; break;
			case DIRECTION::RIGHT:	m_oPercievedGrid.m_vcGrid[m_iPosX + 1][m_iPosY] = cTemp; break;
			}
		}

		m_oPercievedGrid.Draw();
		Draw();

		if (bMoved && !m_bHasGold)
			RecieveSignal();
	}
Esempio n. 4
0
CBaseEntity *CTFWeaponBaseGun::FireProjectile( CTFPlayer *pPlayer )
{
	int iProjectile = TF_PROJECTILE_NONE;

	CALL_ATTRIB_HOOK_INT( iProjectile, override_projectile_type );

	if ( !iProjectile )
		iProjectile = m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_iProjectile;

	CBaseEntity *pProjectile = NULL;

	switch( iProjectile )
	{
	case TF_PROJECTILE_BULLET:
		FireBullet( pPlayer );
		break;

	case TF_PROJECTILE_ROCKET:
		pProjectile = FireRocket( pPlayer );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_SYRINGE:
	case TF_PROJECTILE_NAIL:
		pProjectile = FireNail( pPlayer, iProjectile );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_DART:
		pProjectile = FireNail(pPlayer, iProjectile);
		pPlayer->DoAnimationEvent(PLAYERANIMEVENT_ATTACK_PRIMARY);
		break;

	case TF_PROJECTILE_PIPEBOMB:
	case TF_PROJECTILE_CANNONBALL:
		pProjectile = FireGrenade( pPlayer, iProjectile );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_PIPEBOMB_REMOTE:
	case TF_PROJECTILE_PIPEBOMB_REMOTE_PRACTICE:
		pProjectile = FireGrenade( pPlayer, iProjectile );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_FLARE:
		pProjectile = FireFlare( pPlayer );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_MIRV:
		pProjectile = FireGrenade( pPlayer, iProjectile );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_JAR:
	case TF_PROJECTILE_JAR_MILK:
	case TF_PROJECTILE_CLEAVER:
	case TF_PROJECTILE_THROWABLE:
	case TF_PROJECTILE_FESTITIVE_URINE:
	case TF_PROJECTILE_BREADMONSTER_JARATE:
	case TF_PROJECTILE_BREADMONSTER_MADMILK:
		// TO-DO: Implement 'grenade' support
		break;

	case TF_PROJECTILE_ARROW:
	case TF_PROJECTILE_HEALING_BOLT:
	case TF_PROJECTILE_BUILDING_REPAIR_BOLT:
	case TF_PROJECTILE_FESTITIVE_ARROW:
	case TF_PROJECTILE_FESTITIVE_HEALING_BOLT:
	case TF_PROJECTILE_GRAPPLINGHOOK:
		pProjectile = FireArrow( pPlayer, iProjectile );
		pPlayer->DoAnimationEvent( PLAYERANIMEVENT_ATTACK_PRIMARY );
		break;

	case TF_PROJECTILE_NONE:
	default:
		// do nothing!
		DevMsg( "Weapon does not have a projectile type set\n" );
		break;
	}

	if ( UsesClipsForAmmo1() )
	{
		m_iClip1 -= m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_iAmmoPerShot;
	}
	else
	{
		if ( m_iWeaponMode == TF_WEAPON_PRIMARY_MODE )
		{
			pPlayer->RemoveAmmo( m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_iAmmoPerShot, m_iPrimaryAmmoType );
		}
		else
		{
			pPlayer->RemoveAmmo( m_pWeaponInfo->GetWeaponData( m_iWeaponMode ).m_iAmmoPerShot, m_iSecondaryAmmoType );
		}
	}

	DoFireEffects();

	UpdatePunchAngles( pPlayer );

	return pProjectile;
}