mirror of
https://github.com/libretro/scummvm.git
synced 2025-01-01 06:58:34 +00:00
WINTERMUTE: Introduce TransformStruct and FloatPoint; add operators to Point32
This commit is contained in:
parent
6716fa39a6
commit
03c4b7a240
127
engines/wintermute/graphics/transform_struct.cpp
Normal file
127
engines/wintermute/graphics/transform_struct.cpp
Normal file
@ -0,0 +1,127 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "engines/wintermute/graphics/transform_struct.h"
|
||||
#include "engines/wintermute/graphics/transparent_surface.h"
|
||||
|
||||
namespace Wintermute {
|
||||
void TransformStruct::init(Point32 zoom, uint32 angle, Point32 hotspot, bool alphaDisable, TSpriteBlendMode blendMode, uint32 rgbaMod, bool mirrorX, bool mirrorY, Point32 offset) {
|
||||
_zoom = zoom;
|
||||
_angle = angle;
|
||||
_hotspot = hotspot;
|
||||
_blendMode = blendMode;
|
||||
_rgbaMod = rgbaMod;
|
||||
_alphaDisable = alphaDisable;
|
||||
_flip = 0;
|
||||
_flip += TransparentSurface::FLIP_H * mirrorX;
|
||||
_flip += TransparentSurface::FLIP_V * mirrorY;
|
||||
_offset = offset;
|
||||
}
|
||||
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoomX, int32 zoomY, uint32 angle, int32 hotspotX, int32 hotspotY, TSpriteBlendMode blendMode, uint32 rgbaMod, bool mirrorX, bool mirrorY, int32 offsetX, int32 offsetY) {
|
||||
init(Point32(zoomX, zoomY),
|
||||
angle,
|
||||
Point32(hotspotX, hotspotY),
|
||||
false,
|
||||
blendMode,
|
||||
rgbaMod,
|
||||
mirrorX, mirrorY,
|
||||
Point32(offsetX, offsetY));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoomX, int32 zoomY, TSpriteBlendMode blendMode, uint32 rgbaMod, bool mirrorX, bool mirrorY) {
|
||||
init(Point32(zoomX, zoomY),
|
||||
DEFAULT_ANGLE,
|
||||
Point32(DEFAULT_HOTSPOT_X, DEFAULT_HOTSPOT_Y),
|
||||
false,
|
||||
blendMode,
|
||||
rgbaMod,
|
||||
mirrorX,
|
||||
mirrorY,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoom, TSpriteBlendMode blendMode, uint32 rgbaMod, bool mirrorX, bool mirrorY) {
|
||||
init(Point32(zoom, zoom),
|
||||
DEFAULT_ANGLE,
|
||||
Point32(DEFAULT_HOTSPOT_X, DEFAULT_HOTSPOT_Y),
|
||||
false,
|
||||
blendMode,
|
||||
rgbaMod,
|
||||
mirrorX, mirrorY,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoom, bool mirrorX, bool mirrorY) {
|
||||
init(Point32(zoom, zoom),
|
||||
DEFAULT_ANGLE,
|
||||
Point32(DEFAULT_HOTSPOT_X, DEFAULT_HOTSPOT_Y),
|
||||
true,
|
||||
BLEND_NORMAL,
|
||||
DEFAULT_RGBAMOD,
|
||||
mirrorX, mirrorY,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoomX, int32 zoomY, uint32 angle, int32 hotspotX, int32 hotspotY) {
|
||||
init(Point32(zoomX, zoomY),
|
||||
angle,
|
||||
Point32(hotspotX, hotspotY),
|
||||
true,
|
||||
BLEND_NORMAL,
|
||||
DEFAULT_RGBAMOD,
|
||||
false, false,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct(int32 zoom) {
|
||||
init(Point32(zoom, zoom),
|
||||
DEFAULT_ANGLE,
|
||||
Point32(DEFAULT_HOTSPOT_X, DEFAULT_HOTSPOT_Y),
|
||||
true,
|
||||
BLEND_NORMAL,
|
||||
DEFAULT_RGBAMOD,
|
||||
false, false,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
TransformStruct::TransformStruct() {
|
||||
init(Point32(DEFAULT_ZOOM_X, DEFAULT_ZOOM_Y),
|
||||
DEFAULT_ANGLE,
|
||||
Point32(DEFAULT_HOTSPOT_X, DEFAULT_HOTSPOT_Y),
|
||||
true,
|
||||
BLEND_NORMAL,
|
||||
DEFAULT_RGBAMOD,
|
||||
false, false,
|
||||
Point32(DEFAULT_OFFSET_X, DEFAULT_OFFSET_Y));
|
||||
}
|
||||
|
||||
bool TransformStruct::mirrorX() const {
|
||||
return (bool)(_flip & TransparentSurface::FLIP_H);
|
||||
}
|
||||
|
||||
bool TransformStruct::mirrorY() const {
|
||||
return (bool)(_flip & TransparentSurface::FLIP_V);
|
||||
}
|
||||
|
||||
}
|
87
engines/wintermute/graphics/transform_struct.h
Normal file
87
engines/wintermute/graphics/transform_struct.h
Normal file
@ -0,0 +1,87 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef GRAPHICS_TRANSFORM_STRUCT_H
|
||||
#define GRAPHICS_TRANSFORM_STRUCT_H
|
||||
|
||||
#include "engines/wintermute/math/rect32.h"
|
||||
#include "engines/wintermute/dctypes.h"
|
||||
|
||||
#define DEFAULT_ZOOM_X 100
|
||||
#define DEFAULT_ZOOM_Y 100
|
||||
#define DEFAULT_RGBAMOD 0xFFFFFFFF
|
||||
#define DEFAULT_HOTSPOT_X 0
|
||||
#define DEFAULT_HOTSPOT_Y 0
|
||||
#define DEFAULT_OFFSET_X 0
|
||||
#define DEFAULT_OFFSET_Y 0
|
||||
#define DEFAULT_ANGLE 0
|
||||
|
||||
namespace Wintermute {
|
||||
/**
|
||||
* Contains all the required information that define a transform.
|
||||
* Same source sprite + same TransformStruct = Same resulting sprite.
|
||||
* Has a number of overloaded constructors to accomodate various argument lists.
|
||||
*/
|
||||
struct TransformStruct {
|
||||
private:
|
||||
void init(Point32 zoom, uint32 angle, Point32 hotspot, bool alphaDisable, TSpriteBlendMode blendMode, uint32 alpha, bool mirrorX, bool mirrorY, Point32 offset);
|
||||
|
||||
public:
|
||||
TransformStruct(int32 zoomX, int32 zoomY, uint32 angle, int32 hotspotX, int32 hotspotY, TSpriteBlendMode blendMode, uint32 alpha, bool mirrorX = false, bool mirrorY = false, int32 offsetX = 0, int32 offsetY = 0);
|
||||
TransformStruct(int32 zoomX, int32 zoomY, TSpriteBlendMode blendMode, uint32 alpha, bool mirrorX = false, bool mirrorY = false);
|
||||
TransformStruct(int32 zoom, TSpriteBlendMode blendMode, uint32 alpha, bool mirrorX, bool mirrorY);
|
||||
TransformStruct(int32 zoom, bool mirrorX, bool mirrorY);
|
||||
TransformStruct(int32 zoomX, int32 zoomY, uint32 angle, int32 hotspotX = 0, int32 hotspotY = 0);
|
||||
TransformStruct(int32 zoom);
|
||||
TransformStruct();
|
||||
|
||||
Point32 _zoom; ///< Zoom; 100 = no zoom
|
||||
Point32 _hotspot; ///< Position of the hotspot
|
||||
uint32 _angle; ///< Rotation angle, in degrees
|
||||
byte _flip; ///< Bitflag: see TransparentSurface::FLIP_XXX
|
||||
bool _alphaDisable;
|
||||
TSpriteBlendMode _blendMode;
|
||||
uint32 _rgbaMod; ///< RGBa
|
||||
Point32 _offset;
|
||||
|
||||
bool mirrorX() const;
|
||||
bool mirrorY() const;
|
||||
|
||||
bool operator==(const TransformStruct &compare) const {
|
||||
return (compare._angle == _angle &&
|
||||
compare._flip == _flip &&
|
||||
compare._zoom == _zoom &&
|
||||
compare._offset == _offset &&
|
||||
compare._alphaDisable == _alphaDisable &&
|
||||
compare._rgbaMod == _rgbaMod &&
|
||||
compare._blendMode == _blendMode
|
||||
);
|
||||
}
|
||||
|
||||
bool operator!=(const TransformStruct &compare) const {
|
||||
return !(compare == *this);
|
||||
}
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
52
engines/wintermute/math/floatrect.h
Normal file
52
engines/wintermute/math/floatrect.h
Normal file
@ -0,0 +1,52 @@
|
||||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef WINTERMUTE_FLOATRECT_H
|
||||
#define WINTERMUTE_FLOATRECT_H
|
||||
|
||||
namespace Wintermute {
|
||||
|
||||
struct FloatPoint {
|
||||
float x;
|
||||
float y;
|
||||
FloatPoint() : x(0), y(0) {}
|
||||
FloatPoint(float x1, float y1) : x(x1), y(y1) {}
|
||||
bool operator==(const FloatPoint &p) const { return x == p.x && y == p.y; }
|
||||
bool operator!=(const FloatPoint &p) const { return x != p.x || y != p.y; }
|
||||
FloatPoint operator+(const FloatPoint &delta) const { return FloatPoint (x + delta.x, y + delta.y); }
|
||||
FloatPoint operator-(const FloatPoint &delta) const { return FloatPoint (x - delta.x, y - delta.y); }
|
||||
|
||||
FloatPoint& operator+=(const FloatPoint &delta) {
|
||||
x += delta.x;
|
||||
y += delta.y;
|
||||
return *this;
|
||||
}
|
||||
FloatPoint& operator-=(const FloatPoint &delta) {
|
||||
x -= delta.x;
|
||||
y -= delta.y;
|
||||
return *this;
|
||||
}
|
||||
};
|
||||
|
||||
} // end of namespace Wintermute
|
||||
|
||||
#endif
|
@ -24,14 +24,38 @@
|
||||
#define WINTERMUTE_RECT32_H
|
||||
|
||||
#include "common/system.h"
|
||||
#include "engines/wintermute/math/floatrect.h"
|
||||
|
||||
namespace Wintermute {
|
||||
|
||||
struct Point32 {
|
||||
int32 x;
|
||||
int32 y;
|
||||
};
|
||||
Point32() : x(0), y(0) {}
|
||||
Point32(int32 x1, int32 y1) : x(x1), y(y1) {}
|
||||
bool operator==(const Point32 &p) const { return x == p.x && y == p.y; }
|
||||
bool operator!=(const Point32 &p) const { return x != p.x || y != p.y; }
|
||||
Point32 operator+(const Point32 &delta) const { return Point32(x + delta.x, y + delta.y); }
|
||||
Point32 operator-(const Point32 &delta) const { return Point32(x - delta.x, y - delta.y); }
|
||||
|
||||
Point32 &operator+=(const Point32 &delta) {
|
||||
x += delta.x;
|
||||
y += delta.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
Point32 &operator-=(const Point32 &delta) {
|
||||
x -= delta.x;
|
||||
y -= delta.y;
|
||||
return *this;
|
||||
}
|
||||
|
||||
operator FloatPoint() {
|
||||
return FloatPoint(x,y);
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
struct Rect32 {
|
||||
int32 top, left; ///< The point at the top left of the rectangle (part of the rect).
|
||||
int32 bottom, right; ///< The point at the bottom right of the rectangle (not part of the rect).
|
||||
|
@ -89,6 +89,7 @@ MODULE_OBJS := \
|
||||
base/save_thumb_helper.o \
|
||||
base/timer.o \
|
||||
detection.o \
|
||||
graphics/transform_struct.o \
|
||||
graphics/transparent_surface.o \
|
||||
math/math_util.o \
|
||||
math/matrix4.o \
|
||||
|
Loading…
Reference in New Issue
Block a user