[Scummvm-git-logs] scummvm master -> 8b28cb61b3914842e01e02765cee47ac9c605376
a-yyg
76591232+a-yyg at users.noreply.github.com
Sat Jul 17 01:22:41 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:
8b28cb61b3 SAGA2: Fix global constructor warnings in property.cpp
Commit: 8b28cb61b3914842e01e02765cee47ac9c605376
https://github.com/scummvm/scummvm/commit/8b28cb61b3914842e01e02765cee47ac9c605376
Author: a/ (yuri.kgpps at gmail.com)
Date: 2021-07-17T10:20:19+09:00
Commit Message:
SAGA2: Fix global constructor warnings in property.cpp
Changed paths:
engines/saga2/property.cpp
engines/saga2/property.h
engines/saga2/saga2.cpp
engines/saga2/saga2.h
engines/saga2/sensor.cpp
engines/saga2/target.cpp
diff --git a/engines/saga2/property.cpp b/engines/saga2/property.cpp
index 1c3b06fdd4..21f2390025 100644
--- a/engines/saga2/property.cpp
+++ b/engines/saga2/property.cpp
@@ -33,124 +33,80 @@
namespace Saga2 {
// Determine if this object is just an object
-static bool objIsObject(GameObject *obj) {
+bool objIsObject(GameObject *obj) {
return isObject(obj);
}
// Determine if this object is an actor
-static bool objIsActor(GameObject *obj) {
+bool objIsActor(GameObject *obj) {
return isActor(obj);
}
// Determine if this object is a world
-static bool objIsWorld(GameObject *obj) {
+bool objIsWorld(GameObject *obj) {
return isWorld(obj);
}
// Determine if this object is locked
-static bool objIsLocked(GameObject *obj) {
+bool objIsLocked(GameObject *obj) {
return obj->isLocked();
}
// Determine if this object is unlocked
-static bool objIsUnlocked(GameObject *obj) {
+bool objIsUnlocked(GameObject *obj) {
return !obj->isLocked();
}
// Determine if this object is a key
-static bool objIsKey(GameObject *obj) {
+bool objIsKey(GameObject *obj) {
return obj->proto()->classType == protoClassKey;
}
// Determine if this object is a player actor
-static bool objIsPlayerActor(GameObject *obj) {
+bool objIsPlayerActor(GameObject *obj) {
return isActor(obj)
&& isPlayerActor((Actor *)obj);
}
// Determine if this object is an enemy of the protaganists
-static bool objIsEnemy(GameObject *obj) {
+bool objIsEnemy(GameObject *obj) {
return isActor(obj)
&& isEnemy((Actor *)obj);
}
-const SimpleObjectProperty objPropObject(objIsObject);
-const SimpleObjectProperty objPropActor(objIsActor);
-const SimpleObjectProperty objPropWorld(objIsWorld);
-const SimpleObjectProperty objPropLocked(objIsLocked);
-const SimpleObjectProperty objPropUnlocked(objIsUnlocked);
-const SimpleObjectProperty objPropKey(objIsKey);
-const SimpleObjectProperty objPropPlayerActor(objIsPlayerActor);
-const SimpleObjectProperty objPropEnemy(objIsEnemy);
-
-const ObjectProperty *objPropArray[objPropIDCount] = {
- &objPropObject,
- &objPropActor,
- &objPropWorld,
- &objPropLocked,
- &objPropUnlocked,
- &objPropKey,
- &objPropPlayerActor,
- &objPropEnemy,
-};
-
/* ===================================================================== *
Actor properties
* ===================================================================== */
-#ifdef FTA
// Determine if this actor is dead
-static bool actorIsDead(Actor *a) {
+bool actorIsDead(Actor *a) {
return a->isDead();
}
-#endif
// Determine if this actor is the center actor
-static bool actorIsCenterActor(Actor *a) {
+bool actorIsCenterActor(Actor *a) {
return a == getCenterActor();
}
// Determine if this actor is a player actor
-static bool actorIsPlayerActor(Actor *a) {
+bool actorIsPlayerActor(Actor *a) {
return isPlayerActor(a);
}
// Determine if this actor is an enemy of the protaganists
-static bool actorIsEnemy(Actor *a) {
+bool actorIsEnemy(Actor *a) {
return isEnemy(a);
}
-#ifdef FTA
-const SimpleActorProperty actorPropDead(actorIsDead);
-#endif
-const SimpleActorProperty actorPropCenterActor(actorIsCenterActor);
-const SimpleActorProperty actorPropPlayerActor(actorIsPlayerActor);
-const SimpleActorProperty actorPropEnemy(actorIsEnemy);
-
-const ActorProperty *actorPropArray[actorPropIDCount] = {
-#ifdef FTA
- &actorPropDead,
-#endif
- &actorPropCenterActor,
- &actorPropPlayerActor,
- &actorPropEnemy,
-};
-
/* ===================================================================== *
Tile properties
* ===================================================================== */
// Determine if this tile has water
-static bool tileHasWater(TileInfo *ti) {
+bool tileHasWater(TileInfo *ti) {
return (ti->combinedTerrainMask() & terrainWater) ? true : false;
}
-const SimpleTileProperty tilePropHasWater(tileHasWater);
-
-const TileProperty *tilePropArray[tilePropIDCount] = {
- &tilePropHasWater,
-};
-
/* ===================================================================== *
MetaTile properties
* ===================================================================== */
@@ -230,7 +186,7 @@ bool MetaTilePropertyOr::operator()(
// Determine if this MetaTile has water
-static bool metaTileHasWater(
+bool metaTileHasWater(
MetaTile *mt,
int16 mapNum,
const TilePoint &mCoords) {
@@ -264,10 +220,54 @@ static bool metaTileHasWater(
return false;
}
-const SimpleMetaTileProperty metaTilePropHasWater(metaTileHasWater);
+Properties::Properties() {
+ _objPropArray.push_back(new SimpleObjectProperty(objIsObject));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsActor));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsWorld));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsLocked));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsUnlocked));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsKey));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsPlayerActor));
+ _objPropArray.push_back(new SimpleObjectProperty(objIsEnemy));
+
+ _actorPropArray.push_back(new SimpleActorProperty(actorIsDead));
+ _actorPropArray.push_back(new SimpleActorProperty(actorIsCenterActor));
+ _actorPropArray.push_back(new SimpleActorProperty(actorIsPlayerActor));
+ _actorPropArray.push_back(new SimpleActorProperty(actorIsEnemy));
+
+ _tilePropArray.push_back(new SimpleTileProperty(tileHasWater));
+
+ _metaTilePropArray.push_back(new SimpleMetaTileProperty(metaTileHasWater));
+}
+
+Properties::~Properties() {
+ for (uint i = 0; i < _objPropArray.size(); ++i) {
+ if (_objPropArray[i])
+ delete _objPropArray[i];
+ }
+
+ _objPropArray.clear();
+
+ for (uint i = 0; i < _actorPropArray.size(); ++i) {
+ if (_actorPropArray[i])
+ delete _actorPropArray[i];
+ }
+
+ _actorPropArray.clear();
-const MetaTileProperty *metaTilePropArray[metaTilePropIDCount] = {
- &metaTilePropHasWater,
-};
+ for (uint i = 0; i < _tilePropArray.size(); ++i) {
+ if (_tilePropArray[i])
+ delete _tilePropArray[i];
+ }
+
+ _tilePropArray.clear();
+
+ for (uint i = 0; i < _metaTilePropArray.size(); ++i) {
+ if (_metaTilePropArray[i])
+ delete _metaTilePropArray[i];
+ }
+
+ _metaTilePropArray.clear();
+}
} // end of namespace Saga2
diff --git a/engines/saga2/property.h b/engines/saga2/property.h
index dcc33a6bbf..5b0b686c80 100644
--- a/engines/saga2/property.h
+++ b/engines/saga2/property.h
@@ -224,12 +224,6 @@ enum {
objPropIDCount
};
-extern const ObjectProperty *objPropArray[objPropIDCount];
-
-inline const ObjectProperty *getObjProp(ObjectPropertyID id) {
- return objPropArray[id];
-}
-
/* ===================================================================== *
Actor properties
* ===================================================================== */
@@ -244,9 +238,7 @@ typedef PropertyOr< Actor > ActorPropertyOr;
typedef int16 ActorPropertyID;
enum {
-#ifdef FTA
actorPropIDDead,
-#endif
actorPropIDCenterActor,
actorPropIDPlayerActor,
actorPropIDEnemy,
@@ -254,12 +246,6 @@ enum {
actorPropIDCount
};
-extern const ActorProperty *actorPropArray[actorPropIDCount];
-
-inline const ActorProperty *getActorProp(ActorPropertyID id) {
- return actorPropArray[id];
-}
-
/* ===================================================================== *
Tile properties
* ===================================================================== */
@@ -279,12 +265,6 @@ enum {
tilePropIDCount
};
-extern const TileProperty *tilePropArray[tilePropIDCount];
-
-inline const TileProperty *getTileProp(TilePropertyID id) {
- return tilePropArray[id];
-}
-
/* ===================================================================== *
MetaTile properties
* ===================================================================== */
@@ -394,11 +374,62 @@ enum {
metaTilePropIDCount
};
-extern const MetaTileProperty *metaTilePropArray[metaTilePropIDCount];
+bool objIsObject(GameObject *obj);
-inline const MetaTileProperty *getMetaTileProp(MetaTilePropertyID id) {
- return metaTilePropArray[id];
-}
+bool objIsActor(GameObject *obj);
+
+bool objIsWorld(GameObject *obj);
+
+bool objIsLocked(GameObject *obj);
+
+bool objIsUnlocked(GameObject *obj);
+
+bool objIsKey(GameObject *obj);
+
+bool objIsPlayerActor(GameObject *obj);
+
+bool objIsEnemy(GameObject *obj);
+
+bool actorIsDead(Actor *a);
+
+bool actorIsCenterActor(Actor *a);
+
+bool actorIsPlayerActor(Actor *a);
+
+bool actorIsEnemy(Actor *a);
+
+bool tileHasWater(TileInfo *ti);
+
+bool metaTileHasWater(MetaTile *mt, int16 mapNum, const TilePoint &mCoords);
+
+class Properties {
+private:
+ Common::Array<ObjectProperty *> _objPropArray;
+ Common::Array<ActorProperty *> _actorPropArray;
+ Common::Array<TileProperty *> _tilePropArray;
+ Common::Array<MetaTileProperty *> _metaTilePropArray;
+
+public:
+
+ Properties();
+ ~Properties();
+
+ const ObjectProperty *getObjProp(ObjectPropertyID id) {
+ return _objPropArray[id];
+ }
+
+ const ActorProperty *getActorProp(ActorPropertyID id) {
+ return _actorPropArray[id];
+ }
+
+ const TileProperty *getTileProp(TilePropertyID id) {
+ return _tilePropArray[id];
+ }
+
+ const MetaTileProperty *getMetaTileProp(MetaTilePropertyID id) {
+ return _metaTilePropArray[id];
+ }
+};
} // end of namespace Saga2
diff --git a/engines/saga2/saga2.cpp b/engines/saga2/saga2.cpp
index c14dbeedb4..bad68dd9a7 100644
--- a/engines/saga2/saga2.cpp
+++ b/engines/saga2/saga2.cpp
@@ -85,6 +85,7 @@ Saga2Engine::Saga2Engine(OSystem *syst)
_pointer = new gMousePointer(_mainPort);
_activeRegionList = new ActiveRegion[kPlayerActors];
_toolBase = new gToolBase;
+ _properties = new Properties;
_edpList = nullptr;
_sdpList = nullptr;
diff --git a/engines/saga2/saga2.h b/engines/saga2/saga2.h
index 125f3b488f..875da8b939 100644
--- a/engines/saga2/saga2.h
+++ b/engines/saga2/saga2.h
@@ -64,6 +64,7 @@ class SpellDisplayList;
class gMousePointer;
class ActiveRegion;
class gToolBase;
+class Properties;
enum {
kDebugResources = 1 << 0,
@@ -142,6 +143,7 @@ public:
gMousePointer *_pointer;
ActiveRegion *_activeRegionList;
gToolBase *_toolBase;
+ Properties *_properties;
gDisplayPort _mainPort;
diff --git a/engines/saga2/sensor.cpp b/engines/saga2/sensor.cpp
index 387bdcb9f5..7c95fa0a1a 100644
--- a/engines/saga2/sensor.cpp
+++ b/engines/saga2/sensor.cpp
@@ -619,7 +619,7 @@ int16 ObjectPropertySensor::getType(void) {
bool ObjectPropertySensor::isObjectSought(GameObject *obj_) {
assert(isObject(obj_) || isActor(obj_));
- return obj_->hasProperty(*getObjProp(objectProperty));
+ return obj_->hasProperty(*g_vm->_properties->getObjProp(objectProperty));
}
/* ===================================================================== *
@@ -738,7 +738,7 @@ int16 ActorPropertySensor::getType(void) {
// Determine if an actor meets the search criteria
bool ActorPropertySensor::isActorSought(Actor *a) {
- return a->hasProperty(*getActorProp(actorProperty));
+ return a->hasProperty(*g_vm->_properties->getActorProp(actorProperty));
}
/* ===================================================================== *
diff --git a/engines/saga2/target.cpp b/engines/saga2/target.cpp
index 8f33438360..20de8321e0 100644
--- a/engines/saga2/target.cpp
+++ b/engines/saga2/target.cpp
@@ -445,7 +445,7 @@ bool TilePropertyTarget::operator == (const Target &t) const {
}
bool TilePropertyTarget::isTarget(StandingTileInfo &sti) const {
- return sti.surfaceTile->hasProperty(*getTileProp(tileProp));
+ return sti.surfaceTile->hasProperty(*g_vm->_properties->getTileProp(tileProp));
}
/* ===================================================================== *
@@ -682,7 +682,7 @@ bool MetaTilePropertyTarget::isTarget(
MetaTile *mt,
int16 mapNum,
const TilePoint &tp) const {
- return mt->hasProperty(*getMetaTileProp(metaProp), mapNum, tp);
+ return mt->hasProperty(*g_vm->_properties->getMetaTileProp(metaProp), mapNum, tp);
}
/* ===================================================================== *
@@ -1105,7 +1105,7 @@ bool ObjectPropertyTarget::operator == (const Target &t) const {
}
bool ObjectPropertyTarget::isTarget(GameObject *testObj) const {
- return testObj->hasProperty(*getObjProp(objProp));
+ return testObj->hasProperty(*g_vm->_properties->getObjProp(objProp));
}
/* ===================================================================== *
@@ -1388,7 +1388,7 @@ bool ActorPropertyTarget::operator == (const Target &t) const {
}
bool ActorPropertyTarget::isTarget(Actor *testActor) const {
- return testActor->hasProperty(*getActorProp(actorProp));
+ return testActor->hasProperty(*g_vm->_properties->getActorProp(actorProp));
}
} // end of namespace Saga2
More information about the Scummvm-git-logs
mailing list