123 lines
3.3 KiB
C#
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; }
|
|
}
|
|
}
|
|
|