Sha256: 09815831459882689f05ded5d3250e3356097ba2df3f284327528b94d0b767a3

Contents?: true

Size: 1.84 KB

Versions: 31

Compression:

Stored size: 1.84 KB

Contents

// Default matrices, adapted from original Transform support
// contribution by erisdiscord. Thank you!

#include "GraphicsImpl.hpp"
#include <Gosu/GraphicsBase.hpp>
#include <Gosu/Math.hpp>
#include <cmath>
using namespace std;

Gosu::Transform Gosu::rotate(double angle, double around_x, double around_y)
{
    double c = cos(degrees_to_radians(angle));
    double s = sin(degrees_to_radians(angle));
    Transform result = {
        +c, +s, 0, 0,
        -s, +c, 0, 0,
        0,  0,  1, 0,
        0,  0,  0, 1
    };
    if (around_x != 0 || around_y != 0) {
        result = concat(concat(translate(-around_x, -around_y), result),
                        translate(around_x, around_y));
    }
    return result;
}

Gosu::Transform Gosu::translate(double x, double y)
{
    Transform result = {
        1, 0, 0, 0,
        0, 1, 0, 0,
        0, 0, 1, 0,
        x, y, 0, 1
    };
    return result;
}

Gosu::Transform Gosu::scale(double factor)
{
    Transform result = {
        factor, 0,      0, 0,
        0,      factor, 0, 0,
        0,      0,      1, 0,
        0,      0,      0, 1
    };
    return result;
}

Gosu::Transform Gosu::scale(double scale_x, double scale_y, double around_x, double around_y)
{
    Transform result = {
        scale_x, 0,       0, 0,
        0,       scale_y, 0, 0,
        0,       0,       1, 0,
        0,       0,       0, 1
    };
    if (around_x != 0 || around_y != 0) {
        result = concat(concat(translate(-around_x, -around_y), result),
                        translate(around_x, around_y));
    }
    return result;
}

Gosu::Transform Gosu::concat(const Transform& left, const Transform& right)
{
    Transform result;
    for (int i = 0; i < 16; ++i) {
        result[i] = 0;
        for (int j = 0; j < 4; ++j) {
            result[i] += left[i / 4 * 4 + j] * right[i % 4 + j * 4];
        }
    }
    return result;
}

Version data entries

31 entries across 31 versions & 1 rubygems

Version Path
gosu-1.4.6 src/Transform.cpp
gosu-1.4.5 src/Transform.cpp
gosu-1.4.5.pre1 src/Transform.cpp
gosu-1.4.4 src/Transform.cpp
gosu-1.4.3 src/Transform.cpp
gosu-1.4.1 src/Transform.cpp
gosu-1.4.0 src/Transform.cpp
gosu-1.3.0 src/Transform.cpp
gosu-1.2.0 src/Transform.cpp
gosu-1.1.1.1 src/Transform.cpp
gosu-1.1.0 src/Transform.cpp
gosu-1.1.0.pre2 src/Transform.cpp
gosu-1.1.0.pre1 src/Transform.cpp
gosu-1.0.0 src/Transform.cpp
gosu-1.0.0.pre2 src/Transform.cpp
gosu-1.0.0.pre1 src/Transform.cpp
gosu-0.15.2 src/Transform.cpp
gosu-0.15.1 src/Transform.cpp
gosu-0.15.0 src/Transform.cpp
gosu-0.14.6.pre1 src/Transform.cpp