/* ----------------------------------------------------------------------------- GSFramework Copyright 2001-2013 Emmanuel Julien. All Rights Reserved. ----------------------------------------------------------------------------- */ #include "motion/motion_channel.h" #include "log/log.h" using namespace GS::Core; //------------------------------------------------------------------------------ bool MotionChannel::FromMetaTag(GS::NML::Tag &tag) { if (tag.name != "Channel") __ERR__(__LOG_E__ << "Could not parse motion channel, incorrect root tag (" << tag.name << ").\n", false) // Parse root tags. NMLTagForeach(pt, tag) { if (pt->name == "Curve") Curve::FromMetaTag(*pt); else if (pt->name == "Id") { String chn(pt->GetString()); if (chn == "PositionX") type = XPos; else if (chn == "PositionY") type = YPos; else if (chn == "PositionZ") type = ZPos; else if (chn == "RotationX") type = XRot; else if (chn == "RotationY") type = YRot; else if (chn == "RotationZ") type = ZRot; else if (chn == "ScaleX") type = XScl; else if (chn == "ScaleY") type = YScl; else if (chn == "ScaleZ") type = ZScl; else if (chn == "PivotX") type = XPiv; else if (chn == "PivotY") type = YPiv; else if (chn == "PivotZ") type = ZPiv; else if (chn == "DiffuseR") type = RDif; else if (chn == "DiffuseG") type = GDif; else if (chn == "DiffuseB") type = BDif; else if (chn == "SpecularR") type = RSpc; else if (chn == "SpecularG") type = GSpc; else if (chn == "SpecularB") type = BSpc; else if (chn == "DiffuseI") type = DiffuseIntensity; else if (chn == "SpecularI") type = SpecularIntensity; else if (chn == "ConeAngle") type = ConeAngle; else if (chn == "EdgeAngle") type = EdgeAngle; else if (chn == "Alpha") type = Alpha; else if (chn == "Zoom") type = ZoomFactor; else if (chn == "Range") type = Range; else if (chn == "FogStart") type = FogStart; else if (chn == "FogEnd") type = FogEnd; else if (chn == "FogR") type = RFog; else if (chn == "FogG") type = GFog; else if (chn == "FogB") type = BFog; else __LOG_W__ << "Unknown channel id '" << chn << "'.\n"; } else __LOG_W__ << "Unknown tag '" << pt->name << "' in .\n"; } return true; } GS::NML::Tag *MotionChannel::AsMetaTag() const { NML::Tag *root = new NML::Tag("Channel"); if (!root) __ERR__(__LOG_E__ << "Could not create channel root tag to serialize.\n", NULL) // Serialize underlying curve. root->AddChild(Curve::AsMetaTag()); // Channel type. switch (type) { case XPos: root->AddChild("Id", "PositionX"); break; case YPos: root->AddChild("Id", "PositionY"); break; case ZPos: root->AddChild("Id", "PositionZ"); break; case XRot: root->AddChild("Id", "RotationX"); break; case YRot: root->AddChild("Id", "RotationY"); break; case ZRot: root->AddChild("Id", "RotationZ"); break; case XScl: root->AddChild("Id", "ScaleX"); break; case YScl: root->AddChild("Id", "ScaleY"); break; case ZScl: root->AddChild("Id", "ScaleZ"); break; case XPiv: root->AddChild("Id", "PivotX"); break; case YPiv: root->AddChild("Id", "PivotY"); break; case ZPiv: root->AddChild("Id", "PivotZ"); break; case RDif: root->AddChild("Id", "DiffuseR"); break; case GDif: root->AddChild("Id", "DiffuseG"); break; case BDif: root->AddChild("Id", "DiffuseB"); break; case RSpc: root->AddChild("Id", "SpecularR"); break; case GSpc: root->AddChild("Id", "SpecularG"); break; case BSpc: root->AddChild("Id", "SpecularB"); break; case DiffuseIntensity: root->AddChild("Id", "DiffuseI"); break; case SpecularIntensity: root->AddChild("Id", "SpecularI"); break; case ConeAngle: root->AddChild("Id", "ConeAngle"); break; case EdgeAngle: root->AddChild("Id", "EdgeAngle"); break; case Alpha: root->AddChild("Id", "Alpha"); break; case ZoomFactor: root->AddChild("Id", "Zoom"); break; case Range: root->AddChild("Id", "Range"); break; case FogStart: root->AddChild("Id", "FogStart"); break; case FogEnd: root->AddChild("Id", "FogEnd"); break; case RFog: root->AddChild("Id", "FogR"); break; case GFog: root->AddChild("Id", "FogG"); break; case BFog: root->AddChild("Id", "FogB"); break; default: __LOG_W__ << "Unknown motion channel type (" << type << ").\n"; break; } return root; } //------------------------------------------------------------------------------