private static void ApplyDPS(UFPlayerLife player, Room.LiquidProperties.LiquidType type) { switch (type) { case Room.LiquidProperties.LiquidType.Lava: player.TakeDamage(10f * Time.deltaTime, UFPlayerLife.DamageType.Fire, true); break; case Room.LiquidProperties.LiquidType.Acid: player.TakeDamage(5f * Time.deltaTime, UFPlayerLife.DamageType.Acid, true); break; } }
/// <summary> /// Perform effects of this event. /// Returns the type of IDRef that is used up when performing the event, /// these references do not get activated in the usual sense by this /// event type. /// </summary> private IDRef.Type DoEffect(bool positive) { //preperatory variables Transform playerTr = UFLevel.GetPlayer <Transform>(); UFPlayerLife playerLi = UFLevel.GetPlayer <UFPlayerLife>(); UFPlayerMovement playerMo = UFLevel.GetPlayer <UFPlayerMovement>(); AudioSource sound = this.GetComponent <AudioSource>(); //find effect type and do its effects. Return IDRefts that were used up. switch (type) { case UFLevelStructure.Event.EventType.Teleport: foreach (int link in links) { Transform t = UFLevel.GetByID(link).objectRef.transform; t.position = transform.position; t.rotation = transform.rotation; } return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Teleport_Player: playerTr.position = transform.position; playerTr.GetComponent <CharacterController>().Move(Vector3.zero); playerMo.SetRotation(transform.rotation); return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Music_Start: if (sound.clip == null) { Debug.LogWarning("Music event has no audio clip assigned: " + name); } sound.Play(); return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Play_Sound: sound.rolloffMode = AudioRolloffMode.Linear; if (float1 >= 0f) { sound.minDistance = float1; sound.maxDistance = float1 * 2f; sound.spatialBlend = 1f; } else { sound.spatialBlend = 0f; } if (sound.clip == null) { Debug.LogWarning("Play sound event has no audio clip assigned: " + name); } sound.loop = bool1; sound.Play(); if (float2 > 0f && !bool1) { sound.SetScheduledEndTime(float2); } return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Music_Stop: float fadeTime = float1; foreach (UFEvent e in GetEventsOfType(UFLevelStructure.Event.EventType.Music_Start)) { StartCoroutine(e.FadeAudioSource(fadeTime, 0f)); } return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Particle_State: foreach (UFParticleEmitter pem in GetLinksOfType <UFParticleEmitter>(IDRef.Type.ParticleEmitter)) { pem.Activate(positive); } return(IDRef.Type.ParticleEmitter); case UFLevelStructure.Event.EventType.Mover_Pause: foreach (UFMover mov in GetLinksOfType <UFMover>(IDRef.Type.Keyframe)) { mov.Activate(!positive); } return(IDRef.Type.Keyframe); case UFLevelStructure.Event.EventType.Reverse_Mover: bool setForwardIfMoving = int1 != 0; foreach (UFMover mov in GetLinksOfType <UFMover>(IDRef.Type.Keyframe)) { mov.Reverse(setForwardIfMoving); } return(IDRef.Type.Keyframe); case UFLevelStructure.Event.EventType.Modify_Rotating_Mover: bool increase = string1.Equals("Increase"); float factor = increase ? 1f + (float1 / 100f) : 1f - (float1 / 100f); foreach (UFMover mov in GetLinksOfType <UFMover>(IDRef.Type.Keyframe)) { mov.ChangeRotationSpeed(factor); } return(IDRef.Type.Keyframe); case UFLevelStructure.Event.EventType.Explode: float radius = float1; float damage = float2; bool geo = bool1; float dist = (playerTr.position - transform.position).magnitude; if (dist < radius) { playerLi.TakeDamage(damage, UFPlayerLife.DamageType.Explosive, false); } if (geo) { Debug.LogWarning("Explosion " + name + " requested geo mod; this will not work as of now!"); } GameObject explosionPrefab = obj as GameObject; if (explosionPrefab != null) { Vector3 explPos = transform.position; Quaternion explRot = transform.rotation; GameObject explosion = Instantiate(explosionPrefab, explPos, explRot, transform); explosion.transform.localScale = radius * 2f * Vector3.one; } else { Debug.LogWarning("Explosion prefab for event " + name + " was not provided!"); } return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Skybox_State: UFLevel.playerInfo.SetSkyboxRotation(string1, float1); return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Bolt_State: foreach (UFBoltEmitter bem in GetLinksOfType <UFBoltEmitter>(IDRef.Type.BoltEmitter)) { bem.Activate(positive); } return(IDRef.Type.BoltEmitter); case UFLevelStructure.Event.EventType.Push_Region_State: foreach (UFForceRegion pr in GetLinksOfType <UFForceRegion>(IDRef.Type.PushRegion)) { pr.Activate(positive); } return(IDRef.Type.PushRegion); case UFLevelStructure.Event.EventType.Countdown_Begin: UFLevel.singleton.SetCountDown(int1); return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Countdown_End: UFLevel.singleton.SetCountDown(0f); return(IDRef.Type.None); case UFLevelStructure.Event.EventType.Remove_Object: foreach (int link in links) { GameObject g = UFLevel.GetByID(link).objectRef; if (g == null) { Debug.LogWarning("Trying to remove ID ref that does not exist: " + link); } else { g.SetActive(false); } } return(IDRef.Type.All); case UFLevelStructure.Event.EventType.Heal: if (bool1) { UFLevel.GetPlayer <UFPlayerLife>().GainHealth(int1); return(IDRef.Type.None); } else { Debug.LogError("Entity heal not implemented"); return(IDRef.Type.Entity); } case UFLevelStructure.Event.EventType.Set_Gravity: Physics.gravity = float1 * Vector3.down; return(IDRef.Type.None); default: Debug.LogError("Event type " + type + " not implemented"); return(IDRef.Type.None); } }