mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-21 01:25:32 -04:00
a8559bfbbc
* 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
79 lines
2.0 KiB
C++
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
|