bool BootloaderInstallBase::backup(QString to) { qDebug() << "[BootloaderInstallBase] Backing up bootloader file"; QDir targetDir("."); emit logItem(tr("Creating backup of original firmware file."), LOGINFO); if(!targetDir.mkpath(to)) { emit logItem(tr("Creating backup folder failed"), LOGERROR); return false; } QString tofile = to + "/" + QFileInfo(m_blfile).fileName(); qDebug() << "[BootloaderInstallBase] trying to backup" << m_blfile << "to" << tofile; if(!QFile::copy(resolvePathCase(m_blfile), tofile)) { emit logItem(tr("Creating backup copy failed."), LOGERROR); return false; } emit logItem(tr("Backup created."), LOGOK); return true; }
bool ProjectManager::copyFiles(const QString& src, const QString& dst) { QFileInfo srcFileInfo(src); if (srcFileInfo.isDir()) { QDir targetDir(dst); targetDir.cdUp(); if (!targetDir.mkdir(QFileInfo(dst).fileName())) return false; QDir sourceDir(src); QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System); foreach (const QString &fileName, fileNames) { LOG(INFO) << "Copying file " << fileName.toUtf8().constData(); const QString newSrcFilePath = src + QLatin1Char('/') + fileName; const QString newTgtFilePath = dst + QLatin1Char('/') + fileName; if (!copyFiles(newSrcFilePath, newTgtFilePath)) return false; }
bool SelectFile::copyDirectoryFiles(QString fromDir ,QString toDir, bool coverFileIfExist) { QDir sourceDir(fromDir); QDir targetDir(toDir); QString toFile; if(!targetDir.exists()){ /**< 如果目标目录不存在,则进行创建 */ if(!targetDir.mkdir(targetDir.absolutePath())) return false; } QFileInfoList fileInfoList = sourceDir.entryInfoList(); foreach(QFileInfo fileInfo, fileInfoList){ if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") continue; if(fileInfo.isDir()){ /**< 当为目录时,递归的进行copy */ if(!copyDirectoryFiles(fileInfo.filePath(), targetDir.filePath(fileInfo.fileName()), coverFileIfExist)) return false; } else{ /**< 当允许覆盖操作时,将旧文件进行删除操作 */ toFile = targetDir.filePath(fileInfo.fileName()); // QMessageBox::warning(0,"PATH1",toFile,QMessageBox::Yes); if(coverFileIfExist && targetDir.exists(fileInfo.fileName())){ targetDir.remove(fileInfo.fileName()); } toFile = toDir+"\\"+fileInfo.fileName(); qDebug() << toFile << " remove from m_pictures"; if(mw->m_pictures.contains(toFile)){ // QMessageBox::warning(0,"PATH2",toFile,QMessageBox::Yes); mw->m_pictures.removeAll(toFile); } /// 进行文件copy if(!QFile::copy(fileInfo.filePath(), targetDir.filePath(fileInfo.fileName()))){ return false; } } } return true; }
bool MainWindow::copyDirectoryFiles(const QString &fromDir, const QString &toDir, bool coverFileIfExist) { if(isPathExcept(fromDir)) return true; // 流逝时间计算 static QElapsedTimer et; et.start(); QDir sourceDir(fromDir); QDir targetDir(toDir); if(!targetDir.exists()){ /** 如果目标目录不存在,则进行创建 */ if(!targetDir.mkdir(targetDir.path())) { qDebug() << "mkdir " + targetDir.filePath(sourceDir.dirName()) + " failed"; } } QFileInfoList fileInfoList = sourceDir.entryInfoList(); foreach(QFileInfo fileInfo, fileInfoList) { if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") continue; if(fileInfo.isDir()) { /**< 当为目录时,递归的进行 copy */ qDebug() << fileInfo.filePath() << "-> " << targetDir.filePath(fileInfo.fileName()); copyDirectoryFiles(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName()),coverFileIfExist); } else { // 同步文件 synTwoFiles(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName())); } if(et.elapsed() > 300) { QApplication::processEvents(); et.restart(); qDebug() << "回到UI"; } } return true; }
//Given a file path, gets the pbp path if this one is not the one we want QString PSPApplication::getMultiplePath(QString path) { //We want the non stripped directory QDir dir(path); if (!dir.cdUp()) { // throw QPSPManagerPBPException(); } QString destDirectory = dir.dirName();//dir.absolutePath();//dir.absolutePath(); dir.cdUp(); if (destDirectory.startsWith("%__SCE__")) //We need to remove the initial % { destDirectory = /*dir.absolutePath() +"/"+ */destDirectory.right(destDirectory.length() - 1);//dir.absolutePath().right(dir.absolutePath().length() - 1); } if (destDirectory.endsWith("%")) //We need to remove the final % { destDirectory = /*dir.absolutePath() +"/"+*/ destDirectory.left(destDirectory.length() - 1);//dir.absolutePath().left(dir.absolutePath().length() - 1); } //We have the same dir as entered because all other possibilities //under the precondition that this is a multiple PBP file, are pointing //to the directory we want. //We need to add the PBP //Find the eboot.pbp file inside the dir QFileInfoList files; QDir targetDir(dir.absolutePath() +"/"+destDirectory); files = targetDir.entryInfoList(QDir::Files | QDir::NoSymLinks); for (int i = 0; i < files.size(); ++i) { if (files.at(i).fileName().toLower() == "eboot.pbp") { destDirectory = dir.absolutePath() +"/"+ destDirectory + "/" + files.at(i).fileName(); return destDirectory; } } //We should never reach here, if we do, we're in trouble :) return ""; }
static bool copyRecursively(const QString &srcFilePath, const QString &tgtFilePath) { QFileInfo srcFileInfo(srcFilePath); if (srcFileInfo.isDir()) { QDir targetDir(tgtFilePath); targetDir.cdUp(); if (!targetDir.mkpath(QFileInfo(tgtFilePath).fileName())) return false; QDir sourceDir(srcFilePath); QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System); foreach (const QString &fileName, fileNames) { const QString newSrcFilePath = srcFilePath + QLatin1Char('/') + fileName; const QString newTgtFilePath = tgtFilePath + QLatin1Char('/') + fileName; if (!copyRecursively(newSrcFilePath, newTgtFilePath)) return false; } } else {
void CodeLiteApp::DoCopyGdbPrinters() { wxFileName printersInstallDir; #ifdef __WXGTK__ printersInstallDir = wxFileName(wxString(INSTALL_DIR, wxConvUTF8), "gdb_printers"); #else # ifdef USE_POSIX_LAYOUT wxString commdir(wxStandardPaths::Get().GetDataDir() + wxT( INSTALL_DIR )); printersInstallDir = wxFileName(commdir, "gdb_printers"); # else printersInstallDir = wxFileName(wxStandardPaths::Get().GetDataDir(), "gdb_printers"); # endif #endif // copy the files to ~/.codelite/gdb_printers wxLogNull nolog; wxFileName targetDir(clStandardPaths::Get().GetUserDataDir(), "gdb_printers"); ::wxMkdir(targetDir.GetFullPath()); ::CopyDir(printersInstallDir.GetFullPath(), targetDir.GetFullPath()); }
bool Thread::copyDirectoryFiles(const QString &fromDir,const QString &toDir) { QDir sourceDir(fromDir); QDir targetDir(toDir); if(!targetDir.exists()) { /**< 如果目标目录不存在,则进行创建 */ if(!targetDir.mkdir(targetDir.absolutePath())) return false; } QFileInfoList fileInfoList = sourceDir.entryInfoList(); foreach(QFileInfo fileInfo, fileInfoList) { if(fileInfo.fileName() == "." || fileInfo.fileName() == "..") continue; if(fileInfo.isDir()) { /**< 当为目录时,递归的进行copy */ if(!copyDirectoryFiles(fileInfo.filePath(), targetDir.filePath(fileInfo.fileName()))) return false; } else { /**< 当允许覆盖操作时,将旧文件进行删除操作 */ if(targetDir.exists(fileInfo.fileName())) { targetDir.remove(fileInfo.fileName()); } /// 进行文件copy if(!copy(fileInfo.filePath(),targetDir.filePath(fileInfo.fileName()))) { return false; } } } return true; }
bool ForwardDVI::determineTarget() { if (!View::determineTarget()) return false; int para = manager()->info()->lineNumber(); Kate::Document *doc = manager()->info()->activeTextDocument(); QString filepath; if (doc) filepath = doc->url().path(); else return false; QString texfile = manager()->info()->relativePath(baseDir(),filepath); m_urlstr = "file:" + targetDir() + '/' + target() + "#src:" + QString::number(para+1) + ' ' + texfile; // space added, for files starting with numbers addDict("%dir_target", QString::null); addDict("%target", m_urlstr); KILE_DEBUG() << "==KileTool::ForwardDVI::determineTarget()=============\n" << endl; KILE_DEBUG() << "\tusing " << m_urlstr << endl; return true; }
void Movement::Circle() { // Go towards target. Entity * target = playerShip->entity; if (!target) { SetDirection(Vector3f()); return; } Vector3f pos = target->worldPosition; Vector3f targetToShip = shipEntity->worldPosition - pos; targetToShip.Normalize(); // Calculate our current angle in relation to the target. float radians = GetAngler(targetToShip[0], targetToShip[1]); // Start circling it straight away? Always trying to go clockwise or counter-clockwise? // Select spot a bit along the radian path. radians += clockwise? -0.10f : 0.10f; Vector2f targetDir(cos(radians), sin(radians)); Vector3f position = target->worldPosition + targetDir * radius; Vector3f toPosForreal = position - shipEntity->worldPosition; toPosForreal.Normalize(); SetDirection(toPosForreal); }
void Package::directoryInstall() { QString srcFilePath = QString::fromStdString(getConfigVar(Directory)); QString tgtFilePath = QDir::currentPath() + "/Games/" + QString::fromStdString(getConfigVar(Name)); LOG(INFO) << "Installing \"" << getConfigVar(Name) << "\" with version " << getVersion().asString() << " from \"" << srcFilePath.toStdString() << "\" to \"" << tgtFilePath.toStdString() << "\"."; QFileInfo srcFileInfo(srcFilePath); if (srcFileInfo.isDir()) { QDir targetDir(tgtFilePath); targetDir.cdUp(); if (!targetDir.mkdir(QFileInfo(tgtFilePath).fileName())) LOG(FATAL) << "Install failure: Could not create target directory."; QDir sourceDir(srcFilePath); QStringList fileNames = sourceDir.entryList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot | QDir::Hidden | QDir::System); Q_FOREACH(const QString &fileName, fileNames) { const QString newSrcFilePath = srcFilePath + QLatin1Char('/') + fileName; const QString newTgtFilePath = tgtFilePath + QLatin1Char('/') + fileName; } } else {
bool Upload::upload(const Package &package) { if (!m_uploadFiles) { return true; } QProcess ssh; QStringList arguments; QString const auth = "*****@*****.**"; arguments << auth; arguments << "mkdir" << "-p"; QString remoteDir = QString("/home/marble/web/monav/") + targetDir(); arguments << remoteDir; ssh.start("ssh", arguments); ssh.waitForFinished(1000 * 60 * 10); // wait up to 10 minutes for mkdir to complete if (ssh.exitStatus() != QProcess::NormalExit || ssh.exitCode() != 0) { qDebug() << "Failed to create remote directory " << remoteDir; Logger::instance().setStatus(package.region.id(), package.region.name(), "error", "Failed to create remote directory: " + ssh.readAllStandardError()); return false; } QProcess scp; arguments.clear(); arguments << package.file.absoluteFilePath(); QString target = remoteDir + "/" + package.file.fileName(); arguments << auth + ":" + target; scp.start("scp", arguments); scp.waitForFinished(1000 * 60 * 60 * 12); // wait up to 12 hours for upload to complete if (scp.exitStatus() != QProcess::NormalExit || scp.exitCode() != 0) { qDebug() << "Failed to upload " << target; Logger::instance().setStatus(package.region.id(), package.region.name(), "error", "Failed to upload file: " + scp.readAllStandardError()); return false; } return adjustNewstuffFile(package); }
////////////////////////////////////////////////////////////////////////// // IsMountedWeaponUsableWithTarget // A piece of game-code moved from CryAction when scriptbind_AI moved to the AI system ////////////////////////////////////////////////////////////////////////// int CScriptBind_Game::IsMountedWeaponUsableWithTarget(IFunctionHandler *pH) { int paramCount = pH->GetParamCount(); if(paramCount<2) { GameWarning("%s: too few parameters.", __FUNCTION__); return pH->EndFunction(); } GET_ENTITY(1); if(!pEntity) { GameWarning("%s: wrong entity id in parameter 1.", __FUNCTION__); return pH->EndFunction(); } IAIObject* pAI = pEntity->GetAI(); if (!pAI) { GameWarning("%s: Entity '%s' does not have AI.",__FUNCTION__, pEntity->GetName()); return pH->EndFunction(); } EntityId itemEntityId; ScriptHandle hdl2; if(!pH->GetParam(2,hdl2)) { GameWarning("%s: wrong parameter 2 format.", __FUNCTION__); return pH->EndFunction(); } itemEntityId = (EntityId)hdl2.n; if (!itemEntityId) { GameWarning("%s: wrong entity id in parameter 2.", __FUNCTION__); return pH->EndFunction(); } IGameFramework *pGameFramework = gEnv->pGame->GetIGameFramework(); IItem* pItem = pGameFramework->GetIItemSystem()->GetItem(itemEntityId); if (!pItem) { //gEnv->pAISystem->Warning("<CScriptBind> ", "entity in parameter 2 is not an item/weapon"); GameWarning("%s: entity in parameter 2 is not an item/weapon.", __FUNCTION__); return pH->EndFunction(); } float minDist = 7; bool bSkipTargetCheck = false; Vec3 targetPos(ZERO); if(paramCount > 2) { for(int i=3;i <= paramCount ; i++) { if(pH->GetParamType(i) == svtBool) pH->GetParam(i,bSkipTargetCheck); else if(pH->GetParamType(i) == svtNumber) pH->GetParam(i,minDist); else if(pH->GetParamType(i) == svtObject) pH->GetParam(i,targetPos); } } IAIActor* pAIActor = CastToIAIActorSafe(pAI); if (!pAIActor) { GameWarning("%s: entity '%s' in parameter 1 is not an AI actor.", __FUNCTION__, pEntity->GetName()); return pH->EndFunction(); } IEntity* pItemEntity = pItem->GetEntity(); if(!pItemEntity) return pH->EndFunction(); if(!pItem->GetOwnerId()) { // weapon is not used, check if it is on a vehicle IEntity* pParentEntity = pItemEntity->GetParent(); if(pParentEntity) { IAIObject* pParentAI = pParentEntity->GetAI(); if(pParentAI && pParentAI->GetAIType()==AIOBJECT_VEHICLE) { // (MATT) Feature was cut and code was tricky, hence ignore weapons in vehicles {2008/02/15:11:08:51} return pH->EndFunction(); } } } else if( pItem->GetOwnerId()!= pEntity->GetId()) // item is used by someone else? return pH->EndFunction(false); // check target if(bSkipTargetCheck) return pH->EndFunction(true); IAIObject* pTarget = pAIActor->GetAttentionTarget(); if(targetPos.IsZero()) { if(!pTarget) return pH->EndFunction(); targetPos = pTarget->GetPos(); } Vec3 targetDir(targetPos - pItemEntity->GetWorldPos()); Vec3 targetDirXY(targetDir.x, targetDir.y, 0); float length2D = targetDirXY.GetLength(); if(length2D < minDist || length2D<=0) return pH->EndFunction(); targetDirXY /= length2D;//normalize IWeapon* pWeapon = pItem->GetIWeapon(); bool vehicleGun = pWeapon && pWeapon->GetHostId(); if (!vehicleGun) { Vec3 mountedAngleLimits(pItem->GetMountedAngleLimits()); float yawRange = DEG2RAD(mountedAngleLimits.z); if(yawRange > 0 && yawRange < gf_PI) { float deltaYaw = pItem->GetMountedDir().Dot(targetDirXY); if(deltaYaw < cosf(yawRange)) return pH->EndFunction(false); } float minPitch = DEG2RAD(mountedAngleLimits.x); float maxPitch = DEG2RAD(mountedAngleLimits.y); //maxPitch = (maxPitch - minPitch)/2; //minPitch = -maxPitch; float pitch = atanf(targetDir.z / length2D); if ( pitch < minPitch || pitch > maxPitch ) return pH->EndFunction(false); } if(pTarget) { IEntity* pTargetEntity = pTarget->GetEntity(); if(pTargetEntity) { // check target distance and where he's going IPhysicalEntity *phys = pTargetEntity->GetPhysics(); if(phys) { pe_status_dynamics dyn; phys->GetStatus(&dyn); Vec3 velocity ( dyn.v); velocity.z = 0; float speed = velocity.GetLength2D(); if(speed>0) { //velocity /= speed; if(length2D< minDist * 0.75f && velocity.Dot(targetDirXY)<=0) return pH->EndFunction(false); } } } } return pH->EndFunction(true); }
bool Upload::adjustNewstuffFile(const Package &package) { if (m_xml.isNull()) { QTemporaryFile tempFile(QDir::tempPath() + "/monav-maps-XXXXXX.xml"); tempFile.setAutoRemove(false); tempFile.open(); QString monavFilename = tempFile.fileName(); tempFile.close(); QProcess wget; QStringList const arguments = QStringList() << "http://files.kde.org/marble/newstuff/maps-monav.xml" << "-O" << monavFilename; wget.start("wget", arguments); wget.waitForFinished(1000 * 60 * 60 * 12); // wait up to 12 hours for download to complete if (wget.exitStatus() != QProcess::NormalExit || wget.exitCode() != 0) { qDebug() << "Failed to download newstuff file from files.kde.org"; Logger::instance().setStatus(package.region.id(), package.region.name(), "error", "Failed to sync newstuff file: " + wget.readAllStandardError()); return false; } QFile file(monavFilename); if (!file.open(QFile::ReadOnly)) { qDebug() << "Failed to open newstuff file" << monavFilename; Logger::instance().setStatus(package.region.id(), package.region.name(), "error", "Failed to open newstuff file."); return false; } if ( !m_xml.setContent( &file ) ) { qDebug() << "Cannot parse newstuff xml file."; Logger::instance().setStatus(package.region.id(), package.region.name(), "error", "Failed to parse newstuff .xml file."); return false; } QFile::remove(monavFilename); } QDomElement root = m_xml.documentElement(); QDomNodeList regions = root.elementsByTagName( "stuff" ); for ( unsigned int i = 0; i < regions.length(); ++i ) { QDomNode node = regions.item( i ); if (!node.namedItem("payload").isNull()) { QUrl url = node.namedItem("payload").toElement().text(); QFileInfo fileInfo(url.path()); if (fileInfo.fileName() == package.file.fileName()) { QString removeFile; QDomNode dateNode = node.namedItem("releasedate"); if (!dateNode.isNull()) { dateNode.removeChild(dateNode.firstChild()); dateNode.appendChild(m_xml.createTextNode(releaseDate())); } QDomNode versionNode = node.namedItem("version"); if (!versionNode.isNull()) { double version = versionNode.toElement().text().toDouble(); versionNode.removeChild(versionNode.firstChild()); versionNode.appendChild(m_xml.createTextNode(QString::number(version+0.1, 'f', 1))); } QDomNode payloadNode = node.namedItem("payload"); payloadNode.removeChild(payloadNode.firstChild()); if (fileInfo.dir().dirName() != targetDir()) { removeFile = QString("/home/marble/web/monav/%1/%2").arg(fileInfo.dir().dirName()).arg(package.file.fileName()); qDebug() << "Going to remove the old file " << removeFile; } QString payload = "http://files.kde.org/marble/monav/%1/%2"; payload = payload.arg(targetDir()).arg(package.file.fileName()); payloadNode.appendChild(m_xml.createTextNode(payload)); return removeFile.isEmpty() ? uploadNewstuff() : (uploadNewstuff() && deleteRemoteFile(removeFile)); } } } QDomNode stuff = root.appendChild(m_xml.createElement("stuff")); stuff.toElement().setAttribute("category", "marble/routing/monav"); QDomNode nameNode = stuff.appendChild(m_xml.createElement("name")); nameNode.toElement().setAttribute("lang", "en"); QString name = "%1 / %2 (%3)"; if (package.region.country().isEmpty()) { name = name.arg(package.region.continent()).arg(package.region.name()); name = name.arg(package.transport); } else { name = "%1 / %2 / %3 (%4)"; name = name.arg(package.region.continent()).arg(package.region.country()); name = name.arg(package.region.name()).arg(package.transport); } nameNode.appendChild(m_xml.createTextNode(name)); QDomNode authorNode = stuff.appendChild(m_xml.createElement("author")); authorNode.appendChild(m_xml.createTextNode("Automatically created from map data assembled by the OpenStreetMap community")); QDomNode licenseNode = stuff.appendChild(m_xml.createElement("license")); licenseNode.appendChild(m_xml.createTextNode("Creative Commons by-SA 2.0")); QDomNode summaryNode = stuff.appendChild(m_xml.createElement("summary")); QString summary = "Requires KDE >= 4.6: Offline Routing in %1, %2"; summary = summary.arg(package.region.name()).arg(package.region.continent()); summaryNode.appendChild(m_xml.createTextNode(summary)); QDomNode versionNode = stuff.appendChild(m_xml.createElement("version")); versionNode.appendChild(m_xml.createTextNode("0.1")); QDomNode dateNode = stuff.appendChild(m_xml.createElement("releasedate")); dateNode.appendChild(m_xml.createTextNode(releaseDate())); QDomNode previewNode = stuff.appendChild(m_xml.createElement("preview")); QString preview = "http://files.kde.org/marble/monav/previews/%1-preview.png"; preview = preview.arg(package.region.id()); previewNode.appendChild(m_xml.createTextNode(preview)); QDomNode payloadNode = stuff.appendChild(m_xml.createElement("payload")); payloadNode.toElement().setAttribute("lang", "en"); QString payload = "http://files.kde.org/marble/monav/%1/%2"; payload = payload.arg(targetDir()).arg(package.file.fileName()); payloadNode.appendChild(m_xml.createTextNode(payload)); return uploadNewstuff(); }
PhpPlugin::PhpPlugin(IManager* manager) : IPlugin(manager) , m_clangOldFlag(false) , m_browser(NULL) , m_debuggerPane(NULL) , m_xdebugLocalsView(NULL) , m_xdebugEvalPane(NULL) , m_showWelcomePage(false) { m_longName = wxT("PHP Plugin for the codelite IDE"); m_shortName = wxT("PHP"); // Instantiate the bitmaps, we do this so they will be populated in wxXmlResource // Sigleton class PHPImages images; PHPWorkspace::Get()->SetPluginManager(m_mgr); XDebugManager::Initialize(this); // Add our UI // create tab (possibly detached) Notebook* book = m_mgr->GetWorkspacePaneNotebook(); if(IsWorkspaceViewDetached()) { // Make the window child of the main panel (which is the grand parent of the notebook) DockablePane* cp = new DockablePane( book->GetParent()->GetParent(), book, PHPStrings::PHP_WORKSPACE_VIEW_TITLE, wxNullBitmap, wxSize(200, 200)); m_workspaceView = new PHPWorkspaceView(cp, m_mgr); cp->SetChildNoReparent(m_workspaceView); } else { m_workspaceView = new PHPWorkspaceView(book, m_mgr); book->InsertPage(0, m_workspaceView, PHPStrings::PHP_WORKSPACE_VIEW_TITLE, true); } PHPCodeCompletion::Instance()->SetManager(m_mgr); PHPEditorContextMenu::Instance()->ConnectEvents(); PHPParserThread::Instance()->Start(); // Pass the manager class to the context menu manager PHPEditorContextMenu::Instance()->SetManager(m_mgr); // Connect events EventNotifier::Get()->Connect( wxEVT_CC_SHOW_QUICK_OUTLINE, clCodeCompletionEventHandler(PhpPlugin::OnShowQuickOutline), NULL, this); EventNotifier::Get()->Connect( wxEVT_DBG_UI_DELTE_ALL_BREAKPOINTS, clDebugEventHandler(PhpPlugin::OnXDebugDeleteAllBreakpoints), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_CREATE_NEW_WORKSPACE, wxCommandEventHandler(PhpPlugin::OnNewWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_NEW_PROJECT_WIZARD_SHOWING, clNewProjectEventHandler(PhpPlugin::OnNewProject), NULL, this); EventNotifier::Get()->Connect( wxEVT_NEW_PROJECT_WIZARD_FINISHED, clNewProjectEventHandler(PhpPlugin::OnNewProjectFinish), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_IS_WORKSPACE_OPEN, clCommandEventHandler(PhpPlugin::OnIsWorkspaceOpen), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_CLOSE_WORKSPACE, clCommandEventHandler(PhpPlugin::OnCloseWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_OPEN_WORKSPACE, clCommandEventHandler(PhpPlugin::OnOpenWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_RELOAD_WORKSPACE, clCommandEventHandler(PhpPlugin::OnReloadWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_OPEN_RESOURCE, wxCommandEventHandler(PhpPlugin::OnOpenResource), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_GET_WORKSPACE_FILES, wxCommandEventHandler(PhpPlugin::OnGetWorkspaceFiles), NULL, this); EventNotifier::Get()->Connect(wxEVT_CMD_GET_CURRENT_FILE_PROJECT_FILES, wxCommandEventHandler(PhpPlugin::OnGetCurrentFileProjectFiles), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_GET_ACTIVE_PROJECT_FILES, wxCommandEventHandler(PhpPlugin::OnGetActiveProjectFiles), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_GET_FIND_IN_FILES_MASK, clCommandEventHandler(PhpPlugin::OnGetFiFMask), NULL, this); EventNotifier::Get()->Connect(wxEVT_FILE_SAVED, clCommandEventHandler(PhpPlugin::OnFileSaved), NULL, this); EventNotifier::Get()->Connect(wxEVT_PHP_LOAD_URL, PHPEventHandler(PhpPlugin::OnLoadURL), NULL, this); EventNotifier::Get()->Connect( wxEVT_ALL_EDITORS_CLOSED, wxCommandEventHandler(PhpPlugin::OnAllEditorsClosed), NULL, this); EventNotifier::Get()->Bind(wxEVT_XDEBUG_CONNECTED, &PhpPlugin::OnDebugSatrted, this); EventNotifier::Get()->Bind(wxEVT_XDEBUG_SESSION_ENDED, &PhpPlugin::OnDebugEnded, this); EventNotifier::Get()->Connect(wxEVT_GOING_DOWN, clCommandEventHandler(PhpPlugin::OnGoingDown), NULL, this); CallAfter(&PhpPlugin::DoCreateDebuggerPanes); // Extract all CC files from PHP.zip into the folder ~/.codelite/php-plugin/cc wxFileName phpResources(clStandardPaths::Get().GetDataDir(), "PHP.zip"); if(phpResources.Exists()) { clZipReader zipReader(phpResources); wxFileName targetDir(clStandardPaths::Get().GetUserDataDir(), ""); targetDir.AppendDir("php-plugin"); // Don't extract the zip if one of the files on disk is newer or equal to the zip timestamp wxFileName fnSampleFile(targetDir.GetPath(), "basic.php"); fnSampleFile.AppendDir("cc"); if(!fnSampleFile.Exists() || // the sample file does not exists // Or the resource file (PHP.zip) is newer than the sample file (phpResources.GetModificationTime().GetTicks() > fnSampleFile.GetModificationTime().GetTicks())) { targetDir.Mkdir(wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); zipReader.Extract("*", targetDir.GetPath()); // Make sure we add this path to the general PHP settings targetDir.AppendDir("cc"); // the CC files are located under an internal folder named "cc" (lowercase) PHPConfigurationData config; if(config.Load().GetCcIncludePath().Index(targetDir.GetPath()) == wxNOT_FOUND) { config.Load().GetCcIncludePath().Add(targetDir.GetPath()); config.Save(); } } } else { CL_WARNING("PHP: Could not locate PHP resources 'PHP.zip' => '%s'", phpResources.GetFullPath()); } }
void NPCFreefall_DZ::onUpdate(float dt) { // obtain spinal cord SpinalCord* spinalCord = getNPC()->getSpinalCord(); spinalCord->reset(); // update target position Matrix4f catToyPose = getNPC()->getCatToy()->getCurrentPose(); _targetPos.set( catToyPose[3][0], catToyPose[3][1], catToyPose[3][2] ); // jump only when the wind is right Vector2f pos = Vector2f(catToyPose[3][0], catToyPose[3][2]); pos.normalize(); NxVec3 wind = getNPC()->getJumper()->getScene()->getWindAtPoint(NxVec3(catToyPose[3][0], catToyPose[3][1], catToyPose[3][2])); wind.normalize(); Vector2f wind2(wind.x, wind.z); float wind_angle = 0.0; if (wind.magnitude() < 1.5f) { wind_angle = 1.0f; } else { wind2.normalize(); wind_angle = pos.dot(wind2); } // if my character is still roaming if (wind_angle >= 0.8f && catToyPose[3][1] >= 300.0f) _timeUntilJump -= dt; //getCore()->logMessage("%s has %2.4f seconds to jump", getNPC()->getNPCName(), _timeUntilJump); if( _timeUntilJump <= 0.0f && getNPC()->getJumper()->getPhase() == ::jpRoaming ) { Vector3f pos = Vector3f(catToyPose[3][0], catToyPose[3][1], catToyPose[3][2]); // if npc on airplane if( getNPC()->getJumper()->getAirplane() != NULL ) { // just jump! spinalCord->phase = true; return; } // if npc at the exit point and ready to jump else if( _positionIsSucceed && _directionIsSucceed ) { // jump! spinalCord->phase = true; return; } // if npc at the exit point and not surely ready to clear jump else { if( !_positionIsSucceed ) { // move to abyss Matrix4f jumpPose = getNPC()->getCatToy()->getJumpPose(); Vector3f jumpPos( jumpPose[3][0], jumpPose[3][1], jumpPose[3][2] ); call( new NPCMove( getNPC(), jumpPos ) ); _positionIsSucceed = true; return; } if( !_directionIsSucceed ) { // jumper absolute orientation Vector3f jumperAt = getNPC()->getJumper()->getClump()->getFrame()->getAt(); jumperAt.normalize(); // direction of cat toy jump Matrix4f jumpPose = getNPC()->getCatToy()->getJumpPose(); Vector3f targetDir( jumpPose[2][0], 0.0f, jumpPose[2][2] ); targetDir.normalize(); // angle to target Vector3f atH = jumperAt; atH[1] = 0; atH.normalize(); Vector3f dirH = targetDir; dirH[1] = 0; dirH.normalize(); float targetAngle = ::calcAngle( dirH, atH, Vector3f( 0,1,0 ) ); if( fabs( targetAngle ) < 1.0f ) { _directionIsSucceed = true; return; } else { // turn jumper by AI algo float aiRotationVel = 180.0f; float aiRotationAngle = sgn( targetAngle ) * aiRotationVel * dt; if( fabs( aiRotationAngle ) > fabs( targetAngle ) ) aiRotationAngle = targetAngle; getNPC()->getJumper()->getClump()->getFrame()->rotateRelative( Vector3f( 0,1,0 ), aiRotationAngle ); } } } } // else, turn & track towards the target else if( getNPC()->getJumper()->getPhase() == ::jpFreeFalling ) { // jumper absolute orientation Vector3f jumperAt = getNPC()->getJumper()->getClump()->getFrame()->getAt(); jumperAt.normalize(); Vector3f jumperRight = getNPC()->getJumper()->getClump()->getFrame()->getRight(); jumperRight.normalize(); Vector3f jumperUp = getNPC()->getJumper()->getClump()->getFrame()->getUp(); jumperUp.normalize(); // retrieve current jumper position Vector3f jumperPos = getNPC()->getJumper()->getClump()->getFrame()->getPos(); jumperPos += Vector3f( 0, jumperRoamingSphereSize, 0 ); // wingsuit bool wingsuit = database::Suit::getRecord(getNPC()->getJumper()->getVirtues()->equipment.suit.id)->wingsuit; // leveling // wlo - when npc higher //if (!wingsuit) { // if (jumperPos[1] - _targetPos[1] > 1500.0f) { // spinalCord->wlo = true; // } else if (jumperPos[1] - _targetPos[1] < -1500.0f) { // spinalCord->hook = true; // } //} // direction to target Vector3f targetDir = _targetPos - jumperPos; float distanceToTarget = Vector3f( targetDir[0], 0, targetDir[2] ).length(); targetDir.normalize(); // landing too far away? let's deploy in order to return safely // glide ratio is based on canopy size database::Canopy *canopy = database::Canopy::getRecord(getNPC()->getJumper()->getVirtues()->equipment.canopy.id); Vector3f pos = getNPC()->getJumper()->getClump()->getFrame()->getPos(); float glide = canopy->square / 150.0f; float alt = pos[1]; pos[1] = 0; bool farEnough = pos.length() >= alt*glide; //getCore()->logMessage("alt: %2.5f; dst: %2.5f; coverage: %2.5f", alt, pos.length(), alt*glide); // deploy now? if ((alt <= 85000.0f || farEnough) && alt <= 150000.0f) { if (getNPC()->getJumper()->getCanopySimulator()) { //getCore()->logMessage("npc pull. Far enough: %d", (int)farEnough); spinalCord->phase = true; spinalCord->modifier = wingsuit; } else { //getCore()->logMessage("npc pull reserve. Far enough: %d", (int)farEnough); spinalCord->pullReserve = true; spinalCord->modifier = wingsuit; } } // if toy tracking modifier is on if( wingsuit /* getNPC()->getCatToy()->getModifier()*/ ) { // sum up target direction Vector3f targetFlatAt( getNPC()->getCatToy()->getCurrentPose()[2][0], 0, getNPC()->getCatToy()->getCurrentPose()[2][2] ); /*getCore()->logMessage( "POS: %3.2f %3.2f %3.2f AT : %3.2f 0.0 %3.2f", getNPC()->getCatToy()->getCurrentPose()[3][0], getNPC()->getCatToy()->getCurrentPose()[3][1], getNPC()->getCatToy()->getCurrentPose()[3][2], targetFlatAt[0], targetFlatAt[2] );*/ targetFlatAt.normalize(); targetDir += targetFlatAt * 3; targetDir.normalize(); } // horizontal steering float minAngle = 5.0f; float minValue = 0.0f; float maxAngle = 45.0f; float maxValue = 1.0f; // angle to target Vector3f atH = jumperAt; // headdown if (getNPC()->getJumper()->getDefaultPose() == 1) { atH = jumperUp; minAngle = 25.0f; maxValue = 0.1f; // sitfly } else if (getNPC()->getJumper()->getDefaultPose() == 2) { atH = jumperUp; atH[2] *= -1; //minAngle = 25.0f; maxValue = 0.1f; } atH[1] = 0; atH.normalize(); Vector3f dirH = targetDir; dirH[1] = 0; dirH.normalize(); float targetAngle = ::calcAngle( dirH, atH, Vector3f( 0,1,0 ) ); // inclination angle relative to the horizont float horizontalAngle = -1 * ::calcAngle( atH, jumperUp, jumperRight ); // horizontal steering float factor = ( fabs( targetAngle ) - minAngle ) / ( maxAngle - minAngle ); factor = ( factor < 0 ) ? 0 : ( ( factor > 1 ) ? 1 : factor ); float impulse = minValue * ( 1 - factor ) + maxValue * factor; if (wingsuit) impulse = 0.0f; // smooth impulse impulse = pow( impulse, 1.25f ); if (alt <= 130000.0f) impulse = 0.0f; // apply impulse if( targetAngle < 0 ) { spinalCord->right = impulse; } else { spinalCord->left = impulse; } // relation btw desired inclination and target angle minAngle = 5.0f; minValue = 25.0f; maxAngle = 90.0f; maxValue = 0.0f; factor = ( fabs( targetAngle ) - minAngle ) / ( maxAngle - minAngle ); factor = ( factor < 0 ) ? 0 : ( ( factor > 1 ) ? 1 : factor ); float desiredInclination = minValue * ( 1 - factor ) + maxValue * factor; // inclination difference float inclinationDifference = desiredInclination - horizontalAngle; // vertical steering minAngle = 0.0f; minValue = 0.0f; maxAngle = 30.0f; maxValue = 1.0f; factor = ( fabs( inclinationDifference ) - minAngle ) / ( maxAngle - minAngle ); factor = ( factor < 0 ) ? 0 : ( ( factor > 1 ) ? 1 : factor ); impulse = minValue * ( 1 - factor ) + maxValue * factor; if (!wingsuit && distanceToTarget > 2500.0f && alt > 130000.0f) { if( inclinationDifference < 0 ) { spinalCord->down += impulse; if (spinalCord->down > 1.0f) spinalCord->down = 1.0f; } else { spinalCord->up += impulse; if (spinalCord->up > 1.0f) spinalCord->up = 1.0f; } } // tracking modifier if( fabs( targetAngle ) < 90.0f && distanceToTarget > 2500.0f ) { spinalCord->modifier = 0.0f; spinalCord->trigger_modifier = false; } else { spinalCord->modifier = 0.0f; spinalCord->trigger_modifier = false; } if (wingsuit || alt <= 130000.0f) spinalCord->modifier = 1.0f; if (wingsuit || alt <= 130000.0f) spinalCord->trigger_modifier = true; return; // force tracking in several condition if( getNPC()->getCatToy()->getModifier() ) { // not a skydiving? if( !getNPC()->getJumper()->getCanopySimulator()->getGearRecord()->skydiving ) { // imitate cat toy modifier spinalCord->modifier = getNPC()->getCatToy()->getModifier(); } else { Vector3f cattoyFaceH( catToyPose[2][0], 0, catToyPose[2][2] ); cattoyFaceH.normalize(); Vector3f npcFaceH = getNPC()->getJumper()->getClump()->getFrame()->getAt(); npcFaceH[1] = 0; npcFaceH.normalize(); //if( Vector3f::dot( dirH, cattoyFaceH ) > 0.85f ) spinalCord->modifier = true; } } } }
PhpPlugin::PhpPlugin(IManager* manager) : IPlugin(manager) , m_clangOldFlag(false) , m_browser(NULL) , m_debuggerPane(NULL) , m_xdebugLocalsView(NULL) , m_xdebugEvalPane(NULL) , m_showWelcomePage(false) , m_toggleToolbar(false) { m_lint.Reset(new PHPLint(this)); // Add new workspace type clWorkspaceManager::Get().RegisterWorkspace(new PHPWorkspace()); m_longName = _("PHP Plugin for the codelite IDE"); m_shortName = wxT("PHP"); // Instantiate the bitmaps, we do this so they will be populated in wxXmlResource // Sigleton class PHPWorkspace::Get()->SetPluginManager(m_mgr); XDebugManager::Initialize(this); // BitmapLoader::RegisterImage(FileExtManager::TypeWorkspacePHP, images.Bitmap("m_bmpPhpWorkspace")); // Add our UI // create tab (possibly detached) m_workspaceView = new PHPWorkspaceView(m_mgr->GetWorkspaceView()->GetBook(), m_mgr); m_mgr->GetWorkspaceView()->AddPage(m_workspaceView, PHPStrings::PHP_WORKSPACE_VIEW_LABEL); PHPCodeCompletion::Instance()->SetManager(m_mgr); PHPEditorContextMenu::Instance()->ConnectEvents(); PHPParserThread::Instance()->Start(); // Pass the manager class to the context menu manager PHPEditorContextMenu::Instance()->SetManager(m_mgr); // Connect events EventNotifier::Get()->Connect( wxEVT_CC_SHOW_QUICK_OUTLINE, clCodeCompletionEventHandler(PhpPlugin::OnShowQuickOutline), NULL, this); EventNotifier::Get()->Connect( wxEVT_DBG_UI_DELTE_ALL_BREAKPOINTS, clDebugEventHandler(PhpPlugin::OnXDebugDeleteAllBreakpoints), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_CREATE_NEW_WORKSPACE, clCommandEventHandler(PhpPlugin::OnNewWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_NEW_PROJECT_WIZARD_SHOWING, clNewProjectEventHandler(PhpPlugin::OnNewProject), NULL, this); EventNotifier::Get()->Connect( wxEVT_NEW_PROJECT_WIZARD_FINISHED, clNewProjectEventHandler(PhpPlugin::OnNewProjectFinish), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_IS_WORKSPACE_OPEN, clCommandEventHandler(PhpPlugin::OnIsWorkspaceOpen), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_CLOSE_WORKSPACE, clCommandEventHandler(PhpPlugin::OnCloseWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_OPEN_WORKSPACE, clCommandEventHandler(PhpPlugin::OnOpenWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_RELOAD_WORKSPACE, clCommandEventHandler(PhpPlugin::OnReloadWorkspace), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_OPEN_RESOURCE, wxCommandEventHandler(PhpPlugin::OnOpenResource), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_GET_WORKSPACE_FILES, wxCommandEventHandler(PhpPlugin::OnGetWorkspaceFiles), NULL, this); EventNotifier::Get()->Connect(wxEVT_CMD_GET_CURRENT_FILE_PROJECT_FILES, wxCommandEventHandler(PhpPlugin::OnGetCurrentFileProjectFiles), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_GET_ACTIVE_PROJECT_FILES, wxCommandEventHandler(PhpPlugin::OnGetActiveProjectFiles), NULL, this); EventNotifier::Get()->Connect( wxEVT_CMD_FIND_IN_FILES_DISMISSED, clCommandEventHandler(PhpPlugin::OnFindInFilesDismissed), NULL, this); EventNotifier::Get()->Connect(wxEVT_FILE_SAVED, clCommandEventHandler(PhpPlugin::OnFileSaved), NULL, this); EventNotifier::Get()->Bind(wxEVT_FILES_MODIFIED_REPLACE_IN_FILES, &PhpPlugin::OnReplaceInFiles, this); EventNotifier::Get()->Connect(wxEVT_PHP_LOAD_URL, PHPEventHandler(PhpPlugin::OnLoadURL), NULL, this); EventNotifier::Get()->Connect( wxEVT_ALL_EDITORS_CLOSED, wxCommandEventHandler(PhpPlugin::OnAllEditorsClosed), NULL, this); EventNotifier::Get()->Bind(wxEVT_XDEBUG_SESSION_STARTED, &PhpPlugin::OnDebugStarted, this); EventNotifier::Get()->Bind(wxEVT_XDEBUG_SESSION_ENDED, &PhpPlugin::OnDebugEnded, this); EventNotifier::Get()->Connect(wxEVT_GOING_DOWN, clCommandEventHandler(PhpPlugin::OnGoingDown), NULL, this); EventNotifier::Get()->Bind(wxEVT_FILE_SYSTEM_UPDATED, &PhpPlugin::OnFileSysetmUpdated, this); EventNotifier::Get()->Bind(wxEVT_SAVE_SESSION_NEEDED, &PhpPlugin::OnSaveSession, this); CallAfter(&PhpPlugin::FinalizeStartup); // Extract all CC files from PHP.zip into the folder ~/.codelite/php-plugin/cc wxFileName phpResources(clStandardPaths::Get().GetDataDir(), "PHP.zip"); if(phpResources.Exists()) { clZipReader zipReader(phpResources); wxFileName targetDir(clStandardPaths::Get().GetUserDataDir(), ""); targetDir.AppendDir("php-plugin"); // Don't extract the zip if one of the files on disk is newer or equal to the zip timestamp wxFileName fnSampleFile(targetDir.GetPath(), "basic.php"); fnSampleFile.AppendDir("cc"); PHPConfigurationData config; if(!fnSampleFile.Exists() || // the sample file does not exists // Or the resource file (PHP.zip) is newer than the sample file (phpResources.GetModificationTime().GetTicks() > fnSampleFile.GetModificationTime().GetTicks())) { targetDir.Mkdir(wxS_DIR_DEFAULT, wxPATH_MKDIR_FULL); zipReader.Extract("*", targetDir.GetPath()); // Make sure we add this path to the general PHP settings targetDir.AppendDir("cc"); // the CC files are located under an internal folder named "cc" (lowercase) if(config.Load().GetCcIncludePath().Index(targetDir.GetPath()) == wxNOT_FOUND) { config.Load().GetCcIncludePath().Add(targetDir.GetPath()); config.Save(); } } else if(fnSampleFile.Exists()) { // Ensure that we have the core PHP code completion methods if(config.Load().GetCcIncludePath().Index(fnSampleFile.GetPath()) == wxNOT_FOUND) { config.Load().GetCcIncludePath().Add(fnSampleFile.GetPath()); config.Save(); } } } else { CL_WARNING("PHP: Could not locate PHP resources 'PHP.zip' => '%s'", phpResources.GetFullPath()); } }
bool ReadSOG(const std::string &input_file, Game *game) { event_parse_resourcefile(); map<string, evpair> event_filenames; for (evpair e : event_sequence) { event_filenames[event_get_function_name(e.first, e.second) + ".edl"] = e; if (!e.second && event_is_instance(e.first, e.second)) { // For stacked events, allow more than just the 0th instance. // Needs to be big enough to accommodate the largest vk_ constant and also // provide a reasonable number of alarm events, user events, etc. // Using BYTE_MAX gives us both, and plenty of wiggle room. for (int i = 1; i < 255; ++i) { event_filenames[event_get_function_name(e.first, i) + ".edl"] = e; } } } map<evpair, string> events; boost::filesystem::path targetDir(input_file); boost::filesystem::recursive_directory_iterator iter(targetDir), eod; BOOST_FOREACH(boost::filesystem::path const& i, std::make_pair(iter, eod)) { if (is_regular_file(i)) { auto find = event_filenames.find(i.filename().string()); if (find == event_filenames.end()) { errorStream << "Error: unrecognized event file " << i << '.' << std::endl; errorStream << "Supported events:" << std::endl; for (auto st : event_sequence) { errorStream << " - " << event_get_function_name(st.first, st.second); if (!st.second && event_is_instance(st.first, st.second)) { errorStream << ", " << event_get_function_name(st.first, 1); errorStream << ", " << event_get_function_name(st.first, 2); errorStream << ", " << "..."; } errorStream << std::endl; } return false; } else if (std::ifstream f{i.string()}) { evpair eid = find->second; std::string code { std::istreambuf_iterator<char>(f), std::istreambuf_iterator<char>() }; if (!events.insert(std::make_pair(eid, code)).second) { errorStream << "Logic error: Duplicate event " << i << " (" << eid.first << ", " << eid.second << "): your event configuration is broken." << std::endl; return false; } } else { errorStream << "Error: Failed to read " << i << "..." << std::endl; return false; } } else { errorStream << "Warning: unexpected directory or irregular file " << i << '.' << std::endl; } } if (events.empty()) { errorStream << "Error: Failed to read input \"" << input_file << "\". " "Is the game empty?" << std::endl; return false; } game->AddSimpleObject(events); game->AddDefaultRoom(); return true; }