From 0747a81efd9aa568af5eab4c30c41caea77bf60c Mon Sep 17 00:00:00 2001
From: Shaun Lawrence <17139988+bijington@users.noreply.github.com>
Date: Sat, 9 Mar 2024 16:47:24 +0000
Subject: [PATCH 1/5] Basic test and mock for game object
---
engine/Orbit.Engine.Tests/GameObjectTests.cs | 42 +++++++++++++++++++
.../Mocks/MockGameObject.cs | 24 +++++++++++
2 files changed, 66 insertions(+)
create mode 100644 engine/Orbit.Engine.Tests/GameObjectTests.cs
create mode 100644 engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
diff --git a/engine/Orbit.Engine.Tests/GameObjectTests.cs b/engine/Orbit.Engine.Tests/GameObjectTests.cs
new file mode 100644
index 0000000..72bce11
--- /dev/null
+++ b/engine/Orbit.Engine.Tests/GameObjectTests.cs
@@ -0,0 +1,42 @@
+namespace Orbit.Engine.Tests
+
+public class GameObjectTests
+{
+ [Test]
+ public void RenderShouldCallRenderOnChildren()
+ {
+ var parent = new MockGameObject();
+ var child = new MockGameObject();
+
+ parent.Render(null, RectF.Zero);
+
+ parent.RenderCount.Should().Be(1);
+ child.RenderCount.Should().Be(0);
+
+ parent.Add(child);
+
+ parent.Render(null, RectF.Zero);
+
+ parent.RenderCount.Should().Be(2);
+ child.RenderCount.Should().Be(1);
+ }
+
+ [Test]
+ public void UpdateShouldCallUpdateOnChildren()
+ {
+ var parent = new MockGameObject();
+ var child = new MockGameObject();
+
+ parent.Update(16);
+
+ parent.UpdateCount.Should().Be(1);
+ child.UpdateCount.Should().Be(0);
+
+ parent.Add(child);
+
+ parent.Update(16);
+
+ parent.UpdateCount.Should().Be(2);
+ child.UpdateCount.Should().Be(1);
+ }
+}
\ No newline at end of file
diff --git a/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs b/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
new file mode 100644
index 0000000..6897315
--- /dev/null
+++ b/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
@@ -0,0 +1,24 @@
+using Orbit.Engine;
+
+namespace Orbit.Engine.Tests;
+
+public class MockGameObject : GameObject
+{
+ internal int RenderCount { get; private set; }
+
+ internal int UpdateCount { get; private set; }
+
+ public override void Render(ICanvas canvas, RectF dimensions)
+ {
+ base.Render(canvas, dimensions);
+
+ RenderCount++;
+ }
+
+ public override void Update(double millisecondsSinceLastUpdate)
+ {
+ base.Update(millisecondsSinceLastUpdate);
+
+ UpdateCount++;
+ }
+}
\ No newline at end of file
From ebcd4c332b661efb3f37168ef9446a3a5cbb6797 Mon Sep 17 00:00:00 2001
From: Shaun Lawrence <17139988+bijington@users.noreply.github.com>
Date: Sat, 9 Mar 2024 16:47:30 +0000
Subject: [PATCH 2/5] Remove unused code
---
engine/Orbit.Engine/GameObject.cs | 11 +----------
1 file changed, 1 insertion(+), 10 deletions(-)
diff --git a/engine/Orbit.Engine/GameObject.cs b/engine/Orbit.Engine/GameObject.cs
index 78ba7aa..f2aba02 100644
--- a/engine/Orbit.Engine/GameObject.cs
+++ b/engine/Orbit.Engine/GameObject.cs
@@ -10,7 +10,7 @@ namespace Orbit.Engine;
///
/// Base class definition representing an object in a game.
///
-public abstract class GameObject : GameObjectContainer, IGameObject, IDrawable
+public abstract class GameObject : GameObjectContainer, IGameObject
{
private GameScene currentScene;
@@ -32,15 +32,6 @@ public GameScene CurrentScene
}
}
- void IDrawable.Draw(ICanvas canvas, RectF dirtyRect)
- {
- canvas.SaveState();
-
- Render(canvas, dirtyRect);
-
- canvas.RestoreState();
- }
-
///
/// Lifecycle method called to inform this that it has been added to a container and ultimately a game.
///
From ee239d617ef17d765d04df750d6265581af85972 Mon Sep 17 00:00:00 2001
From: Shaun Lawrence <17139988+bijington@users.noreply.github.com>
Date: Sat, 9 Mar 2024 16:50:25 +0000
Subject: [PATCH 3/5] More basic lifecycle tests
---
engine/Orbit.Engine.Tests/GameObjectTests.cs | 30 +++++++++++++++++++
.../Mocks/MockGameObject.cs | 12 ++++++++
2 files changed, 42 insertions(+)
diff --git a/engine/Orbit.Engine.Tests/GameObjectTests.cs b/engine/Orbit.Engine.Tests/GameObjectTests.cs
index 72bce11..9078076 100644
--- a/engine/Orbit.Engine.Tests/GameObjectTests.cs
+++ b/engine/Orbit.Engine.Tests/GameObjectTests.cs
@@ -2,6 +2,36 @@ namespace Orbit.Engine.Tests
public class GameObjectTests
{
+ [Test]
+ public void AddShouldCallOnAddedToNewChild()
+ {
+ var parent = new MockGameObject();
+ var child = new MockGameObject();
+
+ child.OnAddedCount.Should().Be(0);
+
+ parent.Add(child);
+
+ child.OnAddedCount.Should().Be(1);
+ }
+
+ [Test]
+ public void RemoveShouldCallOnRemovedToNewChild()
+ {
+ var parent = new MockGameObject();
+ var child = new MockGameObject();
+
+ child.OnRemovedCount.Should().Be(0);
+
+ parent.Add(child);
+
+ child.OnRemovedCount.Should().Be(0);
+
+ parent.Remove(child);
+
+ child.OnRemovedCount.Should().Be(1);
+ }
+
[Test]
public void RenderShouldCallRenderOnChildren()
{
diff --git a/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs b/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
index 6897315..6c833dc 100644
--- a/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
+++ b/engine/Orbit.Engine.Tests/Mocks/MockGameObject.cs
@@ -4,10 +4,22 @@ namespace Orbit.Engine.Tests;
public class MockGameObject : GameObject
{
+ internal int OnAddedCount { get; private set; }
+
+ internal int OnRemovedCount { get; private set; }
+
internal int RenderCount { get; private set; }
internal int UpdateCount { get; private set; }
+ public override void OnAdded()
+ {
+ }
+
+ public override void OnRemoved()
+ {
+ }
+
public override void Render(ICanvas canvas, RectF dimensions)
{
base.Render(canvas, dimensions);
From 39a643a729fae178f3edf17eb757fe0cb70b8010 Mon Sep 17 00:00:00 2001
From: Shaun Lawrence <17139988+bijington@users.noreply.github.com>
Date: Sat, 9 Mar 2024 16:59:30 +0000
Subject: [PATCH 4/5] Game scene manager lifecycle tests
---
.../GameSceneManagerTests.cs | 52 ++++++++++++++++++-
1 file changed, 51 insertions(+), 1 deletion(-)
diff --git a/engine/Orbit.Engine.Tests/GameSceneManagerTests.cs b/engine/Orbit.Engine.Tests/GameSceneManagerTests.cs
index 29de20c..cd3a369 100644
--- a/engine/Orbit.Engine.Tests/GameSceneManagerTests.cs
+++ b/engine/Orbit.Engine.Tests/GameSceneManagerTests.cs
@@ -1,4 +1,4 @@
-using FluentAssertions;
+using FluentAssertions;
using NUnit.Framework;
using Orbit.Engine.Tests.Mocks;
@@ -31,4 +31,54 @@ public void LoadSceneShouldChangeStateToLoaded()
manager.CurrentScene.Should().Be(sceneInstance);
}
+
+ [Test]
+ public void CompleteShouldMoveStateToCompleted()
+ {
+ GameSceneManager manager = new(new MockDispatcher(), null);
+
+ manager.Complete();
+
+ manager.State.Should().Be(GameState.Completed);
+ }
+
+ [Test]
+ public void GameOverShouldMoveStateToGameOver()
+ {
+ GameSceneManager manager = new(new MockDispatcher(), null);
+
+ manager.GameOver();
+
+ manager.State.Should().Be(GameState.GameOver);
+ }
+
+ [Test]
+ public void PauseShouldMoveStateToPaused()
+ {
+ GameSceneManager manager = new(new MockDispatcher(), null);
+
+ manager.Pause();
+
+ manager.State.Should().Be(GameState.Paused);
+ }
+
+ [Test]
+ public void StartShouldMoveStateToStarted()
+ {
+ GameSceneManager manager = new(new MockDispatcher(), null);
+
+ manager.Start();
+
+ manager.State.Should().Be(GameState.Started);
+ }
+
+ [Test]
+ public void StopShouldMoveStateToLoaded()
+ {
+ GameSceneManager manager = new(new MockDispatcher(), null);
+
+ manager.Stop();
+
+ manager.State.Should().Be(GameState.Loaded);
+ }
}
\ No newline at end of file
From 30aadfd3abc786f871a337638f0218f38df1cf7c Mon Sep 17 00:00:00 2001
From: Shaun Lawrence <17139988+bijington@users.noreply.github.com>
Date: Sat, 9 Mar 2024 19:50:38 +0000
Subject: [PATCH 5/5] Fix compilation errors
---
engine/Orbit.Engine.Tests/GameObjectTests.cs | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/engine/Orbit.Engine.Tests/GameObjectTests.cs b/engine/Orbit.Engine.Tests/GameObjectTests.cs
index 9078076..ada02cf 100644
--- a/engine/Orbit.Engine.Tests/GameObjectTests.cs
+++ b/engine/Orbit.Engine.Tests/GameObjectTests.cs
@@ -1,4 +1,7 @@
-namespace Orbit.Engine.Tests
+using Microsoft.Maui;
+using Microsoft.Maui.Graphics;
+
+namespace Orbit.Engine.Tests;
public class GameObjectTests
{