public override void OnGameTick(float deltaTime) { breatheCounter += deltaTime; if (breatheCounter < 1 || !entity.Alive) { return; } if (entity is EntityPlayer) { EntityPlayer plr = (EntityPlayer)entity; EnumGameMode mode = entity.World.PlayerByUid(plr.PlayerUID).WorldData.CurrentGameMode; if (mode == EnumGameMode.Creative || mode == EnumGameMode.Spectator) { return; } } EnumSuffocationType danger = checkSuffocation(); if (danger == EnumSuffocationType.None) { this.Oxygen = Math.Min(this.MaxOxygen, Oxygen + breatheCounter); } else { float prevOxy = Oxygen; Oxygen -= depletionRate(breatheCounter); triggerSoundEffect(prevOxy, Oxygen, danger); if (Oxygen < 0) { DamageSource damage = new DamageSource(); damage.source = EnumDamageSource.Drown; damage.type = EnumDamageType.Asphyxiation; entity.Die(EnumDespawnReason.Death, damage); } } breatheCounter = 0; }
private void triggerSoundEffect(float prev, float cur, EnumSuffocationType effect) { if (prev >= (MaxOxygen * 0.75)) { if (cur <= (MaxOxygen * 0.75)) { if (effect == EnumSuffocationType.Drowning) { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/bubble1.ogg"), entity); } else { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/doublecough.ogg"), entity); } } } else if (prev >= (MaxOxygen * 0.5)) { if (cur <= (MaxOxygen * 0.5)) { if (effect == EnumSuffocationType.Drowning) { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/bubble2.ogg"), entity); } else { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/cough.ogg"), entity); } } } else if (prev >= (MaxOxygen * 0.3)) { if (cur <= (MaxOxygen * 0.3)) { if (effect == EnumSuffocationType.Drowning) { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/bubble3.ogg"), entity); } else { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/quickgasp1.ogg"), entity); } } } else if (prev >= (MaxOxygen * 0.1)) { if (cur <= (MaxOxygen * 0.1)) { if (effect == EnumSuffocationType.Drowning) { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/bubble4.ogg"), entity); } else { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/quickgasp2.ogg"), entity); } } } else if (prev >= 1.5) { if (cur <= 1.5) { if (effect == EnumSuffocationType.Drowning) { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/drowned.ogg"), entity); } else { entity.World.PlaySoundAt(new AssetLocation("stressfullife:sounds/player/lastgasp.ogg"), entity); } } } }