public override void OnInspectorGUI() { DrawDefaultInspector(); QAIngest ingestRef = (QAIngest)target; if (GUILayout.Button("Load file")) { string path = EditorUtility.OpenFilePanel("Choose file", "", "txt"); StreamReader fileIn = new StreamReader(path); string contents = fileIn.ReadToEnd(); ingestRef.loadFile(contents); } if (ingestRef.fileLoaded) { if (GUILayout.Button("Process")) { parse(ingestRef); } } }
public void parse(QAIngest ingestRef) { List <string> questionList = new List <string> (); List <string> setNameList = new List <string> (); List <int> numberOfAnswers = new List <int> (); List <int> correctAnswerList = new List <int> (); List <string> answersList = new List <string>(); int correctAnswer; List <StringBank> sbList = new List <StringBank> (); List <GameObject> prefabList = new List <GameObject> (); // Structure is: // + // <name of the set> // - // <question 1> // / // <answer 1 to question 1> // / // <answer 2 to question 1> // ...etc // - // <question 2> // / // <answer 1 to question 2> // ...etc int answerNumber; int questionNumber; AllTerrainParser parser = new AllTerrainParser(ingestRef.fileContents); parser.setParserMode(ParserMode.begin); GameObject newStringBankGO; GameObject GO; StringBank newStringBank; Object prefab; int ojojo; ojojo = parser.dataSize(); while (parser.charAtHead() == '+') { questionList = new List <string> (); correctAnswerList = new List <int> (); sbList = new List <StringBank> (); prefabList = new List <GameObject> (); parser.scanToChar('+'); // go past '+' parser.scanToNextLine(); // onto next line parser.setParserMode(ParserMode.end); // move end head until the end of the line parser.scanWhileNotNextLine(); string setName = parser.extract(); setNameList.Add(setName); parser.setParserMode(ParserMode.begin); parser.scanToNextLine(); while (parser.charAtHead() == '-') { numberOfAnswers = new List <int> (); answersList = new List <string>(); answerNumber = 0; correctAnswer = -1; parser.scanToChar('-'); // scan past '-' parser.scanToNextLine(); // move onto next line parser.setParserMode(ParserMode.end); // end head until the end of line parser.scanWhileNotNextLine(); string question = parser.extract(); questionList.Add(question); parser.setParserMode(ParserMode.begin); parser.scanToNextLine(); // onto next line string link = ""; if (parser.charAtHead() == '$') { // link found parser.scanToChar('$'); parser.setParserMode(ParserMode.end); parser.scanWhileNotNextLine(); link = parser.extract(); parser.setParserMode(ParserMode.begin); parser.scanToNextLine(); } while (parser.charAtHead() == '/') { parser.scanToChar('/'); parser.scanToNextLine(); parser.setParserMode(ParserMode.end); parser.scanWhileNotNextLine(); string answer = parser.extract(); if (answer.ToCharArray() [0] == '*') { answer = answer.Substring(1); correctAnswer = answerNumber; } answersList.Add(answer); parser.setParserMode(ParserMode.begin); parser.scanToNextLine(); ++answerNumber; } // if found, store link in server if (!link.Equals("")) { WWWForm form = new WWWForm(); form.AddField("setId", setName); form.AddField("questionId", questionList.Count); form.AddField("link", link); string script = Utils.WisdominiServer + "/registerLink"; WWW www = new WWW(script, form); if (www != null) { while (!www.isDone) { // wait?!? } } } numberOfAnswers.Add(answerNumber); correctAnswerList.Add(correctAnswer); // at this point we have gathered: set name, question, and all answers // we can produce a StringBank(Respuestas... ) newStringBankGO = new GameObject(); newStringBank = newStringBankGO.AddComponent <StringBank> (); newStringBank.reset(); newStringBank.phrase = new string[answerNumber]; for (int i = 0; i < answerNumber; ++i) { newStringBank.phrase [i] = answersList [i]; } newStringBank.extra = "Respuestas" + setName + questionList.Count; GO = PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Respuestas" + setName + "_" + questionList.Count + ").prefab", InteractionMode.AutomatedAction); prefabList.Add(GO); sbList.Add(newStringBank); } // end of while '-' // at this point we have gathered all questions in the set, // we can produce a StringBank(Preguntas... ) newStringBankGO = new GameObject(); newStringBank = newStringBankGO.AddComponent <StringBank>(); newStringBank.reset(); newStringBank.phrase = new string[questionList.Count]; newStringBank.correntAnswer = new int[questionList.Count]; for (int i = 0; i < questionList.Count; ++i) { newStringBank.phrase[i] = questionList[i]; newStringBank.correntAnswer[i] = correctAnswerList[i] + 1; } newStringBank.extra = "Preguntas" + setName; GO = PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Preguntas" + setName + ").prefab", InteractionMode.AutomatedAction); prefabList.Add(GO); sbList.Add(newStringBank); // and finally, we can create the StringBankCollection prefab GameObject newStringBankColGO = new GameObject(); StringBankCollection newStringBankCol = newStringBankColGO.AddComponent <StringBankCollection> (); newStringBankCol.bank = new StringBank[questionList.Count + 1]; newStringBankCol.bank [0] = prefabList [prefabList.Count - 1].GetComponent <StringBank> (); for (int i = 0; i < sbList.Count - 1; ++i) { newStringBankCol.bank [i + 1] = (StringBank)prefabList [i].GetComponent <StringBank> (); } PrefabUtility.SaveAsPrefabAssetAndConnect(newStringBankColGO, "Assets/Prefabs/StringBanks/" + ingestRef.outputFolder + "/StringBank(Preguntas" + setName + ").prefab", InteractionMode.AutomatedAction); DestroyImmediate(newStringBankColGO); for (int i = 0; i < sbList.Count; ++i) { DestroyImmediate(sbList [i].gameObject); } } // end of while '+' }