Skip to content

Commit

Permalink
Playing sfx if player takes a damage down
Browse files Browse the repository at this point in the history
  • Loading branch information
Felscream committed Aug 31, 2024
1 parent 120fc82 commit 49ddc02
Show file tree
Hide file tree
Showing 6 changed files with 73 additions and 2 deletions.
Binary file modified DragoonMayCry/Assets/Audio/dead_weight.wav
Binary file not shown.
1 change: 1 addition & 0 deletions DragoonMayCry/Audio/AudioService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ public void PlaySfx(SoundId key, bool force = false)
return;
}

Service.Log.Debug($"Playing SFX {key}");
audioEngine.PlaySfx(key, SfxPaths[key], GetSfxVolume());

if (!soundIdsNextAvailability.ContainsKey(key) || force || soundIdsNextAvailability[key] == 0)
Expand Down
12 changes: 12 additions & 0 deletions DragoonMayCry/Score/Style/StyleRankHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public StyleRankHandler(PlayerActionTracker playerActionTracker)
var playerState = PlayerState.GetInstance();
playerState.RegisterCombatStateChangeHandler(OnCombatChange!);
playerState.RegisterDeathStateChangeHandler(OnDeath);
playerState.RegisterDamageDownHandler(OnDamageDown);
playerActionTracker.OnGcdDropped += OnGcdDropped;
playerActionTracker.OnLimitBreakCanceled += OnLimitBreakCanceled;
playerActionTracker.OnLimitBreak += OnLimitBreak;
Expand Down Expand Up @@ -146,6 +147,7 @@ private void ForceRankTo(StyleType type, bool isBlunder)

if (isBlunder)
{
Service.Log.Debug("Forcing sfx to play");
audioService.PlaySfx(SoundId.DeadWeight, true);
}

Expand Down Expand Up @@ -192,5 +194,15 @@ private void OnLimitBreak(
ForceRankTo(StyleType.A, false);
}
}

private void OnDamageDown(object? sender, bool hasDamageDown)
{
if(!hasDamageDown)
{
return;
}

ForceRankTo(StyleType.D, true);
}
}
}
10 changes: 9 additions & 1 deletion DragoonMayCry/State/PlayerState.cs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ public class PlayerState : IDisposable
private readonly OnEnteringInstanceStateTracker onEnteringInstanceStateTracker;
private readonly LoginStateTracker loginStateTracker;
private readonly JobChangeTracker jobChangeTracker;
private readonly DamageDownTracker damageDownTracker;
private static PlayerState? Instance;
private PlayerState()
{
Expand All @@ -33,6 +34,7 @@ private PlayerState()
onEnteringInstanceStateTracker = new();
loginStateTracker = new();
jobChangeTracker = new();
damageDownTracker = new();
Service.Framework.Update += Update;
}

Expand All @@ -52,11 +54,12 @@ public void Update(IFramework framework)
{
return;
}
inCombatStateTracker.Update(this);
onDeathStateTracker.Update(this);
inCombatStateTracker.Update(this);
onEnteringInstanceStateTracker.Update(this);
loginStateTracker.Update(this);
jobChangeTracker.Update(this);
damageDownTracker.Update(this);
}

public void RegisterCombatStateChangeHandler(EventHandler<bool> inCombatHandler)
Expand Down Expand Up @@ -84,6 +87,11 @@ public void RegisterJobChangeHandler(EventHandler<JobIds> onJobChange)
jobChangeTracker.OnChange += onJobChange;
}

public void RegisterDamageDownHandler(EventHandler<bool> onDamageDown)
{
damageDownTracker.OnChange += onDamageDown;
}

public JobIds GetCurrentJob()
{
if (Player == null)
Expand Down
50 changes: 50 additions & 0 deletions DragoonMayCry/State/Tracker/DamageDownTracker.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
using Dalamud.Game.ClientState.Statuses;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;

namespace DragoonMayCry.State.Tracker
{
internal class DamageDownTracker : StateTracker<bool>
{
private readonly HashSet<uint> damageDownIds = new HashSet<uint>
{
62, 215, 628, 696, 1016, 1090, 2092, 2404, 2522, 2911, 3166, 3304, 3964
};
private bool hasDamageDown;

public override void Update(PlayerState playerState)
{
if(playerState.Player == null || playerState.IsDead)
{
return;
}
StatusList statuses = playerState.Player.StatusList;
for(int i = 0; i < statuses.Length; i++)
{
var status = statuses[i];
if (damageDownIds.Contains(status.GameData.RowId))
{
if (!hasDamageDown)
{
Service.Log.Debug($"Damage down applied");
hasDamageDown = true;
OnChange?.Invoke(this, hasDamageDown);
}
return;
}
}

// Player had damage down last update cycle.
// If we get here, then damage down expired
if (hasDamageDown)
{
hasDamageDown = false;
OnChange?.Invoke(this, hasDamageDown);
}
}
}
}
2 changes: 1 addition & 1 deletion DragoonMayCry/UI/ConfigWindow.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public class ConfigWindow : Window, IDisposable
// We give this window a constant ID using ###
// This allows for labels being dynamic, like "{FPS Counter}fps###XYZ counter window",
// and the window ID will always be "###XYZ counter window" for ImGui
public ConfigWindow(DmcConfiguration configuration, StyleRankHandler styleRankHandler) : base("A Wonderful Configuration Window###With a constant ID")
public ConfigWindow(DmcConfiguration configuration, StyleRankHandler styleRankHandler) : base("Dragoon May Cry###DmC")
{
Flags = ImGuiWindowFlags.NoResize | ImGuiWindowFlags.NoCollapse | ImGuiWindowFlags.NoScrollbar |
ImGuiWindowFlags.NoScrollWithMouse;
Expand Down

0 comments on commit 49ddc02

Please sign in to comment.