コード例 #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
    void IBC_TriggerEnterListener.OnTriggerEnter(BC_TriggerData other)
    {
        if (this.coolDown > 0f || !this.exited)
        {
            return;
        }
        RoomSwitchable component = other.collider.GetComponent <RoomSwitchable>();

        if (component != null)
        {
            this.coolDown = 20f;
            this.StartFadeout(component);
        }
    }
コード例 #3
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);
     }
 }
コード例 #4
0
    void DoSpawn(Vector3 P, Vector3 dir)
    {
        Vector3 vector;

        if (this._spawnOnFloor && PhysicsUtility.GetFloorPoint(P, 20f, 50f, this._floorLayer, out vector))
        {
            P.y = vector.y;
        }
        Vector3    vector2    = P + this._playerEnt.transform.localPosition;
        GameObject gameObject = Object.Instantiate <GameObject>(this._playerCamera, vector2 + this._playerCamera.transform.localPosition, this._playerCamera.transform.localRotation);

        gameObject.transform.localScale = this._playerCamera.transform.localScale;
        gameObject.name = this._playerCamera.name;
        CameraContainer component = gameObject.GetComponent <CameraContainer>();

        component.Init(this._playerCamera);
        Entity entity = Object.Instantiate <Entity>(this._playerEnt, vector2, base.transform.rotation);

        entity.name = this._playerEnt.name;
        if (component != null)
        {
            RoomSwitchable componentInChildren = entity.GetComponentInChildren <RoomSwitchable>();
            if (componentInChildren != null)
            {
                componentInChildren.SetLevelCamera(component);
            }
        }
        if (this._playerGraphics != null)
        {
            GameObject gameObject2 = Object.Instantiate <GameObject>(this._playerGraphics, entity.transform.position + this._playerGraphics.transform.localPosition, this._playerGraphics.transform.localRotation);
            gameObject2.transform.parent     = entity.transform;
            gameObject2.transform.localScale = this._playerGraphics.transform.localScale;
            gameObject2.name = this._playerGraphics.name;
        }
        entity.Init();
        entity.TurnTo(dir, 0f);
        FollowTransform componentInChildren2 = gameObject.GetComponentInChildren <FollowTransform>();

        if (componentInChildren2 != null)
        {
            componentInChildren2.SetTarget(entity.transform);
        }
        LevelCamera componentInChildren3 = gameObject.GetComponentInChildren <LevelCamera>();

        if (componentInChildren3 != null)
        {
            LevelRoom roomForPosition = LevelRoom.GetRoomForPosition(entity.WorldTracePosition, null);
            if (roomForPosition != null)
            {
                componentInChildren3.SetRoom(roomForPosition);
                roomForPosition.SetImportantPoint(vector2);
                LevelRoom.SetCurrentActiveRoom(roomForPosition, false);
            }
        }
        PlayerController controller = ControllerFactory.Instance.GetController <PlayerController>(this._controller);

        controller.ControlEntity(entity);
        controller.name = this._controller.name;
        entity.Activate();
        if (this._varOverrider != null)
        {
            this._varOverrider.Apply(entity);
        }
        EntityHUD componentInChildren4 = gameObject.GetComponentInChildren <EntityHUD>();

        if (componentInChildren4 != null)
        {
            componentInChildren4.Observe(entity, controller);
        }
        EntityObjectAttacher.Attacher attacher   = null;
        EntityObjectAttacher          component2 = base.GetComponent <EntityObjectAttacher>();

        if (component2 != null)
        {
            attacher = component2.GetAttacher();
        }
        EntityObjectAttacher.AttachTag attachTag = null;
        if (attacher != null)
        {
            attachTag = attacher.Attach(entity);
        }
        PlayerRespawner playerRespawner;

        if (this._respawner != null)
        {
            playerRespawner      = Object.Instantiate <PlayerRespawner>(this._respawner);
            playerRespawner.name = this._respawner.name;
        }
        else
        {
            GameObject gameObject3 = new GameObject("PlayerRespawer");
            playerRespawner = gameObject3.AddComponent <PlayerRespawner>();
        }
        playerRespawner.Init(entity, controller, componentInChildren3, componentInChildren2, componentInChildren4, this._gameSaver, attacher, attachTag, this._varOverrider, P, dir);
        VarHelper.PlayerObj = entity.gameObject;         // Store reference to player obj
        PlayerSpawner.OnSpawnedFunc onSpawnedFunc = PlayerSpawner.onSpawned;
        PlayerSpawner.onSpawned = null;
        if (onSpawnedFunc != null)
        {
            onSpawnedFunc(entity, gameObject, controller);
        }
        EventListener.PlayerSpawn(false);         // Invoke custom event
        Object.Destroy(base.gameObject);
    }
コード例 #5
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();
    }