void loadSkins(const std::string& dir, double brighten) { Array<std::string> previewName; Array<std::string> textureName; // Find all of the skins that have preview files getFiles(dir + "*_i.*", previewName); for (int i = 0; i < previewName.size(); ++i) { std::string ext = filenameExt(previewName[i]); // Strip off the extension and "_i" std::string base = previewName[i].substr(0, previewName[i].length() - ext.length() - 3); getFiles(dir + base + ".*", textureName); } // Now load the skins themselves for (int i = 0; i < textureName.size(); ++i) { std::string ext = filenameExt(textureName[i]); if (GImage::supportedFormat(ext)) { std::string filename = dir + textureName[i]; modelTexture.append(loadBrightTexture(filename, brighten)); } } if (weapon.textureFilenames().size() > 0) { std::string filename = "data/" + weapon.textureFilenames()[0]; if (fileExists(filename)) { weaponTexture = loadBrightTexture(filename, brighten); } else { filename = dir + "weapon.pcx"; if (fileExists(filename)) { weaponTexture = loadBrightTexture(filename, brighten); } } } else { weaponTexture = NULL; } }
void App::setViewer(const G3D::String& newFilename) { logPrintf("App::setViewer(\"%s\")\n", filename.c_str()); drawMessage("Loading " + newFilename); filename = newFilename; m_debugCamera->setFrame(CFrame::fromXYZYPRDegrees(-11.8f, 25.2f, 31.8f, -23.5f, -39.0f, 0.0f)); m_debugController->setFrame(m_debugCamera->frame()); //modelController->setFrame(CoordinateFrame(Matrix3::fromAxisAngle(Vector3(0,1,0), toRadians(180)))); delete viewer; viewer = NULL; if (filename == "<events>") { viewer = new EventViewer(); } else { G3D::String ext = toLower(filenameExt(filename)); G3D::String base = toLower(filenameBase(filename)); if ((ext == "3ds") || (ext == "ifs") || (ext == "obj") || (ext == "ply2") || (ext == "off") || (ext == "ply") || (ext == "bsp") || (ext == "stl") || (ext == "lwo") || (ext == "stla") || (ext == "dae") || (ext == "fbx") || (ext == "any" && endsWith(base, ".material")) || (ext == "any" && endsWith(base, ".universalmaterial")) || ((ext == "any" && endsWith(base, ".am")) || (ext == "any" && endsWith(base, ".articulatedmodel")))) { showDebugText = false; viewer = new ArticulatedViewer(); } else if (Texture::isSupportedImage(filename)) { // Images can be either a Texture or a Sky, TextureViewer will figure it out viewer = new TextureViewer(); // Angle the camera slightly so a sky/cube map doesn't see only 1 face m_debugController->setFrame(Matrix3::fromAxisAngle(Vector3::unitY(), (float)halfPi() / 2.0f) * Matrix3::fromAxisAngle(Vector3::unitX(), (float)halfPi() / 2.0f)); } else if (ext == "fnt") { viewer = new FontViewer(debugFont); /* } else if (ext == "bsp") { viewer = new BSPViewer(); */ } else if (ext == "md2") { viewer = new MD2Viewer(); } else if (ext == "md3") { viewer = new MD3Viewer(); } else if (ext == "gtm") { viewer = new GUIViewer(this); } else if (ext == "icn") { viewer = new IconSetViewer(debugFont); } else if (ext == "pk3") { // Something in Quake format - figure out what we should load Array <String> files; bool set = false; // First, try for a .bsp map G3D::String search = filename + "/maps/*"; FileSystem::getFiles(search, files, true); for (int t = 0; t < files.length(); ++t) { if (filenameExt(files[t]) == "bsp") { filename = files[t]; viewer = new ArticulatedViewer(); set = true; } } if (! set) { viewer = new EmptyViewer(); } } else if (ext == "avi" || ext == "wmv" || ext == "mp4" || ext == "asf" || (ext == "mov") || (ext == "dv") || (ext == "qt") || (ext == "asf") || (ext == "mpg")) { viewer = new VideoViewer(); } else { viewer = new EmptyViewer(); } } if (viewer != NULL) { viewer->onInit(filename); } if (filename != "") { if (filename == "<events>") { window()->setCaption("Events - G3D Viewer"); } else { window()->setCaption(filenameBaseExt(filename) + " - G3D Viewer"); } } logPrintf("Done App::setViewer(...)\n"); }
bool CameraControlWindow::onEvent(const GEvent& event) { // Allow super class to process the event if (GuiWindow::onEvent(event)) { return true; } // Accelerator key for toggling camera control. Active even when the window is hidden. if ((event.type == GEventType::KEY_DOWN) && (event.key.keysym.sym == GKey::F2)) { manualOperation = ! manualOperation; sync(); return true; } if (! visible()) { return false; } // Special buttons if (event.type == GEventType::GUI_ACTION) { GuiControl* control = event.gui.control; if (control == drawerButton) { // Change the window size m_expanded = ! m_expanded; morphTo(Rect2D::xywh(rect().x0y0(), m_expanded ? bigSize : smallSize)); drawerButton->setCaption(m_expanded ? drawerCollapseCaption : drawerExpandCaption); } else if (control == trackList) { if (trackFileArray[trackFileIndex] != untitled) { // Load the new spline loadSpline(trackFileArray[trackFileIndex] + ".trk"); // When we load, we lose our temporarily recorded spline, // so remove that display from the menu. if (trackFileArray.last() == untitled) { trackFileArray.remove(trackFileArray.size() - 1); } } } else if (control == playButton) { // Take over manual operation manualOperation = true; // Restart at the beginning of the path trackManipulator->setTime(0); } else if ((control == recordButton) || (control == cameraLocationTextBox)) { // Take over manual operation and reset the recording manualOperation = true; trackManipulator->clear(); trackManipulator->setTime(0); // Select the untitled path if ((trackFileArray.size() == 0) || (trackFileArray.last() != untitled)) { trackFileArray.append(untitled); } trackFileIndex = trackFileArray.size() - 1; saveButton->setEnabled(true); } else if (control == saveButton) { // Save std::string saveName; if (_internal::SaveDialog::getFilename(saveName, this)) { saveName = filenameBaseExt(trimWhitespace(saveName)); if (saveName != "") { saveName = saveName.substr(0, saveName.length() - filenameExt(saveName).length()); BinaryOutput b(saveName + ".trk", G3D_LITTLE_ENDIAN); trackManipulator->spline().serialize(b); b.commit(); updateTrackFiles(); // Select the one we just saved trackFileIndex = iMax(0, trackFileArray.findIndex(saveName)); saveButton->setEnabled(false); } } } sync(); } else if (trackManipulator->mode() == UprightSplineManipulator::RECORD_KEY_MODE) { // Check if the user has added a point yet sync(); } return false; }
void App::setViewer(const std::string& newFilename) { filename = newFilename; defaultCamera.setCoordinateFrame(CoordinateFrame(Vector3(0,0,5))); defaultController->setFrame(CoordinateFrame(Vector3(0,0,5))); //modelController->setFrame(CoordinateFrame(Matrix3::fromAxisAngle(Vector3(0,1,0), toRadians(180)))); delete viewer; viewer = NULL; shadowMap->setSize(0); std::string ext = toLower(filenameExt(filename)); std::string base = toLower(filenameBase(filename)); if ((ext == "3ds") || (ext == "ifs") || (ext == "obj") || (ext == "ply2") || (ext == "off") || (ext == "ply") || (ext == "any" && endsWith(base, ".am"))) { shadowMap->setSize(2048); viewer = new ArticulatedViewer(); } else if (Texture::isSupportedImage(filename)) { // Images can be either a Texture or a Sky, TextureViewer will figure it out viewer = new TextureViewer(); // Angle the camera slightly so a sky/cube map doesn't see only 1 face defaultController->setFrame(Matrix3::fromAxisAngle(Vector3::unitY(), halfPi() / 2.0) * Matrix3::fromAxisAngle(Vector3::unitX(), halfPi() / 2.0)); } else if (ext == "fnt") { viewer = new FontViewer(debugFont); } else if (ext == "bsp") { viewer = new BSPViewer(); } else if (ext == "md2") { viewer = new MD2Viewer(); } else if (ext == "gtm") { viewer = new GUIViewer(this); } else if (ext == "icn") { viewer = new IconSetViewer(debugFont); } else if (ext == "pk3") { // Something in Quake format - figure out what we should load Array <std::string> files; bool set = false; // First, try for a .bsp map std::string search = filename + "/maps/*"; FileSystem::getFiles(search, files, true); for (int t = 0; t < files.length(); ++t) { if (filenameExt(files[t]) == "bsp") { filename = files[t]; viewer = new BSPViewer(); set = true; } } if (!set) { viewer = new EmptyViewer(); } } else if (ext == "avi" || ext == "wmv" || ext == "mp4" || ext == "asf" || (ext == "mov") || (ext == "dv") || (ext == "qt") || (ext == "asf") || (ext == "mpg")) { viewer = new VideoViewer(); } else { viewer = new EmptyViewer(); } if (viewer != NULL) { viewer->onInit(filename); } window()->setCaption(filenameBaseExt(filename) + " - G3D Viewer"); }