コード例 #1
0
ファイル: ScriptingContext.cpp プロジェクト: pushrbx/Pyx
void Pyx::Scripting::ScriptingContext::ReloadScripts()
{
    PyxContext::GetInstance().Log(XorStringA("[Scripting] Reloading scripts ..."));

    const auto& pyxSettings = PyxContext::GetInstance().GetSettings();

    for (auto* pScript : m_scripts)
    {
        if (pScript->IsRunning()) 
            pScript->Stop();
        delete pScript;
    }

    m_scripts.clear();

    WIN32_FIND_DATA ffd;
    HANDLE hFind = INVALID_HANDLE_VALUE;
    DWORD dwError = 0;
    hFind = FindFirstFileW(std::wstring(pyxSettings.RootDirectory + pyxSettings.ScriptsDirectory + L"\\*").c_str(), &ffd);

    if (INVALID_HANDLE_VALUE == hFind)
        return;

    do
    {
        if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
            auto fileName = pyxSettings.RootDirectory + pyxSettings.ScriptsDirectory + L"\\" + std::wstring(ffd.cFileName) + L"\\script.def";
            auto scriptName = std::wstring(ffd.cFileName);
            DWORD dwAttrib = GetFileAttributesW(fileName.c_str());
            if (dwAttrib != INVALID_FILE_ATTRIBUTES &&
                !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY))
            {
                ScriptDef scriptDef(fileName);
                if (scriptDef.IsScript())
                {
                    PyxContext::GetInstance().Log(XorStringW(L"[Scripting] Found script \"%s\""), scriptDef.GetName().c_str());
                    m_scripts.push_back(new Script(scriptDef.GetName(), fileName));
                }
            }
        }
    } while (FindNextFileW(hFind, &ffd) != 0);

    sort(m_scripts.begin(), m_scripts.end(), [](Script* a, Script* b) {
        return a->GetName().compare(b->GetName()) < 0;
    });
    
}
コード例 #2
0
ファイル: ImGuiImpl.cpp プロジェクト: hardcpp/PacketStudio
void Pyx::Graphics::Gui::ImGuiImpl::BuildMainMenuBar()
{
	ImGui::PushStyleVar(ImGuiStyleVar_Alpha, 0.95f);
    if (ImGui::BeginMainMenuBar())
    {

        if (ImGui::BeginMenu((std::string(ICON_MD_HOME) + XorStringA(" Pyx")).c_str()))
        {
			ImGui::MenuItem((std::string(ICON_MD_FORMAT_LIST_BULLETED) + XorStringA(" Show console")).c_str(), nullptr, &m_showConsole);
			ImGui::MenuItem((std::string(ICON_MD_BUILD) + XorStringA(" Show debug window")).c_str(), nullptr, &m_showDebugWindow);
			ImGui::Separator();
            if (ImGui::MenuItem((std::string(ICON_MD_EXIT_TO_APP) + XorStringA(" Unload")).c_str())) { PyxContext::GetInstance().RequestShutdown(); }
            ImGui::EndMenu();
        }

        if (ImGui::BeginMenu((std::string(ICON_MD_EXTENSION) + XorStringA(" Scripts")).c_str()))
        {    
            
            for (auto* pScript : Scripting::ScriptingContext::GetInstance().GetScripts())
            {
                auto& name = pScript->GetName();
                if (ImGui::MenuItem((std::string(pScript->IsRunning() ? ICON_MD_CLEAR : ICON_MD_PLAY_CIRCLE_OUTLINE) + " " + Utility::String::utf8_encode(name)).c_str(), pScript->IsRunning() ? XorStringA("(running)") : XorStringA("(stopped)")))
                    pScript->IsRunning() ? pScript->Stop() : pScript->Start();
            }

            ImGui::Separator();
            if (ImGui::MenuItem((std::string(ICON_MD_REPLAY) + XorStringA(" Reload scripts")).c_str())) { Scripting::ScriptingContext::GetInstance().ReloadScripts(); }
            ImGui::EndMenu();
        }
        
        GetOnDrawMainMenuBarCallbacks().Run(this);
        Scripting::ScriptingContext::GetInstance().FireCallbacks(XorStringW(L"ImGui.OnRenderMainMenuBar"));

        ImGui::EndMainMenuBar();
    }
	ImGui::PopStyleVar();
}
コード例 #3
0
ファイル: ImGuiImpl.cpp プロジェクト: hardcpp/PacketStudio
void Pyx::Graphics::Gui::ImGuiImpl::OnFrame()
{
    if (m_isInitialized)
    {

        if (!m_isResourcesCreated)
            CreateResources();

        if (m_isResourcesCreated)
        {
            auto* pRenderer = GraphicsContext::GetInstance().GetMainRenderer();

            if (pRenderer)
            {

                auto& io = ImGui::GetIO();

                if (Input::InputContext::GetInstance().CursorIsVisible() && pRenderer->GetAttachedWindow() == GetForegroundWindow())
                {
                    auto cursorPos = Input::InputContext::GetInstance().GetCursorPosition();
                    ScreenToClient(pRenderer->GetAttachedWindow(), &cursorPos);
                    io.MousePos.x = cursorPos.x;
                    io.MousePos.y = cursorPos.y;
                    io.MouseDown[0] = GetAsyncKeyState(VK_LBUTTON) != 0;
                    io.MouseDown[1] = GetAsyncKeyState(VK_RBUTTON) != 0;
                    io.MouseDown[2] = GetAsyncKeyState(VK_MBUTTON) != 0;
                    io.KeyCtrl = GetAsyncKeyState(VK_CONTROL) != 0;
                    io.KeyShift = GetAsyncKeyState(VK_SHIFT) != 0;
                    io.KeyAlt = GetAsyncKeyState(VK_MENU) != 0;
                }

                switch (pRenderer->GetRendererType())
                {
                case RendererType::D3D9:
                {
                    ImGui_ImplDX9_NewFrame();
                    break;
                }
                case RendererType::D3D11:
                {
                    ImGui_ImplDX11_NewFrame();
                    break;
                }
                default:
                    return;
                }

				if (m_isVisible)
				{

					BuildMainMenuBar();

					if (m_showConsole)
						BuildLogsWindow();

					if (m_showDebugWindow)
						BuildDebugWindow();

					GetOnRenderCallbacks().Run(this);
					Scripting::ScriptingContext::GetInstance().FireCallbacks(XorStringW(L"ImGui.OnRender"));

					ImGui::Render();

				}

            }

			static int lastToggleVisibilityTick = 0;
			if (GetTickCount() - lastToggleVisibilityTick > 250)
			{

				bool shouldToggleGui = true;
				for (auto vKey : PyxContext::GetInstance().GetSettings().GuiToggleVisibilityHotkeys)
				{
					if (GetAsyncKeyState(vKey) == NULL)
					{
						shouldToggleGui = false;
						break;
					}
				}

				if (shouldToggleGui)
				{
					ToggleVisibility(!IsVisible());
					lastToggleVisibilityTick = GetTickCount();
				}

			}

            static int lastToggleConsoleVisibilityTick = 0;
            if (GetTickCount() - lastToggleConsoleVisibilityTick > 250)
            {

                bool shouldToggleConsole = true;
                for (auto vKey : PyxContext::GetInstance().GetSettings().ImGuiToggleConsoleHotkeys)
                {
                    if (GetAsyncKeyState(vKey) == NULL)
                    {
                        shouldToggleConsole = false;
                        break;
                    }
                }

                if (shouldToggleConsole)
                {
                    m_showConsole = !m_showConsole;
                    lastToggleConsoleVisibilityTick = GetTickCount();
                }

            }

        }

    }

}