Implement Jackpot Win Animation (> 200)

Change Currency Name To "Q's" (i could probably come up with a better name here)
This commit is contained in:
Alan Moon 2025-06-23 14:03:57 -07:00
parent 240bf9e9d7
commit 88806e93a4
7 changed files with 113 additions and 13 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

View File

@ -30,23 +30,27 @@
{
lblTokensWon = new Label();
btnClaim = new Button();
pbHornLeft = new PictureBox();
pbHornRight = new PictureBox();
((System.ComponentModel.ISupportInitialize)pbHornLeft).BeginInit();
((System.ComponentModel.ISupportInitialize)pbHornRight).BeginInit();
SuspendLayout();
//
// lblTokensWon
//
lblTokensWon.AutoSize = true;
lblTokensWon.AutoEllipsis = true;
lblTokensWon.Font = new Font("Segoe UI Black", 13F);
lblTokensWon.Location = new Point(137, 30);
lblTokensWon.Location = new Point(145, 33);
lblTokensWon.Name = "lblTokensWon";
lblTokensWon.Size = new Size(137, 25);
lblTokensWon.Size = new Size(129, 25);
lblTokensWon.TabIndex = 0;
lblTokensWon.Text = "0 Tokens Won";
lblTokensWon.Text = "300 Q's Won";
lblTokensWon.TextAlign = ContentAlignment.MiddleCenter;
//
// btnClaim
//
btnClaim.Enabled = false;
btnClaim.Location = new Point(167, 76);
btnClaim.Location = new Point(173, 72);
btnClaim.Name = "btnClaim";
btnClaim.Size = new Size(75, 23);
btnClaim.TabIndex = 1;
@ -54,12 +58,36 @@
btnClaim.UseVisualStyleBackColor = true;
btnClaim.Click += btnClaim_Click;
//
// pbHornLeft
//
pbHornLeft.Image = Properties.Resources.right_horn_animated;
pbHornLeft.Location = new Point(12, 8);
pbHornLeft.Name = "pbHornLeft";
pbHornLeft.Size = new Size(80, 100);
pbHornLeft.SizeMode = PictureBoxSizeMode.Zoom;
pbHornLeft.TabIndex = 2;
pbHornLeft.TabStop = false;
pbHornLeft.Visible = false;
//
// pbHornRight
//
pbHornRight.Image = Properties.Resources.left_horn_animated;
pbHornRight.Location = new Point(337, 8);
pbHornRight.Name = "pbHornRight";
pbHornRight.Size = new Size(78, 101);
pbHornRight.SizeMode = PictureBoxSizeMode.Zoom;
pbHornRight.TabIndex = 3;
pbHornRight.TabStop = false;
pbHornRight.Visible = false;
//
// TokenJackpotSpinner
//
AutoScaleDimensions = new SizeF(7F, 15F);
AutoScaleMode = AutoScaleMode.Font;
BackColor = Color.DodgerBlue;
ClientSize = new Size(427, 125);
ClientSize = new Size(427, 117);
Controls.Add(pbHornRight);
Controls.Add(pbHornLeft);
Controls.Add(btnClaim);
Controls.Add(lblTokensWon);
DoubleBuffered = true;
@ -73,13 +101,16 @@
FormClosing += TokenJackpotSpinner_FormClosing;
FormClosed += TokenJackpotSpinner_FormClosed;
Load += TokenJackpotSpinner_Load;
((System.ComponentModel.ISupportInitialize)pbHornLeft).EndInit();
((System.ComponentModel.ISupportInitialize)pbHornRight).EndInit();
ResumeLayout(false);
PerformLayout();
}
#endregion
private Label lblTokensWon;
private Button btnClaim;
private PictureBox pbHornLeft;
private PictureBox pbHornRight;
}
}

View File

@ -26,12 +26,15 @@ namespace qtc_net_client_2.Forms
{
btnClaim.Enabled = false;
AllowClose = false;
_audioService.OnSoundEnded += _audioService_OnSoundEnded;
await StartSpinAnimation(lblTokensWon);
}
private void TokenJackpotSpinner_FormClosed(object sender, FormClosedEventArgs e)
{
DialogResult = DialogResult.OK;
_audioService.Dispose();
Close();
}
@ -46,6 +49,16 @@ namespace qtc_net_client_2.Forms
Close();
}
private void _audioService_OnSoundEnded(object? sender, SoundEndedEventArgs e)
{
switch(e.EventString)
{
case "sndTokenWin":
DetermineWinAnim();
break;
}
}
public async Task StartSpinAnimation(Label label)
{
if (label.IsHandleCreated)
@ -55,7 +68,7 @@ namespace qtc_net_client_2.Forms
while (_audioService.OutputDevice?.PlaybackState == NAudio.Wave.PlaybackState.Playing)
{
label.BeginInvoke(delegate () { label.Text = $"{rnd.Next(0, 300)} Tokens Won"; });
label.BeginInvoke(delegate () { label.Text = $"{rnd.Next(0, 300)} Q's Won"; });
await Task.Delay(10);
}
@ -63,15 +76,26 @@ namespace qtc_net_client_2.Forms
label.BeginInvoke(delegate ()
{
label.Text = $"{win} Tokens Won";
label.Text = $"{win} Q's Won";
btnClaim.Enabled = true;
_audioService.PlaySoundEffect("sndTokenWin");
_audioService.PlaySoundEffectWithEventString("sndTokenWin", "sndTokenWin");
});
_audioService.Dispose();
AllowClose = true;
TokensWon = win;
}
}
public void DetermineWinAnim()
{
switch(TokensWon)
{
case > 200:
pbHornLeft.BeginInvoke(delegate () { pbHornLeft.Visible = true; });
pbHornRight.BeginInvoke(delegate () { pbHornRight.Visible = true; });
_audioService.PlaySoundEffect("sndTokenJackpot");
break;
}
}
}
}

View File

@ -140,6 +140,16 @@ namespace qtc_net_client_2.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap left_horn_animated {
get {
object obj = ResourceManager.GetObject("left-horn-animated", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
@ -200,6 +210,16 @@ namespace qtc_net_client_2.Properties {
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>
internal static System.Drawing.Bitmap right_horn_animated {
get {
object obj = ResourceManager.GetObject("right-horn-animated", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized resource of type System.Drawing.Bitmap.
/// </summary>

View File

@ -118,6 +118,9 @@
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="right-horn-animated" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Anims\right-horn-animated.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="SendIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\SendIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -139,6 +142,9 @@
<data name="AwayIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\AwayIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="CurrencyIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\CurrencyIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="AddContactIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\AddContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
@ -160,7 +166,7 @@
<data name="AcceptContactIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\AcceptContactIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="CurrencyIcon" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Icons\CurrencyIcon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
<data name="left-horn-animated" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Anims\left-horn-animated.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
</root>

View File

@ -12,6 +12,8 @@ namespace qtc_net_client_2.Services
{
public WaveOutEvent? OutputDevice { get; set; }
public AudioFileReader? AudioFileReader { get; set; }
public event EventHandler<SoundEndedEventArgs>? OnSoundEnded;
public void PlaySoundEffect(string soundName)
{
if (!File.Exists($"./Sounds/{soundName}.wav")) return;
@ -24,6 +26,18 @@ namespace qtc_net_client_2.Services
return;
}
public void PlaySoundEffectWithEventString(string soundName, string eventString)
{
if (!File.Exists($"./Sounds/{soundName}.wav")) return;
OutputDevice = new WaveOutEvent();
AudioFileReader = new AudioFileReader($"./Sounds/{soundName}.wav");
OutputDevice.Init(AudioFileReader);
OutputDevice.Play();
OutputDevice.PlaybackStopped += (sender, args) => OnSoundEnded?.Invoke(null, new SoundEndedEventArgs { EventString = eventString });
}
public void PlaySoundLooped(string soundName, int loopCount)
{
if (!File.Exists($"./Sounds/{soundName}.wav")) return;
@ -50,4 +64,9 @@ namespace qtc_net_client_2.Services
if (AudioFileReader != null) { AudioFileReader.Dispose(); AudioFileReader = null; }
}
}
public class SoundEndedEventArgs : EventArgs
{
public string EventString { get; set; } = "UNKNOWN";
}
}