Пример #1
0
    public void OnGameEvent(GameFlowEvent flowEvent)
    {
        switch (flowEvent.GetAction())
        {
        case EGameFlowAction.StartDialogue:
            ChangeNextTransition(HSMTransition.EType.Child, typeof(GameFlowDialogueState));
            break;

        case EGameFlowAction.EndDialogue:
            new GameFlowEvent(EGameFlowAction.EndLevelPanel).Push();
            break;

        case EGameFlowAction.LevelSelection:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelSelectionState));
            break;

        case EGameFlowAction.Menu:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowMenuState));
            break;

        case EGameFlowAction.Retry:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
            break;

        case EGameFlowAction.NextLevel:
            if (!LevelManagerProxy.Get().IsLastLevel())
            {
                LevelManagerProxy.Get().NextLevel();
                ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
            }
            break;
        }
    }
Пример #2
0
    private void Start()
    {
        int best = LevelManagerProxy.Get().GetCurrentLevelScore();

        m_BestNumber.text = best > 0 ? best.ToString() : "";
        m_LevelName.text  = LevelManagerProxy.Get().GetCurrentLevelName();
    }
Пример #3
0
    public void OnGameEvent(GameFlowEvent flowEvent)
    {
        switch (flowEvent.GetAction())
        {
        case EGameFlowAction.EndDialogue:
            if (m_HasEnded)
            {
                if (!LevelManagerProxy.Get().IsLastLevel())
                {
                    LevelManagerProxy.Get().NextLevel();
                    ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
                }
                else
                {
                    ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowEndGameState));
                }
            }
            break;

        case EGameFlowAction.GameOver:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowGameOverState));
            break;

        case EGameFlowAction.LevelWon:
            m_HasEnded = true;
            break;

        case EGameFlowAction.Menu:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowMenuState));
            break;
        }
    }
Пример #4
0
    public void OnGameEvent(GameFlowEvent flowEvent)
    {
        switch (flowEvent.GetAction())
        {
        case EGameFlowAction.Menu:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowMenuState));
            break;

        case EGameFlowAction.LevelSelection:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelSelectionState));
            break;

        case EGameFlowAction.NextLevel:
            if (!LevelManagerProxy.Get().IsLastLevel())
            {
                LevelManagerProxy.Get().NextLevel();
                ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
            }
            break;

        case EGameFlowAction.Retry:
            ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
            break;

        case EGameFlowAction.Resume:
            ChangeNextTransition(HSMTransition.EType.Exit);
            break;
        }
    }
Пример #5
0
 public override void OnEnter()
 {
     LevelManagerProxy.Get().LoadScene("Scenes/MainMenu");
     LevelManagerProxy.Get().SetLevelIndex(0);
     TeamManagerProxy.Get().SayGoodbye();
     TeamManagerProxy.Get().AddCharacter(new CharacterModel("Prince", ECharacterClass.Prince));
     this.RegisterAsListener("Game", typeof(GameFlowEvent));
 }
Пример #6
0
    public override void OnEnter()
    {
        m_HasEnded = false;
        LevelManagerProxy.Get().LoadLevel();
        this.RegisterAsListener("Game", typeof(GameFlowEvent));

        ChangeNextTransition(HSMTransition.EType.Child, typeof(GameFlowNormalState));
    }
Пример #7
0
 void OpenProxies()
 {
     LoggerProxy.Open(m_Logger);
     UpdaterProxy.Open(m_Updater);
     GameEventManagerProxy.Open(m_GameEventManager);
     InputManagerProxy.Open(m_InputManager);
     LevelManagerProxy.Open(m_LevelManager);
     SoundManagerProxy.Open(m_SoundManager);
 }
Пример #8
0
 void CloseProxies()
 {
     SoundManagerProxy.Close(m_SoundManager);
     LevelManagerProxy.Close(m_LevelManager);
     InputManagerProxy.Close(m_InputManager);
     GameEventManagerProxy.Close(m_GameEventManager);
     UpdaterProxy.Close(m_Updater);
     LoggerProxy.Close(m_Logger);
 }
Пример #9
0
 private void AddBinSpawnCommand()
 {
     if (LevelManagerProxy.Get().GetMode() == ELevelMode.MaxBin)
     {
         BinSpawnCommand command = new BinSpawnCommand(gameObject);
         command.Execute();
         CommandStackProxy.Get().PushCommand(command);
     }
 }
 void Start()
 {
     m_LevelPositions   = GameObject.Find("LevelPositions").GetComponentsInChildren <Transform> ().SubArray(1);
     m_CurrentLevel     = LevelManagerProxy.Get().GetCurrentLevelID();
     m_TargetPos        = m_LevelPositions[m_CurrentLevel].position;
     transform.position = m_TargetPos;
     m_Animator         = GetComponent <Animator> ();
     this.RegisterAsListener("Player", typeof(PlayerInputGameEvent));
 }
Пример #11
0
    public override void Undo()
    {
        PlayerController controller = m_Actor.GetComponent <PlayerController> ();

        if (controller.IsHolding())
        {
            LevelManagerProxy.Get().DecreaseNumberOfMove();
        }
        controller.TurnInstant(m_OldFacingDirection);
    }
Пример #12
0
    public override void Execute()
    {
        PlayerController controller = m_Actor.GetComponent <PlayerController> ();

        if (controller.IsHolding())
        {
            LevelManagerProxy.Get().IncreaseNumberOfMove();
        }
        controller.Move(m_XDir, m_YDir);
    }
Пример #13
0
    public override void Undo()
    {
        PlayerController controller = m_Actor.GetComponent <PlayerController> ();

        if (controller.IsHolding())
        {
            LevelManagerProxy.Get().DecreaseNumberOfMove();
        }
        controller.MoveInstant(-m_XDir, -m_YDir);
    }
Пример #14
0
    public override void Execute()
    {
        PlayerController controller = m_Actor.GetComponent <PlayerController> ();

        if (controller.IsHolding())
        {
            LevelManagerProxy.Get().IncreaseNumberOfMove();
        }
        controller.Turn(m_NewFacingDirection);
    }
Пример #15
0
    private void Start()
    {
        m_LevelPositions = GameObject.Find("LevelPositions").GetComponentsInChildren <Transform> ().SubArray(1);
        Dictionary <int, string> levelIdToNames = LevelManagerProxy.Get().GetLevelNames();

        foreach (int id in levelIdToNames.Keys)
        {
            GameObject level = GameObject.Instantiate(m_LevelPrefab);
            level.transform.position = m_LevelPositions[id].position + m_Offset;
        }
    }
    public void Move(bool isGoingRight)
    {
        int nextLevel = m_CurrentLevel + (isGoingRight ? 1 : -1);

        if (!m_IsMoving && nextLevel >= 0 && nextLevel < m_LevelPositions.Length)
        {
            m_CurrentLevel = nextLevel;
            LevelManagerProxy.Get().SetLevelIndex(m_CurrentLevel);
            m_TargetPos = m_LevelPositions[m_CurrentLevel].position;
            StartCoroutine(MoveRoutine(isGoingRight));
        }
    }
Пример #17
0
    private void Awake()
    {
        Vector3 levelpos = Vector3.zero;

        for (int i = 0; i < LevelManagerProxy.Get().GetLevelNames().Count; i++)
        {
            GameObject level = GameObject.Instantiate(m_LevelPositonPrefab);
            level.transform.SetParent(transform, false);
            level.transform.position = levelpos;
            levelpos += m_Spacing;
        }
    }
Пример #18
0
 public void RegisterBinGoal(BinGoal binGoal)
 {
     if (LevelManagerProxy.Get().GetMode() == ELevelMode.MaxBin)
     {
         binGoal.gameObject.SetActive(false);
     }
     else
     {
         m_BinGoals.Add(binGoal.GetCoordinates(), binGoal);
         m_BinGoalFlags.Add(binGoal.GetCoordinates(), false);
     }
 }
Пример #19
0
    private void Update()
    {
        int best = LevelManagerProxy.Get().GetCurrentLevelScore();

        m_BestNumber.text      = best > 0 ? best.ToString() : "";
        m_CurrenLevelName.text = LevelManagerProxy.Get().GetCurrentLevelName();
        if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.Space))
        {
            new GameFlowEvent(EGameFlowAction.Start).Push();
        }
        if (Input.GetKeyDown(KeyCode.Escape))
        {
            new GameFlowEvent(EGameFlowAction.Menu).Push();
        }
    }
Пример #20
0
    public void OnGameEvent(GameFlowEvent flowEvent)
    {
        switch (flowEvent.GetAction())
        {
        case EGameFlowAction.LeaveNode:
            ChangeNextTransition(HSMTransition.EType.Siblings, typeof(GameFlowNormalState));
            break;

        case EGameFlowAction.LevelWon:
            if (!LevelManagerProxy.Get().IsLastLevel())
            {
                LevelManagerProxy.Get().NextLevel();
                ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowLevelState));
            }
            else
            {
                ChangeNextTransition(HSMTransition.EType.Clear, typeof(GameFlowEndGameState));
            }
            break;
        }
    }
Пример #21
0
    // This should be called before any other gameobject awakes
    private void Awake ()
    {
        // Singleton pattern : this is the only case where it should be used
        if(ms_Instance == null)
        {
            ms_Instance = this;
            DontDestroyOnLoad (gameObject);
            
            // Keep the Updater first, as the other members might want to register to it
            m_Logger = new UnityLogger ();
            LoggerProxy.Open (m_Logger);
            m_Updater = new Updater ();
            UpdaterProxy.Open (m_Updater);
            m_GameEventManager = new GameEventManager ();
            GameEventManagerProxy.Open (m_GameEventManager);
            m_InputManager = new InputManager ();
            InputManagerProxy.Open (m_InputManager);
            m_LevelManager = new LevelManager ();
            LevelManagerProxy.Open (m_LevelManager);
            m_TileManager = new TileManager ();
            TileManagerProxy.Open (m_TileManager);
            m_CommandStack = new CommandStack ();
            CommandStackProxy.Open (m_CommandStack);
            m_GoalManager = new GoalManager ();
            GoalManagerProxy.Open (m_GoalManager);
            m_SoundManager = new SoundManager ();
            SoundManagerProxy.Open (m_SoundManager);
            m_SoundManager.SetMusicSource (m_MusicSource);
            m_SoundManager.SetFXSource (m_EfxSource);

            m_GameFlowHSM = new GameFlowHSM ();
            m_GameFlowHSM.Start (typeof (GameFlowMenuState));
        }
        else if (ms_Instance != this)
        {
            Destroy (gameObject);
            return;
        }
    }
Пример #22
0
 public override void OnEnter()
 {
     LevelManagerProxy.Get().LoadScene("Scenes/MainMenu");
     this.RegisterAsListener("Game", typeof(GameFlowEvent));
 }
Пример #23
0
 public override void Execute()
 {
     PlayerManagerProxy.Get().ResetStat();
     LevelManagerProxy.Get().Reset();
     new GameFlowEvent(EGameFlowAction.Quit).Push();
 }
Пример #24
0
 public override void Execute()
 {
     LevelManagerProxy.Get().NextLevel();
 }
Пример #25
0
    public void TriggerDialogue(string tag)
    {
        new GameFlowEvent(EGameFlowAction.StartDialogue).Push();
        Dialogue dialogue = new Dialogue(tag);

        char[] separators = { ':' };
        string filename   = "/Dialogues_level" + LevelManagerProxy.Get().GetCurrentLevelID() + ".txt";

        filename = Application.streamingAssetsPath + filename;

        string[] lines = File.ReadAllLines(filename);

        int countBrackets = 0;

        int dialogueBeginning = 0;
        int dialogueEnd       = 0;

        for (int i = 0; i < lines.Length; i++)
        {
            string[] datas = lines[i].Split(separators, System.StringSplitOptions.RemoveEmptyEntries);
            if (datas.Length == 0)
            {
                continue;
            }

            if (datas[0] == "[")
            {
                countBrackets++;
            }

            if (datas[0] == "]")
            {
                if (countBrackets <= 0)
                {
                    this.DebugLog("Parsing error, ']' unexpected at line " + i);
                    new GameFlowEvent(EGameFlowAction.EndDialogue).Push();
                }

                countBrackets--;
            }

            // If there is a single word it is a dialog tag
            if (datas.Length == 1 && datas[0] == tag && countBrackets == 0)
            {
                dialogueBeginning = i + 2;
            }
            // We then seek for the a ] that signals the end of the dialogue
            if (dialogueBeginning > 0 && datas.Length == 1 && datas[0] == "]" && countBrackets == 0)
            {
                dialogueEnd = i;
                break;
            }
        }
        if (dialogueBeginning == 0)
        {
            this.DebugLog("Could not find dialogue with tag " + tag);
            new GameFlowEvent(EGameFlowAction.EndDialogue).Push();
            return;
        }

        // Check if dialogue is composed of subdialogs or not by checking if there's a subdialog name
        string[] temp = lines[dialogueBeginning].Split(separators, System.StringSplitOptions.RemoveEmptyEntries);
        if (temp.Length == 1)
        {
            dialogue.m_IsSubDialogues = true;
        }

        if (!dialogue.m_IsSubDialogues)
        {
            // If not composed of subdialogs, parse only sentences
            for (int i = dialogueBeginning; i < dialogueEnd; i++)
            {
                string[] datas = lines[i].Split(separators);
                if (datas.Length != 2)
                {
                    this.DebugLog("Invalid number of data line " + i + " expecting 2, got " + datas.Length);
                    return;
                }
                dialogue.m_Texts.Add(new Dialogue.Sentence(datas[0].Trim(), datas[1]));
            }
        }
        else
        {
            // If composed of subdialogs, parse subdialogs
            char[]   newSeparators    = { ':', '[', ']' };
            char[]   trimChar         = { ' ', '\t' };
            bool     subDialogueStart = false;
            string   subDialogueName  = null;
            Dialogue currSubDialogue  = null;

            for (int i = dialogueBeginning; i < dialogueEnd; i++)
            {
                string   line  = lines[i].Trim(trimChar);
                string[] datas = line.Split(newSeparators, System.StringSplitOptions.RemoveEmptyEntries);

                // Find beginning of subdialog
                if (!subDialogueStart && datas.Length == 1)
                {
                    subDialogueStart = true;
                    subDialogueName  = datas[0].Trim();
                    currSubDialogue  = new Dialogue(subDialogueName);
                    i++;
                    continue;
                }

                // Find ending of subdialog and add it to dialog
                if (subDialogueStart && line == "]")
                {
                    subDialogueStart = false;
                    dialogue.m_SubDialogues.Add(currSubDialogue);
                    currSubDialogue = null;
                    continue;
                }

                // Find Sentence and Choice of subdialog and add it to subdialog
                if (subDialogueStart && datas.Length > 0)
                {
                    if (string.Equals(datas[0], "Sentence"))
                    {
                        //Assert.IsTrue (datas.Length == 3);
                        if (datas.Length != 3)
                        {
                            Debug.Log(filename + " line: " + i);
                        }
                        currSubDialogue.m_Texts.Add(new Dialogue.Sentence(datas[1].Trim(), datas[2]));
                    }
                    else if (string.Equals(datas[0], "Choice"))
                    {
                        Assert.IsTrue(datas.Length == 2);
                        currSubDialogue.m_Texts.Add(new Dialogue.Choice("Choice", ParseChoice(datas[1], i)));
                    }
                    else
                    {
                        string[] action = line.Split(new char[] { ' ' }, System.StringSplitOptions.RemoveEmptyEntries);
                        switch (action[0])
                        {
                        case "AddToTeam":
                        {
                            currSubDialogue.m_Action = new AddToTeamAction(action[1], (ECharacterClass)System.Enum.Parse(typeof(ECharacterClass), action[2]));
                            break;
                        }

                        case "RemoveFromTeam":
                        {
                            currSubDialogue.m_Action = new RemoveFromTeamAction(action[1]);
                            break;
                        }

                        case "Capacity":
                        {
                            currSubDialogue.m_Action = new UseCapacityAction(action[1], (ECharacterCapacity)System.Enum.Parse(typeof(ECharacterCapacity), action[2]));
                            break;
                        }

                        case "SayGoodbye":
                        {
                            currSubDialogue.m_Action = new SayGoodbyeAction();
                            break;
                        }
                        }
                    }
                }
            }
        }

        StartDialogue(dialogue);
    }
Пример #26
0
 public override void OnEnter()
 {
     UpdaterProxy.Get().SetPause(true);
     LevelManagerProxy.Get().OnLevelEnd();
     this.RegisterAsListener("Game", typeof(GameFlowEvent));
 }
Пример #27
0
 private void Update()
 {
     m_MoveNumber.text = LevelManagerProxy.Get().GetNumberOfMove().ToString();
 }
Пример #28
0
    void Start()
    {
        TileCoordinates levelDimension = LevelManagerProxy.Get().GetLevelDimension();

        transform.position = new Vector3(levelDimension.x.ToWorldUnit() / 2, levelDimension.y.ToWorldUnit() / 2, transform.position.z);
    }
Пример #29
0
 public override void OnEnter()
 {
     LevelManagerProxy.Get().LoadScene(1);
     this.RegisterAsListener("Game", typeof(GameFlowEvent));
     this.RegisterAsListener("Player", typeof(GameOverGameEvent), typeof(PlayerInputGameEvent));
 }