* 1.0.1.9 - 5/20/2013

* - Adding mono support
 *
 * 1.0.1.10 - 11/29/2014
 * - Adding prompt factory class to generate a Final Fantasy type text prompt
 * - Updating Gleed2D support to work with latest version of Gleed2D
This commit is contained in:
Nathan Adams 2014-11-29 17:16:46 -06:00
parent 22017d6c19
commit dfea1994f0
14 changed files with 331 additions and 138 deletions

10
README
View File

@ -31,16 +31,17 @@ Where can I download pre-built DLLs?
Official versions can be downloaded here: Official versions can be downloaded here:
http://code.google.com/p/axiosengine/downloads/list https://srchub.org/p/axiosengine/downloads/
Of course you can always build from source from: Of course you can always build from source from:
http://code.google.com/p/axiosengine/source/checkout https://srchub.org/hg/axiosengine
Authors Authors
------- -------
General questions/comments/concerns can be directed at: General questions/comments/concerns can be directed at:
Nathan Adams - adamsna[at]datanethost.net Nathan Adams - adamsna[at]datanethost.net
Contributors: Contributors:
@ -65,4 +66,7 @@ XNACC - See XNACC.License.txt
http://xnacc.codeplex.com/ http://xnacc.codeplex.com/
Portions of this product are (C) 2009-2011 JRTwine Software, LLC Portions of this product are (C) 2009-2011 JRTwine Software, LLC
Prompt Factory - By Blaze Phoenix
http://stackoverflow.com/a/17260476/195722

View File

@ -1,12 +1,14 @@
 
Microsoft Visual Studio Solution File, Format Version 11.00 Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010 Express for Windows Phone # Visual Studio 2010
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Windows", "axios\Axios_Windows.csproj", "{742C938F-997D-4EFD-95D2-BB09CDADCD2E}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Windows", "axios\Axios_Windows.csproj", "{742C938F-997D-4EFD-95D2-BB09CDADCD2E}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Xbox_360", "axios\Axios_Xbox_360.csproj", "{B5664516-72B7-4BA3-9F72-25CAA90867D8}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Xbox_360", "axios\Axios_Xbox_360.csproj", "{B5664516-72B7-4BA3-9F72-25CAA90867D8}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_WP7", "axios\Axios_WP7.csproj", "{C09D9005-76AC-4F1A-9479-2787BB3DB158}" Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_WP7", "axios\Axios_WP7.csproj", "{C09D9005-76AC-4F1A-9479-2787BB3DB158}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Windows_mono", "axios\Axios_Windows_mono.csproj", "{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}"
EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU Debug|Any CPU = Debug|Any CPU
@ -75,6 +77,20 @@ Global
{C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|x86.Build.0 = Release|Windows Phone {C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|x86.Build.0 = Release|Windows Phone
{C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|Xbox 360.ActiveCfg = Release|Windows Phone {C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|Xbox 360.ActiveCfg = Release|Windows Phone
{C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|Xbox 360.Build.0 = Release|Windows Phone {C09D9005-76AC-4F1A-9479-2787BB3DB158}.Release|Xbox 360.Build.0 = Release|Windows Phone
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|Any CPU.ActiveCfg = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|Mixed Platforms.Build.0 = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|Windows Phone.ActiveCfg = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|x86.ActiveCfg = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|x86.Build.0 = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Debug|Xbox 360.ActiveCfg = Debug|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|Any CPU.ActiveCfg = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|Mixed Platforms.ActiveCfg = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|Mixed Platforms.Build.0 = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|Windows Phone.ActiveCfg = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|x86.ActiveCfg = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|x86.Build.0 = Release|x86
{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}.Release|Xbox 360.ActiveCfg = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE

View File

@ -156,6 +156,7 @@
<Compile Include="Dynamics\World.cs" /> <Compile Include="Dynamics\World.cs" />
<Compile Include="Dynamics\WorldCallbacks.cs" /> <Compile Include="Dynamics\WorldCallbacks.cs" />
<Compile Include="Engine\AxiosCommandConsole.cs" /> <Compile Include="Engine\AxiosCommandConsole.cs" />
<Compile Include="Engine\AxiosEngineFactory.cs" />
<Compile Include="Engine\AxiosEvents.cs" /> <Compile Include="Engine\AxiosEvents.cs" />
<Compile Include="Engine\AxiosGameObject.cs" /> <Compile Include="Engine\AxiosGameObject.cs" />
<Compile Include="Engine\AxiosGameScreen.cs" /> <Compile Include="Engine\AxiosGameScreen.cs" />
@ -202,6 +203,7 @@
<Compile Include="Factories\FixtureFactory.cs" /> <Compile Include="Factories\FixtureFactory.cs" />
<Compile Include="Factories\JointFactory.cs" /> <Compile Include="Factories\JointFactory.cs" />
<Compile Include="Factories\LinkFactory.cs" /> <Compile Include="Factories\LinkFactory.cs" />
<Compile Include="Factories\Prompt.cs" />
<Compile Include="PrimitiveBatch.cs" /> <Compile Include="PrimitiveBatch.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ScreenSystem\BackgroundScreen.cs" /> <Compile Include="ScreenSystem\BackgroundScreen.cs" />

View File

@ -10,7 +10,8 @@
<RootNamespace>Axios</RootNamespace> <RootNamespace>Axios</RootNamespace>
<AssemblyName>Axios.Windows</AssemblyName> <AssemblyName>Axios.Windows</AssemblyName>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion> <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile> <TargetFrameworkProfile>
</TargetFrameworkProfile>
<XnaFrameworkVersion>v4.0</XnaFrameworkVersion> <XnaFrameworkVersion>v4.0</XnaFrameworkVersion>
<XnaPlatform>Windows</XnaPlatform> <XnaPlatform>Windows</XnaPlatform>
<XnaProfile>HiDef</XnaProfile> <XnaProfile>HiDef</XnaProfile>
@ -44,6 +45,13 @@
<XnaCompressContent>true</XnaCompressContent> <XnaCompressContent>true</XnaCompressContent>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Gleed2D.Core">
<HintPath>..\..\..\git\axiosmapeditor\Gleed2D-master\src\Gleed2D.Core\bin\x86\Debug\Gleed2D.Core.dll</HintPath>
</Reference>
<Reference Include="Gleed2D.InGame, Version=1.0.0.0, Culture=neutral, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\git\axiosmapeditor\Gleed2D-master\src\Gleed2D.Core\bin\x86\Debug\Gleed2D.InGame.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86"> <Reference Include="Microsoft.Xna.Framework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553, processorArchitecture=x86">
<Private>False</Private> <Private>False</Private>
</Reference> </Reference>
@ -99,6 +107,7 @@
<ItemGroup> <ItemGroup>
<Compile Include="Engine\AxiosBreakableGameObject.cs" /> <Compile Include="Engine\AxiosBreakableGameObject.cs" />
<Compile Include="Engine\AxiosCommandConsole.cs" /> <Compile Include="Engine\AxiosCommandConsole.cs" />
<Compile Include="Engine\AxiosEngineFactory.cs" />
<Compile Include="Engine\AxiosEvents.cs" /> <Compile Include="Engine\AxiosEvents.cs" />
<Compile Include="Axios_settings.cs" /> <Compile Include="Axios_settings.cs" />
<Compile Include="Collision\Collision.cs" /> <Compile Include="Collision\Collision.cs" />
@ -221,14 +230,8 @@
<Compile Include="Engine\File\AxiosIsolatedFile.cs" /> <Compile Include="Engine\File\AxiosIsolatedFile.cs" />
<Compile Include="Engine\File\AxiosRegularFile.cs" /> <Compile Include="Engine\File\AxiosRegularFile.cs" />
<Compile Include="Engine\File\AxiosTitleFile.cs" /> <Compile Include="Engine\File\AxiosTitleFile.cs" />
<Compile Include="Engine\Gleed2D\Camera.cs" />
<Compile Include="Engine\Gleed2D\CircleItem.cs" />
<Compile Include="Engine\Gleed2D\CustomProperty.cs" />
<Compile Include="Engine\Gleed2D\Item.cs" /> <Compile Include="Engine\Gleed2D\Item.cs" />
<Compile Include="Engine\Gleed2D\Layer.cs" />
<Compile Include="Engine\Gleed2D\Level.cs" />
<Compile Include="Engine\Gleed2D\PathItem.cs" /> <Compile Include="Engine\Gleed2D\PathItem.cs" />
<Compile Include="Engine\Gleed2D\RectangleItem.cs" />
<Compile Include="Engine\Gleed2D\TextureItem.cs" /> <Compile Include="Engine\Gleed2D\TextureItem.cs" />
<Compile Include="Engine\Interfaces\IAxiosFile.cs" /> <Compile Include="Engine\Interfaces\IAxiosFile.cs" />
<Compile Include="Engine\Interfaces\IAxiosGameObject.cs" /> <Compile Include="Engine\Interfaces\IAxiosGameObject.cs" />
@ -246,6 +249,7 @@
<Compile Include="Factories\FixtureFactory.cs" /> <Compile Include="Factories\FixtureFactory.cs" />
<Compile Include="Factories\JointFactory.cs" /> <Compile Include="Factories\JointFactory.cs" />
<Compile Include="Factories\LinkFactory.cs" /> <Compile Include="Factories\LinkFactory.cs" />
<Compile Include="Factories\Prompt.cs" />
<Compile Include="PrimitiveBatch.cs" /> <Compile Include="PrimitiveBatch.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ScreenSystem\BackgroundScreen.cs" /> <Compile Include="ScreenSystem\BackgroundScreen.cs" />
@ -286,7 +290,6 @@
<ItemGroup> <ItemGroup>
<None Include="AxiosEngine.cd" /> <None Include="AxiosEngine.cd" />
</ItemGroup> </ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" /> <Import Project="$(MSBuildExtensionsPath)\Microsoft\XNA Game Studio\Microsoft.Xna.GameStudio.targets" />
<PropertyGroup> <PropertyGroup>

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<ProjectView>ProjectFiles</ProjectView> <ProjectView>ShowAllFiles</ProjectView>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

View File

@ -150,6 +150,7 @@
<Compile Include="Dynamics\WorldCallbacks.cs" /> <Compile Include="Dynamics\WorldCallbacks.cs" />
<Compile Include="Engine\AxiosBreakableGameObject.cs" /> <Compile Include="Engine\AxiosBreakableGameObject.cs" />
<Compile Include="Engine\AxiosCommandConsole.cs" /> <Compile Include="Engine\AxiosCommandConsole.cs" />
<Compile Include="Engine\AxiosEngineFactory.cs" />
<Compile Include="Engine\AxiosEvents.cs" /> <Compile Include="Engine\AxiosEvents.cs" />
<Compile Include="Engine\AxiosGameObject.cs" /> <Compile Include="Engine\AxiosGameObject.cs" />
<Compile Include="Engine\AxiosGameScreen.cs" /> <Compile Include="Engine\AxiosGameScreen.cs" />
@ -195,6 +196,7 @@
<Compile Include="Factories\FixtureFactory.cs" /> <Compile Include="Factories\FixtureFactory.cs" />
<Compile Include="Factories\JointFactory.cs" /> <Compile Include="Factories\JointFactory.cs" />
<Compile Include="Factories\LinkFactory.cs" /> <Compile Include="Factories\LinkFactory.cs" />
<Compile Include="Factories\Prompt.cs" />
<Compile Include="PrimitiveBatch.cs" /> <Compile Include="PrimitiveBatch.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ScreenSystem\BackgroundScreen.cs" /> <Compile Include="ScreenSystem\BackgroundScreen.cs" />

View File

@ -122,6 +122,13 @@
* 1.0.1.8 - 1/12/2012 * 1.0.1.8 - 1/12/2012
* - Adding UseSecondStep flag in PhysicsGameScreen (default false) * - Adding UseSecondStep flag in PhysicsGameScreen (default false)
* *
* 1.0.1.9 - 5/20/2013
* - Adding mono support
*
* 1.0.1.10 - 11/29/2014
* - Adding prompt factory class to generate a Final Fantasy type text prompt
* - Updating Gleed2D support to work with latest version of Gleed2D
*
*/ */
#endregion #endregion

View File

@ -12,8 +12,15 @@ using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using GameStateManagement; using GameStateManagement;
using Microsoft.Xna.Framework.Input; using Microsoft.Xna.Framework.Input;
using Axios.Engine.Gleed2D;
using Axios.Engine.Extensions; using Axios.Engine.Extensions;
using System.IO;
using System.IO.Compression;
using Gleed2D.InGame;
using Axios.Engine.File;
using System.Xml.Linq;
using Gleed2D.Core;
using System.Diagnostics;
using Axios.Engine.Gleed2D;
namespace Axios.Engine namespace Axios.Engine
{ {
@ -36,6 +43,12 @@ namespace Axios.Engine
private List<AxiosTimer> _timers; private List<AxiosTimer> _timers;
private List<AxiosUIObject> _uiobjects; private List<AxiosUIObject> _uiobjects;
protected Dictionary<string, PathItem> PathItems = new Dictionary<string, PathItem>();
protected Dictionary<string, TextureItem> TextureItems = new Dictionary<string, TextureItem>();
//protected List<TextureItem> TextureItems = new List<TextureItem>();
protected Dictionary<string, Texture2D> cache = new Dictionary<string, Texture2D>();
private AxiosUIObject prevuiobj; private AxiosUIObject prevuiobj;
private AxiosUIObject prevuifocusobj; private AxiosUIObject prevuifocusobj;
@ -68,6 +81,56 @@ namespace Axios.Engine
} }
public void LoadLevelFromStream(Stream s)
{
XElement xml = XElement.Load(s);
Level level = LevelLoader.Load(xml);
this.Level = level;
foreach (Layer layer in level.Layers)
{
foreach (LayerItem item in layer.Items)
{
//Debug.WriteLine(item.PropertyType);
switch (item.PropertyType)
{
case "Gleed2D.InGame.PathItemProperties":
this.LoadPathItem((PathItemProperties)item.Properties, layer);
break;
case "Gleed2D.InGame.TextureItemProperties":
this.LoadTextureItem((TextureItemProperties)item.Properties, layer);
break;
case "Gleed2D.InGame.RectangleItemProperties":
this.LoadRectangleItem((RectangleItemProperties)item.Properties, layer);
break;
case "Gleed2D.InGame.CircleItemProperties":
this.LoadCircleItem((CircleItemProperties)item.Properties, layer);
break;
default:
this.LoadOtherItem(item.Properties, item.PropertyType, layer);
break;
}
/*Debug.WriteLine(item.Properties.Id);
Debug.WriteLine(item.Properties.Name);
Debug.WriteLine(item.PropertyType);*/
}
}
}
public void LoadLevelFromFile(string s)
{
AxiosTitleFile file = new AxiosTitleFile(s);
this.LoadLevelFromStream(file.GetStream(FileMode.Open));
}
public void LoadLevelFromGZFile(string s)
{
AxiosTitleFile file = new AxiosTitleFile(s);
GZipStream zipstream = new GZipStream(file.GetStream(FileMode.Open), CompressionMode.Decompress);
this.LoadLevelFromStream(zipstream);
}
public Vector2 MouseAimVector(MouseState ms, Vector2 relativeposition) public Vector2 MouseAimVector(MouseState ms, Vector2 relativeposition)
{ {
Vector2 ret; Vector2 ret;
@ -234,10 +297,16 @@ namespace Axios.Engine
foreach (Layer layer in Level.Layers) foreach (Layer layer in Level.Layers)
{ {
Vector2 oldcameraposition = camera.Position; Vector2 oldcameraposition = camera.Position;
camera.Position *= layer.ScrollSpeed; //camera.Position *= layer.ScrollSpeed;
ScreenManager.SpriteBatch.Begin(0, null, null, null, null, null, Camera.View); ScreenManager.SpriteBatch.Begin(0, null, null, null, null, null, Camera.View);
layer.draw(ScreenManager.SpriteBatch); foreach (TextureItem i in TextureItems.Values)
{
if (i.LayerItem.Visible == true)
{
i.draw(ScreenManager.SpriteBatch);
}
}
ScreenManager.SpriteBatch.End(); ScreenManager.SpriteBatch.End();
camera.Position = oldcameraposition; camera.Position = oldcameraposition;
@ -250,6 +319,8 @@ namespace Axios.Engine
foreach(AxiosUIObject g in (from x in _uiobjects orderby x.DrawOrder select x)) foreach(AxiosUIObject g in (from x in _uiobjects orderby x.DrawOrder select x))
((IDrawableAxiosGameObject)g).Draw(this, gameTime); ((IDrawableAxiosGameObject)g).Draw(this, gameTime);
base.Draw(gameTime); //This is placed at the end so that Farseer debug information is visible base.Draw(gameTime); //This is placed at the end so that Farseer debug information is visible
} }
@ -459,25 +530,31 @@ namespace Axios.Engine
/// </summary> /// </summary>
/// <param name="circleitem"></param> /// <param name="circleitem"></param>
/// <returns></returns> /// <returns></returns>
public virtual bool LoadCircleItem(CircleItem circleitem) public virtual void LoadCircleItem(CircleItemProperties circleitem, Layer l)
{ {
return true;
} }
public virtual bool LoadPathItem(PathItem pathitem) public virtual void LoadPathItem(PathItemProperties pathitem, Layer l)
{ {
return true; PathItem p = new PathItem((PathItemProperties)pathitem);
p.load(this, ref cache);
PathItems[pathitem.Name] = p;
} }
public virtual bool LoadRectangleItem(RectangleItem rectangleitem) public virtual void LoadRectangleItem(RectangleItemProperties rectangleitem, Layer l)
{ {
return true;
} }
public virtual bool LoadTextureItem(TextureItem textureitem) public virtual void LoadTextureItem(TextureItemProperties textureitem, Layer l)
{ {
return true; TextureItem i = new TextureItem((TextureItemProperties)textureitem);
i.load(this, ref cache);
TextureItems[textureitem.Name] = i;
} }
public virtual void LoadOtherItem(ItemProperties prop, string type, Layer l) { }
} }
} }

View File

@ -8,48 +8,19 @@ using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content;
using FarseerPhysics.Dynamics; using FarseerPhysics.Dynamics;
using Gleed2D.InGame;
namespace Axios.Engine.Gleed2D namespace Axios.Engine.Gleed2D
{ {
[XmlInclude(typeof(TextureItem))] public class Item
[XmlInclude(typeof(RectangleItem))]
[XmlInclude(typeof(CircleItem))]
[XmlInclude(typeof(PathItem))]
public partial class Item
{ {
/// <summary>
/// The name of this item.
/// </summary>
[XmlAttribute()]
public String Name;
/// <summary>
/// Should this item be visible?
/// </summary>
[XmlAttribute()]
public bool Visible;
/// <summary>
/// The item's position in world space.
/// </summary>
public Vector2 Position;
/// <summary>
/// A Dictionary containing any user-defined Properties.
/// </summary>
public SerializableDictionary CustomProperties;
public Item()
{
CustomProperties = new SerializableDictionary();
}
/// <summary> /// <summary>
/// Called by Level.FromFile(filename) on each Item after the deserialization process. /// Called by Level.FromFile(filename) on each Item after the deserialization process.
/// Should be overriden and can be used to load anything needed by the Item (e.g. a texture). /// Should be overriden and can be used to load anything needed by the Item (e.g. a texture).
/// </summary> /// </summary>
public virtual void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache, Layer layer) public virtual void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache)
{ {
} }

View File

@ -9,36 +9,39 @@ using FarseerPhysics.Factories;
using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework; using Microsoft.Xna.Framework;
using Gleed2D.InGame;
namespace Axios.Engine.Gleed2D namespace Axios.Engine.Gleed2D
{ {
public partial class PathItem : Item public class PathItem : Item
{ {
public Vector2[] LocalPoints; private PathItemProperties _item;
public Vector2[] WorldPoints;
public bool IsPolygon; public PathItemProperties LayerItem
public int LineWidth; {
public Color LineColor; get { return _item; }
set { }
}
Body _body; Body _body;
public PathItem() public PathItem(PathItemProperties i)
{ {
this._item = i;
} }
public override void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache, Layer layer) public override void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache)
{ {
base.load(gameScreen, ref cache, layer); base.load(gameScreen, ref cache);
if (gameScreen.LoadPathItem(this))
{ Vertices v = new Vertices(LayerItem.LocalPoints.Count);
Vertices v = new Vertices(LocalPoints.Length); foreach (Vector2 vec in LayerItem.LocalPoints)
foreach (Vector2 vec in LocalPoints) v.Add(new Vector2(ConvertUnits.ToSimUnits(vec.X), ConvertUnits.ToSimUnits(vec.Y)));
v.Add(new Vector2(ConvertUnits.ToSimUnits(vec.X), ConvertUnits.ToSimUnits(vec.Y)));
_body = BodyFactory.CreateLoopShape(gameScreen.World, v); _body = BodyFactory.CreateLoopShape(gameScreen.World, v);
_body.Position = ConvertUnits.ToSimUnits(this.Position); _body.Position = ConvertUnits.ToSimUnits(this.LayerItem.Position);
_body.UserData = this; _body.UserData = this;
}
} }
} }

View File

@ -12,65 +12,25 @@ using FarseerPhysics.Dynamics;
using FarseerPhysics.Common; using FarseerPhysics.Common;
using FarseerPhysics.SamplesFramework; using FarseerPhysics.SamplesFramework;
using FarseerPhysics.Factories; using FarseerPhysics.Factories;
using Gleed2D.InGame;
namespace Axios.Engine.Gleed2D namespace Axios.Engine.Gleed2D
{ {
public partial class TextureItem : Item public partial class TextureItem : Item
{ {
/// <summary>
/// The item's rotation in radians.
/// </summary>
public float Rotation;
/// <summary>
/// The item's scale factor.
/// </summary>
public Vector2 Scale;
/// <summary>
/// The color to tint the item's texture with (use white for no tint).
/// </summary>
public Color TintColor;
/// <summary>
/// If true, the texture is flipped horizontally when drawn.
/// </summary>
public bool FlipHorizontally;
/// <summary>
/// If true, the texture is flipped vertically when drawn.
/// </summary>
public bool FlipVertically;
/// <summary>
/// The path to the texture's filename (including the extension) relative to ContentRootFolder.
/// </summary>
public String texture_filename;
/// <summary>
/// The texture_filename without extension. For using in Content.Load<Texture2D>().
/// </summary>
public String asset_name;
/// <summary>
/// The XNA texture to be drawn. Can be loaded either from file (using "texture_filename")
/// or via the Content Pipeline (using "asset_name") - then you must ensure that the texture
/// exists as an asset in your project.
/// Loading is done in the Item's load() method.
/// </summary>
public Texture2D texture; public Texture2D texture;
/// <summary> private TextureItemProperties _item;
/// The item's origin relative to the upper left corner of the texture. Usually the middle of the texture.
/// Used for placing and rotating the texture when drawn.
/// </summary>
public Vector2 Origin;
public Layer Layer; public TextureItemProperties LayerItem
public TextureItem()
{ {
get { return _item; }
set { }
}
public TextureItem(TextureItemProperties i)
{
this._item = i;
} }
/// <summary> /// <summary>
@ -79,22 +39,21 @@ namespace Axios.Engine.Gleed2D
/// You must provide your own implementation. However, you can rely on all public fields being /// You must provide your own implementation. However, you can rely on all public fields being
/// filled by the level deserialization process. /// filled by the level deserialization process.
/// </summary> /// </summary>
public override void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache, Layer layer) public override void load(AxiosGameScreen gameScreen, ref Dictionary<string, Texture2D> cache)
{ {
this.Layer = layer; base.load(gameScreen, ref cache);
base.load(gameScreen, ref cache, layer);
//throw new NotImplementedException(); //throw new NotImplementedException();
//TODO: provide your own implementation of how a TextureItem loads its assets //TODO: provide your own implementation of how a TextureItem loads its assets
//for example: //for example:
//this.texture = Texture2D.FromFile(<GraphicsDevice>, texture_filename); //this.texture = Texture2D.FromFile(<GraphicsDevice>, texture_filename);
//or by using the Content Pipeline: //or by using the Content Pipeline:
if (!cache.ContainsKey(asset_name)) if (!cache.ContainsKey(LayerItem.AssetName))
{ {
cache[asset_name] = gameScreen.ScreenManager.Game.Content.Load<Texture2D>(asset_name); cache[LayerItem.AssetName] = gameScreen.ScreenManager.Game.Content.Load<Texture2D>(LayerItem.AssetName);
} }
this.texture = cache[asset_name]; this.texture = cache[LayerItem.AssetName];
Visible = gameScreen.LoadTextureItem(this); //Visible = gameScreen.LoadTextureItem(this);
//this.texture = cm.Load<Texture2D>(asset_name); //this.texture = cm.Load<Texture2D>(asset_name);
@ -102,11 +61,11 @@ namespace Axios.Engine.Gleed2D
public override void draw(SpriteBatch sb) public override void draw(SpriteBatch sb)
{ {
if (!Visible) return; if (!LayerItem.Visible) return;
SpriteEffects effects = SpriteEffects.None; SpriteEffects effects = SpriteEffects.None;
if (FlipHorizontally) effects |= SpriteEffects.FlipHorizontally; if (LayerItem.FlipHorizontally) effects |= SpriteEffects.FlipHorizontally;
if (FlipVertically) effects |= SpriteEffects.FlipVertically; if (LayerItem.FlipVertically) effects |= SpriteEffects.FlipVertically;
sb.Draw(texture, Position, null, TintColor, Rotation, Origin, Scale, effects, 0); sb.Draw(texture, LayerItem.Position, null, LayerItem.TintColor, LayerItem.Rotation, LayerItem.Origin, LayerItem.Scale, effects, 0);
} }
} }
} }

149
axios/Factories/Prompt.cs Normal file
View File

@ -0,0 +1,149 @@
using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace Axios.Factories
{
public static class Prompt
{
// Copied from http://stackoverflow.com/a/17260476/195722
// Written by Blaze Phoenix
/// <summary>
/// Creates a rounded rectangle
/// </summary>
/// <param name="graphics"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="borderThickness"></param>
/// <param name="borderRadius"></param>
/// <param name="borderShadow"></param>
/// <param name="backgroundColors"></param>
/// <param name="borderColors"></param>
/// <param name="initialShadowIntensity"></param>
/// <param name="finalShadowIntensity"></param>
/// <returns></returns>
public static Texture2D CreateRoundedRectangleTexture(this GraphicsDevice graphics, int width, int height, int borderThickness, int borderRadius, int borderShadow, List<Color> backgroundColors, List<Color> borderColors, float initialShadowIntensity, float finalShadowIntensity)
{
if (backgroundColors == null || backgroundColors.Count == 0) throw new ArgumentException("Must define at least one background color (up to four).");
if (borderColors == null || borderColors.Count == 0) throw new ArgumentException("Must define at least one border color (up to three).");
if (borderRadius < 1) throw new ArgumentException("Must define a border radius (rounds off edges).");
if (borderThickness < 1) throw new ArgumentException("Must define border thikness.");
if (borderThickness + borderRadius > height / 2 || borderThickness + borderRadius > width / 2) throw new ArgumentException("Border will be too thick and/or rounded to fit on the texture.");
if (borderShadow > borderRadius) throw new ArgumentException("Border shadow must be lesser in magnitude than the border radius (suggeted: shadow <= 0.25 * radius).");
Texture2D texture = new Texture2D(graphics, width, height, false, SurfaceFormat.Color);
Color[] color = new Color[width * height];
for (int x = 0; x < texture.Width; x++)
{
for (int y = 0; y < texture.Height; y++)
{
switch (backgroundColors.Count)
{
case 4:
Color leftColor0 = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)y / (width - 1)));
Color rightColor0 = Color.Lerp(backgroundColors[2], backgroundColors[3], ((float)y / (height - 1)));
color[x + width * y] = Color.Lerp(leftColor0, rightColor0, ((float)x / (width - 1)));
break;
case 3:
Color leftColor1 = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)y / (width - 1)));
Color rightColor1 = Color.Lerp(backgroundColors[1], backgroundColors[2], ((float)y / (height - 1)));
color[x + width * y] = Color.Lerp(leftColor1, rightColor1, ((float)x / (width - 1)));
break;
case 2:
color[x + width * y] = Color.Lerp(backgroundColors[0], backgroundColors[1], ((float)x / (width - 1)));
break;
default:
color[x + width * y] = backgroundColors[0];
break;
}
color[x + width * y] = ColorBorder(x, y, width, height, borderThickness, borderRadius, borderShadow, color[x + width * y], borderColors, initialShadowIntensity, finalShadowIntensity);
}
}
texture.SetData<Color>(color);
return texture;
}
private static Color ColorBorder(int x, int y, int width, int height, int borderThickness, int borderRadius, int borderShadow, Color initialColor, List<Color> borderColors, float initialShadowIntensity, float finalShadowIntensity)
{
Rectangle internalRectangle = new Rectangle((borderThickness + borderRadius), (borderThickness + borderRadius), width - 2 * (borderThickness + borderRadius), height - 2 * (borderThickness + borderRadius));
if (internalRectangle.Contains(x, y)) return initialColor;
Vector2 origin = Vector2.Zero;
Vector2 point = new Vector2(x, y);
if (x < borderThickness + borderRadius)
{
if (y < borderRadius + borderThickness)
origin = new Vector2(borderRadius + borderThickness, borderRadius + borderThickness);
else if (y > height - (borderRadius + borderThickness))
origin = new Vector2(borderRadius + borderThickness, height - (borderRadius + borderThickness));
else
origin = new Vector2(borderRadius + borderThickness, y);
}
else if (x > width - (borderRadius + borderThickness))
{
if (y < borderRadius + borderThickness)
origin = new Vector2(width - (borderRadius + borderThickness), borderRadius + borderThickness);
else if (y > height - (borderRadius + borderThickness))
origin = new Vector2(width - (borderRadius + borderThickness), height - (borderRadius + borderThickness));
else
origin = new Vector2(width - (borderRadius + borderThickness), y);
}
else
{
if (y < borderRadius + borderThickness)
origin = new Vector2(x, borderRadius + borderThickness);
else if (y > height - (borderRadius + borderThickness))
origin = new Vector2(x, height - (borderRadius + borderThickness));
}
if (!origin.Equals(Vector2.Zero))
{
float distance = Vector2.Distance(point, origin);
if (distance > borderRadius + borderThickness + 1)
{
return Color.Transparent;
}
else if (distance > borderRadius + 1)
{
if (borderColors.Count > 2)
{
float modNum = distance - borderRadius;
if (modNum < borderThickness / 2)
{
return Color.Lerp(borderColors[2], borderColors[1], (float)((modNum) / (borderThickness / 2.0)));
}
else
{
return Color.Lerp(borderColors[1], borderColors[0], (float)((modNum - (borderThickness / 2.0)) / (borderThickness / 2.0)));
}
}
if (borderColors.Count > 0)
return borderColors[0];
}
else if (distance > borderRadius - borderShadow + 1)
{
float mod = (distance - (borderRadius - borderShadow)) / borderShadow;
float shadowDiff = initialShadowIntensity - finalShadowIntensity;
return DarkenColor(initialColor, ((shadowDiff * mod) + finalShadowIntensity));
}
}
return initialColor;
}
private static Color DarkenColor(Color color, float shadowIntensity)
{
return Color.Lerp(color, Color.Black, shadowIntensity);
}
}
}

View File

@ -9,7 +9,7 @@ using System.Runtime.InteropServices;
[assembly: AssemblyProduct("Axios")] [assembly: AssemblyProduct("Axios")]
[assembly: AssemblyDescription("XNA 2D Game Engine")] [assembly: AssemblyDescription("XNA 2D Game Engine")]
[assembly: AssemblyCompany("")] [assembly: AssemblyCompany("")]
[assembly: AssemblyCopyright("Copyright © 2012 - Nathan Adams")] [assembly: AssemblyCopyright("Copyright © 2014 - Nathan Adams")]
[assembly: AssemblyTrademark("")] [assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")] [assembly: AssemblyCulture("")]
@ -31,7 +31,7 @@ using System.Runtime.InteropServices;
// Build Number // Build Number
// Revision // Revision
// //
[assembly: AssemblyVersion("1.0.1.7")] [assembly: AssemblyVersion("1.0.1.10")]
#if DEBUG #if DEBUG
[assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyConfiguration("Debug")]

View File

@ -57,7 +57,7 @@ namespace GameStateManagement
base.Activate(instancePreserved); base.Activate(instancePreserved);
//We enable diagnostics to show get values for our performance counters. //We enable diagnostics to show get values for our performance counters.
Settings.EnableDiagnostics = true; FarseerPhysics.Settings.EnableDiagnostics = true;
if (World == null) if (World == null)
{ {