[Scummvm-git-logs] scummvm master -> e13588744def229091cc8d3129e439d176ec6265
a-yyg
76591232+a-yyg at users.noreply.github.com
Thu Jul 1 15:08:48 UTC 2021
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .
Summary:
e13588744d SAGA2: Fix more global constructor warnings
Commit: e13588744def229091cc8d3129e439d176ec6265
https://github.com/scummvm/scummvm/commit/e13588744def229091cc8d3129e439d176ec6265
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-02T00:06:55+09:00
Commit Message:
SAGA2: Fix more global constructor warnings
Changed paths:
engines/saga2/dispnode.cpp
engines/saga2/dispnode.h
engines/saga2/objects.h
engines/saga2/tcoords.h
engines/saga2/tile.cpp
engines/saga2/tile.h
engines/saga2/tilemode.cpp
diff --git a/engines/saga2/dispnode.cpp b/engines/saga2/dispnode.cpp
index cc31d73293..ed3c8380e4 100644
--- a/engines/saga2/dispnode.cpp
+++ b/engines/saga2/dispnode.cpp
@@ -814,7 +814,7 @@ void DisplayNode::drawObject(void) {
//-----------------------------------------------------------------------
// Do mouse hit-test on objects
-ObjectID pickObject(const Point16 &mouse, TilePoint &objPos) {
+ObjectID pickObject(const Point16 &mouse, StaticTilePoint &objPos) {
DisplayNode *dn;
ObjectID result = Nothing;
int32 dist = maxint32;
@@ -871,7 +871,7 @@ ObjectID pickObject(const Point16 &mouse, TilePoint &objPos) {
if (GetSpritePixel(spr, flipped, testPoint)) {
dist = newDist;
result = obj->thisID();
- objPos = loc;
+ objPos.set(loc.u, loc.v, loc.z);
objPos.z += MAX(-spr->offset.y - testPoint.y, 0);
} else if (result == Nothing) { // If no object found yet
Point16 testPoint2;
@@ -890,7 +890,7 @@ ObjectID pickObject(const Point16 &mouse, TilePoint &objPos) {
for (testPoint2.x = minX; testPoint2.x <= maxX; testPoint2.x++) {
if (GetSpritePixel(spr, flipped, testPoint2)) {
result = obj->thisID();
- objPos = loc;
+ objPos.set(loc.u, loc.v, loc.z);
objPos.z += MAX(-spr->offset.y - testPoint.y, 0);
break;
}
diff --git a/engines/saga2/dispnode.h b/engines/saga2/dispnode.h
index 5fd8c4df94..a77fdbe08c 100644
--- a/engines/saga2/dispnode.h
+++ b/engines/saga2/dispnode.h
@@ -34,6 +34,7 @@ namespace Saga2 {
class GameObject;
struct TilePoint;
+struct StaticTilePoint;
class Effectron;
@@ -47,7 +48,7 @@ class DisplayNode {
friend class DisplayNodeList;
friend class SpellDisplayList;
friend class GameObject;
- friend ObjectID pickObject(const Point16 &mouse, TilePoint &objPos);
+ friend ObjectID pickObject(const Point16 &mouse, StaticTilePoint &objPos);
private:
DisplayNode *nextDisplayed; // pointer to next in display list
@@ -84,7 +85,7 @@ public:
const int maxDisplayed = 100;
class DisplayNodeList {
- friend ObjectID pickObject(const Point16 &mouse, TilePoint &objPos);
+ friend ObjectID pickObject(const Point16 &mouse, StaticTilePoint &objPos);
public:
uint16 count; // number of entries in list
diff --git a/engines/saga2/objects.h b/engines/saga2/objects.h
index 89b1595fab..b62a73a251 100644
--- a/engines/saga2/objects.h
+++ b/engines/saga2/objects.h
@@ -1349,7 +1349,7 @@ bool lineOfSight(
bool objObscured(GameObject *testObj);
// Determine which object mouse pointer is picking
-ObjectID pickObject(const Point16 &mouse, TilePoint &objPos);
+ObjectID pickObject(const Point16 &mouse, StaticTilePoint &objPos);
// Create enchantment attach it to object
ObjectID EnchantObject(
diff --git a/engines/saga2/tcoords.h b/engines/saga2/tcoords.h
index 7471471f03..d27cd7fc8f 100644
--- a/engines/saga2/tcoords.h
+++ b/engines/saga2/tcoords.h
@@ -88,6 +88,24 @@ struct StaticTilePoint {
return p;
}
+ friend StaticTilePoint operator<<(StaticTilePoint a, int b) {
+ int16 nu = a.u << b;
+ int16 nv = a.v << b;
+ int16 nz = a.z << b;
+ StaticTilePoint p = {nu, nv, nz};
+
+ return p;
+ }
+
+ friend StaticTilePoint operator>>(StaticTilePoint a, int b) {
+ int16 nu = a.u >> b;
+ int16 nv = a.v >> b;
+ int16 nz = a.z >> b;
+ StaticTilePoint p = {nu, nv, nz};
+
+ return p;
+ }
+
void operator+=(StaticTilePoint a) {
u += a.u;
v += a.v;
diff --git a/engines/saga2/tile.cpp b/engines/saga2/tile.cpp
index 5af94ad051..496890c6dc 100644
--- a/engines/saga2/tile.cpp
+++ b/engines/saga2/tile.cpp
@@ -3528,14 +3528,13 @@ void showAbstractTile(const TilePoint &tp, TileInfo *ti) {
// Compute the picked position as if the mouse were pointing at the same
// level as the protagainist's feet.
-TilePoint pickTilePos(Point32 pos, const TilePoint &protagPos) {
- TilePoint coords;
+StaticTilePoint pickTilePos(Point32 pos, const TilePoint &protagPos) {
+ StaticTilePoint coords = {0, 0, 0};
pos.x += tileScroll.x;
pos.y += tileScroll.y + protagPos.z;
- coords = XYToUV(pos);
- coords.z = protagPos.z;
+ coords.set(XYToUV(pos).u, XYToUV(pos).v, protagPos.z);
return coords;
}
@@ -4052,11 +4051,12 @@ bool pointOnHiddenSurface(
//-----------------------------------------------------------------------
// Return the TilePoint at which the mouse it pointing
-TilePoint pickTile(Point32 pos,
+StaticTilePoint pickTile(Point32 pos,
const TilePoint &protagPos,
- TilePoint *floorResult,
+ StaticTilePoint *floorResult,
ActiveItemPtr *pickTAI) {
WorldMapData *curMap = &mapList[currentMapNum];
+ StaticTilePoint result = {0, 0, 0};
TilePoint pickCoords,
floorCoords,
@@ -4244,16 +4244,22 @@ TilePoint pickTile(Point32 pos,
zMax = protagPos.z + kMaxPickHeight + (coords - protagPos).quickHDistance();
}
+ result.set(pickCoords.u, pickCoords.v, pickCoords.z);
+
// If no tile was found, return the default.
if (!bestTile) {
- if (floorResult) *floorResult = floorCoords;
- if (pickTAI) *pickTAI = nullptr;
- return pickCoords;
+ if (floorResult)
+ floorResult->set(floorCoords.u, floorCoords.v, floorCoords.z);
+ if (pickTAI)
+ *pickTAI = nullptr;
+ return result;
}
- if (floorResult) *floorResult = floorCoords;
- if (pickTAI) *pickTAI = bestTileTAI;
- return pickCoords;
+ if (floorResult)
+ floorResult->set(floorCoords.u, floorCoords.v, floorCoords.z);
+ if (pickTAI)
+ *pickTAI = bestTileTAI;
+ return result;
}
/* ===================================================================== *
diff --git a/engines/saga2/tile.h b/engines/saga2/tile.h
index 2f4b167cca..d17b3d46a1 100644
--- a/engines/saga2/tile.h
+++ b/engines/saga2/tile.h
@@ -1053,13 +1053,12 @@ uint16 lineDist(
* ============================================================================ */
// Converts Local XY to UV coordinates
-TilePoint pickTilePos(Point32 pos, const TilePoint &protagPos);
-TilePoint pickTile(Point32 pos,
+StaticTilePoint pickTilePos(Point32 pos, const TilePoint &protagPos);
+StaticTilePoint pickTile(Point32 pos,
const TilePoint &protagPos,
- TilePoint *floor = NULL,
+ StaticTilePoint *floor = NULL,
ActiveItemPtr *pickTAI = NULL);
-
// Function to select a nearby site
TilePoint selectNearbySite(
ObjectID worldID,
diff --git a/engines/saga2/tilemode.cpp b/engines/saga2/tilemode.cpp
index b16a833d36..6044e53406 100644
--- a/engines/saga2/tilemode.cpp
+++ b/engines/saga2/tilemode.cpp
@@ -127,10 +127,10 @@ void incrementActiveFaction(Actor *a);
// dispatch functions
static APPFUNC(cmdClickTileMap); // appFunc for map display
-TilePoint tilePickPos, // mouse coord over tilemap (floor)
- tilePickExactPos, // mouse coord of click on tilemap
- objPickPos, // coord of mouse picked object
- walkToPos; // navigation target location
+static StaticTilePoint tilePickPos = {0, 0, 0}, // mouse coord over tilemap (floor)
+ tilePickExactPos = {0, 0, 0}, // mouse coord of click on tilemap
+ objPickPos = {0, 0, 0}, // coord of mouse picked object
+ walkToPos = {0, 0, 0}; // navigation target location
ObjectID pickedObject; // which object picked by mouse
ActiveItemPtr pickedTAI; // which active item instance
@@ -481,7 +481,9 @@ static void evalMouseState(void) {
g_vm->_mouseInfo->setIntent(GrabInfo::Attack);
else {
g_vm->_mouseInfo->setIntent(GrabInfo::WalkTo);
- walkToPos = obj->getLocation();
+ walkToPos.set(obj->getLocation().u,
+ obj->getLocation().v,
+ obj->getLocation().z);
}
} else
// The mouse is not pointing at an object
@@ -526,7 +528,9 @@ static void evalMouseState(void) {
g_vm->_mouseInfo->setDoable(true);
} else {
g_vm->_mouseInfo->setIntent(GrabInfo::WalkTo);
- walkToPos = obj->getLocation();
+ walkToPos.set(obj->getLocation().u,
+ obj->getLocation().v,
+ obj->getLocation().z);
}
} else
// Center actor is not aggressive
@@ -541,7 +545,9 @@ static void evalMouseState(void) {
!a->isDead()
? GrabInfo::WalkTo
: GrabInfo::Open);
- walkToPos = obj->getLocation();
+ walkToPos.set(obj->getLocation().u,
+ obj->getLocation().v,
+ obj->getLocation().z);
} else {
g_vm->_mouseInfo->setIntent(obj->isCarryable()
? GrabInfo::PickUp
More information about the Scummvm-git-logs
mailing list