mirror of
https://github.com/vcmi/vcmi.git
synced 2025-06-15 00:05:02 +02:00
Map objects now use shared_ptr (game)
This commit is contained in:
@ -579,7 +579,7 @@ std::string CClearTerrainOperation::getLabel() const
|
||||
return "Clear Terrain";
|
||||
}
|
||||
|
||||
CInsertObjectOperation::CInsertObjectOperation(CMap* map, CGObjectInstance* obj)
|
||||
CInsertObjectOperation::CInsertObjectOperation(CMap* map, std::shared_ptr<CGObjectInstance> obj)
|
||||
: CMapOperation(map), obj(obj)
|
||||
{
|
||||
|
||||
@ -591,7 +591,7 @@ void CInsertObjectOperation::execute()
|
||||
|
||||
do
|
||||
{
|
||||
map->setUniqueInstanceName(obj);
|
||||
map->setUniqueInstanceName(obj->id);
|
||||
} while(vstd::contains(map->instanceNames, obj->instanceName));
|
||||
|
||||
map->addNewObject(obj);
|
||||
@ -599,7 +599,7 @@ void CInsertObjectOperation::execute()
|
||||
|
||||
void CInsertObjectOperation::undo()
|
||||
{
|
||||
map->removeObject(obj);
|
||||
map->removeObject(obj->id);
|
||||
}
|
||||
|
||||
void CInsertObjectOperation::redo()
|
||||
@ -612,7 +612,7 @@ std::string CInsertObjectOperation::getLabel() const
|
||||
return "Insert Object";
|
||||
}
|
||||
|
||||
CMoveObjectOperation::CMoveObjectOperation(CMap* map, CGObjectInstance* obj, const int3& targetPosition)
|
||||
CMoveObjectOperation::CMoveObjectOperation(CMap* map, CGObjectInstance * obj, const int3& targetPosition)
|
||||
: CMapOperation(map),
|
||||
obj(obj),
|
||||
initialPos(obj->anchorPos()),
|
||||
@ -622,12 +622,12 @@ CMoveObjectOperation::CMoveObjectOperation(CMap* map, CGObjectInstance* obj, con
|
||||
|
||||
void CMoveObjectOperation::execute()
|
||||
{
|
||||
map->moveObject(obj, targetPos);
|
||||
map->moveObject(obj->id, targetPos);
|
||||
}
|
||||
|
||||
void CMoveObjectOperation::undo()
|
||||
{
|
||||
map->moveObject(obj, initialPos);
|
||||
map->moveObject(obj->id, initialPos);
|
||||
}
|
||||
|
||||
void CMoveObjectOperation::redo()
|
||||
@ -640,46 +640,23 @@ std::string CMoveObjectOperation::getLabel() const
|
||||
return "Move Object";
|
||||
}
|
||||
|
||||
CRemoveObjectOperation::CRemoveObjectOperation(CMap* map, CGObjectInstance* obj)
|
||||
: CMapOperation(map), obj(obj)
|
||||
CRemoveObjectOperation::CRemoveObjectOperation(CMap* map, CGObjectInstance * obj)
|
||||
: CMapOperation(map), targetedObject(obj)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CRemoveObjectOperation::~CRemoveObjectOperation()
|
||||
{
|
||||
//when operation is destroyed and wasn't undone, the object is lost forever
|
||||
|
||||
if(!obj)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//do not destroy an object that belongs to map
|
||||
if(!vstd::contains(map->instanceNames, obj->instanceName))
|
||||
{
|
||||
delete obj;
|
||||
obj = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void CRemoveObjectOperation::execute()
|
||||
{
|
||||
map->removeObject(obj);
|
||||
removedObject = map->removeObject(targetedObject->id);
|
||||
}
|
||||
|
||||
void CRemoveObjectOperation::undo()
|
||||
{
|
||||
try
|
||||
{
|
||||
//set new id, but do not rename object
|
||||
obj->id = ObjectInstanceID(static_cast<si32>(map->objects.size()));
|
||||
map->addNewObject(obj);
|
||||
}
|
||||
catch(const std::exception& e)
|
||||
{
|
||||
logGlobal->error(e.what());
|
||||
}
|
||||
assert(removedObject != nullptr);
|
||||
//set new id, but do not rename object
|
||||
removedObject->id = ObjectInstanceID(static_cast<si32>(map->objects.size()));
|
||||
map->addNewObject(removedObject);
|
||||
}
|
||||
|
||||
void CRemoveObjectOperation::redo()
|
||||
|
Reference in New Issue
Block a user