Exemplo n.º 1
0
        public static FadeEffectData MakeFadeEffect(FadeType type, Color?color, float outTime, float inTime)
        {
            string fadeType;

            switch (type)
            {
            case FadeType.Flash:
                fadeType = "AdditiveFade";
                break;

            case FadeType.Fullscreen:
                fadeType = "ScreenFade";
                break;

            default:
                fadeType = "ScreenCircleWipe";
                break;
            }

            FadeEffectData fadeData = new FadeEffectData
            {
                _faderName    = fadeType,
                _targetColor  = color ?? Color.black,
                _fadeOutTime  = outTime,
                _fadeInTime   = inTime,
                _useScreenPos = true
            };

            return(fadeData);
        }
Exemplo n.º 2
0
        public void Run(FadeEffectData data)
        {
            _data     = data;
            _current  = 0;
            _material = new Material(_data.Shader);

            _material.SetFloat("_OffsetX", _data.MaskOffset.x);
            _material.SetFloat("_OffsetY", _data.MaskOffset.y);
            _material.SetFloat("_ScaleX", _data.MaskScale.x);
            _material.SetFloat("_ScaleY", _data.MaskScale.y);

            _material.SetColor("_MaskColor", _data.Color);
            _material.SetFloat("_MaskSpread", _data.MaskSpread);
            _material.SetInt("_MaskStep", _data.MaskStep);
            _material.SetTexture("_MaskTex", _data.Mask);

            if (_material.IsKeywordEnabled("INVERT_MASK") != _data.Invert)
            {
                if (_data.Invert)
                {
                    _material.EnableKeyword("INVERT_MASK");
                }
                else
                {
                    _material.DisableKeyword("INVERT_MASK");
                }
            }

            UpdateValue();

            _enabled = true;
        }
Exemplo n.º 3
0
    public void DoRespawn()
    {
        this.inForceRespawn = false;
        if (this._doDeathOffset && this.levelRoot != null)
        {
            this.levelRoot.gameObject.SetActive(true);
        }
        ProjectileFactory.Instance.DeactivateAll();
        Vector3 vector = (!this.useRoomSpawn) ? this.spawnPos : this.roomSpawnPos;
        Vector3 dir    = (!this.useRoomSpawn) ? this.spawnDir : this.roomSpawnDir;

        this.ent.RealTransform.position = vector;
        this.ent.Activate();
        this.ent.TurnTo(dir, 0f);
        if (this.varOverrider != null)
        {
            this.varOverrider.Apply(this.ent);
        }
        this.RegEvents(this.ent);
        base.enabled      = false;
        this.roomSpawnPos = vector;
        this.roomSpawnDir = dir;
        this.controller.ControlEntity(this.ent);
        if (this.attachTag != null)
        {
            this.attachTag.Free();
        }
        this.attachTag = null;
        if (this.attacher != null)
        {
            this.attachTag = this.attacher.Attach(this.ent);
        }
        if (this.followCam != null)
        {
            this.followCam.ClearFollowScale();
        }
        LevelRoom roomForPosition = LevelRoom.GetRoomForPosition(vector + Vector3.up * 0.25f, null);

        if (roomForPosition != null)
        {
            roomForPosition.SetImportantPoint(vector);
            LevelRoom.SetCurrentActiveRoom(roomForPosition, true);
            if (this.levelCam != null)
            {
                this.levelCam.SetRoom(roomForPosition);
            }
        }
        if (this.hud != null)
        {
            this.hud.Observe(this.ent, this.controller);
        }
        if (this._fadeIn != null || this._fadeOut != null)
        {
            FadeEffectData data  = this._fadeIn ?? this._fadeOut;
            Vector3        value = new Vector3(0f, 0f, 0f);
            OverlayFader.StartFade(data, false, null, new Vector3?(value));
        }
        EventListener.PlayerSpawn(true);         // Invoke custom event
    }
Exemplo n.º 4
0
    public static void StartLoad(string targetScene, string targetDoor, FadeEffectData fadeData, SaverOwner saver = null, Vector3?fallbackPos = null)
    {
        GameObject gameObject = new GameObject("DummyDoor");
        SceneDoor  sceneDoor  = gameObject.AddComponent <SceneDoor>();

        sceneDoor._scene             = targetScene;
        sceneDoor._correspondingDoor = targetDoor;
        if (fallbackPos != null)
        {
            sceneDoor._fallbackPosition = fallbackPos.Value;
            sceneDoor._hasFallbackPos   = true;
        }
        sceneDoor._fadeData = fadeData;
        sceneDoor._saver    = saver;
        sceneDoor.StartFadeout(null);
    }
Exemplo n.º 5
0
        public static void LoadScene(string scene, string spawn = "", bool doSave = true, bool doFade = true, EffectHelper.FadeType fadeType = EffectHelper.FadeType.Circle, Color?fadeColor = null, float fadeOutTime = 0.5f, float fadeInTime = 1f)
        {
            // If saving, trigger save
            if (doSave)
            {
                SaveManager.SaveToSaveFile("start/level", scene);
                SaveManager.SaveToSaveFile("start/door", spawn);
            }

            // If no fade, load scene instantly
            if (!doFade)
            {
                SceneManager.LoadScene(scene);
                return;
            }

            // If fading, make fade & trigger load
            FadeEffectData fadeData = EffectHelper.MakeFadeEffect(fadeType, fadeColor, fadeOutTime, fadeInTime);

            SceneDoor.StartLoad(scene, spawn, fadeData, SaveManager.GetSaverOwner());
        }
Exemplo n.º 6
0
    public void DoLoad()
    {
        Entity           player     = null;
        Camera           playerCam  = null;
        PlayerController playerCont = null;
        TileMeshRefOwner refOwner   = null;
        SceneDoor        targetDoor = null;

        PlayerSpawner.DoSpawnFunc onDoSpawn = null;
        Vector3        spawnDir             = base.transform.forward;
        Vector3        defSpawnPos          = this._fallbackPosition;
        bool           hasFallbackPos       = this._hasFallbackPos;
        string         wantedDoor           = this._correspondingDoor;
        FadeEffectData fadeData             = this._fadeInData ?? this._fadeData;

        OverlayFader.OnStartFunc onStartFade = null;
        OverlayFader.OnDoneFunc  startFadeIn = null;
        startFadeIn = delegate()
        {
            startFadeIn = null;
            if (onStartFade != null)
            {
                if (targetDoor != null)
                {
                    onStartFade(new Vector3?(SceneDoor.WorldToScreen(targetDoor.transform.position)));
                }
                else
                {
                    onStartFade(null);
                }
            }
            if (player != null)
            {
                BC_Collider component = player.GetComponent <BC_Collider>();
                if (component != null)
                {
                    component.enabled = true;
                }
                try
                {
                    RoomSwitchable component2 = player.GetComponent <RoomSwitchable>();
                    if (component2 != null)
                    {
                        component2.SendStartEvent();
                    }
                }
                catch (Exception exception)
                {
                    UnityEngine.Debug.LogException(exception, player);
                }
            }
            if (playerCont != null)
            {
                playerCont.SetEnabled(true);
            }
            SceneDoor.CheckStartIn(player, targetDoor);
        };
        PlayerSpawner.RegisterSpawnListener(delegate(Entity p, GameObject c, PlayerController cont)
        {
            player = p;
            BC_Collider component = p.GetComponent <BC_Collider>();
            if (component != null)
            {
                component.enabled = false;
            }
            playerCont = cont;
            playerCont.SetEnabled(false);
            Camera[] componentsInChildren = c.GetComponentsInChildren <Camera>();
            for (int j = 0; j < componentsInChildren.Length; j++)
            {
                if (componentsInChildren[j].name == "Main Camera")
                {
                    playerCam = componentsInChildren[j];
                }
            }
            onStartFade = OverlayFader.PrepareFadeOut(fadeData, null);
            SceneDoor.CheckAndBuild(player, playerCam, refOwner, startFadeIn);
        });
        PlayerSpawner.RegisterSpawnDelegation(delegate(PlayerSpawner.DoSpawnFunc func, Vector3 pos, Vector3 dir)
        {
            onDoSpawn = func;
            if (!hasFallbackPos)
            {
                defSpawnPos = pos;
            }
        });
        TileMeshRefOwner.RegisterAwakeListener(delegate(TileMeshRefOwner owner)
        {
            refOwner = owner;
            SceneDoor.CheckAndBuild(player, playerCam, refOwner, startFadeIn);
        });
        SceneDoor.RegisterListener(wantedDoor, delegate(SceneDoor door)
        {
            targetDoor          = door;
            targetDoor.coolDown = 1f;

            if (onDoSpawn == null)
            {
                return;
            }
            Vector3 pos = targetDoor.transform.TransformPoint(targetDoor._spawnOffset);
            spawnDir    = -targetDoor.transform.forward;
            PlayerSpawner.DoSpawnFunc doSpawnFunc = onDoSpawn;
            onDoSpawn = (PlayerSpawner.DoSpawnFunc)null;
            doSpawnFunc(pos, spawnDir);
        });
        Stopwatch clock = null;

        LevelLoadListener.RegisterListener(delegate
        {
            if (onDoSpawn != null)
            {
                if (targetDoor == null)
                {
                    UnityEngine.Debug.Log(string.Concat(new object[]
                    {
                        "didn't find ",
                        wantedDoor,
                        ", spawning at default: ",
                        defSpawnPos
                    }));
                }
                else
                {
                    defSpawnPos = targetDoor.transform.TransformPoint(targetDoor._spawnOffset);
                    spawnDir    = -targetDoor.transform.forward;
                }
                PlayerSpawner.DoSpawnFunc doSpawnFunc = onDoSpawn;
                onDoSpawn = (PlayerSpawner.DoSpawnFunc)null;
                doSpawnFunc(defSpawnPos, spawnDir);
            }
            else if (UnityEngine.Object.FindObjectOfType <PlayerSpawner>() == null)
            {
                UnityEngine.Debug.Log("didn't find a spawner in " + Utility.GetCurrentSceneName());
                SceneDoor.ClearListeners();
                PlayerSpawner.ClearListeners();
                if (onStartFade == null)
                {
                    onStartFade = OverlayFader.PrepareFadeOut(fadeData, null);
                }
            }
            else
            {
                UnityEngine.Debug.Log("awaiting spawning in " + Utility.GetCurrentSceneName());
            }
            clock.Stop();
            UnityEngine.Debug.Log(string.Concat(new object[]
            {
                "Loading ",
                this._scene,
                " took ",
                clock.ElapsedMilliseconds,
                " ms"
            }));
            if (UnityEngine.Object.FindObjectOfType <TileMeshRefOwner>() == null && startFadeIn != null)
            {
                startFadeIn();
            }
        });
        int prepareCounter = 0;

        SceneDoor.OnPrepareFunc onPrepareDone = delegate()
        {
            --prepareCounter;
            if (prepareCounter > 0)
            {
                return;
            }
            clock = Stopwatch.StartNew();
            Utility.LoadLevel(this._scene);
        };
        List <SceneDoor.OnPrepareFunc> list = new List <SceneDoor.OnPrepareFunc>();

        if (this._saver != null)
        {
            list.Add(delegate
            {
                this.SaveStartPos(this._saver, wantedDoor, null);
                this._saver.SaveAll(true, delegate(bool success, string msg)
                {
                    if (!success)
                    {
                        UnityEngine.Debug.LogError("Error saving: " + msg);
                    }
                    else
                    {
                        UnityEngine.Debug.Log("Game saved");
                    }
                    onPrepareDone();
                });
            });
        }
        prepareCounter = list.Count;
        if (prepareCounter == 0)
        {
            onPrepareDone();
            return;
        }
        for (int i = 0; i < list.Count; i++)
        {
            list[i]();
        }

        // Invoke custom event
        EventListener.SceneUnload();
    }