mirror of
https://github.com/Heretek-AI/GDevelop.git
synced 2026-07-25 04:15:49 -04:00
147 lines
3.9 KiB
C++
147 lines
3.9 KiB
C++
/*
|
|
* GDevelop Core
|
|
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights reserved.
|
|
* This project is released under the MIT License.
|
|
*/
|
|
|
|
#include "GDCore/String.h"
|
|
#include "GDCore/Project/ObjectGroup.h"
|
|
#include "GDCore/Project/ObjectGroupsContainer.h"
|
|
#include "GDCore/Serialization/SerializerElement.h"
|
|
|
|
namespace gd
|
|
{
|
|
|
|
ObjectGroup ObjectGroupsContainer::badGroup;
|
|
|
|
bool ObjectGroupsContainer::Has(const gd::String & name) const
|
|
{
|
|
auto i =
|
|
std::find_if(objectGroups.begin(), objectGroups.end(), [&name](const ObjectGroup & group) { return group.GetName() == name; });
|
|
return (i != objectGroups.end());
|
|
}
|
|
|
|
ObjectGroup & ObjectGroupsContainer::Get(std::size_t index)
|
|
{
|
|
if ( index < objectGroups.size() )
|
|
return objectGroups[index];
|
|
|
|
return badGroup;
|
|
}
|
|
|
|
const ObjectGroup & ObjectGroupsContainer::Get(std::size_t index) const
|
|
{
|
|
if ( index < objectGroups.size() )
|
|
return objectGroups[index];
|
|
|
|
return badGroup;
|
|
}
|
|
|
|
ObjectGroup & ObjectGroupsContainer::Get(const gd::String & name)
|
|
{
|
|
auto i =
|
|
std::find_if(objectGroups.begin(), objectGroups.end(), [&name](const ObjectGroup & group) { return group.GetName() == name; });
|
|
if (i != objectGroups.end())
|
|
return *i;
|
|
|
|
return badGroup;
|
|
}
|
|
|
|
const ObjectGroup & ObjectGroupsContainer::Get(const gd::String & name) const
|
|
{
|
|
auto i =
|
|
std::find_if(objectGroups.begin(), objectGroups.end(), [&name](const ObjectGroup & group) { return group.GetName() == name; });
|
|
if (i != objectGroups.end())
|
|
return *i;
|
|
|
|
return badGroup;
|
|
}
|
|
|
|
ObjectGroup & ObjectGroupsContainer::Insert(const gd::ObjectGroup & group, std::size_t position)
|
|
{
|
|
if (position<objectGroups.size())
|
|
{
|
|
objectGroups.insert(objectGroups.begin()+position, group);
|
|
return objectGroups[position];
|
|
}
|
|
else
|
|
{
|
|
objectGroups.push_back(group);
|
|
return objectGroups.back();
|
|
}
|
|
}
|
|
|
|
#if defined(GD_IDE_ONLY)
|
|
void ObjectGroupsContainer::Remove(const gd::String & name)
|
|
{
|
|
objectGroups.erase(std::remove_if(objectGroups.begin(), objectGroups.end(),
|
|
[&name](const ObjectGroup & group) { return group.GetName() == name; }), objectGroups.end() );
|
|
}
|
|
|
|
std::size_t ObjectGroupsContainer::GetPosition(const gd::String & name) const
|
|
{
|
|
for(std::size_t i = 0;i<objectGroups.size();++i)
|
|
{
|
|
if ( objectGroups[i].GetName() == name )
|
|
return i;
|
|
}
|
|
|
|
return gd::String::npos;
|
|
}
|
|
|
|
ObjectGroup & ObjectGroupsContainer::InsertNew(const gd::String & name, std::size_t position)
|
|
{
|
|
ObjectGroup newGroup;
|
|
newGroup.SetName(name);
|
|
return Insert(newGroup, position);
|
|
}
|
|
|
|
bool ObjectGroupsContainer::Rename(const gd::String & oldName, const gd::String & newName)
|
|
{
|
|
if (Has(newName)) return false;
|
|
|
|
auto i =
|
|
std::find_if(objectGroups.begin(), objectGroups.end(), [&oldName](const ObjectGroup & group) { return group.GetName() == oldName; });
|
|
if (i != objectGroups.end()) i->SetName(newName);
|
|
|
|
return true;
|
|
}
|
|
|
|
void ObjectGroupsContainer::Move(std::size_t oldIndex, std::size_t newIndex)
|
|
{
|
|
if ( oldIndex >= objectGroups.size() || newIndex >= objectGroups.size() )
|
|
return;
|
|
|
|
auto group = objectGroups[oldIndex];
|
|
objectGroups.erase(objectGroups.begin() + oldIndex);
|
|
Insert(group, newIndex);
|
|
}
|
|
#endif
|
|
|
|
void ObjectGroupsContainer::SerializeTo(SerializerElement & element) const
|
|
{
|
|
element.ConsiderAsArrayOf("group");
|
|
for(auto & group : objectGroups)
|
|
{
|
|
SerializerElement & groupElement = element.AddChild("group");
|
|
group.SerializeTo(groupElement);
|
|
}
|
|
}
|
|
|
|
void ObjectGroupsContainer::UnserializeFrom(const SerializerElement & element)
|
|
{
|
|
objectGroups.clear();
|
|
element.ConsiderAsArrayOf("group", "Groupe");
|
|
for (std::size_t i = 0; i < element.GetChildrenCount(); ++i)
|
|
{
|
|
SerializerElement & groupElement = element.GetChild(i);
|
|
gd::ObjectGroup objectGroup;
|
|
|
|
objectGroup.UnserializeFrom(groupElement);
|
|
objectGroups.push_back(objectGroup);
|
|
}
|
|
}
|
|
|
|
|
|
}
|