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); }
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; }
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 }
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); }
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()); }
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(); }