//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); }); }
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); }); }); }
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); }
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>(); } }
private void Awake() { _triggerOverlap = GetComponent <TriggerOverlap>(); _triggerStay = GetComponent <TriggerStay>(); _triggerOverlap.OnTrigger += TriggerEnter; _triggerStay.OnStay += TriggerStay; _destroyAfterTime = GetComponent <DestroyAfterTime>(); }
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; } }
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); } }
// 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); } }
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); } }
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); } } }
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); } }
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); } }
/// <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; }