Skip to content

Commit

Permalink
Removed NLog dependencies, architecture changes, implemented global e…
Browse files Browse the repository at this point in the history
…vent handler system.
  • Loading branch information
ChrisKoebke committed May 8, 2014
1 parent b2078ea commit 3a644ab
Show file tree
Hide file tree
Showing 79 changed files with 912 additions and 317 deletions.
Expand Up @@ -97,6 +97,7 @@ public IEnumerable<IEffectProcessor> CreateEffectProcessors()
yield return new TintEffectProcessor();
yield return new TranslateEffectProcessor();
yield return new TranslateToEffectProcessor();
yield return new ScaleEffectProcessor();
}
#endregion
}
Expand Down
4 changes: 2 additions & 2 deletions GameLibrary/Common/ApplicationExceptionHandler.cs
Expand Up @@ -2,9 +2,9 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Events;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Common
{
Expand Down Expand Up @@ -44,7 +44,7 @@ private void HandleException(object sender, UnhandledExceptionEventArgs e)

if (exception != this._lastException)
{
logger.Error(exception);
logger.ErrorException("Application exception: ", exception);
this._lastException = exception;
}
}
Expand Down
26 changes: 25 additions & 1 deletion GameLibrary/Components/ComponentCatalog.cs
@@ -1,12 +1,13 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using NLog;
using Xemio.GameLibrary.Common;
using Xemio.GameLibrary.Common.Collections;
using Xemio.GameLibrary.Components.Attributes;
using Xemio.GameLibrary.Logging;
using Xemio.GameLibrary.Plugins;

namespace Xemio.GameLibrary.Components
Expand Down Expand Up @@ -199,5 +200,28 @@ public void Remove(IComponent component)
return component;
}
#endregion

#region Implementation of IEnumerable
/// <summary>
/// Returns an enumerator that iterates through the collection.
/// </summary>
/// <returns>
/// A <see cref="T:System.Collections.Generic.IEnumerator`1"/> that can be used to iterate through the collection.
/// </returns>
public IEnumerator<IComponent> GetEnumerator()
{
return this.Components.GetEnumerator();
}
/// <summary>
/// Returns an enumerator that iterates through a collection.
/// </summary>
/// <returns>
/// An <see cref="T:System.Collections.IEnumerator"/> object that can be used to iterate through the collection.
/// </returns>
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
#endregion
}
}
2 changes: 1 addition & 1 deletion GameLibrary/Components/IComponentCatalog.cs
Expand Up @@ -7,7 +7,7 @@

namespace Xemio.GameLibrary.Components
{
public interface IComponentCatalog : ICatalog<IComponent>
public interface IComponentCatalog : ICatalog<IComponent>, IEnumerable<IComponent>
{
/// <summary>
/// Constructs all loaded components.
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Config/Installation/GraphicsInstaller.cs
@@ -1,8 +1,8 @@
using System;
using NLog;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Config.Dependencies;
using Xemio.GameLibrary.Content;
using Xemio.GameLibrary.Logging;
using Xemio.GameLibrary.Math;
using Xemio.GameLibrary.Plugins.Implementations;
using Xemio.GameLibrary.Rendering;
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Config/Installation/SceneInstaller.cs
@@ -1,7 +1,7 @@
using System.Collections.Generic;
using NLog;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Game.Scenes;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Config.Installation
{
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Config/Validation/ValidationManager.cs
Expand Up @@ -3,8 +3,8 @@
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using NLog;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Config.Validation
{
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Content/ContentManager.cs
Expand Up @@ -5,7 +5,6 @@
using System.Reflection;
using System.Text;
using System.Windows.Forms;
using NLog;
using Xemio.GameLibrary.Common;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Components.Attributes;
Expand All @@ -14,6 +13,7 @@
using Xemio.GameLibrary.Content.FileSystem;
using Xemio.GameLibrary.Content.Formats;
using Xemio.GameLibrary.Content.Metadata;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Content
{
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Content/ContentTracker.cs
Expand Up @@ -3,8 +3,8 @@
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;
using Xemio.GameLibrary.Content.FileSystem;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Content
{
Expand Down
Expand Up @@ -4,7 +4,7 @@
using System.IO.Compression;
using System.Linq;
using System.Text;
using NLog;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Content.FileSystem.Compression
{
Expand Down
6 changes: 3 additions & 3 deletions GameLibrary/Content/Formats/Xml/XmlReader.cs
Expand Up @@ -144,10 +144,10 @@ public byte ReadByte(string tag)
/// <param name="tag">The tag.</param>
public byte[] ReadBytes(string tag)
{
var base64 = (string)_currentElement.Next(tag).Element;
byte[] data = Convert.FromBase64String(base64);
var data = (string)_currentElement.Next(tag).Element;
string[] elements = data.Split(',');

return data;
return elements.Select(byte.Parse).ToArray();
}
/// <summary>
/// Reads a character value.
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Content/Formats/Xml/XmlWriter.cs
Expand Up @@ -159,7 +159,7 @@ public void WriteByte(string tag, byte value)
/// <param name="value">The value.</param>
public void WriteBytes(string tag, byte[] value)
{
this._currentElement.Add(new XElement(tag, Convert.ToBase64String(value)));
this._currentElement.Add(new XElement(tag, string.Join(",", value)));
}
/// <summary>
/// Writes the specified character value.
Expand Down
2 changes: 1 addition & 1 deletion GameLibrary/Content/SerializationManager.cs
Expand Up @@ -3,7 +3,6 @@
using System.Linq;
using System.Text;
using System.IO;
using NLog;
using Xemio.GameLibrary.Common.Link;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Common;
Expand All @@ -16,6 +15,7 @@
using Xemio.GameLibrary.Content.Serialization;
using Xemio.GameLibrary.Events;
using Xemio.GameLibrary.Content.FileSystem;
using Xemio.GameLibrary.Logging;
using Xemio.GameLibrary.Plugins.Implementations;

namespace Xemio.GameLibrary.Content
Expand Down
4 changes: 2 additions & 2 deletions GameLibrary/Entities/Components/EntityComponent.cs
@@ -1,11 +1,11 @@
using Xemio.GameLibrary.Content.Layouts.Generation;
using Xemio.GameLibrary.Game;
using Xemio.GameLibrary.Game.Handlers;
using Xemio.GameLibrary.Game.Subscribers;
using Xemio.GameLibrary.Game.Timing;

namespace Xemio.GameLibrary.Entities.Components
{
public abstract class EntityComponent : IRenderHandler, ITickHandler
public abstract class EntityComponent : IRenderSubscriber, ITickSubscriber
{
#region Properties
/// <summary>
Expand Down
3 changes: 1 addition & 2 deletions GameLibrary/Entities/Components/TransformComponent.cs
Expand Up @@ -2,9 +2,8 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NLog;
using Xemio.GameLibrary.Content.Layouts.Generation;
using Xemio.GameLibrary.Logging;
using Xemio.GameLibrary.Math;

namespace Xemio.GameLibrary.Entities.Components
Expand Down
17 changes: 14 additions & 3 deletions GameLibrary/Entities/Entity.cs
@@ -1,22 +1,23 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.IO;
using NLog;
using Xemio.GameLibrary.Content;
using Xemio.GameLibrary.Content.Layouts.Generation;
using Xemio.GameLibrary.Entities.Components;
using Xemio.GameLibrary.Entities.Events;
using Xemio.GameLibrary.Events;
using Xemio.GameLibrary.Game.Handlers;
using Xemio.GameLibrary.Events.Handles;
using Xemio.GameLibrary.Game.Subscribers;
using Xemio.GameLibrary.Math;
using Xemio.GameLibrary.Common;

namespace Xemio.GameLibrary.Entities
{
public class Entity : ITickHandler, IRenderHandler
public class Entity : ITickSubscriber, IRenderSubscriber, IHandleContainer
{
#region Constructors
/// <summary>
Expand Down Expand Up @@ -145,5 +146,15 @@ public void Tick(float elapsed)
}
}
#endregion

#region Implementation of IHandleContainer
/// <summary>
/// Gets an instance list containing handle implementations.
/// </summary>
IEnumerable IHandleContainer.Children
{
get { return this.Components; }
}
#endregion
}
}
17 changes: 14 additions & 3 deletions GameLibrary/Entities/EntityEnvironment.cs
Expand Up @@ -4,15 +4,16 @@
using System.Text;
using System.IO;
using System.Collections;
using NLog;
using Xemio.GameLibrary.Common.Collections;
using Xemio.GameLibrary.Events.Handles;
using Xemio.GameLibrary.Game;
using Xemio.GameLibrary.Game.Handlers;
using Xemio.GameLibrary.Game.Subscribers;
using Xemio.GameLibrary.Game.Timing;
using Xemio.GameLibrary.Logging;

namespace Xemio.GameLibrary.Entities
{
public class EntityEnvironment : IEnumerable<Entity>, ITickHandler, IRenderHandler
public class EntityEnvironment : IEnumerable<Entity>, ITickSubscriber, IRenderSubscriber, IHandleContainer
{
#region Logger
private static readonly Logger logger = LogManager.GetCurrentClassLogger();
Expand Down Expand Up @@ -211,5 +212,15 @@ IEnumerator IEnumerable.GetEnumerator()
return GetEnumerator();
}
#endregion

#region Implementation of IHandleContainer
/// <summary>
/// Gets an instance list containing handle implementations.
/// </summary>
IEnumerable IHandleContainer.Children
{
get { return this.Entities; }
}
#endregion
}
}
4 changes: 2 additions & 2 deletions GameLibrary/Entities/EntitySystem.cs
Expand Up @@ -4,11 +4,11 @@
using System.Linq;
using System.Text;
using Xemio.GameLibrary.Entities.Components;
using Xemio.GameLibrary.Game.Handlers;
using Xemio.GameLibrary.Game.Subscribers;

namespace Xemio.GameLibrary.Entities
{
public abstract class EntitySystem : ITickHandler
public abstract class EntitySystem : ITickSubscriber
{
#region Constructors
/// <summary>
Expand Down
2 changes: 2 additions & 0 deletions GameLibrary/Events/EventManager.cs
Expand Up @@ -8,6 +8,7 @@
using Xemio.GameLibrary.Common;
using Xemio.GameLibrary.Common.Collections;
using Xemio.GameLibrary.Components;
using Xemio.GameLibrary.Events.Handles;
using Xemio.GameLibrary.Plugins;
using Xemio.GameLibrary.Plugins.Contexts;

Expand All @@ -29,6 +30,7 @@ public EventManager()
public EventManager(IAssemblyContext context)
{
this.LoadEventsFrom(context);
this.Subscribe(new HandleObserver());
}
#endregion

Expand Down
44 changes: 44 additions & 0 deletions GameLibrary/Events/Handles/Handle.cs
@@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using Xemio.GameLibrary.Common;

namespace Xemio.GameLibrary.Events.Handles
{
public static class Handle
{
#region Methods
/// <summary>
/// Sends the specified event to the receiver.
/// </summary>
/// <param name="receiver">The receiver.</param>
/// <param name="evt">The event.</param>
public static void Send(object receiver, IEvent evt)
{
var interfaces = Reflection.GetInterfaces(receiver.GetType())
.Where(i => typeof(IHandle).IsAssignableFrom(i) && i.IsGenericType);

foreach (Type interfaceType in interfaces)
{
Type genericType = Reflection.GetGenericArguments(interfaceType).First();
if (genericType.IsInstanceOfType(evt))
{
MethodInfo method = interfaceType.GetMethod("Handle");
method.Invoke(receiver, new object[] { evt });
}
}

var container = receiver as IHandleContainer;
if (container != null)
{
foreach (object child in container.Children)
{
Handle.Send(child, evt);
}
}
}
#endregion
}
}

0 comments on commit 3a644ab

Please sign in to comment.