commit x64 compilation from lulu cause the other branch dont seems to compile properly at home

This commit is contained in:
2026-07-17 16:08:20 +02:00
parent c0f3eeb00d
commit 0efa4ee6f7
625 changed files with 117283 additions and 4426 deletions

View File

@ -0,0 +1,108 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
----------------------------------------------------------------------------- */
#include "motion/motion.h"
#include "log/log.h"
using namespace GS::Core;
using GS::NML::Tag;
//------------------------------------------------------------------------------
bool Motion::FromMetaTag(Tag &tag)
{
if (tag.name != "Motion")
__ERR__(__LOG_E__ << "Could not parse motion, incorrect root tag (" << tag.name << ").\n", false)
use_quaternion = false;
// Parse root tags.
NMLTagForeach(pt, tag)
{
if (pt->name == "Id")
name = pt->GetString();
else if (pt->name == "UseQuaternion")
use_quaternion = pt->GetBool();
else if (pt->name == "QChannel")
quaternion.FromMetaTag(*pt);
else if (pt->name == "Channel")
{
MotionChannel *chn = AddChannel(MotionChannel::Undf);
chn->FromMetaTag(*pt);
}
else if (pt->name == "DataKnot")
{
Tag *count_tag = pt->GetTag("Count");
ArrayListDeleteAllPtr(SDataPoint *, data_point)
if (count_tag && count_tag->GetInteger() > 0)
{
uint n = (uint)count_tag->GetInteger();
while (n--)
if (!data_point.Add(new SDataPoint))
return false;
n = 0;
NMLTagForeach(st, *pt)
{
if (st->name == "Knot")
{
if (n == data_point.GetCount())
{
__LOG_E__ << "Too many knot in <DataKnot>, " << data_point.GetCount() << " expected.\n";
break;
}
if (const char *p = st->GetString())
{
data_point[n]->t = Time::fromSec(String::atof(p));
p = String::strfindchar(p, ':');
data_point[n]->data = Variant(p + 1);
n++;
}
else
__LOG_W__ << "Invalid knot tag while parsing curve.\n";
}
}
}
}
else __LOG_W__ << "Unknown tag '" << pt->name << "' in <Motion>.\n";
}
return true;
}
Tag *Motion::AsMetaTag()
{
Tag *root = new Tag("Motion");
if (!root)
__ERR__(__LOG_E__ << "Could not create root tag to serialize.\n", NULL)
root->AddChild("Id", name.c_str());
// Dump quaternion channel.
root->AddChild("UseQuaternion", use_quaternion);
root->AddChild(quaternion.AsMetaTag());
// Dump all channels.
ListForeachPtr(MotionChannel *, channel, channel_list)
root->AddChild(channel->AsMetaTag());
// Dump the data array
if (data_point.GetCount())
if (Tag *data_knot_tag = root->AddChild("DataKnot"))
{
data_knot_tag->AddChild("Count", (int)data_point.GetCount());
ArrayListForeachPtr(SDataPoint *, data, data_point)
data_knot_tag->AddChild("Knot",String::Format("%f:%s", data->t.toSec(), data->data.s_value.c_str()).c_str());
}
return root;
}
//------------------------------------------------------------------------------