A modern C++ tweening library

Overview

Tweeny

Packaging status

Tweeny is an inbetweening library designed for the creation of complex animations for games and other beautiful interactive software. It leverages features of modern C++ to empower developers with an intuitive API for declaring tweenings of any type of value, as long as they support arithmetic operations.

The goal of Tweeny is to provide means to create fluid interpolations when animating position, scale, rotation, frames or other values of screen objects, by setting their values as the tween starting point and then, after each tween step, plugging back the result.

It features:

  • A descriptive and (hopefully) intuitive API,
  • 30+ easing functions,
  • Allows custom easing functions,
  • Multi-point tweening,
  • Simultaneous tween of heterogeneous value sets,
  • Timeline-like usage (allows seeking to any point),
  • Header-only
  • Zero external dependencies
  • Steps forwards or backwards :)
  • Accepts lambdas, functors and functions as step and seek callbacks

Obligatory hello world example:

Linearly interpolate character by character from the word hello to world in 50 steps:

auto helloworld = tweeny::from('h','e','l','l','o').to('w','o','r','l','d').during(50);
for (int i = 0; i < 50; i++) {
    for (char c : helloworld.step(1)) { printf("%c", c); }
    printf("\n");
}

Relevant code:

  • 1: create the tween instance starting with characters of the hello word, adds a tween target with the chars of the world word and specify it should reach it in 50 steps.
  • 3: move the tween forward by one step. Use the return value of it (which ill be a std::array<char, 5> in this case) to set up a for loop iterating in each char, printing it.

Installation methods:

Using your package manager

There are some packages for tweeny made by some great people. Repology has a list of them and their versions here. Thanks, great people!

Not installing it

You just need to adjust your include path to point to the include/ folder after you've cloned this repository.

Copying the include folder:

Tweeny itself is a header only library. You can copy the include/ folder into your project folder and then include from it: #include "tweeny/tweeny.h"

Copying the tweeny-<version>.h header

Since version 3.1.1 tweeny releases include a single-header file with all the necessary code glued together. Simply drop it on your project and/or adjust the include path and then #include "tweeny-3.1.1.h".

CMake subproject

This is useful if you are using CMake already. Copy the whole tweeny project and include it in a top-level CMakeLists.txt file and then use target_link_libraries to add it to your target:

add_subdirectory(tweeny)
target_link_libraries(yourtarget tweeny)

This will add the include/ folder to your search path, and you can #include "tweeny.h".

Doxygen documentation

This library is documented using Doxygen. If you intend to generate docs, specify the flag TWEENY_BUILD_DOCUMENTATION when generating CMake build files (e.g: cmake .. -DTWEENY_BUILD_DOCUMENTATION=1). You will need doxygen installed.

Contributing

Tweeny is open-source, meaning that it is open to modifications and contrubutions from the community (you are very much encouraged to do so!). However, we'd appreciate if you follow these guidelines:

  • Don't use PascalCase nor snake_case in names
  • Use camelCase, but try to avoid multi word names as hard as possible
  • Document code using Doxygen
  • Implementation details should go inside tweeny::detail namespace.
  • Template implementations should go into a .tcc file

Examples:

Demo code showcasing some of Tweeny features can be seen in the tweeny-demo repository. This repository also has instructions on how to build them.

Comments
  • Help with duration

    Help with duration

    Hi, I have the following code:

    #define DUR_FADE_IN 1
    #define DUR_FADE_OUT 50
    
    tweeny::tween<float> t_sidebar;
    tweeny::tween<float> t_si;
    
    bool show_sidebar = false;
    
    void SidebarHandler::init(Sidebar* sidebar, SidebarIndicator* sidebar_indicator)
    {
    	m_sidebar = sidebar;
    	m_sidebar_indicator = sidebar_indicator;
    
    	t_sidebar = tweeny::from(m_sidebar->m_alpha).to(1.0f); //starts at 0.0f
    	t_si = tweeny::from(m_sidebar_indicator->m_alpha).to(0.0f); //starts at 1.0f
    }
    
    void SidebarHandler::update(float dt)
    {
    	const ImVec2& m_pos = ImGui::GetMousePos();
    	const int min = Sidebar_c::pos.x + Sidebar_c::indicator_size.x;
    	const int dist = m_pos.x - min;
    
    	if (dist <= 0 || m_sidebar->m_has_opened)
    		show_sidebar = true;
    	else
    		show_sidebar = false;
    
    	if (show_sidebar)
    	{
    		t_sidebar.during(DUR_FADE_IN);
    		t_si.during(DUR_FADE_IN);
    
    		t_sidebar.forward();
    		t_si.forward();
    	}
    	else
    	{
    		t_sidebar.during(DUR_FADE_OUT);
    		t_si.during(DUR_FADE_OUT);
    
    		t_sidebar.backward();
    		t_si.backward();
    	}
    
    	const float da = t_sidebar.step(dt);
    	const float da2 = t_si.step(dt);
    
    	m_sidebar->m_alpha = da;
    	m_sidebar_indicator->m_alpha = da2;
    }
    

    What the code does is that when the mouse is hovered in the side, the sidebar indicator (instant) should disappear while it shows the sidebar (instant). If unhovered, hide sidebar (should fade out) and show sidebar indicator (should fade in)

    But what's happening is when i test the values:

    • Making the DUR_FADE_IN to 1 makes it wait for delay before actually showing for some reason.
    • Making the DUR_FADE_IN to 5 makes it wait for delay (same time as above) but with fading effect.

    in other issues (and in the manual) ive observed that the values put in during is higher (around 1000), but in my it takes too long. maybe problem with dt? printing dt seems normal as i get around 0.0166667 and 0.00921989

    opened by flamendless 11
  • Missing stepped easing mode

    Missing stepped easing mode

    There is some use-case where I need stepped interpolation like in Spine

    The current workaround is to implement easing mode:

    namespace tweeny
    {
        class easing_ex {
        public:
            static constexpr struct steppedEasing {
                template<typename T>
                static T run(float position, T start, T end) {
                    return start;
                }
            } stepped = steppedEasing{};
        };
    }
    

    Implement type wrapper to avoid compile error due this :

    namespace tweeny
    {
        template<typename T>
        struct steppedWrapper : T
        {
            steppedWrapper() = default;
            steppedWrapper(steppedWrapper&&) = default;
            steppedWrapper(const steppedWrapper&) = default;
    
            template<typename... Args>
            explicit steppedWrapper(Args&&... args) :
                T{ std::forward<Args>(args)... }
            { }
    
            steppedWrapper& operator = (const steppedWrapper&) = default;
            steppedWrapper& operator = (const T& rhs)
            {
                T::operator = (rhs);
                
                return *this;
            }
    
            friend steppedWrapper operator - (const steppedWrapper& lhs, const steppedWrapper& rhs)
            {
                return lhs;
            }
            friend steppedWrapper operator + (const steppedWrapper& lhs, const steppedWrapper& rhs)
            {
                return lhs;
            }
            friend steppedWrapper operator * (const steppedWrapper& lhs, const steppedWrapper& rhs)
            {
                return lhs;
            }
            friend steppedWrapper operator * (const steppedWrapper& lhs, const float& rhs)
            {
                return lhs;
            }
            friend steppedWrapper operator * (const float& lhs, const steppedWrapper& rhs)
            {
                return rhs;
            }
        };
    }
    

    Test class:

    struct CSmth
    {
        int frame{-1};
        void* user_data{nullptr};
    };
    

    Current code:

        using smth_t = tweeny::steppedWrapper<CSmth>;
    
        auto t = tweeny::from(smth_t{7 })
            .to(smth_t{9}).during(300.0f)
            .via(tweeny::easing_ex::steppedEasing::run<smth_t>);
    
        t.step(0.1f);
    

    Wanted code:

        auto t = tweeny::from(CSmth{7 })
            .to(CSmth{9}).during(300.0f)
            .via(tweeny::easing::stepped);
        t.step(0.1f);
    
    opened by ArnCarveris 9
  • Cannot use project's CMakeLists. Link error if project included in workspace.

    Cannot use project's CMakeLists. Link error if project included in workspace.

    Hi, i was trying to use your library, but the inconvenience is: 1-I cannot use Cmake with this CmakeList. 2-Link error if i try to use it including in my workspace. That .tcc extension does not work (i tried to change it to .h)

    opened by PicosePablo 9
  • fail to build

    fail to build

      /home/xyh/play/cpp/tweeny (master)
    rm -rf build/ ; mkdir build/ ; cd build ; cmake .. ; make
    removed 'build/CMakeFiles/CMakeOutput.log'
    removed 'build/CMakeFiles/cmake.check_cache'
    removed 'build/CMakeFiles/feature_tests.cxx'
    removed 'build/CMakeFiles/3.11.4/CMakeSystem.cmake'
    removed directory 'build/CMakeFiles/3.11.4/CompilerIdC/tmp'
    removed 'build/CMakeFiles/3.11.4/CompilerIdC/CMakeCCompilerId.c'
    removed 'build/CMakeFiles/3.11.4/CompilerIdC/a.out'
    removed directory 'build/CMakeFiles/3.11.4/CompilerIdC'
    removed 'build/CMakeFiles/3.11.4/CMakeCXXCompiler.cmake'
    removed 'build/CMakeFiles/3.11.4/CMakeDetermineCompilerABI_C.bin'
    removed directory 'build/CMakeFiles/3.11.4/CompilerIdCXX/tmp'
    removed 'build/CMakeFiles/3.11.4/CompilerIdCXX/CMakeCXXCompilerId.cpp'
    removed 'build/CMakeFiles/3.11.4/CompilerIdCXX/a.out'
    removed directory 'build/CMakeFiles/3.11.4/CompilerIdCXX'
    removed 'build/CMakeFiles/3.11.4/CMakeCCompiler.cmake'
    removed 'build/CMakeFiles/3.11.4/CMakeDetermineCompilerABI_CXX.bin'
    removed directory 'build/CMakeFiles/3.11.4'
    removed 'build/CMakeFiles/feature_tests.bin'
    removed directory 'build/CMakeFiles/CMakeTmp'
    removed 'build/CMakeFiles/feature_tests.c'
    removed directory 'build/CMakeFiles'
    removed 'build/CPackConfig.cmake'
    removed 'build/TweenyConfigVersion.cmake'
    removed directory 'build/examples/CMakeFiles'
    removed directory 'build/examples'
    removed 'build/CMakeDoxygenDefaults.cmake'
    removed 'build/CMakeDoxyfile.in'
    removed directory 'build/doc/CMakeFiles'
    removed 'build/doc/customdoxygen.css'
    removed 'build/doc/doxy-boot.js'
    removed 'build/doc/README.md'
    removed 'build/doc/MANUAL.dox'
    removed 'build/doc/header.html'
    removed 'build/doc/Doxyfile'
    removed 'build/doc/DoxygenLayout.xml'
    removed 'build/doc/footer.html'
    removed directory 'build/doc'
    removed 'build/CPackSourceConfig.cmake'
    removed 'build/CMakeCache.txt'
    removed directory 'build/'
    -- The C compiler identification is GNU 8.1.1
    -- The CXX compiler identification is GNU 8.1.1
    -- Check for working C compiler: /usr/bin/cc
    -- Check for working C compiler: /usr/bin/cc -- works
    -- Detecting C compiler ABI info
    -- Detecting C compiler ABI info - done
    -- Detecting C compile features
    -- Detecting C compile features - done
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    CMake Error at examples/CMakeLists.txt:62 (string):
      string sub-command STRIP requires two arguments.
    
    
    -- Found Doxygen: /usr/bin/doxygen (found version "1.8.14") found components:  doxygen dot
    -- Configuring incomplete, errors occurred!
    See also "/home/xyh/play/cpp/tweeny/build/CMakeFiles/CMakeOutput.log".
    make: *** No targets specified and no makefile found.  Stop.
    
    opened by xieyuheng 8
  • Instructions on how to run the samples?

    Instructions on how to run the samples?

    I cloned the repro and then ran cmake .

    I get the following output:

    ➜ tweeny git:(master) cmake . -- The C compiler identification is AppleClang 8.1.0.8020038 -- The CXX compiler identification is AppleClang 8.1.0.8020038 -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- Check for working C compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc -- works -- Detecting C compiler ABI info -- Detecting C compiler ABI info - done -- Detecting C compile features -- Detecting C compile features - done -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ -- works -- Detecting CXX compiler ABI info -- Detecting CXX compiler ABI info - done -- Detecting CXX compile features -- Detecting CXX compile features - done CMake Error at examples/CMakeLists.txt:58 (find_package): By not providing "FindSDL2.cmake" in CMAKE_MODULE_PATH this project has asked CMake to find a package configuration file provided by "SDL2", but CMake did not find one.

    Could not find a package configuration file provided by "SDL2" with any of the following names:

    SDL2Config.cmake
    sdl2-config.cmake
    

    Add the installation prefix of "SDL2" to CMAKE_PREFIX_PATH or set "SDL2_DIR" to a directory containing one of the above files. If "SDL2" provides a separate development package or SDK, be sure it has been installed.

    -- Configuring incomplete, errors occurred! See also "/Users/wakka/tmp/tweeny/CMakeFiles/CMakeOutput.log".

    Are there some instructions somewhere?

    opened by meniku 8
  • Crash with illegal instruction

    Crash with illegal instruction

    When trying to copy a tweeny::tween via assignment, program crashes with Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)

    Code to reproduce:

    tweeny::tween<double> anim1;
    
    auto anim2 = tweeny::from(2).to(5).during(100).via(tweeny::easing::linear)
    
    anim1 = anim2;  //crash here
    

    System information: macOS 10.15.7 Xcode 11.7 Using C++ 17

    opened by Ravbug 7
  • Conflicting type when using jump function

    Conflicting type when using jump function

    When trying to compile a simple hello world using the jump function, I'm getting "4. Candidate template ignored: deduced conflicting types for parameter 'T' ('int' vs. 'unsigned long')":

    *: error: no matching function for call to 'clip'
            p = detail::clip(p, 0, points.size() -1);
                ^~~~~~~~~~~~
    *: note: in instantiation of member function 'tweeny::tween<number, number, number, number, number, number>::jump' requested here
            tween.jump(0, true);
                  ^
    In file included from *:
    In file included from *:
    */tweeny.h:1806:11: note: candidate template ignored: deduced conflicting types for parameter 'T' ('int' vs. 'unsigned long')
            T clip(const T & n, const T & lower, const T & upper) {
              ^
    

    I'm using the stable single header file, all local paths have been replaced with *. Wondering if this might be due to vector.size() returning size_t that in some systems it might alias to different types.

    Using a mac and Xcode

    opened by grimaldini 4
  • Error

    Error

    before #include "tweeny.h", <string> and <stdint.h> must be included first

    //without these two, tweeny.h errors
    #include <stdint.h>
    #include <string>
    
    #include "tweeny.h"
    

    Also, if i do this auto test = tweeny::from(1.0f).to(0.0f).during(10);, can you tell me what's the equivalent of auto? i dont want to use auto

    Thank you

    opened by flamendless 4
  • Weird behaviour with multi-valued, multi-point tweens.

    Weird behaviour with multi-valued, multi-point tweens.

    Hi,

    First, thank you for providing such a great library.

    With multi-valued and multi-point tweens, I cannot get the correct results. For example, for this small piece of code:

    auto tween = tweeny::from(0.5f, 1.f)
            .to(0.f, 1.f).during(10)
            .to(0.f, 0.f).during(10);
    
    for (auto i = 0; i < 20; ++i)
    {
        auto p = tween.step(1);
        std::cout << p[0] << " " << p[1] << "\n";
    }
    

    the output is:

    0.475 1
    0.45 1
    0.425 1
    0.4 1
    0.375 1
    0.35 1
    0.325 1
    0.3 1
    0.275 1
    0.25 1
    0 0.45
    0 0.4
    0 0.35
    0 0.3
    0 0.25
    0 0.2
    0 0.15
    0 0.0999998
    0 0.0499998
    0 0
    

    But I think the output should be:

    0.45 1
    0.4 1
    0.35 1
    0.3 1
    0.25 1
    0.2 1
    0.15 1
    0.1 1
    0.05 1
    0 1
    0 0.9
    0 0.8
    0 0.7
    0 0.6
    0 0.5
    0 0.4
    0 0.3
    0 0.2
    0 0.1
    0 0
    

    Maybe I'm missing a point but I cannot get the correct results.

    Thanks

    opened by atilimcetin 4
  • different durations problem

    different durations problem

    Different duration values should result in different interpolation values, but all my values are changing at the same time, no matter if I use seek or step method. Here is my test-code. Am I missing something?

    auto tween = tweeny::from(0,0,0);
    tween.to(5,5,5);
    tween.during(1,2,3);
    std::vector<std::array<int, 3>> vec;
    std::array<int, 3> ret = tween.peek(0.0f);
    long start = millis();
    while (tween.progress() < 1.0f) {
      vec.push_back(tween.seek((uint16_t)(millis()-start)));
    }
    for(std::array<int, 3> ret : vec) {
      Serial.printf("%d %d %d\n",ret[0],ret[1],ret[2]);
    }
    

    0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 5 5 5

    opened by androdlang 3
  • how to get all Tweens in running?

    how to get all Tweens in running?

    hello, thanks to you great lib. my Project need me to update tweens like this: https://github.com/sasq64/tween/blob/master/tween.cpp the Tween::updateTweens(double t) function can easier to step the all tweens, but now tweeny can't get all tween nodes like this. i thought i get all nodes in trouble . could you can help me to add new functions? thank you.

    opened by gamestarlsj 3
  • multiple enumeration support

    multiple enumeration support

    I would like to set everything via enumeration, but alas it can only be done with the first parameter.

    auto tween = tweeny::from(0.f, 0.f).to(1.f, 1.f).during(5000).via(tweeny::easing::enumerated::backIn, tweeny::easing::enumerated::bounceIn);
    

    I get an error

    tweeny.h(1016,23): error C2679: binary '=': no operator found which takes a right-hand operand of type 'F1' (or there is no acceptable conversion)
    1>        with
    1>        [
    1>            F1=tweeny::easing::enumerated
    1>        ]
    
    opened by GeTechG 1
  • Coroutine support

    Coroutine support

    hi, Coroutine is powerful and convenient feature for animation scene. just like

    await tweeny::from(130).to(130).during(300);

    is there a plan to implement coroutine version?

    opened by wxjz2 1
  • Warning

    Warning "conversion from ‘int’ to ‘float’ may change value" when using integer values

    When using integer values such as in this example:

    auto t = tweeny::from(130).to(130).during(300).to(80).during(400);
    

    The compiler issues warnings for the conversion from int to float for all the different easings, sometimes multiple warnings per easing. I don't want to disable the warnings, because they may be valuable information pointing out where a possible bug exists.

    It would be nice if a static_cast<float>() is used where appropriate, so that my warnings list is not flooded.

    opened by klapstoelpiloot 4
  • Method to wait at a point

    Method to wait at a point

    It would be nice to have a method to wait at a specific point.

    For example, right now I do:

    auto t = tweeny::from(130).to(130).during(300).to(80).during(400);
    

    But it would be better if I could do:

    auto t = tweeny::from(130).wait(300).to(80).during(400);
    
    opened by klapstoelpiloot 0
  • warning C4127: conditional expression is constant

    warning C4127: conditional expression is constant

    Compiling this with MSVC 16 on C++20 and tweening a glm::vec3 I get the following warning:

    [build] [...]\lib\tweeny\include\easingresolve.h(44,35): warning C4127: conditional expression is constant [[...]\build\opengl-tests.vcxproj]
    [build] [...]\lib\tweeny\include\easingresolve.h(43,1): message : consider using 'if constexpr' statement instead [[...]\build\opengl-tests.vcxproj]
    [build] [...]\lib\tweeny\include\easingresolve.h(43): message : while compiling class template member function 'void tweeny::detail::easingresolve<1,TypeTuple,FunctionTuple>::impl(FunctionTuple &)' [[...]\build\opengl-tests.vcxproj]
    [build]           with
    [build]           [
    [build]               TypeTuple=std::array<glm::vec<3,float,glm::packed_highp>,1>,
    [build]               FunctionTuple=std::tuple<std::function<glm::vec3 (float,glm::vec3,glm::vec3)>>
    [build]           ]
    ...
    

    Adding the constexpr removes the warning but you should know more.

    opened by HookedBehemoth 2
Releases(v3.2.0)
  • v3.2.0(Feb 17, 2021)

    • Fixed installation on other than Ubuntu distributions. (@xvitaly)
    • Consider interpolation duration in the right place (fix #19)
    • Fixes compilation error when using the jump function (fix #21)
    • Small code and documentation improvements
    • New feature: allows easing selection (via()) using easing::enumerated or std::string:
      tweeny::from(0.0f).to(1.0f).during(100).via(easing::enumerated::linear);
      tweeny::from(0.0f).to(1.0f).during(100).via("linear");
    
    Source code(tar.gz)
    Source code(zip)
    tweeny-3.2.0.h(111.15 KB)
  • v3.1.1(Jul 6, 2020)

  • v3.1.0(Feb 29, 2020)

    • From now on, tweeny will be using a more traditional versioning scheme
    • Remove some extraneous semicolons (@Omegastick)
    • Adds easing::stepped and easing::def for arithmetic-like values (@ArnCarveris)
    • Fix point progress calculation in multi-duration tweens (#15)
    • Fix deduction of same-type values (#14)
    • Use auto to deduce return values of operations inside various easings

    Thanks to everyone that contributed to Tweeny either by creating issues or by submitting patches. Special thanks to those that took the time to create packages of it. You rock :)

    Source code(tar.gz)
    Source code(zip)
  • v3(Nov 18, 2018)

    • Fix point duration calculation in multipoint tweening
    • Implement peek(float progress) and peek(uint32_t time) to peek at arbitrary points
    • Move examples to tweeny-demos repository
    • Update README and docs
    Source code(tar.gz)
    Source code(zip)
  • 2(Jul 31, 2016)

    • Make non-modifying functions const (@Balletie)
    • Add peek() tween method to get current tween values (@Balletie)
    • Fix build on MSVC by constexpr-instantiating standard easings
    • Add a CHANGELOG :)
    Source code(tar.gz)
    Source code(zip)
  • 1(Feb 12, 2017)

Owner
Leonardo Guilherme de Freitas
Leonardo Guilherme de Freitas
A modern ESM build of the Potrace library for use in the browser.

ESM Potrace Wasm A modern ESM build of the Potrace library for use in the browser. Installation npm install --save esm-potrace-wasm Usage import potra

Thomas Steiner 40 Nov 5, 2022
MyOwnBricks - A library for building your own sensors and devices compatible with the modern LEGO PoweredUp system.

English version (See at the end for the French version) MyOwnBricks MyOwnBricks is a library for building your own sensors and devices compatible with

null 5 Sep 26, 2022
Modern transactional key-value/row storage library.

Sophia is advanced transactional MVCC key-value/row storage library. How does it differ from other storages? Sophia is RAM-Disk hybrid storage. It is

Dmitry Simonenko 1.8k Dec 15, 2022
Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist.

Digital Signal Processing Library and Audio Toolbox for the Modern Synthesist. Attention This library is still under development! Read the docs and ch

everdrone 81 Nov 25, 2022
A simple, modern C++ animation and timing library.

Choreograph A simple, modern C++ animation and timing library. v0.4.0 Choreograph is designed to describe motion. With it, you compose motion Phrases

David Wicks 291 Dec 13, 2022
Vritual Traffic Cabinet - a modern C++ library for virtualization of traffic control cabinet in adherence with NEMA-TS and ATC Standards.

Virtual Traffic Cabinet A modern C++ library (C++20) for the virtualization of traffic cabinet in adherence with NEMA-TS1, NEMA-TS2, 170, Caltrans 232

Wuping Xin 3 Nov 22, 2022
Pretty Printer for Modern C++

Highlights Single header file Requires C++17 MIT License Quick Start Simply include pprint.hpp and you're good to go. #include <pprint.hpp> To start p

Pranav 879 Dec 22, 2022
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more

EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++. Among others, it's used in Minecraft by

Michele Caini 7.6k Dec 30, 2022
Nameof operator for modern C++, simply obtain the name of a variable, type, function, macro, and enum

_ _ __ _____ | \ | | / _| / ____|_ _ | \| | __ _ _ __ ___ ___ ___ | |_ | | _| |

Daniil Goncharov 1.5k Jan 8, 2023
Random for modern C++ with convenient API

Random for modern C++ with convenient API Design goals Supported compilers Integration Five-minute tutorial Number range Common type number range Char

Ilya Polishchuk 748 Jan 7, 2023
Activity Indicators for Modern C++

Highlights Thread-safe progress bars and spinners Header-only library. Grab a copy of include/indicators. Single-header version in single_include/indi

Pranav 2.3k Jan 9, 2023
Table Maker for Modern C++

Source for the above image can be found here Table of Contents Quick Start Formatting Options Style Inheritance Model Word Wrapping Font Alignment Fon

Pranav 1.4k Dec 30, 2022
🏢 A bold, unapologetic, and honest operating system written in modern C

A bold, unapologetic, and honest operating system written in modern C About Striking modernist shapes and bold use of modern C are the hallmarks of BR

Brutal 929 Jan 5, 2023
🏢 An operating system that combine the desire of UNIX utopia from the 1970s with modern technology and engineering

Striking modernist shapes and bold use of modern C are the hallmarks of BRUTAL. BRUTAL combine the desire of UNIX utopia from the 1970s with modern te

Brutal 924 Dec 27, 2022
"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

"Sigma File Manager" is a free, open-source, quickly evolving, modern file manager (explorer / finder) app for Windows, MacOS, and Linux.

Aleksey Hoffman 1.1k Dec 31, 2022
Ceres is designed to be a modern and minimalistic C like language.

Ceres v0.0.1 Ceres is designed to be a modern and minimalistic C like language. For now, it will be interpreted but later on I do want to write a comp

null 9 May 18, 2022
External CS:GO hack for Arduino written using modern C++ and WinAPI

SQ Project CSGO Arduino Edition External CS:GO hack for Arduino written using C++ and WinAPI. Special thanks to hazedumper for hazedumper. Shock Byte

Klim Markevich 34 Dec 29, 2022
Enoki: structured vectorization and differentiation on modern processor architectures

Enoki: structured vectorization and differentiation on modern processor architectures

Mitsuba Physically Based Renderer 1.2k Dec 25, 2022