Skip to content

Commit

Permalink
Merge pull request #95 from benpollarduk/map-functions
Browse files Browse the repository at this point in the history
Map functions
  • Loading branch information
benpollarduk authored Nov 15, 2024
2 parents 7341d8f + aee6067 commit 96312a0
Show file tree
Hide file tree
Showing 100 changed files with 1,499 additions and 572 deletions.
2 changes: 1 addition & 1 deletion .nuget/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ NetAF provides frames for rendering the various game screens. These are fully ex
### Maps
Maps are automatically generated for regions and rooms, and can be viewed with the **map** command:

Maps display visited rooms, exits, player position, if an item is in a room, lower floors and more.
Maps display visited rooms, exits, player position, if an item is in a room, lower floors and more. Maps support panning and switching between vertical levels.

### Persistence
Game state can be serialized allowing progress to be saved to file and restored later.
Expand Down
2 changes: 1 addition & 1 deletion NetAF.Examples/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ static Overworld overworldCreator()
_ = int.TryParse(a[2], out z);
}

var result = g.Overworld.CurrentRegion.JumpToRoom(x, y, z);
var result = g.Overworld.CurrentRegion.JumpToRoom(new Point3D(x, y, z));

if (!result)
return new(ReactionResult.Error, $"Failed to jump to {x} {y} {z}.");
Expand Down
33 changes: 17 additions & 16 deletions NetAF.Tests/Assets/Locations/Matrix_Tests.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
using NetAF.Assets.Locations;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Collections.Generic;
using NetAF.Assets;

namespace NetAF.Tests.Assets.Locations
{
Expand Down Expand Up @@ -42,10 +43,10 @@ public void Given1RoomWide_WhenGetWidth_Then1()
{
List<RoomPosition> roomPositions =
[
new(new(string.Empty, string.Empty), 0, 0, 0),
new(new(string.Empty, string.Empty), 0, 1, 0),
new(new(string.Empty, string.Empty), 0, 1, 1),
new(new(string.Empty, string.Empty), 0, 1, 2)
new(new(string.Empty, string.Empty), new Point3D(0, 0, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 1)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 2))
];
var matrix = new Matrix([.. roomPositions]);

Expand All @@ -59,10 +60,10 @@ public void Given2RoomsHigh_WhenGetHeight_Then2()
{
List<RoomPosition> roomPositions =
[
new(new(string.Empty, string.Empty), 0, 0, 0),
new(new(string.Empty, string.Empty), 0, 1, 0),
new(new(string.Empty, string.Empty), 0, 1, 1),
new(new(string.Empty, string.Empty), 0, 1, 2)
new(new(string.Empty, string.Empty), new Point3D(0, 0, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 1)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 2))
];
var matrix = new Matrix([.. roomPositions]);

Expand All @@ -76,10 +77,10 @@ public void Given3RoomsDeep_WhenGetDepth_Then3()
{
List<RoomPosition> roomPositions =
[
new(new(string.Empty, string.Empty), 0, 0, 0),
new(new(string.Empty, string.Empty), 0, 1, 0),
new(new(string.Empty, string.Empty), 0, 1, 1),
new(new(string.Empty, string.Empty), 0, 1, 2)
new(new(string.Empty, string.Empty), new Point3D(0, 0, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 1)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 2))
];
var matrix = new Matrix([.. roomPositions]);

Expand All @@ -93,10 +94,10 @@ public void Given4Rooms_WhenToRooms_Then4Rooms()
{
List<RoomPosition> roomPositions =
[
new(new(string.Empty, string.Empty), 0, 0, 0),
new(new(string.Empty, string.Empty), 0, 1, 0),
new(new(string.Empty, string.Empty), 0, 1, 1),
new(new(string.Empty, string.Empty), 0, 1, 2)
new(new(string.Empty, string.Empty), new Point3D(0, 0, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 0)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 1)),
new(new(string.Empty, string.Empty), new Point3D(0, 1, 2))
];
var matrix = new Matrix([.. roomPositions]);

Expand Down
34 changes: 17 additions & 17 deletions NetAF.Tests/Assets/Locations/Region_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -265,37 +265,37 @@ public void Given2LockedDoors_WhenUnlockDoorPair_ThenBothDoorsUnlocked()
[TestMethod]
public void GivenNorth_WhenNextPosition_ThenXTheSameYIncrements()
{
Region.NextPosition(0, 0, 0, Direction.North, out var x, out var y, out _);
Region.NextPosition(new Point3D(0, 0, 0), Direction.North, out var next);

Assert.AreEqual(0, x);
Assert.AreEqual(1, y);
Assert.AreEqual(0, next.X);
Assert.AreEqual(1, next.Y);
}

[TestMethod]
public void GivenSouth_WhenNextPosition_ThenXTheSameYDecrements()
{
Region.NextPosition(0, 0, 0, Direction.South, out var x, out var y, out _);
Region.NextPosition(new Point3D(0, 0, 0), Direction.South, out var next);

Assert.AreEqual(0, x);
Assert.AreEqual(-1, y);
Assert.AreEqual(0, next.X);
Assert.AreEqual(-1, next.Y);
}

[TestMethod]
public void GivenWest_WhenNextPosition_ThenXDecrementsYTheSame()
{
Region.NextPosition(0, 0, 0, Direction.West, out var x, out var y, out _);
Region.NextPosition(new Point3D(0, 0, 0), Direction.West, out var next);

Assert.AreEqual(-1, x);
Assert.AreEqual(0, y);
Assert.AreEqual(-1, next.X);
Assert.AreEqual(0, next.Y);
}

[TestMethod]
public void GivenEast_WhenNextPosition_ThenXIncrementsYTheSame()
{
Region.NextPosition(0, 0, 0, Direction.East, out var x, out var y, out _);
Region.NextPosition(new Point3D(0, 0, 0), Direction.East, out var next);

Assert.AreEqual(1, x);
Assert.AreEqual(0, y);
Assert.AreEqual(1, next.X);
Assert.AreEqual(0, next.Y);
}

[TestMethod]
Expand Down Expand Up @@ -342,9 +342,9 @@ public void GivenRoomAtX0Y0Z0_WhenNextPosition_ThenX0Y0Z0()

var result = region.GetPositionOfRoom(room);

Assert.AreEqual(0, result.X);
Assert.AreEqual(0, result.Y);
Assert.AreEqual(0, result.Z);
Assert.AreEqual(0, result.Position.X);
Assert.AreEqual(0, result.Position.Y);
Assert.AreEqual(0, result.Position.Z);
}

[TestMethod]
Expand Down Expand Up @@ -403,7 +403,7 @@ public void GivenInvalidCoordinates_WhenJumpToRoom_ThenReturnFalse()
region.AddRoom(room, 0, 0, 0);
region.AddRoom(room, 1, 0, 0);

var result = region.JumpToRoom(0, 100, 0);
var result = region.JumpToRoom(new Point3D(0, 100, 0));

Assert.IsFalse(result);
}
Expand All @@ -418,7 +418,7 @@ public void GivenValidCoordinates_WhenJumpToRoom_ThenReturnTrue()
region.AddRoom(room2, 1, 0, 0);
region.SetStartRoom(room1);

var result = region.JumpToRoom(1,0,0);
var result = region.JumpToRoom(new Point3D(1, 0, 0));

Assert.IsTrue(result);
}
Expand Down
42 changes: 42 additions & 0 deletions NetAF.Tests/Assets/Point2D_Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
using NetAF.Assets;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace NetAF.Tests.Assets
{
[TestClass]
public class Point2D_Tests
{
[TestMethod]
public void Given2PointsThatAreTheSameInXAndY_WhenEquals_ThenReturnTrue()
{
var one = new Point2D(0, 0);
var two = new Point2D(0, 0);

var result = one.Equals(two);

Assert.IsTrue(result);
}

[TestMethod]
public void Given2PointsThatAreDifferentInX_WhenEquals_ThenReturnTrue()
{
var one = new Point2D(0, 0);
var two = new Point2D(1, 0);

var result = one.Equals(two);

Assert.IsFalse(result);
}

[TestMethod]
public void Given2PointsThatAreDifferentInY_WhenEquals_ThenReturnTrue()
{
var one = new Point2D(0, 0);
var two = new Point2D(0, 1);

var result = one.Equals(two);

Assert.IsFalse(result);
}
}
}
53 changes: 53 additions & 0 deletions NetAF.Tests/Assets/Point3D_Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
using NetAF.Assets;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace NetAF.Tests.Assets
{
[TestClass]
public class Point3D_Tests
{
[TestMethod]
public void Given2PointsThatAreTheSameInXAndY_WhenEquals_ThenReturnTrue()
{
var one = new Point3D(0, 0, 0);
var two = new Point3D(0, 0, 0);

var result = one.Equals(two);

Assert.IsTrue(result);
}

[TestMethod]
public void Given2PointsThatAreDifferentInX_WhenEquals_ThenReturnTrue()
{
var one = new Point3D(0, 0, 0);
var two = new Point3D(1, 0, 0);

var result = one.Equals(two);

Assert.IsFalse(result);
}

[TestMethod]
public void Given2PointsThatAreDifferentInY_WhenEquals_ThenReturnTrue()
{
var one = new Point3D(0, 0, 0);
var two = new Point3D(0, 1, 0);

var result = one.Equals(two);

Assert.IsFalse(result);
}

[TestMethod]
public void Given2PointsThatAreDifferentInZ_WhenEquals_ThenReturnTrue()
{
var one = new Point3D(0, 0, 0);
var two = new Point3D(0, 0, 1);

var result = one.Equals(two);

Assert.IsFalse(result);
}
}
}
72 changes: 72 additions & 0 deletions NetAF.Tests/Commands/RegionMap/PanReset_Tests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
using NetAF.Assets.Interaction;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NetAF.Logic;
using NetAF.Commands.RegionMap;
using NetAF.Logic.Modes;
using NetAF.Assets.Characters;
using NetAF.Assets.Locations;
using NetAF.Utilities;
using NetAF.Assets;

namespace NetAF.Tests.Commands.RegionMap
{
[TestClass]
public class PanReset_Tests
{
[TestMethod]
public void GivenNullGame_WhenInvoke_ThenError()
{
var command = new PanReset();

var result = command.Invoke(null);

Assert.AreEqual(ReactionResult.Error, result.Result);
}

[TestMethod]
public void GivenValidGame_WhenInvokeAndNotInRegionMapMode_ThenError()
{
var game = Game.Create(new GameInfo(string.Empty, string.Empty, string.Empty), string.Empty, AssetGenerator.Retained(null, null), GameEndConditions.NoEnd, TestGameConfiguration.Default).Invoke();
var command = new PanReset();

var result = command.Invoke(game);

Assert.AreEqual(ReactionResult.Error, result.Result);
}

[TestMethod]
public void GivenValidGameAndCantResetPan_WhenInvokeAndInRegionMapMode_ThenSilent()
{
RegionMaker regionMaker = new(string.Empty, string.Empty);
Room room = new(string.Empty, string.Empty);
regionMaker[0, 0, 0] = room;
OverworldMaker overworldMaker = new(string.Empty, string.Empty, regionMaker);
var game = Game.Create(new GameInfo(string.Empty, string.Empty, string.Empty), string.Empty, AssetGenerator.Retained(overworldMaker.Make(), new PlayableCharacter(string.Empty, string.Empty)), GameEndConditions.NoEnd, TestGameConfiguration.Default).Invoke();
var command = new PanReset();
game.ChangeMode(new RegionMapMode(RegionMapMode.Player));

var result = command.Invoke(game);

Assert.AreEqual(ReactionResult.Silent, result.Result);
}

[TestMethod]
public void GivenValidGameAndCanPan_WhenInvokeAndInRegionMapMode_ThenSilent()
{
RegionMaker regionMaker = new(string.Empty, string.Empty);
Room room = new(string.Empty, string.Empty);
Room room2 = new(string.Empty, string.Empty);
regionMaker[0, 0, 0] = room;
regionMaker[0, 0, 1] = room2;
OverworldMaker overworldMaker = new(string.Empty, string.Empty, regionMaker);
var game = Game.Create(new GameInfo(string.Empty, string.Empty, string.Empty), string.Empty, AssetGenerator.Retained(overworldMaker.Make(), new PlayableCharacter(string.Empty, string.Empty)), GameEndConditions.NoEnd, TestGameConfiguration.Default).Invoke();
game.Overworld.CurrentRegion.JumpToRoom(new Point3D(0, 0, 1));
var command = new PanReset();
game.ChangeMode(new RegionMapMode(RegionMapMode.Player));

var result = command.Invoke(game);

Assert.AreEqual(ReactionResult.Silent, result.Result);
}
}
}
Loading

0 comments on commit 96312a0

Please sign in to comment.