예제 #1
0
    private void ApplyNewResolution()
    {
        Resolution _newResolution = Screen.resolutions[selectedResolutionIndex];

        Screen.SetResolution(_newResolution.width, _newResolution.height, toggleFullScreen ? toggleFullScreen.isOn : true);
        TDS_GameManager.SetResolution(_newResolution);
    }
예제 #2
0
    private void Awake()
    {
        if (!Instance)
        {
            Instance = this;
        }
        else
        {
            Destroy(this);
        }

        if (!Application.isEditor)
        {
            Application.wantsToQuit += QuitSystem;
        }

        InGamePlayers.Add(PlayerCharacter.BeardLady, false);
        InGamePlayers.Add(PlayerCharacter.FatLady, false);
        InGamePlayers.Add(PlayerCharacter.FireEater, false);
        InGamePlayers.Add(PlayerCharacter.Juggler, false);
    }
예제 #3
0
    /// <summary>
    /// Triggers this event.
    /// </summary>
    /// <returns></returns>
    public IEnumerator Trigger()
    {
        // If this event requires a specific player type and he's not in the game, just skip this event
        if (doRequireSpecificPlayerType && !TDS_LevelManager.Instance.AllPlayers.Any(p => p.PlayerType == playerType))
        {
            yield break;
        }

        // Wait for delay
        yield return(new WaitForSeconds(delay));

        switch (eventType)
        {
        // Activate UI curtains
        case CustomEventType.ActivateCurtains:
            TDS_UIManager.Instance.SwitchCurtains(true);
            break;

        // Make a camera movement
        case CustomEventType.CameraMovement:
            yield return(TDS_Camera.Instance.LookTarget(eventTransform.position.x, eventTransform.position.y, eventTransform.position.z, cameraWaitTime, eventFloat));

            break;

        // Desactivate the current information box
        case CustomEventType.DesactiveInfoBox:
            if (doRequireSpecificPlayerType)
            {
                TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", TDS_LevelManager.Instance.AllPlayers.ToList().Where(p => p.PlayerType == playerType).Select(p => p.photonView.owner).First(), TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, TDS_UIManager.Instance.GetType(), "DesactivateDialogBox")
                                                           , new object[] { });
            }
            else
            {
                TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", PhotonTargets.All, TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, TDS_UIManager.Instance.GetType(), "DesactivateDialogBox")
                                                           , new object[] { });
            }
            break;

        // Display a message in an information box
        case CustomEventType.DisplayInfoBox:
            // Activate the info box for the requested player or for everyone
            if (doRequireSpecificPlayerType)
            {
                TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", TDS_LevelManager.Instance.AllPlayers.ToList().Where(p => p.PlayerType == playerType).Select(p => p.photonView.owner).First(), TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, TDS_UIManager.Instance.GetType(), "ActivateDialogBox")
                                                           , new object[] { TDS_GameManager.GetDialog(eventString)[0] });
            }
            else
            {
                TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", PhotonTargets.All, TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, TDS_UIManager.Instance.GetType(), "ActivateDialogBox")
                                                           , new object[] { TDS_GameManager.GetDialog(eventString)[0] });
            }
            break;

        // Freeze local player
        case CustomEventType.FreezePlayerForCutscene:
            TDS_GameManager.IsInCutscene = true;
            TDS_UIManager.Instance.ActivateCutsceneBlackBars();
            if (!PhotonNetwork.offlineMode)
            {
                TDS_LevelManager.Instance.LocalPlayer.FreezePlayer();
            }
            else
            {
                foreach (TDS_Player _player in TDS_LevelManager.Instance.AllPlayers)
                {
                    _player.FreezePlayer();
                }
            }
            break;

        // Instantiate a prefab
        case CustomEventType.Instantiate:
            GameObject _object = Object.Instantiate(prefab, eventTransform.position, eventTransform.rotation);
            _object.transform.SetParent(eventTransform, true);
            break;

        // Instantiate with Photon
        case CustomEventType.InstantiatePhoton:
            PhotonNetwork.Instantiate(prefab.name, eventTransform.position, eventTransform.rotation, 0);
            break;

        // Makes a cool fade before displaying loading screen, and loading next level
        case CustomEventType.LoadNextLevel:
            if (!PhotonNetwork.isMasterClient)
            {
                yield break;
            }

            if (!PhotonNetwork.offlineMode)
            {
                TDS_SceneManager.Instance.PrepareOnlineSceneLoading(TDS_GameManager.CurrentSceneIndex + 1, (int)UIState.InGame);
            }
            else
            {
                TDS_SceneManager.Instance.PrepareSceneLoading(TDS_GameManager.CurrentSceneIndex + 1, (int)UIState.InGame);
            }

            yield return(new WaitForSeconds(1f));

            if (!PhotonNetwork.offlineMode)
            {
                TDS_LevelManager.Instance.LocalPlayer.FreezePlayer();
            }
            else
            {
                foreach (TDS_Player _player in TDS_LevelManager.Instance.AllPlayers)
                {
                    _player.FreezePlayer();
                }
            }
            break;

        // Moves the local player around a point
        case CustomEventType.MovePlayerAroundPoint:
            if (!PhotonNetwork.offlineMode)
            {
                TDS_LevelManager.Instance.LocalPlayer.GoAround(eventTransform.position, false);
            }
            else
            {
                foreach (TDS_Player _player in TDS_LevelManager.Instance.AllPlayers)
                {
                    _player.GoAround(eventTransform.position, false);
                }
            }
            break;

        // Triggers a particular quote of the Narrator
        case CustomEventType.Narrator:
            TDS_LevelManager.Instance.PlayNarratorQuote(quote);
            break;

        // Plays a new music !
        case CustomEventType.PlayMusic:
            TDS_SoundManager.Instance.PlayMusic((Music)eventInt, eventFloat);
            break;

        // Remove UI curtains
        case CustomEventType.RemoveCurtains:
            TDS_UIManager.Instance.SwitchCurtains(false);
            break;

        // Switch UI arrow
        case CustomEventType.SwitchArrow:
            TDS_UIManager.Instance.SwitchArrow();
            yield return(new WaitForSeconds(2.5f));

            TDS_UIManager.Instance.SwitchArrow();
            break;

        // Unfreeze local player
        case CustomEventType.UnfreezePlayerFromCutscene:
            TDS_GameManager.IsInCutscene = false;
            TDS_UIManager.Instance.DesactivateCutsceneBlackBars();
            if (!PhotonNetwork.offlineMode)
            {
                TDS_LevelManager.Instance.LocalPlayer.UnfreezePlayer();
            }
            else
            {
                foreach (TDS_Player _player in TDS_LevelManager.Instance.AllPlayers)
                {
                    _player.UnfreezePlayer();
                }
            }
            break;

        // Just invoke a Unity Event, that's it
        case CustomEventType.UnityEventLocal:
            unityEvent.Invoke();
            break;

        // Just invoke a Unity Event, that's it
        case CustomEventType.UnityEventOnline:
            unityEvent.Invoke();
            break;

        // Wait for an action of the local player
        case CustomEventType.WaitForAction:
            switch (actionType)
            {
            case WaitForAction.UseRabbit:
                TDS_WhiteRabbit.OnUseRabbit  += StopWaiting;
                TDS_WhiteRabbit.OnLoseRabbit += StopWaiting;
                break;

            default:
                break;
            }

            while (IsWaiting)
            {
                yield return(null);
            }

            switch (actionType)
            {
            case WaitForAction.UseRabbit:
                TDS_WhiteRabbit.OnUseRabbit  -= StopWaiting;
                TDS_WhiteRabbit.OnLoseRabbit -= StopWaiting;
                break;

            default:
                break;
            }

            IsWaiting = true;
            break;

        // Wait that everyone is in the zone
        case CustomEventType.WaitForEveryone:
            if (TDS_Camera.Instance.CurrentBounds.XMin < eventTransform.position.x)
            {
                TDS_Camera.Instance.OnXMinBoundChanged += CheckBound;
                bool _doSwitch = TDS_LevelManager.Instance.AllPlayers.Length > 1;

                // Switch waiting players panel if playing with your folks
                if (_doSwitch)
                {
                    TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", PhotonTargets.All, TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, typeof(TDS_UIManager), "SwitchWaitingPanel"), new object[] { });

                    yield return(new WaitForSeconds(.25f));
                }

                // Wait patiently
                while (IsWaiting)
                {
                    yield return(null);
                }

                if (_doSwitch)
                {
                    TDS_RPCManager.Instance?.RPCPhotonView.RPC("CallMethodOnline", PhotonTargets.All, TDS_RPCManager.GetInfo(TDS_UIManager.Instance.photonView, typeof(TDS_UIManager), "SwitchWaitingPanel"), new object[] { });
                }
            }
            break;

        // Wait that an object with a particular tag dies
        case CustomEventType.WaitForObjectDeath:
            TDS_Damageable.OnDieWithObject += CheckObjectDeath;

            while (IsWaiting)
            {
                yield return(null);
            }

            TDS_Damageable.OnDieWithObject -= CheckObjectDeath;
            break;

        // Wait that a certain amount of spawn area are desactivated
        case CustomEventType.WaitForSpawnAreaDesactivation:
            TDS_SpawnerArea.OnOneAreaDesactivated += DeductSpawnArea;

            while (IsWaiting)
            {
                yield return(null);
            }

            TDS_SpawnerArea.OnOneAreaDesactivated -= DeductSpawnArea;
            break;

        // Nobody here but us chicken
        default:
            break;
        }

        yield break;
    }