CI / build-test (push) Successful in 1m10s
Added a MasterVolume property to the AudioManager for unified control over sound effects and music volume. Updated the Play method to incorporate MasterVolume adjustments. Enhanced documentation in CLAUDE.md and architecture.md to reflect changes in audio management and overall engine architecture. Introduced a new test project for audio functionalities in the solution file.
116 lines
2.8 KiB
C#
116 lines
2.8 KiB
C#
using MrGameEng.Core;
|
|
using Xunit;
|
|
|
|
namespace MrGameEng.Core.Tests;
|
|
|
|
public class GameSpeedTests
|
|
{
|
|
[Fact]
|
|
public void Constructor_DefaultSteps_RunsAtFirstStep()
|
|
{
|
|
var clock = new GameClock();
|
|
|
|
var speed = new GameSpeed(clock);
|
|
|
|
Assert.Equal(new[] { 1f, 3f, 6f }, speed.Steps);
|
|
Assert.False(speed.IsPaused);
|
|
Assert.Equal(1f, speed.CurrentSpeed);
|
|
Assert.Equal(1f, clock.TimeScale);
|
|
}
|
|
|
|
[Fact]
|
|
public void Constructor_NonPositiveStep_Throws()
|
|
{
|
|
Assert.Throws<ArgumentOutOfRangeException>(() => new GameSpeed(new GameClock(), 1f, 0f));
|
|
}
|
|
|
|
[Fact]
|
|
public void Pause_SetsClockToZero_ResumeRestoresStep()
|
|
{
|
|
var clock = new GameClock();
|
|
var speed = new GameSpeed(clock, 1f, 3f, 6f);
|
|
speed.SetStep(2);
|
|
|
|
speed.Pause();
|
|
|
|
Assert.True(speed.IsPaused);
|
|
Assert.Equal(0f, clock.TimeScale);
|
|
Assert.Equal(0f, speed.CurrentSpeed);
|
|
|
|
speed.Resume();
|
|
|
|
Assert.False(speed.IsPaused);
|
|
Assert.Equal(6f, clock.TimeScale);
|
|
Assert.Equal(2, speed.StepIndex);
|
|
}
|
|
|
|
[Fact]
|
|
public void SetStep_OutOfRange_Clamps()
|
|
{
|
|
var clock = new GameClock();
|
|
var speed = new GameSpeed(clock, 1f, 3f, 6f);
|
|
|
|
speed.SetStep(99);
|
|
Assert.Equal(2, speed.StepIndex);
|
|
Assert.Equal(6f, clock.TimeScale);
|
|
|
|
speed.SetStep(-5);
|
|
Assert.Equal(0, speed.StepIndex);
|
|
Assert.Equal(1f, clock.TimeScale);
|
|
}
|
|
|
|
[Fact]
|
|
public void FasterAndSlower_ClampAtEnds_AndUnpause()
|
|
{
|
|
var clock = new GameClock();
|
|
var speed = new GameSpeed(clock, 1f, 3f, 6f);
|
|
|
|
speed.Faster();
|
|
Assert.Equal(1, speed.StepIndex);
|
|
speed.Faster();
|
|
speed.Faster(); // clamps at fastest
|
|
Assert.Equal(2, speed.StepIndex);
|
|
|
|
speed.Pause();
|
|
speed.Slower(); // unpauses and steps down
|
|
Assert.False(speed.IsPaused);
|
|
Assert.Equal(1, speed.StepIndex);
|
|
}
|
|
|
|
[Fact]
|
|
public void Cycle_GoesPauseThroughStepsBackToPause()
|
|
{
|
|
var clock = new GameClock();
|
|
var speed = new GameSpeed(clock, 1f, 3f, 6f);
|
|
speed.Pause();
|
|
|
|
speed.Cycle(); // -> step 0
|
|
Assert.False(speed.IsPaused);
|
|
Assert.Equal(0, speed.StepIndex);
|
|
|
|
speed.Cycle(); // -> step 1
|
|
Assert.Equal(1, speed.StepIndex);
|
|
|
|
speed.Cycle(); // -> step 2 (fastest)
|
|
Assert.Equal(2, speed.StepIndex);
|
|
|
|
speed.Cycle(); // -> pause
|
|
Assert.True(speed.IsPaused);
|
|
}
|
|
|
|
[Fact]
|
|
public void Changed_FiresOnTransitions()
|
|
{
|
|
var clock = new GameClock();
|
|
var speed = new GameSpeed(clock, 1f, 3f, 6f);
|
|
var count = 0;
|
|
speed.Changed += () => count++;
|
|
|
|
speed.Pause();
|
|
speed.Resume();
|
|
speed.Faster();
|
|
|
|
Assert.Equal(3, count);
|
|
}
|
|
}
|