Files
GDevelop/Extensions/LinkedObjects/ObjectsLinksManager.cpp
T
Florian Rival a8559bfbbc Add clang-format to format (C++) source files automatically (#491)
* Update all CMakeLists of extensions to use clang-format
* Run clang-format on all Extensions
* Update GDCore CMakeLists.txt to add clang-format
* Run clang-format on GDCore files
* Update GDJS and GDCpp CMakeLists.txt to add clang-format
* Run clang-format on GDCpp and GDJS files
2018-05-09 15:57:38 -07:00

79 lines
2.0 KiB
C++

/**
GDevelop - LinkedObjects Extension
Copyright (c) 2011-2016 Florian Rival (Florian.Rival@gmail.com)
This project is released under the MIT License.
*/
#include "ObjectsLinksManager.h"
#include <iostream>
#include <string>
#include "LinkedObjectsTools.h"
#include <memory>
#include "GDCpp/Runtime/RuntimeObject.h"
#include "GDCpp/Runtime/RuntimeScene.h"
using namespace std;
namespace GDpriv {
namespace LinkedObjects {
void ObjectsLinksManager::LinkObjects(RuntimeObject* a, RuntimeObject* b) {
{
std::set<RuntimeObject*>& objectLinks = links[a];
objectLinks.insert(b);
}
{
std::set<RuntimeObject*>& objectLinks = links[b];
objectLinks.insert(a);
}
}
void ObjectsLinksManager::RemoveLinkBetween(RuntimeObject* a,
RuntimeObject* b) {
{
std::set<RuntimeObject*>& objectLinks = links[a];
objectLinks.erase(b);
}
{
std::set<RuntimeObject*>& objectLinks = links[b];
objectLinks.erase(a);
}
}
void ObjectsLinksManager::RemoveAllLinksOf(RuntimeObject* object) {
std::set<RuntimeObject*>& objectLinks = links[object];
for (std::set<RuntimeObject*>::iterator linkedObj = objectLinks.begin();
linkedObj != objectLinks.end();
++linkedObj) {
std::set<RuntimeObject*>& linkedObjectLinks = links[*linkedObj];
linkedObjectLinks.erase(object);
}
links.erase(object); // Remove all links of object
}
std::vector<RuntimeObject*> ObjectsLinksManager::GetObjectsLinkedWith(
RuntimeObject* object) {
// Get links of object
const std::set<RuntimeObject*>& objectLinks = links[object];
std::vector<RuntimeObject*> list;
list.reserve(objectLinks.size());
// Create the list, avoiding dead links or links to just deleted objects
for (std::set<RuntimeObject*>::iterator linkedObj = objectLinks.begin();
linkedObj != objectLinks.end();
++linkedObj) {
if (!(*linkedObj)->GetName().empty()) list.push_back((*linkedObj));
}
return list;
}
void ObjectsLinksManager::ClearAll() { links.clear(); }
} // namespace LinkedObjects
} // namespace GDpriv