예제 #1
0
    IEnumerator PlayerDeathSequence()
    {
        MomentumManager.ResetMomentum();
        float fadeOutCompleteTime = Time.time + playerDeathFadeScreenTimer;

        while (Time.time < fadeOutCompleteTime)
        {
            float timeRemaining = fadeOutCompleteTime - Time.time;

            float percentageComplete = timeRemaining / playerDeathFadeScreenTimer;

            Color fadeColor = FadeScreen.color;

            fadeColor.a = Mathf.Lerp(1f, 0f, percentageComplete);

            FadeScreen.color = fadeColor;
            yield return(null);
        }

        Color finalFadeColor = FadeScreen.color;

        finalFadeColor.a = 1f;
        FadeScreen.color = finalFadeColor;

        MuteAllEmitters();

        GlobalEventEmitter.OnGameStateEvent(GlobalConstants.GameStateEvents.PlayerDied);

        UnmuteAllEmitters();

        playerTransform.position = currentlyActiveLevel.SpawnPoint.position;

        yield return(new WaitForSeconds(3f));

        float fadeBackTimer        = playerDeathFadeScreenTimer / 2f;
        float fadeBackCompleteTime = Time.time + fadeBackTimer;

        // TODO: move this to dedicated scene-change logic
        SceneManager.LoadScene(SceneManager.GetActiveScene().name);
        GlobalEventEmitter.OnGameStateEvent(GlobalConstants.GameStateEvents.NewSceneLoaded);

        EntityEmitter playerEntityEmitter = Player.GetComponent <EntityEmitter>();

        playerEntityEmitter.isMuted = false;
        playerEntityEmitter.EmitEvent(EntityEvents.Respawning);

        while (Time.time < fadeBackCompleteTime)
        {
            float timeRemaining = fadeBackCompleteTime - Time.time;

            float percentageComplete = timeRemaining / fadeBackTimer;

            Color fadeColor = FadeScreen.color;

            fadeColor.a = Mathf.Lerp(0f, 1f, percentageComplete);

            FadeScreen.color = fadeColor;
            yield return(null);
        }
    }
예제 #2
0
    IEnumerator AlertGroupMembers()
    {
        foreach (Transform entity in entitiesToAggro)
        {
            Transform currentTarget = (Transform)entityInformation.GetAttribute(EntityAttributes.CurrentTarget);
            entity.GetComponent <EntityManagement>().SetAttribute(EntityAttributes.CurrentTarget, currentTarget);
            EntityEmitter emitter = entity.GetComponent <EntityEmitter>();
            emitter.EmitEvent(EntityEvents.Aggro);
            emitter.EmitEvent(EntityEvents.TargetUpdated);

            float aggroDelay = Random.Range(minAggroDelay, maxAggroDelay);
            yield return(new WaitForSeconds(maxAggroDelay));
        }
        // If one dies before all are aggroed, it wigs. Just leaving them immune until all notified.
        foreach (Transform entity in entitiesToAggro)
        {
            entity.GetComponent <StationaryEntityHealthComponent>().IsInvulnerable = false;
        }
    }
예제 #3
0
 void Awake()
 {
     parryHardware = GetComponentInParent <ParryHardware>();
     gear          = GetComponentInParent <EntityGearManagement>();
     entityEmitter = GetComponentInParent <EntityEmitter>();
 }
예제 #4
0
 public static void DeregisterEmitter(EntityEmitter emitter)
 {
     ActiveEmittersInScene.Remove(emitter);
 }
예제 #5
0
 public static void RegisterEmitter(EntityEmitter emitter)
 {
     ActiveEmittersInScene.Add(emitter);
 }
예제 #6
0
 protected virtual void Awake()
 {
     entityEmitter = GetComponent <EntityEmitter>();
     entityData    = GetComponent <EntityData>();
 }