Files
FaraonCardGame/Faraon.Client/Services/FxService.cs
T
2026-08-28 13:59:36 +02:00

123 lines
3.3 KiB
C#

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<bool> ToggleMuteAsync()
{
try { return await _js.InvokeAsync<bool>("FaraonFx.toggleMute"); } catch { return false; }
}
}