namespace Faraon.Client.Services; using Microsoft.JSInterop; using Faraon.Core.Models; public class FxService { private readonly IJSRuntime _js; public FxService(IJSRuntime js) { _js = js; } public async ValueTask InitParticlesAsync(string canvasId = "particle-canvas") { try { await _js.InvokeVoidAsync("FaraonFx.initParticles", canvasId); } catch { } } public async ValueTask PlayCardSnapAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playCardSnap"); } catch { } } public async ValueTask PlayCardDrawAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playCardDraw"); } catch { } } public async ValueTask PlaySevenStackAsync(int level) { try { await _js.InvokeVoidAsync("FaraonFx.playSevenStack", level); await _js.InvokeVoidAsync("FaraonFx.triggerFireParticles", null, null, 25 * level); } catch { } } public async ValueTask PlayAceFreezeAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playAceFreeze"); await _js.InvokeVoidAsync("FaraonFx.triggerIceParticles", null, null, 35); } catch { } } public async ValueTask PlayHornikChimeAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playHornikChime"); } catch { } } public async ValueTask PlayBurnExplosionAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playBurnExplosion"); await _js.InvokeVoidAsync("FaraonFx.triggerBurnExplosion", null, null); } catch { } } public async ValueTask PlayVictoryAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playVictory"); await _js.InvokeVoidAsync("FaraonFx.triggerConfetti"); } catch { } } public async ValueTask PlayHeartbeatAsync() { try { await _js.InvokeVoidAsync("FaraonFx.playHeartbeat"); } catch { } } public async ValueTask TriggerScreenShakeAsync(int intensity = 5) { try { await _js.InvokeVoidAsync("FaraonFx.triggerScreenShake", intensity); } catch { } } public async ValueTask AnimateCardPlayAsync(string sourcePosition, Card card, string deck = "original") { try { var cardInfo = new { deck = deck, suit = card.Suit.ToString(), rank = card.Rank.ToString(), shortName = card.ShortName, suitSymbol = card.SuitSymbol, suitColor = card.SuitColor, rankName = card.RankName, suitName = card.SuitName, isHornik = card.IsHornik, isRedSeven = card.IsRedSeven }; await _js.InvokeVoidAsync("FaraonFx.animateCardPlay", sourcePosition, cardInfo); } catch { } } public async ValueTask AnimateCardDrawAsync(string targetPosition, string deck = "original") { try { await _js.InvokeVoidAsync("FaraonFx.animateCardDraw", targetPosition, deck); } catch { } } public async ValueTask ToggleMuteAsync() { try { return await _js.InvokeAsync("FaraonFx.toggleMute"); } catch { return false; } } }