commit x64 compilation from lulu cause the other branch dont seems to compile properly at home
This commit is contained in:
78
include/engine/script/scripted_object.cpp
Normal file
78
include/engine/script/scripted_object.cpp
Normal file
@ -0,0 +1,78 @@
|
||||
/* -----------------------------------------------------------------------------
|
||||
GSFramework
|
||||
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
||||
----------------------------------------------------------------------------- */
|
||||
|
||||
|
||||
#include "script/scripted_object.h"
|
||||
#include "script/script_unit.h"
|
||||
#include "metafile/nml.h"
|
||||
#include "log/log.h"
|
||||
|
||||
using namespace GS::Script;
|
||||
using namespace GS::NML;
|
||||
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
Unit *ScriptedObject::AddUnit(Unit *unit)
|
||||
{
|
||||
unit_list.Add(unit);
|
||||
return unit;
|
||||
}
|
||||
bool ScriptedObject::RemoveUnit(Unit *unit)
|
||||
{
|
||||
if (!unit || !unit_list.Remove(unit))
|
||||
return false;
|
||||
_safe_delete(unit);
|
||||
return true;
|
||||
}
|
||||
Unit *ScriptedObject::GetUnit(const char *script_file, const char *script_class) const
|
||||
{
|
||||
ListForeachPtr(Unit *, unit, GetUnitList())
|
||||
if ((unit->script_file == script_file) && (unit->script_class == script_class))
|
||||
return unit;
|
||||
return NULL;
|
||||
}
|
||||
void ScriptedObject::RemoveAllUnit()
|
||||
{ ListDeleteAllPtr(Unit *, unit_list) }
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
bool ScriptedObject::FromMetaTag(Tag &tag)
|
||||
{
|
||||
if (tag.name != "ScriptedObject")
|
||||
__ERR__(__LOG_E__ << "Could not parse scripted object, incorrect root tag (" << tag.name << ").\n", false)
|
||||
|
||||
ListDeleteAllPtr(Unit *, unit_list)
|
||||
|
||||
NMLTagForeach(pt, tag)
|
||||
{
|
||||
if (pt->name == "ScriptUnit")
|
||||
{
|
||||
if (Unit *unit = AddUnit(NewUnit()))
|
||||
if (unit->FromMetaTag(*pt))
|
||||
unit->Open();
|
||||
}
|
||||
else __LOG_W__ << "Unknown tag '" << pt->name << "' in <ScriptedObject>.\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
Tag *ScriptedObject::AsMetaTag() const
|
||||
{
|
||||
if (!GetUnitList().GetCount())
|
||||
return NULL;
|
||||
|
||||
Tag *root = new Tag("ScriptedObject");
|
||||
if (!root)
|
||||
__ERR__(__LOG_E__ << "Could not create root tag to serialize.\n", NULL)
|
||||
|
||||
// Dump script units.
|
||||
ListForeachPtr(Unit *, unit, GetUnitList())
|
||||
root->AddChild(unit->AsMetaTag());
|
||||
|
||||
return root;
|
||||
}
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
ScriptedObject::~ScriptedObject()
|
||||
{ RemoveAllUnit(); }
|
||||
Reference in New Issue
Block a user