#include "global.h" /* ----------------------------------------------------------------------------- Class: Inventory Desc: See header. Copyright (c) 2001-2002 by the person(s) listed below. All rights reserved. Chris Danford ----------------------------------------------------------------------------- */ #include "Inventory.h" #include "ThemeManager.h" #include "RageUtil.h" #include "GameState.h" #define NUM_ITEM_TYPES THEME->GetMetricF("Inventory","NumItemTypes") #define ITEM_DURATION_SECONDS THEME->GetMetricF("Inventory","ItemDurationSeconds") #define ITEM_COMBO( i ) THEME->GetMetricI("Inventory",ssprintf("Item%dCombo",i+1)) #define ITEM_EFFECT( i ) THEME->GetMetric ("Inventory",ssprintf("Item%dEffect",i+1)) const PlayerNumber OPPOSITE_PLAYER[NUM_PLAYERS] = { PLAYER_2, PLAYER_1 }; struct Item { int iCombo; CString sModifier; }; vector g_Items; void ReloadItems() { g_Items.clear(); for( int i=0; im_PlayMode == PLAY_MODE_BATTLE ) { for( int p=0; pGetPathTo("Sounds",ssprintf("Inventory aquire item p%d",p+1)) ); m_soundUseItem.Load( THEME->GetPathTo("Sounds",ssprintf("Inventory use item p%d",p+1)) ); m_soundItemEnding.Load( THEME->GetPathTo("Sounds",ssprintf("Inventory item ending p%d",p+1)) ); } } } void Inventory::Update( float fDelta ) { if( GAMESTATE->m_PlayMode != PLAY_MODE_BATTLE ) return; if( GAMESTATE->m_bActiveAttackEndedThisUpdate[m_PlayerNumber] ) m_soundItemEnding.Play(); PlayerNumber pn = m_PlayerNumber; // check to see if they deserve a new item if( GAMESTATE->m_CurStageStats.iCurCombo[pn] != m_iLastSeenCombo ) { int iOldCombo = m_iLastSeenCombo; m_iLastSeenCombo = GAMESTATE->m_CurStageStats.iCurCombo[pn]; int iNewCombo = m_iLastSeenCombo; #define CROSSED(i) (iOldCombo=i) for( unsigned i=0; im_sInventory[m_PlayerNumber]; //[NUM_INVENTORY_SLOTS] if( asInventory[NUM_INVENTORY_SLOTS/2] == "" ) iOpenSlot = NUM_INVENTORY_SLOTS/2; else { for( int s=0; sm_sInventory[m_PlayerNumber]; //[NUM_INVENTORY_SLOTS] if( asInventory[iSlot] == "" ) return; PlayerNumber pnToAttack = OPPOSITE_PLAYER[m_PlayerNumber]; GameState::ActiveAttack aa; aa.fSecsRemaining = ITEM_DURATION_SECONDS; aa.sModifier = asInventory[iSlot]; GAMESTATE->LaunchAttack( pnToAttack, aa ); GAMESTATE->RebuildPlayerOptionsFromActiveAttacks( pnToAttack ); // remove the item asInventory[iSlot] = ""; m_soundUseItem.Play(); }