void StartFadeout(RoomSwitchable switcher) { Vector3 vector = base.transform.forward; Vector3 vector2 = base.transform.position + vector * this._moveDist; if (switcher != null) { Vector3 value = SceneDoor.WorldToScreen(base.transform.position); Vector3 position = base.transform.position; if (this._moveFromCenter) { position = switcher.transform.position; vector = (vector2 - position).normalized; } if (switcher.StartLevelTransition(position, vector2, vector, this._enterAnim)) { EffectFactory.Instance.PlayQuickEffect(this._enterEffect, switcher.transform.position, switcher.transform.forward, null); OverlayFader.StartFade(this._fadeData, true, delegate() { this.DoLoad(); }, new Vector3?(value)); } } else { OverlayFader.StartFade(this._fadeData, true, delegate() { this.DoLoad(); }, new Vector3?(Vector3.zero)); } }
public void Init(Entity player, PlayerController controller, LevelCamera levelCam, FollowTransform followCam, EntityHUD hud, SaverOwner gameSaver, EntityObjectAttacher.Attacher attacher, EntityObjectAttacher.AttachTag attachTag, EntityLocalVarOverrider varOverrider, Vector3 P, Vector3 D) { this.ent = player; this.controller = controller; this.RegEvents(player); this.levelCam = levelCam; this.followCam = followCam; this.spawnPos = P; this.roomSpawnPos = P; this.spawnDir = D; this.roomSpawnDir = D; this.hud = hud; this.gameSaver = gameSaver; this.attacher = attacher; this.attachTag = attachTag; this.varOverrider = varOverrider; base.enabled = false; IDataSaver saver = gameSaver.GetSaver("/local/start", true); if (saver != null) { string a = saver.LoadData("level"); Vector3 vector; Vector3 vector2; if (a == Utility.GetCurrentSceneName() && SceneDoor.GetSpawnPoint(saver.LoadData("door"), out vector, out vector2)) { this.spawnPos = vector; this.spawnDir = vector2; } } }
// Create a player object public GameObject createPlayer() { GameObject pref = ABU.LoadAsset <GameObject> ("core", "Player"); GameObject inst = Instantiate <GameObject> (pref); _player = inst; if (playerData != null) { RegisteredObject ro = _player.GetComponent <RegisteredObject> (); ro.Sow(playerData); } HUDManager.GetInstance().SetSubject(_player.GetComponent <Entity>()); switch (playerSpawnType) { case SPAWN_AT_DOOR: //find destination and spawn there SceneDoor door = SceneDoor.getDoor(prevScene); door.StartTransitionIn(inst); break; case SPAWN_AT_SVPNT: CameraManager.scene_cam.setTarget(inst.transform); //TODO spawn at savepoint ? break; default: throw new ArgumentException("Invalid spawn type code: " + playerSpawnType); } return(inst); }
public void SaveSceneData() { if (_SceneObj == null) { _SceneObj = GameObject.Find("场景配置对象"); } if (_SceneObj != null) { SceneData sceneData = new SceneData(); sceneData.SceneName = SceneManager.GetActiveScene().name; sceneData.EnemyArr = new CharacterData[_NPCListOBJ.transform.childCount]; for (int idx = 0; idx < _NPCListOBJ.transform.childCount; ++idx) { Transform actorTrans = _NPCListOBJ.transform.GetChild(idx); BaseActorObj actor = actorTrans.GetComponent <BaseActorObj>(); sceneData.EnemyArr[idx].WriteActor(actor); } sceneData.DoorArr = new DoorData[_TranslateDoor.transform.childCount]; for (int idx = 0; idx < _TranslateDoor.transform.childCount; ++idx) { Transform doorTrans = _TranslateDoor.transform.GetChild(idx); SceneDoor door = doorTrans.GetComponent <SceneDoor>(); sceneData.DoorArr[idx].WriteData(door); } _SceneData[sceneData.SceneName] = sceneData; SlzDictionary <string, SceneData> slzDictionary = new SlzDictionary <string, SceneData>(_SceneData); string saveInfo = JsonMapper.ToJson(slzDictionary); byte[] bytes = Encoding.UTF8.GetBytes(saveInfo); File.WriteAllBytes(PathManager.SceneData, bytes); GameObject.DestroyImmediate(_SceneObj); } }
void ChangeLevelRespawn() { IDataSaver saver = this.gameSaver.GetSaver("/local/start", false); string targetScene = saver.LoadData("level"); string targetDoor = saver.LoadData("door"); SceneDoor.StartLoad(targetScene, targetDoor, this._fadeOut, this.gameSaver, null); }
/* Static Methods */ public static SceneDoor getDoor(string destination) { SceneDoor door = doors.Find(delegate(SceneDoor obj) { return(obj.destination == destination); }); if (door == null) { Debug.LogError("Could not find a door with the destination " + destination); } return(door); }
public static bool GetSpawnPoint(string doorName, out Vector3 pos, out Vector3 dir) { SceneDoor byName = TransformUtility.GetByName <SceneDoor>(doorName); if (byName != null) { pos = byName.transform.TransformPoint(byName._spawnOffset); dir = -byName.transform.forward; return(true); } pos = (dir = Vector3.zero); return(false); }
public void UpdateSpawnPoint(Vector3 pos, Vector3 dir, SceneDoor door, bool dontOverride) { this.spawnPos = pos; this.spawnDir = dir; if (door != null && this.gameSaver != null) { if (dontOverride && this.gameSaver.GetSaver("/local/start", true) != null) { return; } door.SaveStartPos(this.gameSaver, door.name, Utility.GetCurrentSceneName()); this.gameSaver.SaveLocal(true, true); } }
public void LoadSceneData() { _Load(); if (_SceneObj != null) { GameObject.DestroyImmediate(_SceneObj); } GameObject newObj = new GameObject("场景配置对象"); _SceneObj = newObj; newObj = new GameObject("怪物摆放"); _NPCListOBJ = newObj; _NPCListOBJ.transform.SetParent(_SceneObj.transform); newObj = new GameObject("传送门"); _TranslateDoor = newObj; _TranslateDoor.transform.SetParent(_SceneObj.transform); string sceneName = SceneManager.GetActiveScene().name; SceneData data = new SceneData(); _SceneData.TryGetValue(sceneName, out data); if (data.EnemyArr != null) { foreach (CharacterData characterData in data.EnemyArr) { if (!characterData.propty.IsDeath) { GameObject loadObj = Resources.Load <GameObject>("Prefab\\Character\\" + characterData.propty.name); GameObject instntiateObj = GameObject.Instantiate(loadObj); instntiateObj.name = characterData.propty.m_Name; BaseActorObj newActor = instntiateObj.GetComponent <BaseActorObj>(); characterData.ReadActor(newActor); newActor.transform.SetParent(_NPCListOBJ.transform); } } } if (data.DoorArr != null) { foreach (DoorData doorData in data.DoorArr) { GameObject loadObj = Resources.Load <GameObject>("Prefab\\Scene\\Door"); GameObject instntiateObj = GameObject.Instantiate(loadObj); SceneDoor door = instntiateObj.GetComponent <SceneDoor>(); doorData.SetData(door); door.transform.SetParent(_TranslateDoor.transform); } } }
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); }
static void CheckStartIn(Entity player, SceneDoor target) { if (player != null && target != null) { RoomSwitchable component = player.GetComponent <RoomSwitchable>(); Vector3 position = target.transform.position; Vector3 worldPosition = player.WorldPosition; worldPosition.x = position.x; worldPosition.z = position.z; player.WorldPosition = worldPosition; Vector3 inDir = -target.transform.forward; Vector3 to = target.transform.TransformPoint(target._spawnOffset); component.FinishLevelTransition(position, to, inDir, target._exitAnim); EffectFactory.Instance.PlayQuickEffect(target._exitEffect, component.transform.position, component.transform.forward, null); } }
/// <summary> /// Use the given item. /// </summary> /// <param name="argument"></param> /// <returns></returns> public CommandOutput playerInteract(string argument) { bool success = false; string outputMessage = " "; // String to update display with. string systemMessage = "Unexpected Error Encountered"; // String to update the system with. DataAccess dataAccess = new DataAccess(); FindSceneItemResult searchResult = dataAccess.findScene(gameID, currentSceneIdentifier).findItem(argument); if (searchResult.Found) { if (searchResult.SceneItem.Type == SceneComponent.ComponentType.Door) { SceneDoor item = (SceneDoor)searchResult.SceneItem; if (item.haveRequiredItem(dataAccess.findPlayerInventory(playerID))) { Scene sceneToChange = dataAccess.findScene(gameID, currentSceneIdentifier); dataAccess.removeSceneComponent(gameID, sceneToChange, item); dataAccess.addSceneComponent(gameID, sceneToChange, item.exit); dataAccess.removePlayerInventoryItem(playerID, new SceneKey(item.requiredItemIdentifier, "Removed Item")); dataAccess.incrementPlayerScore(playerID); success = true; outputMessage = item.successMessage + " Your score is now " + new DataAccess().getPlayerScore(playerID).ToString(); systemMessage = "display update"; } else { outputMessage = item.failMessage; systemMessage = "Did not have correct key item for door."; } } else { outputMessage = string.Format("{0} is an item you can pick up.", searchResult.SceneItem.fullName); systemMessage = "Wrong type of item."; } } else { outputMessage = searchResult.Message; systemMessage = searchResult.Message; } return(new CommandOutput(success, outputMessage, systemMessage)); }
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(); }
public DoorInformation( string sceneToLoad, SceneDoor sideToEnterFrom ) { this.destinationSceneName = sceneToLoad; this.sideOfSceneToLoadOn = sideToEnterFrom; }
public SceneLoadInfomation( string previousSceneName, SceneDoor leaveSceneFrom ) { this.previousSceneName = previousSceneName; this.sceneLoadedFrom = leaveSceneFrom; }