[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