void CModel::AddComment(CComment* comment) { if (m_curSequence != NULL) { m_curSequence->AddComment(comment); return; } if (m_comments == NULL) { m_comments = comment; } else { CComment* curComment = m_comments; while (curComment->GetNext() != NULL) { curComment = curComment->GetNext(); } curComment->SetNext(comment); } }
void CSequence::Write(CTxtFile* file, bool bPreQuat) { CComment* curComment = m_comments; while(curComment != NULL) { curComment->Write(file); curComment = curComment->GetNext(); } file->Write("$", CAssimilateDoc::GetKeyword(IsGLA()?TK_AS_GRAB_GLA:TK_AS_GRAB, TABLE_QDT), " "); CString path = m_path; int loc = path.Find("/base"); if (loc > -1) { path = path.Right(path.GetLength() - loc - 5); loc = path.Find("/"); path = path.Right(path.GetLength() - loc - 1); } if (!path.GetLength()) // check that some dopey artist hasn't use the name "base" on the right hand side { path = m_path; } Filename_AccountForLOD(path, giLODLevelOverride); file->Write(path); /* if (m_frameCount > -1) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_FRAMES, TABLE_GRAB), " "); file->Write(m_startFrame); file->Space(); file->Write(m_targetFrame); file->Space(); file->Write(m_frameCount); } */ // if (strstr(path,"death16")) // { // int z=1; // } if (!IsGLA()) { if (m_fill > -1) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_FILL, TABLE_GRAB), " "); // file->Space(); file->Write(m_fill); } if (m_loopFrame != 0) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_LOOP, TABLE_GRAB), " "); // file->Space(); file->Write(m_loopFrame); } // if (m_enum && (strcmp(m_name, m_enum) != 0)) if (m_enum.GetLength() && (strcmp(m_name, m_enum) != 0)) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_ENUM, TABLE_GRAB), " "); // file->Space(); file->Write(m_enum); } if (m_sound != NULL) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_SOUND, TABLE_GRAB), " "); // file->Space(); file->Write(m_sound); } if (m_action != NULL) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_ACTION, TABLE_GRAB), " "); // file->Space(); file->Write(m_action); } if (m_bGenLoopFrame) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_GENLOOPFRAME, TABLE_GRAB), " "); } if (m_frameSpeed != m_iFrameSpeedFromHeader || GetValidAdditionalSequences() || bPreQuat ) { // write out start marker (and stop-marker at bottom) so qdata can skip this more easily... // file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_QDSKIPSTART, TABLE_GRAB)); if (m_frameSpeed != m_iFrameSpeedFromHeader) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_FRAMESPEED, TABLE_GRAB), " "); file->Write(m_frameSpeed); } for (int i=0; i<MAX_ADDITIONAL_SEQUENCES; i++) { CSequence* additionalSeq = AdditionalSeqs[i]; if (additionalSeq->AdditionalSequenceIsValid()) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_ADDITIONAL, TABLE_GRAB), " "); file->Write(additionalSeq->GetStartFrame()); file->Space(); file->Write(additionalSeq->GetFrameCount()); file->Space(); file->Write(additionalSeq->GetLoopFrame()); file->Space(); file->Write(additionalSeq->GetFrameSpeed()); file->Space(); file->Write(additionalSeq->GetEnum()); } } // this is an unpleasant abuse, but needed to retro-hack into old versions of carcass... // if (bPreQuat) { file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_PREQUAT, TABLE_GRAB)); } // any other stuff in future (sound events etc)... // // ... // write end marker (so QData knows to start reading again)... // file->Space(); file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_QDSKIPSTOP, TABLE_GRAB)); } } file->Writeln(); }
CComment* CComment::Create(LPCTSTR comment) { CComment* retval = new CComment(); retval->Init(comment); return retval; }
void CModel::Write(CTxtFile* file) { file->Write("$"); file->Writeln(CAssimilateDoc::GetKeyword(TK_AS_GRABINIT, TABLE_QDT)); if (!HasGLA()) { if (GetScale() != 1.0f) { file->Write("$"); file->Write(CAssimilateDoc::GetKeyword(TK_AS_SCALE, TABLE_QDT)," "); file->Writeln(va("%g",GetScale())); } if (GetKeepMotion()) { file->Write("$"); file->Writeln(CAssimilateDoc::GetKeyword(TK_AS_KEEPMOTION, TABLE_QDT)); } if (GetRefGLAPath()) { file->Write("$"); file->Write(CAssimilateDoc::GetKeyword(TK_AS_REF_GLA, TABLE_QDT), " "); file->Writeln(va("%s", GetRefGLAPath())); } for (int iPCJ=0; iPCJ < PCJList_GetEntries(); iPCJ++) { file->Write("$"); file->Write(CAssimilateDoc::GetKeyword(TK_AS_PCJ, TABLE_QDT)," "); file->Writeln( PCJList_GetEntry(iPCJ) ); } } CComment* curComment = m_comments; while(curComment != NULL) { curComment->Write(file); curComment = curComment->GetNext(); } bool bFirstSeqWritten = false; CSequence* curSequence = m_sequences; while(curSequence != NULL) { curSequence->Write(file, !bFirstSeqWritten && GetPreQuat()); curSequence = curSequence->GetNext(); bFirstSeqWritten = true; } file->Writeln("$", CAssimilateDoc::GetKeyword(TK_AS_GRABFINALIZE, TABLE_QDT)); if (m_path != NULL) { file->Write("$", CAssimilateDoc::GetKeyword(GetConvertType(), TABLE_QDT)); CString path = m_path; int loc = path.Find("/base"); if (loc > -1) { path = path.Right(path.GetLength() - loc - 5); loc = path.Find("/"); path = path.Right(path.GetLength() - loc - 1); } if (!path.GetLength()) // check that some dopey artist hasn't use the name "base" on the right hand side { path = m_path; } file->Write(" ", path, " "); // params stuff... if (IsGhoul2()) { if (GetMakeSkin()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_MAKESKIN, TABLE_CONVERT), " "); } if (GetSmooth()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_SMOOTH, TABLE_CONVERT), " "); } if (GetLoseDupVerts()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_LOSEDUPVERTS, TABLE_CONVERT), " "); } if (GetIgnoreBaseDeviations()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_IGNOREBASEDEVIATIONS, TABLE_CONVERT), " "); } if (GetSkew90()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_SKEW90, TABLE_CONVERT), " "); } if (GetNoSkew90()) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_NOSKEW90, TABLE_CONVERT), " "); } if (GetMakeSkelPath() && strlen(GetMakeSkelPath())) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_MAKESKEL, TABLE_CONVERT), " "); file->Write(GetMakeSkelPath(), " "); } // params below not used for ghoul2 } else { if (giLODLevelOverride) { file->Write(va("-lod %d ",giLODLevelOverride)); } file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_PLAYERPARMS, TABLE_CONVERT), " "); file->Write(0);//m_skipStart+1); // ignore these, but don't want to update parser and have invalid prev files file->Space(); file->Write(0);//m_skipEnd);//max upper frames); file->Space(); } if (m_originx || m_originy || m_originz) { file->Write("-", CAssimilateDoc::GetKeyword(TK_AS_ORIGIN, TABLE_CONVERT), " "); file->Write(m_originx); file->Space(); file->Write(m_originy); file->Space(); file->Write(m_originz); } file->Writeln(); } }
/** * \brief Generate Message List * \param[in] fileInput Input file * * This function will parse the input file and line by line * and generates a list of message,signal,value table,comments,etc */ void CConverter::GenerateMessageList(fstream& fileInput) { char acLine[defCON_MAX_LINE_LEN]; // I don't expect one line to be more than this bool valTab = false; list<CMessage>::iterator posMsg; list<CSignal>::iterator posSig; // parsing the input file while(fileInput.getline(acLine,defCON_MAX_LINE_LEN)) { char* pcToken; char* pcNextToken; char* pcLine; // avoid leading <spaces> before tokenising, so passing the // starting point will be correct in each case, when calling // msg.Format, sig.Format etc. pcLine = acLine; while(*pcLine && *pcLine == ' ') { *pcLine++; } pcToken = strtok_s(pcLine, " ", &pcNextToken); if(pcToken) { //compare token to known types to interpret the line further // new line - skip if(strcmp(pcToken,"\n") == 0) { continue; } // message else if(strcmp(pcToken,"[START_MSG]") == 0) { bool found = false; CMessage msg; msg.Format(pcLine + strlen(pcToken)+1); // find the message for(posMsg=m_listMessages.begin(); posMsg!=m_listMessages.end(); ++posMsg) { if((posMsg->m_uiMsgID == msg.m_uiMsgID) && (posMsg->m_cFrameFormat == msg.m_cFrameFormat)) { found = true; break; } } if (!found) { m_listMessages.push_back(msg); posMsg = m_listMessages.end(); --posMsg; } } else if(strcmp(pcToken,"[START_SIG_LIST]") == 0) { CMessage msg; msg.m_sName = "VECTOR__INDEPENDENT_SIG_MSG"; msg.m_sTxNode = "Vector__XXX"; msg.m_ucLength = 0; msg.m_uiMsgID = 3221225472; CConverter::ucMsg_DLC = 8; m_listMessages.push_front(msg); posMsg = m_listMessages.begin(); fileInput.getline(acLine,defCON_MAX_LINE_LEN); pcToken = strtok_s(pcLine, " ", &pcNextToken); while(strcmp(acLine,"[END_SIG_LIST]") != 0) { pcToken = strtok_s(pcLine, " ", &pcNextToken); if(strcmp(pcToken,"[START_SIGNALS]") == 0) { CSignal sig; sig.Format(pcLine + strlen(pcToken)+1); sig.m_ucStartBit = 0; posMsg->m_listSignals.push_front(sig); posSig = posMsg->m_listSignals.begin(); } else if(strcmp(pcToken,"[VALUE_DESCRIPTION]") == 0) { CValueDescriptor val; val.Format(pcLine + strlen(pcToken)+1); posSig->m_listValueDescriptor.push_front(val); } fileInput.getline(acLine,defCON_MAX_LINE_LEN); } } else if(strcmp(pcToken,"[START_SIGNALS]") == 0) { CSignal sig; sig.Format(pcLine + strlen(pcToken)+1); posMsg->m_listSignals.push_front(sig); posSig = posMsg->m_listSignals.begin(); } else if(strcmp(pcToken,"[VALUE_DESCRIPTION]") == 0 && valTab == false) { CValueDescriptor val; val.Format(pcLine + strlen(pcToken)+1); posSig->m_listValueDescriptor.push_front(val); } else if(strcmp(pcToken,"[START_NOT_SUPPORTED]") == 0) { } //nodes else if(strcmp(pcToken,"[NODE]") == 0) { create_Node_List(pcLine + strlen(pcToken)+1); } else if(strcmp(pcToken,"[START_VALUE_TABLE]")==0) { while(fileInput.getline(acLine,defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_VALUE_TABLE]")!=0) { pcLine = acLine; pcToken=strtok_s(pcLine, " ", &pcNextToken); if(strcmp(pcToken,"[START_TABLE]")==0) { CValueTable vTab; vTab.Format_ValueTable(pcLine + strlen(pcToken)+1,fileInput); m_vTab.push_back(vTab); } } } else if(strcmp(pcToken,"[START_PARAM]")==0) { while(fileInput.getline(acLine,defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM]")!=0) { pcLine = acLine; CParameter rParam; if(strcmp(pcLine,"[START_PARAM_NET]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_NET]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,0); m_listParameterArray[0].push_back(rParam); } } else if(strcmp(pcToken,"[START_PARAM_NODE]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_NODE]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,1); m_listParameterArray[1].push_back(rParam); } } else if(strcmp(pcToken,"[START_PARAM_MSG]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_MSG]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,2); m_listParameterArray[2].push_back(rParam); } } else if(strcmp(pcToken,"[START_PARAM_SIG]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_SIG]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,3); m_listParameterArray[3].push_back(rParam); } } else if(strcmp(pcToken,"[START_PARAM_NODE_RX_SIG]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_NODE_RX_SIG]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,4); m_listParameterArray[4].push_back(rParam); } } else if(strcmp(pcToken,"[START_PARAM_NODE_TX_MSG]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_NODE_TX_MSG]")!=0) { pcLine = acLine; rParam.Format_ParamDef(pcLine,5); m_listParameterArray[5].push_back(rParam); } } } } else if(strcmp(pcToken,"[START_PARAM_VAL]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_PARAM_VAL]")!=0) { pcLine = acLine; CParameter tParam; if(strcmp(pcLine,"[START_PARAM_NET_VAL]")==0) { tParam.Format_NetParam_Value(fileInput,m_listParameterArray[0]); } else if(strcmp(pcLine,"[START_PARAM_NODE_VAL]")==0) { tParam.Format_NodeParam_Value(fileInput,m_listParameterArray[1]); } else if(strcmp(pcLine,"[START_PARAM_MSG_VAL]")==0) { tParam.Format_MesgParam_Value(fileInput,m_listParameterArray[2]); } else if(strcmp(pcLine,"[START_PARAM_SIG_VAL]")==0) { tParam.Format_SigParam_Value(fileInput,m_listParameterArray[3]); } } } else if(strcmp(pcToken,"[START_DESC]")==0) { while(fileInput.getline(acLine, defCON_MAX_LINE_LEN) && strcmp(acLine, "[END_DESC]")!=0) { pcLine = acLine; CComment tCmt; if(strcmp(pcLine,"[START_DESC_NET]")==0) { tCmt.Format_netComment(fileInput, m_listComments[0]); } else if(strcmp(pcLine,"[START_DESC_NODE]")==0) { tCmt.Format_nodeComment(fileInput, m_listComments[1]); } else if(strcmp(pcLine,"[START_DESC_MSG]")==0) { tCmt.Format_msgComment(fileInput, m_listComments[2]); } else if(strcmp(pcLine,"[START_DESC_SIG]")==0) { tCmt.Format_sigComment(fileInput, m_listComments[3]); } } } else if(strcmp(pcToken,"[START_NOT_PROCESSED]") == 0) { fileInput.getline(acLine,defCON_MAX_LINE_LEN); while(strcmp(pcToken,"[END_NOT_PROCESSED]") != 0) { string str = acLine; m_notProcessed.push_back(str); fileInput.getline(acLine, defCON_MAX_LINE_LEN); } continue; } //if any other tag continue else { continue; } } } return ; }