public void SetInitialSettings() { if (Cat.instance != null) { Cat.instance.DestroyCat(); } if (Crow.instance != null) { Crow.instance.DestroyRaven(); } GameManager.instance.PauseGame(false); GameManager.instance.blocked = false; player = GameManager.instance.gameObject; fosforo = player.transform.Find("Fosforo").gameObject; isqueiro = player.transform.Find("Isqueiro").gameObject; faca = player.transform.Find("Faca").gameObject; pedra = player.transform.Find("Pedra").gameObject; book = player.GetComponent <Book>(); fosforoMiniGame = fosforo.GetComponent <MiniGameObject>(); isqueiroMiniGame = isqueiro.GetComponent <MiniGameObject>(); fosforoMiniGame.achievedGoal = false; isqueiroMiniGame.achievedGoal = false; fosforoMiniGame.active = false; isqueiroMiniGame.active = false; if (GameManager.instance.rpgTalk.isPlaying) { GameManager.instance.rpgTalk.EndTalk(); } }
public IEnumerator ExecuteCommand(List <Tuple <string, Transform, List <object> > > commands, bool child = true) { Debug.Log("enter"); gameVariableLists.Add(new Dictionary <string, object>()); int local = gameVariableLists.Count - 1; if (!child) { gameStarted = true; gameLoopCoroutines.Clear(); score_time = 0; loopBreakTrigger = false; gameBreakTrigger = false; } WaitForSeconds wait = new WaitForSeconds(0.75f); foreach (Tuple <string, Transform, List <object> > command in commands) { bool waited = false; if (command.Item3.Count >= 2 && command.Item3[0] == null && command.Item3[1].GetType() == typeof(string)) { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.Log(command.Item3[1].ToString()); gameBreakTrigger = true; } if (!gameBreakTrigger) { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matHighLight; } string variableName = ""; string value = ""; int layer; double num; switch (command.Item1) { case "start": break; case "define": variableName = command.Item3[0].ToString(); value = command.Item3[1].ToString(); if (value.StartsWith("&")) { value = value.Substring(1); if ((layer = findVariableInLists(value, local)) != -1) { value = gameVariableLists[layer][value].ToString(); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + value + "\" doesn't exsit!"); gameBreakTrigger = true; break; } } if (!gameVariableLists[local].ContainsKey(variableName)) { if (double.TryParse(value, out num)) { gameVariableLists[local].Add(variableName, num); } else { gameVariableLists[local].Add(variableName, value); } } else { if (double.TryParse(value, out num)) { gameVariableLists[local][variableName] = num; } else { gameVariableLists[local][variableName] = value; } } break; case "set": variableName = command.Item3[0].ToString(); value = command.Item3[1].ToString(); if (value.StartsWith("&")) { value = value.Substring(1); if ((layer = findVariableInLists(value, local)) != -1) { value = gameVariableLists[layer][value].ToString(); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + value + "\" doesn't exsit!"); gameBreakTrigger = true; break; } } if ((layer = findVariableInLists(variableName, local)) != -1) { if (double.TryParse(value, out num)) { gameVariableLists[layer][variableName] = num; } else { gameVariableLists[layer][variableName] = value; } Debug.Log("variable \"" + variableName + "\" exsit!"); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + variableName + "\" doesn't exsit!"); gameBreakTrigger = true; break; } break; case "for": yield return(StartCoroutine(ExecuteCommand((List <Tuple <string, Transform, List <object> > >)command.Item3[0]))); break; case "if": foreach (Image img in ((Transform)command.Item3[5]).GetComponentsInChildren <Image>()) { img.material = null; } foreach (Image img in ((Transform)command.Item3[6]).GetComponentsInChildren <Image>()) { img.material = null; } value = command.Item3[0].ToString(); if (value.StartsWith("&")) { value = value.Substring(1); if ((layer = findVariableInLists(value, local)) != -1) { value = gameVariableLists[layer][value].ToString(); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + value + "\" doesn't exsit!"); gameBreakTrigger = true; break; } } string value2 = command.Item3[1].ToString(); if (value2.StartsWith("&")) { value2 = value2.Substring(1); if ((layer = findVariableInLists(value2, local)) != -1) { value2 = gameVariableLists[layer][value2].ToString(); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + value2 + "\" doesn't exsit!"); gameBreakTrigger = true; break; } } Debug.Log(value + value2); bool enter = false; if (command.Item3[2].ToString() == "==") { enter = value == value2; } else if (command.Item3[2].ToString() == "!=") { enter = value != value2; } else { if (double.TryParse(value, out num) && double.TryParse(value2, out double num2)) { if (command.Item3[2].ToString() == ">") { enter = num > num2; } else if (command.Item3[2].ToString() == "<") { enter = num < num2; } else if (command.Item3[2].ToString() == ">=") { enter = num >= num2; } else if (command.Item3[2].ToString() == "<=") { enter = num <= num2; } } else if (GameUtility.OptionTextToNumber(value, out int num3) && GameUtility.OptionTextToNumber(value2, out int num4)) { Debug.Log(num3 + num4); foreach (MiniGameObject mini in GameVariable.gamePiece[num3]) { if (command.Item3[2].ToString() == "面向") { enter = mini.IsFacing(num4); } else if (command.Item3[2].ToString() == "沒有面向") { enter = !mini.IsFacing(num4); } else if (command.Item3[2].ToString() == "腳下有") { enter = mini.IsOn(num4); } else if (command.Item3[2].ToString() == "腳下沒有") { enter = !mini.IsOn(num4); } } } } yield return(Wait(wait)); waited = true; if (enter) { yield return(StartCoroutine(ExecuteCommand((List <Tuple <string, Transform, List <object> > >)command.Item3[3]))); } else { yield return(StartCoroutine(ExecuteCommand((List <Tuple <string, Transform, List <object> > >)command.Item3[4]))); } //Transform t = (Transform)command.Item3[2]; //StartCoroutine( ExecuteCommand( (List<Tuple<string, Transform, List<object>>>)command.Item3[0] ) ); //StartCoroutine( ExecuteCommand( (List<Tuple<string, Transform, List<object>>>)command.Item3[1] ) ); break; case "repeat": foreach (Image img in ((Transform)command.Item3[2]).GetComponentsInChildren <Image>()) { img.material = null; } int time = 0; if (command.Item3[0].GetType() == typeof(int)) { time = (int)command.Item3[0]; } else { variableName = command.Item3[0].ToString(); if (variableName.StartsWith("&")) { variableName = variableName.Substring(1); Debug.Log(variableName); if ((layer = findVariableInLists(variableName, local)) != -1) { time = (int)(double)gameVariableLists[layer][variableName]; Debug.Log(time); } else { Debug.LogWarning("variable \"" + variableName + "\" doesn't exsit!"); } } } yield return(Wait(wait)); waited = true; int x = 0; if (variableName == "infinity") { while (true) { gameLoopCoroutines.Add(StartCoroutine(ExecuteCommand((List <Tuple <string, Transform, List <object> > >)command.Item3[1]))); x = gameLoopCoroutines.Count - 1; yield return(gameLoopCoroutines[x]); if (loopBreakTrigger || gameBreakTrigger) { loopBreakTrigger = false; break; } } } else { for (int i = 0; i < time; i++) { gameLoopCoroutines.Add(StartCoroutine(ExecuteCommand((List <Tuple <string, Transform, List <object> > >)command.Item3[1]))); x = gameLoopCoroutines.Count - 1; yield return(gameLoopCoroutines[x]); if (loopBreakTrigger || gameBreakTrigger) { loopBreakTrigger = false; break; } } } //StartCoroutine( ExecuteCommand( (List<Tuple<string, Transform, List<object>>>)command.Item3[0] ) ); break; case "move": if (double.TryParse(command.Item3[0].ToString(), out num)) { MiniGameObject playerMini = player.GetComponent <MiniGameObject>(); playerMini.Move((int)num); } break; case "turn": if (double.TryParse(command.Item3[0].ToString(), out num)) { MiniGameObject playerMini = player.GetComponent <MiniGameObject>(); playerMini.Turn((int)num); } break; case "add": variableName = command.Item3[0].ToString(); value = command.Item3[1].ToString(); if (value.StartsWith("&")) { value = value.Substring(1); if ((layer = findVariableInLists(value, local)) != -1) { value = gameVariableLists[layer][value].ToString(); } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + value + "\" doesn't exsit!"); gameBreakTrigger = true; break; } } if ((layer = findVariableInLists(variableName, local)) != -1) { if (gameVariableLists[layer][variableName] is double) { if (double.TryParse(value, out num)) { gameVariableLists[layer][variableName] = (double)gameVariableLists[layer][variableName] + num; } else { Debug.Log($"can't add (number) and (string) together!"); } } else { gameVariableLists[layer][variableName] = gameVariableLists[layer][variableName] as string + value; } } else { foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = matRedHighLight; } Debug.LogWarning("variable \"" + variableName + "\" doesn't exsit!"); gameBreakTrigger = true; break; } break; case "break": loopBreakTrigger = true; break; } } if (!waited) { yield return(Wait(wait)); } foreach (List <MiniGameObject> list in gameEnv2d) { foreach (MiniGameObject mgo in list) { //if ( mgo.containObject( mgo.posInEnv.x, mgo.posInEnv.y, 5 ).Count >= 0 ) { // mgo.fallToDead = true; // mgo.moveAnimationType = 2; // mgo.moveAnimationStart = Time.time; //} if (mgo.objectType == 2 || mgo.objectType == 3) { if (mgo.containObject(mgo.posInEnv.x, mgo.posInEnv.y, 5).Count > 0) { mgo.fallToDead = true; mgo.moveAnimationType = 2; mgo.moveAnimationStart = Time.time; if (mgo.objectType == 2) { gameBreakTrigger = true; } } } } } foreach (Image img in command.Item2.GetComponentsInChildren <Image>()) { img.material = null; } if (gameBreakTrigger) { StopGame(); yield break; } else if (player.GetComponent <MiniGameObject>().IsOnFlag()) { StopGame(true); yield break; } } if (!child) { StopGame(player.GetComponent <MiniGameObject>().IsOnFlag()); } }
public void ResetGameView() { if (gameCoroutine != null) { StopCoroutine(gameCoroutine); StopGame(); } GameVariable.gamePiece = new Dictionary <int, List <MiniGameObject> > { { 1, new List <MiniGameObject>() }, { 2, new List <MiniGameObject>() }, { 3, new List <MiniGameObject>() }, { 4, new List <MiniGameObject>() }, { 5, new List <MiniGameObject>() }, { 6, new List <MiniGameObject>() }, { 7, new List <MiniGameObject>() } }; player = null; gameEnv2d = new List <MiniGameObject> [7, 6]; for (int i = 0; i < 7; i++) { for (int j = 0; j < 6; j++) { gameEnv2d[i, j] = new List <MiniGameObject>(); } } foreach (Transform child in gameView.transform) { Destroy(child.gameObject); } Vector3 origin = gameView.localPosition + new Vector3(0, gameView.GetComponent <RectTransform>().sizeDelta.y, 0); if (gameEnv != null) { spawnList.Clear(); for (int i = 0; i < 3; i++) { spawnList.Add(new List <Transform>()); } for (int i = 0; i < gameEnv.Length; i++) { Transform spawn = null; switch (gameEnv[i]) { case '0': case 'x': break; case '1': case 'o': spawn = Instantiate(obstaclePrefab, canvas).transform; GameVariable.gamePiece[1].Add(spawn.GetComponent <MiniGameObject>()); spawnList[0].Add(spawn); break; case '2': case 'p': if (player == null) { spawn = Instantiate(playerPrefab, canvas).transform; spawn.GetComponent <MiniGameObject>().direction = dir; player = spawn; GameVariable.gamePiece[2].Add(spawn.GetComponent <MiniGameObject>()); spawnList[2].Add(spawn); } break; case '3': case 'b': spawn = Instantiate(boxPrefab, canvas).transform; GameVariable.gamePiece[3].Add(spawn.GetComponent <MiniGameObject>()); spawnList[2].Add(spawn); break; case '4': case 'f': spawn = Instantiate(flagPrefab, canvas).transform; GameVariable.gamePiece[4].Add(spawn.GetComponent <MiniGameObject>()); spawnList[1].Add(spawn); break; case '5': case 'h': spawn = Instantiate(holePrefab, canvas).transform; GameVariable.gamePiece[5].Add(spawn.GetComponent <MiniGameObject>()); spawnList[0].Add(spawn); break; case '6': case 'j': spawn = Instantiate(buttonPrefab, canvas).transform; GameVariable.gamePiece[6].Add(spawn.GetComponent <MiniGameObject>()); spawnList[0].Add(spawn); break; case '7': case 'd': spawn = Instantiate(doorPrefab, canvas).transform; GameVariable.gamePiece[7].Add(spawn.GetComponent <MiniGameObject>()); spawnList[1].Add(spawn); break; } if (spawn != null) { int x = i % 7; int y = (int)Mathf.Floor(i / 7); MiniGameObject s = spawn.GetComponent <MiniGameObject>(); s.posInEnv = new Vector2Int(x, y); s.gameManager = this; gameEnv2d[x, y].Add(s); spawn.localPosition = origin + new Vector3((x + 0.5f) * 50f, -(y + 0.5f) * 50f, 0f); } } foreach (List <Transform> minis in spawnList) { foreach (Transform mini in minis) { mini.SetParent(gameView); } } } }