bool WorldSceneManager::GetSceneCreateParam( int16 nSceneSID, SceneCreateArg& obj) { if( nSceneSID == SCENE_ID_NULL ) nSceneSID = 1; const SceneInfo* pSD = GetSceneInfo(nSceneSID); if(!pSD) return false; pSD->FillSceneCreateArg(obj); return true; }
//如果是灯组状态与场景是邦定的 int CTrafficLightImpl::GetSceneNumber(const LIGHT_TEAM_STATUS& ltsInfo, const int& iSceneCount) { int iRet = -1; char szSceneInfo[64]; memset(szSceneInfo, 0, 64); int iPos = 0; DWORD32 dwStatus = 0; for(DWORD32 i = 0; i < ltsInfo.nTeamCount; ++i) { dwStatus = ltsInfo.pdwStatus[i]; for(int k = ltsInfo.pnLightCount[i] - 1; k >= 0 ; --k) { switch (dwStatus & 0x0F) { case TS_RED: szSceneInfo[iPos + k] = '1'; break; case TS_YELLOW: szSceneInfo[iPos + k] = '2'; break; case TS_GREEN: szSceneInfo[iPos + k] = '3'; break; case TS_UNSURE: szSceneInfo[iPos + k] = '0'; break; default: szSceneInfo[iPos + k] = '?'; break; } dwStatus >>= 4; } iPos += ltsInfo.pnLightCount[i]; if( DWORD32(i+1) < ltsInfo.nTeamCount ) { szSceneInfo[iPos++] = '_'; } } SCENE_INFO stInfo; int iLen = 0; for( int i = 0; i < iSceneCount; ++i ) { if( GetSceneInfo(i, &stInfo) ) { iLen = (int)strlen(stInfo.pszInfo); if( strlen(szSceneInfo) != iLen ) continue; int k = 0; for(k = 0; k < iLen; ++k) { if( stInfo.pszInfo[k] == '?' ) continue; if( stInfo.pszInfo[k] == '*' && szSceneInfo[k] > '0' ) continue; if( stInfo.pszInfo[k] != szSceneInfo[k] ) break; } if( k >= iLen ) { iRet = i; break; } } } return iRet; }
WorldSceneInfo* WorldSceneManager::GetWorldSceneInfo(uint16 nSceneSID) { return (WorldSceneInfo*)GetSceneInfo(nSceneSID); }