示例#1
0
    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));
        }
    }
示例#2
0
    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;
            }
        }
    }
示例#3
0
    // 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);
    }
示例#4
0
    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);
        }
    }
示例#5
0
    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);
    }
示例#6
0
    /* 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);
    }
示例#7
0
    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);
    }
示例#8
0
 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);
     }
 }
示例#9
0
    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);
            }
        }
    }
示例#10
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);
    }
示例#11
0
 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());
        }
示例#14
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();
    }
示例#15
0
			public DoorInformation( string sceneToLoad, SceneDoor sideToEnterFrom ) {
				this.destinationSceneName = sceneToLoad;
				this.sideOfSceneToLoadOn = sideToEnterFrom;
			}
示例#16
0
		public SceneLoadInfomation( string previousSceneName, SceneDoor leaveSceneFrom ) {
				this.previousSceneName = previousSceneName;
				this.sceneLoadedFrom = leaveSceneFrom;
		}