void TalkyUnit::onNewPrimitiveArray(string name) { DataType dataType = stringToDataType(name); currentDeclarationType = DLT_ARRAY; currentDataType = dataType; userTypeDefinition = NULL; }
bool AnimationTrack::loadFromXML(TiXmlElement *xmlNodeTrack) { xmlNodeTrack->QueryStringAttribute("name",&m_name); stringc dataType; xmlNodeTrack->QueryStringAttribute("dataType",&dataType); m_dataType = stringToDataType(dataType); TiXmlHandle hXmlNode(xmlNodeTrack); //load keyframes data TiXmlElement* xmlNodeTimes = hXmlNode.FirstChild( "times" ).Element(); if(xmlNodeTimes!=0) { int kfNum = 0; //times const char* timesStr = xmlNodeTimes->GetText(); if(timesStr!=0) { float *times=0; kfNum = StringUtil::splitOutFloats(times, timesStr); for(int i=0; i<kfNum; ++i) { KeyFrame* kf = createKeyFrame(); if(kf!=0) { kf->setTime(times[i]); m_keyFrames.push_back(kf); } } delete times; } //at least has 1 kf if(kfNum>0) { //KF datas float *kfDatas=0; TiXmlElement* xmlNodeKFs = hXmlNode.FirstChild( "keyframes" ).Element(); if(xmlNodeKFs!=0) { int valueNum = StringUtil::splitOutFloats(kfDatas, xmlNodeKFs->GetText()); u32 dataElemNum = m_keyFrames[0]->getDataElementNum(); FLT_ASSERT(dataElemNum>0 && valueNum/dataElemNum==kfNum); for(int i=0; i<kfNum; ++i) { m_keyFrames[i]->loadValue(kfDatas, i); } delete kfDatas; } //interp datas TiXmlElement* xmlNodeInterps = hXmlNode.FirstChild( "interps" ).Element(); if(xmlNodeInterps!=0) { array_t<stringc> strs; strs = StringUtil::split(xmlNodeInterps->GetText(), ",", kfNum); FLT_ASSERT(strs.size()==kfNum); for(int i=0; i<kfNum; ++i) { m_keyFrames[i]->setInterpTypeByString(strs[i]); } } } //create a computed frame, for interpolation m_computedFrame = createKeyFrame(); } return true; }