Inheritance: MonoBehaviour
コード例 #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
ファイル: SetLazer.cs プロジェクト: phiLyken/RC_1
    public SetLazer SetLaser(float duration, List <Vector3> v3l, Color c)
    {
        if (v3l == null || v3l.Count < 2)
        {
            return(null);
        }

        LineRenderer line = GetComponent <LineRenderer>();

        line.SetVertexCount(v3l.Count);

        for (int i = 0; i < v3l.Count; i++)
        {
            line.SetPosition(i, v3l[i]);
        }

        line.SetColors(c, c);

        DestroyAfterTime dt = GetComponent <DestroyAfterTime>();

        dt.lifetime = duration;
        dt.StartTimer();

        return(this);
    }
コード例 #4
0
    public void PlayAudio(List <AudioClip> clipBank, string audioClipName, float volumeLevel, float dopplerRange, Vector3 position, Transform parent)
    {
        AudioClip clip = FindFile(audioClipName, clipBank);

        if (clip == null)
        {
            print("Clip is null - unable to play file (attempted to play;" + audioClipName + " ).");
            return;
        }
        GameObject go = new GameObject(audioClipName + ("AudioClip"));

        go.transform.position = position;
        go.transform.rotation = Quaternion.identity;
        //GameObject go = Instantiate(new GameObject(audioClipName + ("AudioClip")), position, Quaternion.identity) as GameObject;
        if (parent != null)
        {
            go.transform.parent = parent;
        }
        AudioSource source = go.AddComponent <AudioSource>();

        source.playOnAwake = false;
        source.volume      = volumeLevel * targetVolume;
        source.clip        = clip;

        DestroyAfterTime script = go.AddComponent <DestroyAfterTime>();

        script.randomDopplerRange = dopplerRange;
        source.Play();
        if (clipBank != MenuSounds && clipBank != AnnouncerSounds)
        {
            LerpSoundByDistance lerpSound = go.AddComponent <LerpSoundByDistance>();
        }
    }
コード例 #5
0
        private void Awake()
        {
            _triggerOverlap = GetComponent <TriggerOverlap>();
            _triggerStay    = GetComponent <TriggerStay>();

            _triggerOverlap.OnTrigger += TriggerEnter;
            _triggerStay.OnStay       += TriggerStay;

            _destroyAfterTime = GetComponent <DestroyAfterTime>();
        }
コード例 #6
0
    public void OnDestroy()
    {
        GameObject go = Instantiate(Prefab, transform.position, transform.rotation) as GameObject;

        go.name = this.name + ":" + go.name;
        if (CleanUp == true)
        {
            DestroyAfterTime dat = go.AddComponent <DestroyAfterTime>();
            dat.delay = 0.5f;
        }
    }
コード例 #7
0
ファイル: MonsterCreature.cs プロジェクト: Ofesser/OpenSpace
    private IEnumerator DeathProcess()
    {
        // Destroy object after deathTime
        DestroyAfterTime dt = gameObject.AddComponent <DestroyAfterTime>();

        dt.lifeTime = deathTime;


        // Creature are smoothly moving into ground after death
        while (true)
        {
            transform.Translate(-Vector3.up * 0.01f);
            yield return(null);
        }
    }
コード例 #8
0
ファイル: BearTrap.cs プロジェクト: drtrifle/Prison-Breakout
    // Update is called once per frame
    void FixedUpdate()
    {
        if (fuse)
        {
            if (anim != null)
            {
                anim.enabled = true;
            }
            else
            {
                DestroyAfterTime script = GetComponent <DestroyAfterTime>();
                script.enabled = true;
            }
        }

        if (exploded == true)
        {
            gameObject.SetActive(false);
        }
    }
コード例 #9
0
    public override void OnInspectorGUI()
    {
        DestroyAfterTime dat = target as DestroyAfterTime;

        EditorGUILayout.LabelField("General Settings", EditorStyles.boldLabel);
        EditorGUI.indentLevel += 1;
        dat.destroyTime        = EditorGUILayout.FloatField("Destroy Time:", Mathf.Clamp(dat.destroyTime, 0f, 1000f));
        dat.randomness         = EditorGUILayout.FloatField("Randomness:", dat.randomness);

        if (dat.randomness > 0f)
        {
            EditorGUILayout.LabelField("    Final Value:   [" + dat.destroyTime + " - " + (dat.destroyTime + dat.randomness) + "]");
        }
        else
        {
            EditorGUILayout.LabelField("    Final Value:   [" + dat.destroyTime + "]");
        }

        EditorGUI.indentLevel -= 1;

        GUILayout.Space(5f);
        dat.poolObject = EditorGUILayout.Toggle("Pool Object:", dat.poolObject);

        DarkRef.GUISeparator(5);

        dat.fadeOut = EditorGUILayout.Toggle(" Fade Out:", dat.fadeOut);
        if (dat.fadeOut)
        {
            EditorGUI.indentLevel += 1;
            dat.colorName          = EditorGUILayout.TextField("Color Name (Shader)", dat.colorName);
            dat.fadeSpeed          = EditorGUILayout.FloatField("Fade Speed", Mathf.Clamp(dat.fadeSpeed, 0.01f, 15f));

            isOpen2 = EditorGUILayout.Foldout(isOpen2, " Renderers");
            if (isOpen2)
            {
                GUI.color              = new Color(1f, 0.5f, 0.2f, 1f);
                EditorGUI.indentLevel += 1;
                if (GUILayout.Button("Auto-fill", GUILayout.MaxWidth(80)))
                {
                    //Could have just used GetComponentInChildren, but it wouldn't work on prefabs.
                    List <Renderer> r = new List <Renderer>();
                    if (dat.GetComponent <Renderer>())
                    {
                        r.Add(dat.GetComponent <Renderer>());
                    }
                    foreach (Transform t in dat.transform)
                    {
                        if (t.GetComponent <Renderer>())
                        {
                            r.Add(t.GetComponent <Renderer>());
                        }
                    }

                    dat.renderers = new Renderer[r.Count];
                    for (int i = 0; i < r.Count; i++)
                    {
                        dat.renderers[i] = r[i];
                    }
                }
                GUI.color = Color.white;

                int        length      = dat.renderers.Length;
                Renderer[] tempStorage = dat.renderers;
                length = EditorGUILayout.IntField("Length:", length);
                if (length != dat.renderers.Length)
                {
                    dat.renderers = new Renderer[length];
                    for (int i = 0; i < tempStorage.Length; i++)
                    {
                        if (i < dat.renderers.Length)
                        {
                            dat.renderers[i] = tempStorage[i];
                        }
                    }
                }
                EditorGUI.indentLevel      += 1;
                EditorGUIUtility.labelWidth = 110f;
                for (int i = 0; i < length; i++)
                {
                    dat.renderers[i] = (Renderer)EditorGUILayout.ObjectField(" Element " + i.ToString(), dat.renderers[i], typeof(Renderer), true);
                }
                EditorGUIUtility.LookLikeControls();
                EditorGUI.indentLevel -= 1;
                EditorGUI.indentLevel -= 1;
            }

            EditorGUI.indentLevel -= 1;
        }

        DarkRef.GUISeparator();

        dat.isParticle = EditorGUILayout.Toggle(" Is Particle:", dat.isParticle);

        if (dat.isParticle)
        {
            EditorGUI.indentLevel += 1;

            isOpen = EditorGUILayout.Foldout(isOpen, " Particle Systems");
            if (isOpen)
            {
                GUI.color              = new Color(1f, 0.5f, 0.2f, 1f);
                EditorGUI.indentLevel += 1;
                if (GUILayout.Button("Auto-fill", GUILayout.MaxWidth(80)))
                {
                    //Could have just used GetComponentInChildren, but it wouldn't work on prefabs.
                    List <ParticleEmitter> pe = new List <ParticleEmitter>();
                    if (dat.GetComponent <ParticleEmitter>())
                    {
                        pe.Add(dat.GetComponent <ParticleEmitter>());
                    }
                    foreach (Transform t in dat.transform)
                    {
                        if (t.GetComponent <ParticleEmitter>())
                        {
                            pe.Add(t.GetComponent <ParticleEmitter>());
                        }
                    }

                    dat.emitters = new ParticleEmitter[pe.Count];
                    for (int i = 0; i < pe.Count; i++)
                    {
                        dat.emitters[i] = pe[i];
                    }
                }
                GUI.color = Color.white;

                int length = dat.emitters.Length;
                ParticleEmitter[] tempStorage = dat.emitters;
                length = EditorGUILayout.IntField("Length:", length);
                if (length != dat.emitters.Length)
                {
                    dat.emitters = new ParticleEmitter[length];
                    for (int i = 0; i < tempStorage.Length; i++)
                    {
                        if (i < dat.emitters.Length)
                        {
                            dat.emitters[i] = tempStorage[i];
                        }
                    }
                }
                EditorGUI.indentLevel      += 1;
                EditorGUIUtility.labelWidth = 110f;
                for (int i = 0; i < length; i++)
                {
                    dat.emitters[i] = (ParticleEmitter)EditorGUILayout.ObjectField(" Element " + i.ToString(), dat.emitters[i], typeof(ParticleEmitter), true);
                }
                EditorGUIUtility.LookLikeControls();
                EditorGUI.indentLevel -= 1;
                EditorGUI.indentLevel -= 1;
            }

            EditorGUI.indentLevel -= 1;
        }

        if (GUI.changed)
        {
            EditorUtility.SetDirty(dat);
        }
    }
コード例 #10
0
ファイル: DashSkill.cs プロジェクト: RistoPaasivirta/IOX
    public override void Activate(MonsterCharacter character, int index)
    {
        //would result in illegal normalization, need a direction to dash into
        if (character.physicsBody.velocity == Vector2.zero)
        {
            return;
        }

        //need 65% of full power at minimum
        if (character.ChargePoints < (ChargeCost * .65f))
        {
            Sounds.CreateSound(FailSound);
            Messaging.GUI.ScreenMessage.Invoke("NOT ENOUGH CHARGE", Color.red);
            return;
        }

        if (character.SkillCooldowns[index] > 0)
        {
            Sounds.CreateSound(FailSound);
            return;
        }

        Sounds.CreateSound(ActivationSound);

        character.SkillCooldowns[index] = Cooldown;

        float strength = Strength;

        if (character.ChargePoints < ChargeCost)
        {
            strength *= (float)character.ChargePoints / ChargeCost;
            character.ChargePoints = 0;
        }
        else
        {
            character.ChargePoints -= ChargeCost;
        }

        DashSkill d = Instantiate(this, LevelLoader.DynamicObjects);

        d.Strength        = strength;
        d.direction       = character.physicsBody.velocity.normalized;
        d.targetCharacter = character;
        d.timer           = ActiveTime;

        if (AttachmentEffect != null)
        {
            foreach (string attachPoint in AttachmentPoints)
            {
                GameObject effect = Instantiate(AttachmentEffect);

                GenericTimer e = effect.AddComponent <GenericTimer>();
                e.LifeTime = ActiveTime * 5;
                e.OnTimer.AddListener(() =>
                {
                    TrailRenderer tr = effect.GetComponentInChildren <TrailRenderer>();
                    if (tr != null)
                    {
                        tr.emitting = false;
                    }
                });

                DestroyAfterTime t = effect.AddComponent <DestroyAfterTime>();
                t.LifeTime = ActiveTime * 10;

                effect.transform.SetParent(character.GetAttachmentPoint(attachPoint), false);
            }
        }
    }
コード例 #11
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);
        }
    }
コード例 #12
0
    public void Setup(LocalBlackboard localBlackboard)
    {
        _localBlackboard = localBlackboard;

        if (TryGetComponent(out TypeInflictor temp))
        {
            _typeInflictor = temp;
        }
        if (TryGetComponent(out Spawn temp2))
        {
            _spawn = temp2;
            _spawn.Setup(_localBlackboard);
        }
        if (TryGetComponent(out PushInflictor temp3))
        {
            _pushInflictor = temp3;
        }
        if (TryGetComponent(out Collection temp4))
        {
            _collection = temp4;
            _collection.Setup(_localBlackboard);
        }
        if (TryGetComponent(out StunInflictor temp5))
        {
            _stunInflictor = temp5;
        }
        if (TryGetComponent(out AttackColliderController temp6))
        {
            _attackCollider = temp6;
            _attackCollider.Setup(_localBlackboard, this);
        }
        if (TryGetComponent(out DestroyAfterTime temp7))
        {
            _destroyAfterTime = temp7;
            _destroyAfterTime.Setup(_spawn);
        }
        if (TryGetComponent(out DoDamage temp8))
        {
            _doDamage = temp8;
        }
        if (TryGetComponent(out Heal temp9))
        {
            _heal = temp9;
        }
        if (TryGetComponent(out Recharge temp10))
        {
            _recharge = temp10;
            _recharge.Setup(this);
        }
        if (TryGetComponent(out IndieAttackPlayer temp11))
        {
            _indieAttackPlayer = temp11;
            _indieAttackPlayer.Setup(this);
        }
        if (TryGetComponent(out AttackFXPlayer temp12))
        {
            _attackFXPlayer = temp12;
        }
        if (TryGetComponent(out DestroyOnHit temp13))
        {
            _destroyOnHit = temp13;
        }
        if (TryGetComponent(out RecievePhysicsPush temp14))
        {
            temp14.Setup(_localBlackboard.currentTarget.transform);
        }
    }
コード例 #13
0
ファイル: SloneUtil.cs プロジェクト: slonermike/SloneUtil
    /// <summary>
    /// Destroys a GameObject after a delay.
    /// </summary>
    /// <param name="gObj">Gameobject to destroy.</param>
    /// <param name="timeSec">Time in seconds after which to destroy it.</param>
    public static void DestroyAfterTime(this GameObject gObj, float timeSec)
    {
        DestroyAfterTime dat = gObj.AddComponent <DestroyAfterTime> ();

        dat.lifetime = timeSec;
    }