//virtual void LLViewerOctreeCull::visit(const OctreeNode* branch) { LLViewerOctreeGroup* group = (LLViewerOctreeGroup*) branch->getListener(0); preprocess(group); if (checkObjects(branch, group)) { processGroup(group); } }
void check(const char* testName){ printf("o Checking %s\n",testName); TH1::AddDirectory(0); // same name is ok gRandom->SetSeed(1); // make all contents identical irrespective of the container std::string binFilename(testName); binFilename+=".root"; std::string xmlFilename(testName); xmlFilename+=".xml"; std::vector<const char*> filenames {binFilename.c_str()/*, xmlFilename.c_str()*/}; // NEED XML HERE for (auto&& filename : filenames){ createFile(filename); } Cont<double> doubleCont {1.,2.,3.,4.}; // need double32_t Cont<complex<double>> complexDCont {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}}; Cont<complex<float>> complexFCont {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}}; Cont<TH1F> histoCont {TH1F("h","ht",100,-2,2), TH1F("h","ht",10,-1.2,1.2)}; fillHistoCont(histoCont); Cont<Cont<TH1F>> contHistoCont NESTEDCONT; fillHistoNestedCont(contHistoCont); vector<Cont<TH1F>> vecHistoCont NESTEDCONT; fillHistoNestedCont(vecHistoCont); Cont<vector<TH1F>> contHistoVec NESTEDCONT; fillHistoNestedCont(contHistoVec); printf(" - RowWise\n"); // Row wise for (auto&& filename : filenames){ writeReadCheck(doubleCont,"doubleCont",filename); writeReadCheck(complexDCont,"complexDCont",filename); writeReadCheck(complexFCont,"complexFCont",filename); writeReadCheck(histoCont,"histoCont",filename); writeReadCheck(contHistoCont,"contHistoCont",filename); writeReadCheck(vecHistoCont,"vecHistoCont",filename); writeReadCheck(contHistoVec,"contHistoVec",filename); } // ColumnWise printf(" - ColumnWise\n"); int NEvts=100; // Make a backup of the input auto doubleContOrig = doubleCont; auto complexDContOrig = complexDCont; auto complexFContOrig = complexFCont; auto histoContOrig = histoCont; auto contHistoContOrig = contHistoCont; auto vecHistoContOrig = vecHistoCont; auto contHistoVecOrig = contHistoVec; // Write gRandom->SetSeed(1); { printf(" * Write\n"); TFile f(binFilename.c_str(),"UPDATE"); TTree t("t","Test Tree"); t.Branch("doubleCont_split", &doubleCont,16000,99); t.Branch("doubleCont", &doubleCont,16000,0); t.Branch("complexDCont_split", &complexDCont,16000,99); t.Branch("complexDCont", &complexDCont,16000,0); t.Branch("complexFCont_split", &complexFCont,16000,99); t.Branch("complexFCont", &complexFCont,16000,0); t.Branch("histoCont_split", &histoCont,16000,99); t.Branch("histoCont", &histoCont,16000,0); t.Branch("contHistoCont_split", &contHistoCont,16000,99); t.Branch("contHistoCont", &contHistoCont,16000,0); t.Branch("vecHistoCont_split", &vecHistoCont,16000,99); t.Branch("vecHistoCont", &vecHistoCont,16000,0); t.Branch("contHistoVec_split", &contHistoVec,16000,99); t.Branch("contHistoVec", &contHistoVec,16000,0); for (int i=0;i<NEvts;++i){ randomizeCont(doubleCont); randomizeCont(complexDCont); randomizeCont(complexFCont); fillHistoCont(histoCont,10); fillHistoNestedCont(contHistoCont,10); fillHistoNestedCont(vecHistoCont,10); fillHistoNestedCont(contHistoVec,10); t.Fill(); } t.Write(); } // And Read gRandom->SetSeed(1); { printf(" * Read\n"); TFile f(binFilename.c_str()); TTreeReader reader("t", &f); TTreeReaderValue<decltype(doubleCont)> rdoubleCont_split(reader, "doubleCont_split"); TTreeReaderValue<decltype(doubleCont)> rdoubleCont(reader, "doubleCont"); TTreeReaderValue<decltype(complexDCont)> rcomplexDCont_split(reader, "complexDCont_split"); TTreeReaderValue<decltype(complexDCont)> rcomplexDCont(reader, "complexDCont"); TTreeReaderValue<decltype(complexFCont)> rcomplexFCont_split(reader, "complexFCont_split"); TTreeReaderValue<decltype(complexFCont)> rcomplexFCont(reader, "complexFCont"); TTreeReaderValue<decltype(histoCont)> rhistoCont_split(reader, "histoCont_split"); TTreeReaderValue<decltype(histoCont)> rhistoCont(reader, "histoCont"); TTreeReaderValue<decltype(contHistoCont)> rcontHistoCont_split(reader, "contHistoCont_split"); TTreeReaderValue<decltype(contHistoCont)> rcontHistoCont(reader, "contHistoCont"); TTreeReaderValue<decltype(vecHistoCont)> rvecHistoCont_split(reader, "vecHistoCont_split"); TTreeReaderValue<decltype(vecHistoCont)> rvecHistoCont(reader, "vecHistoCont"); TTreeReaderValue<decltype(contHistoVec)> rcontHistoVec_split(reader, "contHistoVec_split"); TTreeReaderValue<decltype(contHistoVec)> rcontHistoVec(reader, "contHistoVec"); for (int i=0;i<NEvts;++i){ // Rebuild original values randomizeCont(doubleContOrig); randomizeCont(complexDContOrig); randomizeCont(complexFContOrig); fillHistoCont(histoContOrig,10); fillHistoNestedCont(contHistoContOrig,10); fillHistoNestedCont(vecHistoContOrig,10); fillHistoNestedCont(contHistoVecOrig,10); // Now check them reader.Next(); checkObjects("doubleCont_split",doubleContOrig,*rdoubleCont_split); checkObjects("doubleCont",doubleContOrig,*rdoubleCont); checkObjects("complexDCont_split",complexDContOrig,*rcomplexDCont_split); checkObjects("complexDCont",complexDContOrig,*rcomplexDCont); checkObjects("complexFCont_split",complexFContOrig,*rcomplexFCont_split); checkObjects("complexFCont",complexFContOrig,*rcomplexFCont); checkObjects("histoCont_split",histoContOrig,*rhistoCont_split); checkObjects("histoCont",histoContOrig,*rhistoCont); checkObjects("contHistoCont_split",contHistoContOrig,*rcontHistoCont_split); checkObjects("contHistoCont",contHistoContOrig,*rcontHistoCont); checkObjects("vecHistoCont_split",vecHistoContOrig,*rvecHistoCont_split); checkObjects("vecHistoCont",vecHistoContOrig,*rvecHistoCont); checkObjects("contHistoVec_split",contHistoVecOrig,*rcontHistoVec_split); checkObjects("contHistoVec",contHistoVecOrig,*rcontHistoVec); } } }
bool DrasculaEngine::runCurrentChapter() { int n; rightMouseButton = 0; previousMusic = -1; if (currentChapter != 2) { int soc = 0; for (n = 0; n < 6; n++) { soc = soc + CHARACTER_WIDTH; _frameX[n] = soc; } } for (n = 1; n < ARRAYSIZE(inventoryObjects); n++) inventoryObjects[n] = 0; for (n = 0; n < NUM_FLAGS; n++) flags[n] = 0; if (currentChapter == 2) { flags[16] = 1; flags[17] = 1; flags[27] = 1; } for (n = 1; n < 7; n++) inventoryObjects[n] = n; if (currentChapter == 1) { pickObject(28); if (loadedDifferentChapter == 0) animation_1_1(); selectVerb(kVerbNone); loadPic("2aux62.alg", drawSurface2); trackProtagonist = 1; objExit = 104; if (loadedDifferentChapter != 0) { if (!loadGame(saveName)) { return true; } } else { enterRoom(62); curX = -20; curY = 56; gotoObject(65, 145); } } else if (currentChapter == 2) { addObject(kItemPhone); trackProtagonist = 3; objExit = 162; if (loadedDifferentChapter == 0) enterRoom(14); else { if (!loadGame(saveName)) { return true; } } } else if (currentChapter == 3) { addObject(kItemPhone); addObject(kItemEarplugs); addObject(kItemSickle); addObject(kItemHandbag); addObject(kItemCross); addObject(kItemReefer); addObject(kItemOneCoin); flags[1] = 1; trackProtagonist = 1; objExit = 99; if (loadedDifferentChapter == 0) enterRoom(20); else { if (!loadGame(saveName)) { return true; } } // From here onwards the items have different IDs } else if (currentChapter == 4) { addObject(kItemPhone2); addObject(kItemCross2); addObject(kItemReefer2); addObject(kItemOneCoin2); objExit = 100; if (loadedDifferentChapter == 0) { enterRoom(21); trackProtagonist = 0; curX = 235; curY = 164; } else { if (!loadGame(saveName)) { return true; } } } else if (currentChapter == 5) { addObject(28); addObject(7); addObject(9); addObject(11); addObject(13); addObject(14); addObject(15); addObject(17); addObject(20); trackProtagonist = 1; objExit = 100; if (loadedDifferentChapter == 0) { enterRoom(45); } else { if (!loadGame(saveName)) { return true; } } } else if (currentChapter == 6) { addObject(28); addObject(9); trackProtagonist = 1; objExit = 104; if (loadedDifferentChapter == 0) { enterRoom(58); animation_1_6(); } else { if (!loadGame(saveName)) { return true; } loadPic("auxdr.alg", drawSurface2); } } showCursor(); while (!shouldQuit()) { if (characterMoved == 0) { stepX = STEP_X; stepY = STEP_Y; } if (characterMoved == 0 && walkToObject == 1) { trackProtagonist = trackFinal; walkToObject = 0; } if (currentChapter == 2) { // NOTE: the checks for room number 14 below are a hack used in the original // game, and move the character to a place where his feet are not drawn above // the pianist's head. Originally, walkToObject was not updated properly, which // lead to an incorrect setting of the protagonist's tracking flag (above). This // made the character start walking off screen, as his actual position was // different than the displayed one if (roomNumber == 3 && (curX == 279) && (curY + curHeight == 101)) { gotoObject(178, 121); gotoObject(169, 135); } else if (roomNumber == 14 && (curX == 214) && (curY + curHeight == 121)) { walkToObject = 1; gotoObject(190, 130); } else if (roomNumber == 14 && (curX == 246) && (curY + curHeight == 112)) { walkToObject = 1; gotoObject(190, 130); } } moveCursor(); updateScreen(); if (currentChapter == 2) { if (musicStatus() == 0 && roomMusic != 0) playMusic(roomMusic); } else { if (musicStatus() == 0) playMusic(roomMusic); } delay(25); #ifndef _WIN32_WCE // FIXME // This and the following #ifndefs disable the excess updateEvents() calls *within* the game loop. // Events such as keypresses or mouse clicks are dropped on the ground with no processing // by these calls. They are properly handled by the implicit call through getScan() below. // It is not a good practice to not process events and indeed this created problems with synthesized // events in the wince port. updateEvents(); #endif if (!_menuScreen && takeObject == 1) checkObjects(); #ifdef _WIN32_WCE if (rightMouseButton) if (_menuScreen) { #else if (rightMouseButton == 1 && _menuScreen) { #endif rightMouseButton = 0; delay(100); if (currentChapter == 2) { loadPic(menuBackground, cursorSurface); loadPic(menuBackground, backSurface); } else { loadPic(99, cursorSurface); loadPic(99, backSurface); } setPalette((byte *)&gamePalette); _menuScreen = false; #ifndef _WIN32_WCE // FIXME: This call here is in hope that it will catch the rightmouseup event so the // next if block won't be executed. This too is not a good coding practice. I've recoded it // with a mutual exclusive if block for the menu. I would commit this properly but I cannot test // for other (see Desktop) ports right now. updateEvents(); #endif #ifdef _WIN32_WCE } else { #else } // Do not show the inventory screen in chapter 5, if the right mouse button is clicked // while the plug (object 16) is held // Fixes bug #2059621 - "DRASCULA: Plug bug" if (rightMouseButton == 1 && !_menuScreen && !(currentChapter == 5 && pickedObject == 16)) { #endif rightMouseButton = 0; delay(100); characterMoved = 0; if (trackProtagonist == 2) trackProtagonist = 1; if (currentChapter == 4) { loadPic("icons2.alg", backSurface); loadPic("icons2.alg", cursorSurface); } else if (currentChapter == 5) { loadPic("icons3.alg", backSurface); loadPic("icons3.alg", cursorSurface); } else if (currentChapter == 6) { loadPic("iconsp.alg", backSurface); loadPic("iconsp.alg", cursorSurface); } else { loadPic("icons.alg", backSurface); loadPic("icons.alg", cursorSurface); } _menuScreen = true; #ifndef _WIN32_WCE updateEvents(); #endif selectVerb(kVerbNone); } if (leftMouseButton == 1 && _menuBar) { delay(100); selectVerbFromBar(); } else if (leftMouseButton == 1 && takeObject == 0) { delay(100); if (verify1()) return true; } else if (leftMouseButton == 1 && takeObject == 1) { if (verify2()) return true; } _menuBar = (mouseY < 24 && !_menuScreen) ? true : false; Common::KeyCode key = getScan(); if (key == Common::KEYCODE_F1 && !_menuScreen) { selectVerb(kVerbLook); } else if (key == Common::KEYCODE_F2 && !_menuScreen) { selectVerb(kVerbPick); } else if (key == Common::KEYCODE_F3 && !_menuScreen) { selectVerb(kVerbOpen); } else if (key == Common::KEYCODE_F4 && !_menuScreen) { selectVerb(kVerbClose); } else if (key == Common::KEYCODE_F5 && !_menuScreen) { selectVerb(kVerbTalk); } else if (key == Common::KEYCODE_F6 && !_menuScreen) { selectVerb(kVerbMove); } else if (key == Common::KEYCODE_F9) { volumeControls(); } else if (key == Common::KEYCODE_F10) { if (!saveLoadScreen()) return true; } else if (key == Common::KEYCODE_F8) { selectVerb(kVerbNone); } else if (key == Common::KEYCODE_v) { _subtitlesDisabled = true; ConfMan.setBool("subtitles", !_subtitlesDisabled); print_abc(_textsys[2], 96, 86); updateScreen(); delay(1410); } else if (key == Common::KEYCODE_t) { _subtitlesDisabled = false; ConfMan.setBool("subtitles", !_subtitlesDisabled); print_abc(_textsys[3], 94, 86); updateScreen(); delay(1460); } else if (key == Common::KEYCODE_ESCAPE) { if (!confirmExit()) return false; } else if (key == Common::KEYCODE_TILDE || key == Common::KEYCODE_BACKQUOTE) { _console->attach(); _console->onFrame(); } else if (currentChapter == 6 && key == Common::KEYCODE_0 && roomNumber == 61) { loadPic("alcbar.alg", bgSurface, 255); } if (leftMouseButton != 0 || rightMouseButton != 0 || key != 0) if (currentChapter != 3) framesWithoutAction = 0; if (framesWithoutAction == 15000) { screenSaver(); if (currentChapter != 3) framesWithoutAction = 0; } if (currentChapter != 3) framesWithoutAction++; } return false; } bool DrasculaEngine::verify1() { int l; if (_menuScreen) removeObject(); else { for (l = 0; l < numRoomObjs; l++) { if (mouseX >= x1[l] && mouseY >= y1[l] && mouseX <= x2[l] && mouseY <= y2[l] && doBreak == 0) { if (exitRoom(l)) return true; if (doBreak == 1) break; } } if (mouseX > curX && mouseY > curY && mouseX < curX + curWidth && mouseY < curY + curHeight) doBreak = 1; for (l = 0; l < numRoomObjs; l++) { if (mouseX > x1[l] && mouseY > y1[l] && mouseX < x2[l] && mouseY < y2[l] && doBreak == 0) { roomX = roomObjX[l]; roomY = roomObjY[l]; trackFinal = trackObj[l]; doBreak = 1; walkToObject = 1; startWalking(); } } if (doBreak == 0) { roomX = CLIP(mouseX, floorX1, floorX2); roomY = CLIP(mouseY, floorY1 + feetHeight, floorY2); startWalking(); } doBreak = 0; } return false; }