# LICENSE # This software is open source software licensed under GPL3, as found in the COPYING file. # DISCORD # You can follow Noggit's development and get the latest build here: https://discord.gg/UbdFHyM # BUILDING # This project requires CMake to be built. It also requires the following libraries: * OpenGL * StormLib (by Ladislav Zezula) * Boost * Qt 5 Further following libraries are required for MySQL GUID Storage builds: * LibMySQL * MySQLCPPConn ## Windows ## Text in `` below are up to your choice but shall be replaced with the same choice every time the same text is contained. ### MSVC++ ### Any recent version of Microsoft Visual C++ should work. Be sure to remember which version you chose as later on you will have to pick corresponding versions for other dependencies. ### CMake ### Any recent CMake 3.x version should work. Just take the latest. ### Boost ### Install boost to ``. The easiest is to download a pre-built package from https://sourceforge.net/projects/boost/files/boost-binaries/. * Any version from the last years should work, 1.60 at least. * Be sure to pick the right compiler version! * CMake may not support the latest version yet, if you have bad timing, try picking the second newest if configuring fails. ### Qt5 ### Install Qt5 to ``, downloading a pre-built package from https://www.qt.io/download-open-source/#section-2. Note that during installation you only need **one** version of Qt and also only **one** compiler version. If download size is noticably large (more than a few hundred MB), you're probably downloading way too much. ### StormLib ### Download StormLib from https://github.com/ladislav-zezula/StormLib (any recent version). * open CMake GUI * set `CMAKE_INSTALL_PREFIX` (path) to `` (folder should not yet exist). No other things should need to be configured. * open solution with visual studio * build ALL_BUILD * build INSTALL * Repeat for both release and debug. ### Noggit ### * open CMake GUI * set `CMAKE_PREFIX_PATH` (path) to `";"`, e.g. `"C:/Qt/5.6/msvc2015;D:/StormLib/install"` * set `BOOST_ROOT` (path) to ``, e.g. `"C:/local/boost_1_60_0"` * (**unlikely to be required:**) move the libraries of Boost from where they are into `BOOST_ROOT/lib` so that CMake finds them automatically or set `BOOST_LIBRARYDIR` to where your lib are (.dll and .lib). Again, this is **highly** unlikely to be required. * set `CMAKE_INSTALL_PREFIX` (path) to an empty destination, e.g. `"C:/Users/blurb/Documents/noggitinstall` * configure, generate * open solution with visual studio * build ALL_BUILD * build INSTALL To launch noggit you will need the following DLLs from Qt loadable. Install them in the system, or copy them from `C:/Qt/X.X/msvcXXXX/bin` into the directory containing noggit.exe, i.e. `CMAKE_INSTALL_PREFIX` configured. * release: Qt5Core, Qt5OpenGL, Qt5Widgets, Qt5Gui * debug: Qt5Cored, Qt5OpenGLd, Qt5Widgetsd, Qt5Guid ## Linux ## On **Ubuntu** you can install the building requirements using: ```bash sudo apt install freeglut3-dev libboost-all-dev qt5-default libstorm-dev ``` Compile and build using: ```bash mkdir build cd build cmake .. make -j $(nproc) ``` Instead of `make -j $(nproc)` you may want to pick a bigger number than `$(nproc)`, e.g. the number of `CPU cores * 1.5`. If the build pass correctly without errors, you can go into build/bin/ and run noggit. Note that `make install` will probably work but is not tested, and nobody has built distributable packages in years. # DEVELOPMENT # Feel free to ask the owner of the official repository (https://github.com/wowdev/noggit3) for write access or fork and post a pull request. There is a bug tracker at https://github.com/wowdev/noggit3/issues which should be used. Discord, as linked above, may be used for communication. # CODING GUIDELINES # Following is an example for file `src/noggit/ui/foo_ban.hpp`. `.cpp` files are similar. ```cpp // This file is part of Noggit3, licensed under GNU General Public License (version 3). //! \note Include guard shall be using #pragma once #pragma once //! \note Use fully qualified paths rather than "../relative". Order //! includes with own first, then external dependencies, then c++ STL. #include //! \note Namespaces equal directories. (java style packages.) namespace noggit { namespace ui { //! \note Lower case, underscore separated. class foo_ban : public QWidget { Q_OBJECT; public: //! \note Long parameter list. Would be more than 80 chars. //! chars. Break with comma in front. Use spaces to be //! aligned below the braces. foo_ban ( type name , type_2 const& name_2 , type const& name3 ) : QWidget (nullptr) //! \note Prefer initialization lists over assignment. , _var (std::move (name)) {} //! \note Use const where possible. No space between name and //! braces when no arguments are given. void render() const; //! \note If you really need getters and setters, your design //! might be broken. Please avoid them or consider just a //! public data member, or use proper methods with semantics. type const& var() const { return _var; } void var (type var_) { _var = std::move (var_); } //! \note Prefer const where possible. If you need to copy, //! just take a `T`. Otherwise prefer taking a `T const&`. //! Don't bother when it comes to tiny types. baz_type count_some_numbers ( std::size_t begin , std::size_t end ) const { bazs_type bazs; //! \note Prefer construction over assignment. Prefer //! preincrement. for (size_t it (begin); it != end; ++it) { bazs.emplace_back (it); } //! \note Prefer STL algorithms over hand written code. assert (!bazs.empty()); auto const smallest (std::min_element (bazs.begin(), bazs.end())); return *smallest; } private: //! \note Member variables are prefixed with an underscore. type _var; //! \note Typedef when using complex types. Fully qualify //! types. using baz_type = type_2; using bazs_type = std::vector; bazs_type _bazs; } } } ```