#include "DataPosition.h"
#include "..\..\icommon\memfile.h"
#include "..\..\..\common_h\core.h"
#include "..\..\TextFile.h"
#ifndef _XBOX
#include "..\..\..\common_h\tinyxml\tinyxml.h"
#endif
#include "fieldlist.h"
#include "..\..\..\Common_h\data_swizzle.h"
//конструктор/деструктор
DataPosition::DataPosition (FieldList* pMaster)
{
szName = NULL;
szEditorName = NULL;
Master = pMaster;
Value = Vector(0, 0, 0);
}
DataPosition::~DataPosition ()
{
}
//Получить значение (Текущее время, Коэфицент рандома[0..1])
const Vector& DataPosition::GetValue ()
{
return Value;
}
//Установить значение
void DataPosition::SetValue (const Vector& val)
{
Value = val;
if (Master) Master->UpdateCache();
}
void DataPosition::Load (MemFile* File)
{
Vector vValue;
File->ReadType(vValue.x);
XSwizzleFloat(vValue.x);
File->ReadType(vValue.y);
XSwizzleFloat(vValue.y);
File->ReadType(vValue.z);
XSwizzleFloat(vValue.z);
//api->Trace("Read position %3.2f, %3.2f, %3.2f", vValue.x, vValue.y, vValue.z);
SetValue (vValue);
//static char AttribueName[128];
dword NameLength = 0;
File->ReadType(NameLength);
XSwizzleDWord(NameLength);
Assert (NameLength < 128);
//File->Read(AttribueName, NameLength);
const char* AttribueName = File->GetPointerToString(NameLength);
SetName (AttribueName, "a");
if (Master) Master->UpdateCache();
}
void DataPosition::SetName (const char* szName, const char* szEditorName)
{
//api->Trace("DataPosition::SetName - '%s'", szName);
this->szName = szName;
this->szEditorName = szEditorName;
}
const char* DataPosition::GetName ()
{
return szName;
}
void DataPosition::Write (MemFile* File)
{
Vector vValue = GetValue();
//api->Trace("Write position %3.2f, %3.2f, %3.2f", vValue.x, vValue.y, vValue.z);
File->WriteType(vValue.x);
File->WriteType(vValue.y);
File->WriteType(vValue.z);
//save name
DWORD NameLength = crt_strlen(szName);
DWORD NameLengthPlusZero = NameLength+1;
File->WriteType(NameLengthPlusZero);
Assert (NameLength < 128);
File->Write(szName, NameLength);
File->WriteZeroByte();
}
const char* DataPosition::GetEditorName ()
{
return szEditorName;
}
#ifndef _XBOX
void DataPosition::WriteXML (TextFile* xmlFile, dword level)
{
xmlFile->Write((level+1), "\n", szName);
xmlFile->Write((level+1), "\n", GetValue().x);
xmlFile->Write((level+1), "\n", GetValue().y);
xmlFile->Write((level+1), "\n", GetValue().z);
}
void DataPosition::LoadXML (TiXmlElement* root)
{
TiXmlElement* name = root->FirstChildElement("Name");
TiXmlElement* value_x = root->FirstChildElement("Value_x");
TiXmlElement* value_y = root->FirstChildElement("Value_y");
TiXmlElement* value_z = root->FirstChildElement("Value_z");
if (name)
{
SetName (name->Attribute("val"), "a");
}
Vector vl = 0.0f;
if (value_x)
{
vl.x = (float)atof (value_x->Attribute("val"));
}
if (value_y)
{
vl.y = (float)atof (value_y->Attribute("val"));
}
if (value_z)
{
vl.z = (float)atof (value_z->Attribute("val"));
}
SetValue(vl);
}
#endif