Sha256: 290cfb63d45c3e126d63a8480b39ad470cb3bd5491539c40797eec39afc5b759

Contents?: true

Size: 1.76 KB

Versions: 39

Compression:

Stored size: 1.76 KB

Contents

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

#include <Gosu/GraphicsBase.hpp>
#include <Gosu/Math.hpp>
#include "Common.hpp"
#include <cmath>

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

Gosu::Transform
Gosu::translate(double x, double y)
{
    Gosu::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)
{
    Gosu::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 factorX, double factorY, double aroundX, double aroundY)
{
    Gosu::Transform result = {
        factorX, 0,       0, 0,
        0,       factorY, 0, 0,
        0,       0,       1, 0,
        0,       0,       0, 1
    };
    if (aroundX != 0 || aroundY != 0)
        result = concat(concat(translate(-aroundX, -aroundY), result), translate(aroundX, aroundY));
    return result;
}

Gosu::Transform
Gosu::concat(const Transform& left, const Transform& right)
{
    Gosu::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

39 entries across 39 versions & 1 rubygems

Version Path
gosu-0.10.9.pre1 src/Graphics/Transform.cpp
gosu-0.10.8 src/Graphics/Transform.cpp
gosu-0.10.7 src/Graphics/Transform.cpp
gosu-0.10.6 src/Graphics/Transform.cpp
gosu-0.10.5 src/Graphics/Transform.cpp
gosu-0.10.5.pre0 src/Graphics/Transform.cpp
gosu-0.10.5.pre1 src/Graphics/Transform.cpp
gosu-0.10.4 src/Graphics/Transform.cpp
gosu-0.10.3 src/Graphics/Transform.cpp
gosu-0.10.2 src/Graphics/Transform.cpp
gosu-0.10.2.pre1 src/Graphics/Transform.cpp
gosu-0.10.1.2 src/Graphics/Transform.cpp
gosu-0.10.1.1 src/Graphics/Transform.cpp
gosu-0.10.1 src/Graphics/Transform.cpp
gosu-0.10.0 src/Graphics/Transform.cpp
gosu-0.9.2 src/Graphics/Transform.cpp
gosu-0.9.2.pre1 src/Graphics/Transform.cpp
gosu-0.9.1 src/Graphics/Transform.cpp
gosu-0.9.0 src/Graphics/Transform.cpp
gosu-0.9.0.pre1 src/Graphics/Transform.cpp