Skip to content

Commit

Permalink
Remove unused 2D and 3D gaming primitive classes, update Simulator
Browse files Browse the repository at this point in the history
Removed over 20 unused classes related to 2D and 3D gaming primitives from both 'Frank.Libraries.Gaming.Core' and 'Frank.Libraries.Gaming.Primitives' libraries. This helps to reduce bloat and improve focus on currently used functionality.

Updated Simulator in 'Frank.Libraries.Gaming.Testing' to include a getter for total running time and methods to run the simulation for a specified time. `SimulationSpeed` is also included to control the speed of the simulation. Added comments for better understanding of methods.

Added new class 'Viewport' in 'Frank.Libraries.Gaming.Rendering' to manage the visual representation of the game in console with functionalities like setting pixel, clearing viewport, creating border and getting String representation of the viewport.

Removal of unused classes will not affect the existing functionality as there were no dependencies on these classes. Changes in Simulator make it more flexible in handling time bound simulations. The newly added Viewport class brings in a way to visually render the game state in console.
  • Loading branch information
frankhaugen committed Jul 18, 2023
1 parent a8000b2 commit c0a4f52
Show file tree
Hide file tree
Showing 176 changed files with 3,010 additions and 630 deletions.
1 change: 1 addition & 0 deletions src/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageIcon>icon.png</PackageIcon>
<Authors>Frank R. Haugen</Authors>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

<ItemGroup>
Expand Down
17 changes: 17 additions & 0 deletions src/Frank.Libraries.Gaming.Core/Assets/AssetProvider.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using Frank.Libraries.Gaming.Core.FileProviders;
using Frank.Libraries.Gaming.Core.Parsers.ObjParsing;
using Frank.Libraries.Gaming.Primitives;

namespace Frank.Libraries.Gaming.Core.Assets;

public static class PolygonAssetProvider
{
public static Polygon GetTeapot()
{
var provider = new ManifestFileProvider();
var parser = new ObjPolygonParser();
var bytes = provider.GetFile("teapot.obj");
var polygon = parser.GetPolygon(bytes);
return polygon;
}
}
5 changes: 0 additions & 5 deletions src/Frank.Libraries.Gaming.Core/Class1.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Frank.Libraries.Gaming.Core.FileProviders;

public interface I3DFileProvider
{
public Memory<byte> GetFile(string fileName);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
namespace Frank.Libraries.Gaming.Core.FileProviders;

public class ManifestFileProvider : I3DFileProvider
{
public Memory<byte> GetFile(string fileName)
{
var assembly = GetType().Assembly;
var manifestResourceNames = assembly.GetManifestResourceNames();
var existingResourceName = manifestResourceNames.FirstOrDefault(x => x.EndsWith("teapot.obj", StringComparison.InvariantCultureIgnoreCase));
using var existingResource = assembly.GetManifestResourceStream(existingResourceName!);
var memoryStream = new MemoryStream();
existingResource!.CopyTo(memoryStream);
var bytes = memoryStream.ToArray();
return bytes;
}
}
13 changes: 10 additions & 3 deletions src/Frank.Libraries.Gaming.Core/Frank.Libraries.Gaming.Core.csproj
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>


<ItemGroup>
<ProjectReference Include="..\Frank.Libraries.Gaming.Physics\Frank.Libraries.Gaming.Physics.csproj" />
<ProjectReference Include="..\Frank.Libraries.Gaming.Primitives\Frank.Libraries.Gaming.Primitives\Frank.Libraries.Gaming.Primitives.csproj" />
<ProjectReference Include="..\Frank.Libraries.Gaming.Rendering\Frank.Libraries.Gaming.Rendering.csproj" />
</ItemGroup>

<ItemGroup>
<EmbeddedResource Include="Assets\*" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
</Project>
39 changes: 39 additions & 0 deletions src/Frank.Libraries.Gaming.Core/GameEngine.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using Frank.Libraries.Gaming.Primitives;
using Frank.Libraries.Gaming.Rendering;

namespace Frank.Libraries.Gaming.Core;

public class GameEngine
{
private IRenderer _renderer;

public bool IsInitialized { get; private set; } = false;

public SceneManager SceneManager { get; } = new();

public Scene? CurrentScene => SceneManager.CurrentScene;

public void Initialize(IRenderer renderer)
{
if (CurrentScene is null)
throw new Exception("No scene has been set.");

_renderer = renderer;

IsInitialized = true;
}

public void Update(UpdateArgs args)
{

}

public void Draw()
{
if (CurrentScene is null)
return;
_renderer.Render(CurrentScene);
}
}

public readonly record struct UpdateArgs(TimeSpan ElapsedTime, TimeSpan TotalTime);
8 changes: 8 additions & 0 deletions src/Frank.Libraries.Gaming.Core/Parsers/IPolygonParser.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
using Frank.Libraries.Gaming.Primitives;

namespace Frank.Libraries.Gaming.Core.Parsers;

public interface IPolygonParser
{
Polygon GetPolygon(Memory<byte> bytes);
}
25 changes: 25 additions & 0 deletions src/Frank.Libraries.Gaming.Core/Parsers/ObjParsing/ObjHelper.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using System.Numerics;
using System.Text;

namespace Frank.Libraries.Gaming.Core.Parsers.ObjParsing;

internal static class ObjHelper
{
public static ObjPolygon GetPolygon(Memory<byte> bytes)
{
var polygon = new ObjPolygon();
var lines = Encoding.UTF8.GetString(bytes.ToArray()).Split('\n');
foreach (var line in lines)
{
var parts = line.Split(' ');
switch (parts[0])
{
case "v":
polygon.Vertices.Add(new Vector3(float.Parse(parts[1]), float.Parse(parts[2]), float.Parse(parts[3])));
break;
}
}

return polygon;
}
}
12 changes: 12 additions & 0 deletions src/Frank.Libraries.Gaming.Core/Parsers/ObjParsing/ObjPolygon.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Numerics;
using Frank.Libraries.Gaming.Primitives;

namespace Frank.Libraries.Gaming.Core.Parsers.ObjParsing;

internal class ObjPolygon
{
public List<Vector3> Vertices { get; } = new();
public List<Vector2> Uvs { get; } = new();
public List<Vector3> Normals { get; } = new();
public List<Face> Faces { get; } = new();
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using Frank.Libraries.Gaming.Primitives;

namespace Frank.Libraries.Gaming.Core.Parsers.ObjParsing;

public class ObjPolygonParser : IPolygonParser
{
public Polygon GetPolygon(Memory<byte> bytes)
{
var objPolygon = ObjHelper.GetPolygon(bytes);
var polygon = new Polygon(objPolygon.Vertices.ToArray());
return polygon;
}
}
22 changes: 22 additions & 0 deletions src/Frank.Libraries.Gaming.Core/SceneManager.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using Frank.Libraries.Gaming.Primitives;

namespace Frank.Libraries.Gaming.Core;

public class SceneManager
{
public List<Scene> MenuScenes { get; } = new();
public List<Scene> GameScenes { get; } = new();

public Scene? CurrentScene { get; private set; }

public void SelectScene(Guid id)
{
CurrentScene = MenuScenes.FirstOrDefault(x => x.Id == id) ?? GameScenes.FirstOrDefault(x => x.Id == id);
}
}

public enum SceneType
{
Menu,
Game
}
19 changes: 14 additions & 5 deletions src/Frank.Libraries.Gaming.Engines.MonoEngine/Ai/PongAi.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Ai;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Ai;

public class PongAi
{
Expand All @@ -26,9 +26,18 @@ public void Update()

private void MovePaddle(Vector2 targetPosition, Vector2 paddlePosition)
{
if (targetPosition.Y > paddlePosition.Y)
var tolerance = 5;
var heightDifference = Distance(new Vector3(0,targetPosition.Y,0), new Vector3(0, paddlePosition.Y,0));
if (targetPosition.Y > paddlePosition.Y && heightDifference > tolerance)
_paddle.MoveUp(Speed);
else if (targetPosition.Y < paddlePosition.Y)
else if (targetPosition.Y < paddlePosition.Y && heightDifference > tolerance)
_paddle.MoveDown(Speed);
}

private static float Distance(Vector3 pointA, Vector3 pointB)
{
return (float)Math.Sqrt(Math.Pow((pointB.X - pointA.X), 2)
+ Math.Pow((pointB.Y - pointA.Y), 2)
+ Math.Pow((pointB.Z - pointA.Z), 2));
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoEngine.Collisions;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Premades;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Collisions;

public interface ICollidable
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Collisions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Collisions;

public interface IRaycastable
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.Rendering;
using Frank.Libraries.Gaming.Engines.MonoEngine.Rendering;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class CameraExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class EdgeExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class GameObjectExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static partial class GraphicsDeviceExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static partial class GraphicsDeviceExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class NumericExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class PolygonExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class PrimitiveTypeExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class QuaternionConverter
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class RectangleExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Frank.Libraries.Gaming.Engines.MonoGameEngine.GameObjects;
using Frank.Libraries.Gaming.Engines.MonoEngine.GameObjects;
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class ShapeExtensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class Vector2Extensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using Microsoft.Xna.Framework;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class Vector3Extensions
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace Frank.Libraries.Gaming.Engines.MonoGameEngine.Extensions;
namespace Frank.Libraries.Gaming.Engines.MonoEngine.Extensions;

public static class ViewportExtensions
{
Expand Down
Loading

0 comments on commit c0a4f52

Please sign in to comment.