//check all reels status; GTArray<BSReelColumn::ColumnStatus> BSSlotsContainer::CheckAllReelsStatus() { GTArray<BSReelColumn::ColumnStatus> reelColumnsStatus; for(int i = 0; i < m_reelColumnCount; i++) { BSReelColumn::ColumnStatus status = m_reelColumns[i]->GetStatus(); reelColumnsStatus.Add(status); } return reelColumnsStatus; }
//************************************ // Method: CheckBonusAndLock // FullName: BSSlotsContainer::CheckBonusAndLock // Access: protected // Returns: bool // Qualifier: depends on locked(2rd round) or not lock(1st round), to check bonus symbols and play respin or freespin // Parameter: bool haveReelsLocked : //************************************ bool BSSlotsContainer::CheckBonusSymbolsAndLock(bool haveReelsLocked) { int bonusMiniCount = 0; if(haveReelsLocked) { //means to get final locked reels, this is 2rd round, which some reels had been locked //in this round, even 1 reel should be lock and play; bonusMiniCount = 0; } else { //this is 1st round, only bonus count larger than bonusMiniCount, //then lock and play respin; bonusMiniCount = 2; } bool haveNewLockReel = false; GTArray<int> newLockReelIDs; //store all new lock reels //check bonus symbol; int bonusSymbolID = m_pTicketGenerator->GetBonusSymbolID(); //GTArray<int> slotSymbols = m_pTicketGenerator->GetSlotSymbols(); for(int i = 0; i < m_slotsSymbols.Length(); i++) { int reelID = i % m_reelColumnCount; int slotSymbolValue = m_slotsSymbols[i]; //find bonus symbol, then add this reelID into dictionary for later lock; if(slotSymbolValue == bonusSymbolID) { if(!m_lockReelsDict.KeyExists(reelID)) { newLockReelIDs.Add(reelID); } } } if(newLockReelIDs.Length() < bonusMiniCount) return false; //initialize all new lock reels for(int i = 0; i < newLockReelIDs.Length(); i++) { m_lockReelsDict.Add(newLockReelIDs[i], NULL); } //build new respin for every one new lock reels for(int i = 0; i < newLockReelIDs.Length(); i++) { int reelID = newLockReelIDs[i]; GTGameObject* pGameObject = GTGameObjectManager::Inst()->CreateGameObject(NULL, CTEXT("respin1"), CTEXT("SlotGame/Respin.property")); if(pGameObject) { //add new lock reel into dictionary; m_lockReelsDict.Remove(reelID); m_lockReelsDict.Add(reelID, pGameObject); //get every reel position BSReelColumn* reelColum = m_reelColumns[reelID]; GTPoint2 reelPos = reelColum->GetGameObjectPosition(); //set respin to there and play animation BSRespin* pRespin = (BSRespin*)(pGameObject->GetBehaviour(CTEXT("BSRespin"))); if(pRespin) { pRespin->SetGameObjectPosition(reelPos); GTLogManager::SLogFormatTrace("repsin lock: (%f, %f) -> playing lock animtion", reelPos.x, reelPos.y); pRespin->PlayLockAnimation(); haveNewLockReel = true; } } } return haveNewLockReel; }