//----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CTFCompoundBow::WeaponIdle( void ) { CTFPlayer *pOwner = GetTFPlayerOwner(); if ( m_flChargeBeginTime > 0 && pOwner->GetAmmoCount( GetPrimaryAmmoType() ) > 0 ) { FireArrow(); } else { BaseClass::WeaponIdle(); } }
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(); } }
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(); }
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; }