예제 #1
0
 private void EnterSub()
 {
     Debug.Log("Enter Sub");
     MMGameEvent.Trigger("Save");
     CorgiEngineEvent.Trigger(CorgiEngineEventTypes.LevelEnd);
     LoadingSceneManager.LoadScene("base");
 }
예제 #2
0
    /// <summary>
    /// Waits for a short time and then loads the specified level
    /// </summary>
    /// <returns>The level co.</returns>
    /// <param name="levelName">Level name.</param>
    protected override IEnumerator GotoLevelCo(string levelName, bool fadeOut = true)
    {
        if (Players != null && Players.Count > 0)
        {
            foreach (Character player in Players)
            {
                player.Disable();
            }
        }

        if (fadeOut)
        {
            if (Time.timeScale > 0.0f)
            {
                yield return(new WaitForSeconds(OutroFadeDuration));
            }
            else
            {
                yield return(new WaitForSecondsRealtime(OutroFadeDuration));
            }
        }



        // we trigger an unPause event for the GameManager (and potentially other classes)
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.UnPause);
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.LoadNextScene);
    }
예제 #3
0
    /// <summary>
    /// Tries to load the currency if a file is present
    /// </summary>
    public virtual void LoadSavedCurrency()
    {
        SerializedCurrency serializedCurrency = (SerializedCurrency)MMSaveLoadManager.Load(typeof(SerializedCurrency), _saveFileNameCurrency + _saveFileExtensionCurrency, _saveFolderName);

        ExtractSerializedCurrency(serializedCurrency);
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.LoadPoints);
    }
예제 #4
0
    private void LevelEndWin()
    {
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.LevelEnd);
        SaveProgressWin();

        StartCoroutine(IEGoToNextLevel());
    }
예제 #5
0
    public virtual void OnMMEvent(CorgiEngineEvent engineEvent)
    {
        switch (engineEvent.EventType)
        {
        case CorgiEngineEventTypes.LevelStart:
            StartCoroutine(Wait());
            break;

        case CorgiEngineEventTypes.LevelEnd:
            EndLevel();
            break;

        case CorgiEngineEventTypes.PlayerDeath:
            EndLevel();
            break;

        case CorgiEngineEventTypes.GameOver:
            EndLevel();
            break;

        case CorgiEngineEventTypes.ItemPickup:
            ItemPickup();
            break;
        }
    }
예제 #6
0
 public void OnMMEvent(CorgiEngineEvent corgiEngineEvent)
 {
     if (corgiEngineEvent.EventType == CorgiEngineEventTypes.SpawnCharacterStarts && !UseCustomTarget)
     {
         Target = LevelManager.Instance.Players[0].gameObject;
     }
 }
예제 #7
0
 public virtual void OnMMEvent(CorgiEngineEvent engineEvent)
 {
     switch (engineEvent.EventType)
     {
     case CorgiEngineEventTypes.LevelStart:
         Start();
         break;
     }
 }
예제 #8
0
        public virtual IEnumerator StartFollowing()
        {
            yield return(_waitForSecondsFollowing);

            _mmFollowTarget.StartFollowing();
            yield return(_waitForSecondsFollowing);

            CorgiEngineEvent.Trigger(CorgiEngineEventTypes.NewFollower);
        }
예제 #9
0
        protected virtual void SceneInit()
        {
            if (SceneManager.GetActiveScene().name == "1-Childhood")
            {
                //MMDebug.DebugLogTime("scene init, scene name : " + SceneManager.GetActiveScene().name + " clear");
                Content.Clear();
            }

            if ((SceneManager.GetActiveScene().name == "2-Adolescence") ||
                (SceneManager.GetActiveScene().name == "3-Adulthood") ||
                (SceneManager.GetActiveScene().name == "4-OldAge")
                )
            {
                foreach (FollowerData data in Content)
                {
                    _follower       = Instantiate(FollowerPrefab);
                    _follower.Data  = data;
                    _newPosition    = LevelManager.Instance.Players[0].transform.position;
                    _newPosition.x -= 10f;
                    _follower.transform.position = _newPosition;
                    _follower.TargetBuyZone.gameObject.SetActive(false);
                    StartCoroutine(_follower.StartFollowing());
                    CorgiEngineEvent.Trigger(CorgiEngineEventTypes.SortFollowers);
                }
            }

            if (SceneManager.GetActiveScene().name == "5-End")
            {
                Story += "\n\n";

                Story += "At the end you had ";

                for (int i = 0; i < Content.Count; i++)
                {
                    if (i < Content.Count - 2)
                    {
                        Story += "<color=red>" + Content[i].MessageDisplayText + "</color>, ";
                    }
                    if (i == Content.Count - 2)
                    {
                        Story += "<color=red>" + Content[i].MessageDisplayText + "</color> and ";
                    }
                    if (i == Content.Count - 1)
                    {
                        Story += "finally <color=red>you died</color>.";
                    }
                }

                Story += "\n\n";

                Story += "This was your life. You could have done better. Press any key to try a new life and maybe make better choices.";
            }
        }
예제 #10
0
        public virtual void OnMMEvent(CorgiEngineEvent corgiEngineEvent)
        {
            switch (corgiEngineEvent.EventType)
            {
            case CorgiEngineEventTypes.LevelEnd:
                MMAchievementManager.UnlockAchievement("PrincessInAnotherCastle");
                break;

            case CorgiEngineEventTypes.PlayerDeath:
                MMAchievementManager.UnlockAchievement("DeathIsOnlyTheBeginning");
                break;
            }
        }
예제 #11
0
    /// <summary>
    /// Coroutine that kills the player, stops the camera, resets the points.
    /// </summary>
    /// <returns>The player co.</returns>
    protected IEnumerator SoloModeRestart(Character player, Transform respawnPoint, Character.FacingDirections facingDirection)
    {
        if ((PlayerPrefabs.Count() <= 0) && (SceneCharacters.Count <= 0))
        {
            yield break;
        }

        MMCameraEvent.Trigger(MMCameraEventTypes.StopFollowing);
        CharacterSwapManager.DisableSwap();
        yield return(new WaitForSeconds(RespawnDelay));

        CharacterSwapManager.EnableSwap();

        // if we've setup our game manager to use lives (meaning our max lives is more than zero)
        if (GameManager.Instance.MaximumLives > 0)
        {
            int lastCurrentLives = GameManager.Instance.CurrentLives;
            // we lose a life
            GameManager.Instance.LoseLife();
            Config.currentLives = GameManager.Instance.CurrentLives;
            var currentLives = GameManager.Instance.CurrentLives;
            //nếu đang ở level không cho phép hồi sinh dưới 0 mạng
            if (Config.currentSceneIndex > Config.UNLIMIT_LIVE_LEVEL)
            {
                //nếu âm mạng hoặc mạng đang bằng 0 từ đầu ván thì ending
                //còn nếu mạng về 0 thì vẫn cho chơi nốt một lần
                if (currentLives < 0 || (currentLives == 0 && lastCurrentLives == 0))
                {
                    StickmanManager.Instance.ShowRevivePanel();

                    yield return(new WaitUntil(() => !StickmanManager.Instance.isWaitToRevive));

                    yield return(null);
                }
            }
        }

        MMCameraEvent.Trigger(MMCameraEventTypes.StartFollowing);
        player.RespawnAt(respawnPoint, facingDirection);

        _started = DateTime.UtcNow;
        // we send a new points event for the GameManager to catch (and other classes that may listen to it too)
        CorgiEnginePointsEvent.Trigger(PointsMethods.Set, 0);
        // we trigger a respawn event
        ResetLevelBoundsToOriginalBounds();
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.Respawn);
    }
예제 #12
0
    //pause
    /// <summary>
    /// Catches CorgiEngineEvents and acts on them, playing the corresponding sounds
    /// </summary>
    /// <param name="engineEvent">CorgiEngineEvent event.</param>
    public virtual void OnMMEvent(CorgiEngineEvent engineEvent)
    {
        switch (engineEvent.EventType)
        {
        case CorgiEngineEventTypes.Pause:
            Pause();
            break;

        case CorgiEngineEventTypes.UnPause:
            UnPause();
            break;

        case CorgiEngineEventTypes.SwtichPressed:
            movingPlatformPressed = true;
            break;
        }
    }
예제 #13
0
    public virtual void OnMMEvent(CorgiEngineEvent engineEvent)
    {
        switch (engineEvent.EventType)
        {
        case CorgiEngineEventTypes.GameOver:
            EndScene();
            break;

        case CorgiEngineEventTypes.LevelEnd:
            EndScene();
            break;

        case CorgiEngineEventTypes.LevelStart:
            StartScene();
            break;
        }
    }
예제 #14
0
    public virtual void OnMMEvent(CorgiEngineEvent engineEvent)
    {
        switch (engineEvent.EventType)
        {
        case CorgiEngineEventTypes.LevelStart:
            //StartScene();
            break;

        case CorgiEngineEventTypes.LevelEnd:
            //EndScene();
            break;

        case CorgiEngineEventTypes.LoadPoints:
            SetCurrentCurrency();
            break;
        }
    }
예제 #15
0
    /// <summary>
    /// When the player collides, checks what type of Item is attached to
    /// apply logic.
    /// </summary>
    /// <param name="collider">Checks if player is colliding</param>
    private void OnTriggerStay2D(Collider2D collider)
    {
        if (hasPickedUp)
        {
            return;
        }

        if (!collider.CompareTag("Player"))
        {
            return;
        }

        //
        //ADD ITEM PICKUP LOGIC TO GO TO THE FIELD NOTEBOOK HERE
        //

        hasPickedUp = true;
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.ItemPickup);

        switch (itemObject.type)
        {
        case ItemType.currency:
            CurrencyPickup();
            break;

        case ItemType.bomb:
            BombPickup();
            break;

        case ItemType.healthPickup:
            HealthPickup();
            break;

        case ItemType.buff:
            BuffPickup();
            break;

        default:
            break;
        }
    }
예제 #16
0
    /// <summary>
    /// Kills the player.
    /// </summary>
    public void KillPlayer(Character player, Transform respawnPoint, Character.FacingDirections facingDirection)
    {
        Health characterHealth = player.GetComponent <Health>();

        if (characterHealth == null)
        {
            return;
        }
        else
        {
            // we kill the character
            characterHealth.Kill();
            CorgiEngineEvent.Trigger(CorgiEngineEventTypes.PlayerDeath);

            // if we have only one player, we restart the level
            if (Players.Count < 2)
            {
                StartCoroutine(SoloModeRestart(player, respawnPoint, facingDirection));
            }
        }
    }
예제 #17
0
    private void SpawnEnemy()
    {
        //Event here
        if (isFinalBoss)
        {
            CorgiEngineEvent.Trigger(CorgiEngineEventTypes.FinalBossRoom);
        }
        else
        {
            CorgiEngineEvent.Trigger(CorgiEngineEventTypes.MiniBossRoom);
        }

        if (bossGO == null)
        {
            bossGO = Instantiate(Boss, BossSpawnLocation.position, Quaternion.identity, gameObject.transform);
        }
        bossChar = bossGO.GetComponent <Character>();
        SetCameraOnBoss();
        EnemyNameEnable();
        OnSpawn();
    }
예제 #18
0
    private void BossDeath()
    {
        //Is mini or final boss
        CorgiEngineEvent.Trigger(CorgiEngineEventTypes.BossDefeated);
        OnDespawn();
        if (OnDeathEvent.GetPersistentEventCount() > 0)
        {
            OnDeathEvent.Invoke();
        }

        //Is final-boss
        if (isFinalBoss)
        {
            endingGO.SetActive(true);
        }
        //Is mini-boss
        else
        {
            OpenDoor();
        }

        StartCoroutine(BossKillWait());
    }
예제 #19
0
 private void BtnPause_Pressed()
 {
     CorgiEngineEvent.Trigger(CorgiEngineEventTypes.TogglePause);
 }
예제 #20
0
 private void BtnSkip_Pressed()
 {
     //Ads nhét vào đây
     CorgiEngineEvent.Trigger(CorgiEngineEventTypes.TogglePause);
     LevelEndWin();
 }
 private void AfterCloseAds()
 {
     CorgiEngineEvent.Trigger(CorgiEngineEventTypes.TogglePause);
 }
예제 #22
0
 private void ReturnToSub()
 {
     MMGameEvent.Trigger("Save");
     CorgiEngineEvent.Trigger(CorgiEngineEventTypes.LevelEnd);
     LoadingSceneManager.LoadScene("Base");
 }