Sdk/Application: Add command-line arguments handling
Former-commit-id: 9f98c2fea531e23540c213d3c1e4c85391fc9e1a [formerly b3cb8fff86ac0a754b72baf9e6278f20b407ef17] [formerly 8665dec44d98961698bdeaa63e670e2e15de7d1d [formerly d8dfeaae490b2efd430599f2b1fa02c531aa4de6]] Former-commit-id: 51c00f9263c4c7e193bf2ca8de860e03e9d0f402 [formerly d09b90f14e62f85c0056bf4ba872d9975efde1eb] Former-commit-id: f82b2332083d6d6099ebece01e239c99d15f3b5f
This commit is contained in:
parent
8caeba0a48
commit
f0787cb505
|
|
@ -11,6 +11,7 @@
|
|||
#include <NDK/EntityOwner.hpp>
|
||||
#include <NDK/World.hpp>
|
||||
#include <Nazara/Core/Clock.hpp>
|
||||
#include <map>
|
||||
#include <list>
|
||||
#include <set>
|
||||
#include <vector>
|
||||
|
|
@ -35,7 +36,7 @@ namespace Ndk
|
|||
#endif
|
||||
|
||||
inline Application();
|
||||
inline Application(int argc, const char* argv[]);
|
||||
Application(int argc, char* argv[]);
|
||||
Application(const Application&) = delete;
|
||||
Application(Application&&) = delete;
|
||||
inline ~Application();
|
||||
|
|
@ -53,8 +54,14 @@ namespace Ndk
|
|||
inline FPSCounterOverlay& GetFPSCounterOverlay(std::size_t windowIndex = 0U);
|
||||
#endif
|
||||
|
||||
inline const std::set<Nz::String>& GetOptions() const;
|
||||
inline const std::map<Nz::String, Nz::String>& GetParameters() const;
|
||||
|
||||
inline float GetUpdateTime() const;
|
||||
|
||||
inline bool HasOption(const Nz::String& option) const;
|
||||
inline bool HasParameter(const Nz::String& key, Nz::String* value) const;
|
||||
|
||||
#ifndef NDK_SERVER
|
||||
inline bool IsConsoleEnabled() const;
|
||||
inline bool IsFPSCounterEnabled() const;
|
||||
|
|
@ -120,6 +127,8 @@ namespace Ndk
|
|||
template<typename T> void SetupWindow(WindowInfo& info, T* renderTarget, std::true_type /*isRenderTarget*/);
|
||||
template<typename T> void SetupWindow(WindowInfo& /*info*/, T* /*renderTarget*/, std::false_type /*isNotRenderTarget*/);
|
||||
|
||||
std::map<Nz::String, Nz::String> m_parameters;
|
||||
std::set<Nz::String> m_options;
|
||||
std::vector<WindowInfo> m_windows;
|
||||
#endif
|
||||
std::list<World> m_worlds;
|
||||
|
|
|
|||
|
|
@ -33,22 +33,6 @@ namespace Ndk
|
|||
Sdk::Initialize();
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Constructs an Application object with command-line arguments
|
||||
*
|
||||
* Pass the argc and argv arguments from the main function.
|
||||
*
|
||||
* Command-line arguments can be retrieved by application methods
|
||||
*
|
||||
* This calls Sdk::Initialize()
|
||||
*
|
||||
* \remark Only one Application instance can exist at a time
|
||||
*/
|
||||
inline Application::Application(int argc, const char* argv[]) :
|
||||
Application()
|
||||
{
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Destructs the application object
|
||||
*
|
||||
|
|
@ -233,6 +217,30 @@ namespace Ndk
|
|||
}
|
||||
#endif
|
||||
|
||||
/*!
|
||||
* \brief Gets the options used to start the application
|
||||
*
|
||||
* Options are defined as "-optionName" in command-line and are always lower-case
|
||||
*
|
||||
* \return Command-line options
|
||||
*/
|
||||
inline const std::set<Nz::String>& Application::GetOptions() const
|
||||
{
|
||||
return m_options;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Gets the parameters used to start the application
|
||||
*
|
||||
* Parameters are defined as "-key=value" in command-line, their key is lower-case but value capitals are kept.
|
||||
*
|
||||
* \return Command-line parameters
|
||||
*/
|
||||
inline const std::map<Nz::String, Nz::String>& Application::GetParameters() const
|
||||
{
|
||||
return m_parameters;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Gets the update time of the application
|
||||
* \return Update rate
|
||||
|
|
@ -242,6 +250,46 @@ namespace Ndk
|
|||
return m_updateTime;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Query for a command-line option
|
||||
*
|
||||
* \param option Option name
|
||||
*
|
||||
* \remark option must be lower-case
|
||||
*
|
||||
* \return True if option is present
|
||||
*
|
||||
* \see GetOptions
|
||||
*/
|
||||
inline bool Application::HasOption(const Nz::String& option) const
|
||||
{
|
||||
return m_options.count(option) != 0;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Query for a command-line option
|
||||
*
|
||||
* \param key Parameter name
|
||||
* \param value Optional string to receive the parameter value
|
||||
*
|
||||
* \remark key must be lower-case
|
||||
*
|
||||
* \return True if parameter is present
|
||||
*
|
||||
* \see GetParameters
|
||||
*/
|
||||
inline bool Application::HasParameter(const Nz::String& key, Nz::String* value) const
|
||||
{
|
||||
auto it = m_parameters.find(key);
|
||||
if (it == m_parameters.end())
|
||||
return false;
|
||||
|
||||
if (value)
|
||||
*value = it->second;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Checks if the console overlay is enabled
|
||||
*
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@
|
|||
// For conditions of distribution and use, see copyright notice in Prerequesites.hpp
|
||||
|
||||
#include <NDK/Application.hpp>
|
||||
#include <regex>
|
||||
|
||||
#ifndef NDK_SERVER
|
||||
#include <NDK/Components/CameraComponent.hpp>
|
||||
|
|
@ -21,6 +22,54 @@ namespace Ndk
|
|||
* \brief NDK class that represents the application, it offers a set of tools to ease the development
|
||||
*/
|
||||
|
||||
/*!
|
||||
* \brief Constructs an Application object with command-line arguments
|
||||
*
|
||||
* Pass the argc and argv arguments from the main function.
|
||||
*
|
||||
* Command-line arguments can be retrieved by application methods
|
||||
*
|
||||
* This calls Sdk::Initialize()
|
||||
*
|
||||
* \remark Only one Application instance can exist at a time
|
||||
*/
|
||||
inline Application::Application(int argc, char* argv[]) :
|
||||
Application()
|
||||
{
|
||||
std::regex optionRegex(R"(-(\w+))");
|
||||
std::regex valueRegex(R"(-(\w+)\s*=\s*(.+))");
|
||||
|
||||
std::smatch results;
|
||||
|
||||
for (int i = 1; i < argc; ++i)
|
||||
{
|
||||
std::string argument(argv[i]);
|
||||
if (std::regex_match(argument, results, valueRegex))
|
||||
{
|
||||
Nz::String key(results[1].str());
|
||||
Nz::String value(results[2].str());
|
||||
|
||||
m_parameters[key.ToLower()] = value;
|
||||
NazaraDebug("Registred parameter from command-line: " + key.ToLower() + "=" + value);
|
||||
}
|
||||
else if (std::regex_match(argument, results, optionRegex))
|
||||
{
|
||||
Nz::String option(results[1].str());
|
||||
|
||||
m_options.insert(option);
|
||||
NazaraDebug("Registred option from command-line: " + option);
|
||||
}
|
||||
else
|
||||
NazaraWarning("Ignored command-line argument #" + Nz::String::Number(i) + " \"" + argument + '"');
|
||||
}
|
||||
|
||||
if (HasOption("console"))
|
||||
EnableConsole(true);
|
||||
|
||||
if (HasOption("fpscounter"))
|
||||
EnableFPSCounter(true);
|
||||
}
|
||||
|
||||
/*!
|
||||
* \brief Runs the application by updating worlds, taking care about windows, ...
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -9,16 +9,14 @@
|
|||
#include <Nazara/Utility.hpp>
|
||||
#include <NDK/Application.hpp>
|
||||
#include <iostream>
|
||||
#include <vector>
|
||||
#include <unordered_map>
|
||||
|
||||
int main()
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
// This "example" has only one purpose: Giving an empty project for you to test whatever you want
|
||||
// If you wish to have multiple test projects, you only have to copy/paste this directory and change the name in the build.lua
|
||||
Ndk::Application app;
|
||||
// This "example" has only one purpose: Giving an empty project for you to test whatever you want
|
||||
// If you wish to have multiple test projects, you only have to copy/paste this directory and change the name in the build.lua
|
||||
Ndk::Application application(argc, argv);
|
||||
|
||||
// Do what you want here
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
// Do what you want here
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
|
@ -9,9 +9,9 @@
|
|||
#include <NDK/World.hpp>
|
||||
#include <iostream>
|
||||
|
||||
int main()
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
Ndk::Application application;
|
||||
Ndk::Application application(argc, argv);
|
||||
|
||||
Nz::RenderWindow& mainWindow = application.AddWindow<Nz::RenderWindow>();
|
||||
mainWindow.Create(Nz::VideoMode(800, 600, 32), "Test");
|
||||
|
|
|
|||
Loading…
Reference in New Issue