예제 #1
0
    //UnityEvent.AddListener will tie the function to the monobehaviour object,
    //thus we need to create the lambdas outside of the instance or they will get
    //removed instantly (as the host class is destroyed on death)
    static void CreateLevelChange(float fadeoutTime, string targetLevel, int entryPoint, Vector3 camera)
    {
        Messaging.Player.Invulnerable.Invoke(true);
        Messaging.System.SetTimeScale.Invoke(TimeScale.Slowmo);

        Messaging.CameraControl.RemoveShake.Invoke();
        Messaging.CameraControl.Spectator.Invoke(true);
        Messaging.CameraControl.TargetPosition.Invoke(camera);
        //Messaging.CameraControl.TargetRotation.Invoke(Random.value > .5f ? 90 : -90);

        GameObject fadeout = new GameObject("fadeout levelchange");

        float timer = 0;

        UpdateCallHook u = fadeout.AddComponent <UpdateCallHook>();

        u.OnUpdateCall.AddListener(() =>
        {
            timer     += Time.unscaledDeltaTime;
            float fade = timer / fadeoutTime;
            Messaging.GUI.Blackout.Invoke(Mathf.Clamp01(fade));
        });

        DestroyAfterTime d = fadeout.AddComponent <DestroyAfterTime>();

        d.LifeTime        = fadeoutTime + .1f; //small addition to let screen turn to fully black
        d.UseUnscaledTime = true;
        d.OnDestroy.AddListener(() =>
        {
            Messaging.System.ChangeLevel.Invoke(targetLevel, entryPoint);
        });
    }
예제 #2
0
    private void Awake()
    {
        if (FadeTime == 0)
        {
            Debug.Log("\"" + gameObject.name + "\" -> FadeIn: disabled to avoid division by zero (fadetime == 0 || slowdowntime == 0)");
            return;
        }

        Messaging.System.LevelLoaded.AddListener((i) =>
        {
            if (i < 0)
            {
                return;
            }

            float timer = FadeTime;

            UpdateCallHook u = gameObject.AddComponent <UpdateCallHook>();
            u.OnUpdateCall.AddListener(() =>
            {
                timer     -= Time.deltaTime;
                float fade = timer / FadeTime;
                Messaging.GUI.Blackout.Invoke(Mathf.Clamp01(fade));
            });

            DestroyAfterTime d = gameObject.AddComponent <DestroyAfterTime>();
            d.LifeTime         = FadeTime;
            d.UseUnscaledTime  = false;
            d.OnDestroy.AddListener(() =>
            {
                Messaging.GUI.Blackout.Invoke(0f);
            });
        });
    }
예제 #3
0
    private void OnDeath()
    {
        Messaging.Player.Health.Invoke(0, 1);
        //Messaging.Player.Charge.Invoke(0, 1);
        //Messaging.Player.SoftDamage.Invoke(0);

        Messaging.CameraControl.RemoveShake.Invoke();
        Messaging.System.SetTimeScale.Invoke(TimeScale.SuperSlowmo);
        Messaging.CameraControl.TargetRotation.Invoke(Random.value > .5f ? 90 : -90);

        //handle player info change instantly to make sure designator won't go ape shit
        SaveLoadSystem.SaveStash();
        PlayerInfo.CurrentLocal.PlayerHasBeenInitialized = false;
        if (Difficulty.PermanentDeath)
        {
            SaveLoadSystem.DeletePlayerInfo();
        }
        else
        {
            PlayerInfo.CurrentLocal.CurrentMap = SoftcoreDeathScene;
            SaveLoadSystem.SaveGame();
        }

        float          deathTimer = 0f;
        GameObject     deadwaker  = new GameObject("Dead Waker");
        UpdateCallHook u          = deadwaker.AddComponent <UpdateCallHook>();

        u.OnUpdateCall.AddListener(() =>
        {
            deathTimer += Time.unscaledDeltaTime;

            Messaging.GUI.Painflash.Invoke(1f);
            Messaging.GUI.Blackout.Invoke(deathTimer / 7f);

            if (deathTimer > 7f)
            {
                Destroy(deadwaker.gameObject);

                if (Difficulty.PermanentDeath)
                {
                    UnityEngine.SceneManagement.SceneManager.LoadScene(HardcoreDeathScene);
                }
                else
                {
                    Messaging.System.ChangeLevel.Invoke(SoftcoreDeathScene, 0);
                }
            }
        });

        Messaging.Player.Death.Invoke();
    }
예제 #4
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (!Active)
        {
            return;
        }
        MonsterCharacter m = collision.GetComponent <MonsterCharacter>();

        if (m == null)
        {
            return;
        }
        if (m.GetComponent <PlayerControls>() == null)
        {
            return;
        }

        OnPlayerTouch.Invoke();

        //stop the player and make him invulnerable
        m.physicsBody.velocity = Vector2.zero;
        m.impulseVector        = Vector2.zero;
        m.Invulnerable         = true;
        m.enabled = false;

        //to avoid division by zero just change level instantly
        if (FadeoutTime == 0)
        {
            Messaging.GUI.Blackout.Invoke(0f);
            Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
            return;
        }

        GameObject fadeout = new GameObject("fadeout levelchange");

        float timer = 0;

        UpdateCallHook u = fadeout.AddComponent <UpdateCallHook>();

        u.OnUpdateCall.AddListener(() =>
        {
            timer     += Time.unscaledDeltaTime;
            float fade = timer / FadeoutTime;
            Messaging.GUI.Blackout.Invoke(Mathf.Clamp01(fade));
        });

        DestroyAfterTime d = fadeout.AddComponent <DestroyAfterTime>();

        d.LifeTime        = FadeoutTime + .1f; //small addition to let screen turn to fully black
        d.UseUnscaledTime = true;
        d.OnDestroy.AddListener(() =>
        {
            /*Messaging.GUI.LoadingWindow.Invoke(() =>
             * {
             *  Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
             * });*/

            Messaging.System.ChangeLevel.Invoke(TargetLevel, EntryPoint);
        });

        if (TeleportEffect != null)
        {
            Instantiate(TeleportEffect, collision.transform.position, Quaternion.identity, LevelLoader.TemporaryObjects);
            Destroy(collision.gameObject);
        }
    }