Esempio n. 1
0
    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();
        }
    }
Esempio n. 2
0
    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());
        }
    }
Esempio n. 3
0
    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);
                }
            }
        }
    }