diff --git a/ANX.Framework/ANX.Framework.csproj b/ANX.Framework/ANX.Framework.csproj index d1f0822d..181fafcd 100644 --- a/ANX.Framework/ANX.Framework.csproj +++ b/ANX.Framework/ANX.Framework.csproj @@ -93,6 +93,7 @@ + @@ -112,7 +113,9 @@ + + diff --git a/ANX.Framework/Content/ResourceContentManager.cs b/ANX.Framework/Content/ResourceContentManager.cs new file mode 100644 index 00000000..85a5a57c --- /dev/null +++ b/ANX.Framework/Content/ResourceContentManager.cs @@ -0,0 +1,87 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using System.IO; +using System.Resources; +using System.IO; + +#endregion // Using Statements + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework.Content +{ + public class ResourceContentManager : ContentManager + { + private ResourceManager resource; + + public ResourceContentManager(IServiceProvider servicesProvider, ResourceManager resource) + : base(servicesProvider) + { + if (resource == null) + { + throw new ArgumentNullException("resource"); + } + this.resource = resource; + } + + protected override System.IO.Stream OpenStream(string assetName) + { + object obj = this.resource.GetObject(assetName); + if (obj == null) + { + throw new ContentLoadException("Resource not found"); + } + if (!(obj is byte[])) + { + throw new ContentLoadException("Resource is not in binary format"); + } + return new MemoryStream(obj as byte[]); + } + } +} diff --git a/ANX.Framework/DrawableGameComponent.cs b/ANX.Framework/DrawableGameComponent.cs new file mode 100644 index 00000000..f0f9d2db --- /dev/null +++ b/ANX.Framework/DrawableGameComponent.cs @@ -0,0 +1,182 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using ANX.Framework.Graphics; + +#endregion // Using Statements + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework +{ + public class DrawableGameComponent : GameComponent, IDrawable + { + private bool isInitialized; + private IGraphicsDeviceService device; + + public GraphicsDevice GraphicsDevice + { + get + { + if (this.device == null) + { + throw new InvalidOperationException("Component is not initialized"); + } + return this.device.GraphicsDevice; + } + } + + private int drawOrder; + + public int DrawOrder + { + get { return drawOrder; } + set + { + if (drawOrder != value) + { + drawOrder = value; + OnDrawOrderChanged(this, EventArgs.Empty); + } + } + } + + private bool visible = true; + + public bool Visible + { + get { return visible; } + set + { + if (visible != value) + { + visible = value; + OnVisibleChanged(this, EventArgs.Empty); + } + } + } + + public event EventHandler DrawOrderChanged; + + public event EventHandler VisibleChanged; + + public DrawableGameComponent(Game game) + : base(game) + { + } + + protected virtual void OnDrawOrderChanged(object sender, EventArgs arg) + { + if (DrawOrderChanged != null) + { + DrawOrderChanged(sender, arg); + } + } + + protected virtual void OnVisibleChanged(object sender, EventArgs arg) + { + if (VisibleChanged != null) + { + VisibleChanged(sender, arg); + } + } + + public override void Initialize() + { + base.Initialize(); + if (!isInitialized) + { + this.device = base.Game.Services.GetService(typeof(IGraphicsDeviceService)) as IGraphicsDeviceService; + if (this.device == null) + { + throw new InvalidOperationException("Service not found: IGraphicsDeviceService"); + } + this.device.DeviceCreated += OnDeviceCreated; + this.device.DeviceDisposing += OnDeviceDisposing; + } + isInitialized = true; + } + + protected override void Dispose(bool disposing) + { + if (disposing) + { + this.UnloadContent(); + if (this.device != null) + { + this.device.DeviceCreated -= OnDeviceCreated; + this.device.DeviceDisposing -= OnDeviceDisposing; + } + } + base.Dispose(disposing); + } + + protected virtual void LoadContent() + { + } + + protected virtual void UnloadContent() + { + } + + public void Draw(GameTime gameTime) + { + + } + + private void OnDeviceCreated(object sender, EventArgs arg) + { + this.LoadContent(); + } + + private void OnDeviceDisposing(object sender, EventArgs arg) + { + this.UnloadContent(); + } + } +} diff --git a/ANX.Framework/GameComponent.cs b/ANX.Framework/GameComponent.cs new file mode 100644 index 00000000..e6ab7ccf --- /dev/null +++ b/ANX.Framework/GameComponent.cs @@ -0,0 +1,157 @@ +#region Using Statements +using System; +using System.Collections.Generic; +using System.IO; + +#endregion // Using Statements + +#region License + +// +// This file is part of the ANX.Framework created by the "ANX.Framework developer group". +// +// This file is released under the Ms-PL license. +// +// +// +// Microsoft Public License (Ms-PL) +// +// This license governs use of the accompanying software. If you use the software, you accept this license. +// If you do not accept the license, do not use the software. +// +// 1.Definitions +// The terms "reproduce," "reproduction," "derivative works," and "distribution" have the same meaning +// here as under U.S. copyright law. +// A "contribution" is the original software, or any additions or changes to the software. +// A "contributor" is any person that distributes its contribution under this license. +// "Licensed patents" are a contributor's patent claims that read directly on its contribution. +// +// 2.Grant of Rights +// (A) Copyright Grant- Subject to the terms of this license, including the license conditions and limitations +// in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to +// reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution +// or any derivative works that you create. +// (B) Patent Grant- Subject to the terms of this license, including the license conditions and limitations in +// section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed +// patents to make, have made, use, sell, offer for sale, import, and/or otherwise dispose of its contribution +// in the software or derivative works of the contribution in the software. +// +// 3.Conditions and Limitations +// (A) No Trademark License- This license does not grant you rights to use any contributors' name, logo, or trademarks. +// (B) If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your +// patent license from such contributor to the software ends automatically. +// (C) If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution +// notices that are present in the software. +// (D) If you distribute any portion of the software in source code form, you may do so only under this license by including +// a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or +// object code form, you may only do so under a license that complies with this license. +// (E) The software is licensed "as-is." You bear the risk of using it. The contributors give no express warranties, guarantees, +// or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the +// extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a +// particular purpose and non-infringement. + +#endregion // License + +namespace ANX.Framework +{ + public class GameComponent : IGameComponent, IUpdateable, IDisposable + { + private bool enabled = true; + + public bool Enabled + { + get { return enabled; } + set + { + if (enabled != value) + { + enabled = value; + OnEnabledChanged(this, EventArgs.Empty); + } + } + } + + private int updateOrder; + + public int UpdateOrder + { + get { return updateOrder; } + set + { + if (updateOrder != value) + { + updateOrder = value; + OnUpdateOrderChanged(this, EventArgs.Empty); + } + } + } + + private Game game; + + public Game Game + { + get { return game; } + } + + public event EventHandler EnabledChanged; + + public event EventHandler UpdateOrderChanged; + + public event EventHandler Disposed; + + public GameComponent(Game game) + { + this.game = game; + } + + protected virtual void OnEnabledChanged(object sender, EventArgs args) + { + if (EnabledChanged != null) + { + EnabledChanged(sender, args); + } + } + + protected virtual void OnUpdateOrderChanged(object sender, EventArgs args) + { + if (UpdateOrderChanged != null) + { + UpdateOrderChanged(sender, args); + } + } + + public virtual void Initialize() + { + } + + protected void Finalize() + { + this.Dispose(false); + } + + public virtual void Update(GameTime gameTime) + { + } + + public void Dispose() + { + this.Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (this.Game != null) + { + this.Game.Components.Remove(this); + } + if (this.Disposed != null) + { + this.Disposed(this, EventArgs.Empty); + } + } + } + } +}