From dfea1994f0bb3f1eeb0ed20fadb4093804f04017 Mon Sep 17 00:00:00 2001 From: Nathan Adams Date: Sat, 29 Nov 2014 17:16:46 -0600 Subject: [PATCH] * 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 --- README | 10 +- axios.sln | 18 ++- axios/Axios_WP7.csproj | 2 + axios/Axios_Windows.csproj | 19 +-- axios/Axios_Windows.csproj.user | 2 +- axios/Axios_Xbox_360.csproj | 2 + axios/Axios_settings.cs | 7 ++ axios/Engine/AxiosGameScreen.cs | 99 ++++++++++++++-- axios/Engine/Gleed2D/Item.cs | 35 +----- axios/Engine/Gleed2D/PathItem.cs | 39 ++++--- axios/Engine/Gleed2D/TextureItem.cs | 81 ++++--------- axios/Factories/Prompt.cs | 149 ++++++++++++++++++++++++ axios/Properties/AssemblyInfo.cs | 4 +- axios/ScreenSystem/PhysicsGameScreen.cs | 2 +- 14 files changed, 331 insertions(+), 138 deletions(-) create mode 100644 axios/Factories/Prompt.cs diff --git a/README b/README index 54a627e..1da6e79 100644 --- a/README +++ b/README @@ -31,16 +31,17 @@ Where can I download pre-built DLLs? 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: - http://code.google.com/p/axiosengine/source/checkout + https://srchub.org/hg/axiosengine Authors ------- General questions/comments/concerns can be directed at: + Nathan Adams - adamsna[at]datanethost.net Contributors: @@ -65,4 +66,7 @@ XNACC - See XNACC.License.txt http://xnacc.codeplex.com/ -Portions of this product are (C) 2009-2011 JRTwine Software, LLC \ No newline at end of file +Portions of this product are (C) 2009-2011 JRTwine Software, LLC + +Prompt Factory - By Blaze Phoenix +http://stackoverflow.com/a/17260476/195722 diff --git a/axios.sln b/axios.sln index e80e6f5..f07c805 100644 --- a/axios.sln +++ b/axios.sln @@ -1,12 +1,14 @@  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}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Xbox_360", "axios\Axios_Xbox_360.csproj", "{B5664516-72B7-4BA3-9F72-25CAA90867D8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_WP7", "axios\Axios_WP7.csproj", "{C09D9005-76AC-4F1A-9479-2787BB3DB158}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Axios_Windows_mono", "axios\Axios_Windows_mono.csproj", "{A622337F-9AE6-492A-85D6-01CCE0D7F9B4}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution 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|Xbox 360.ActiveCfg = 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 GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/axios/Axios_WP7.csproj b/axios/Axios_WP7.csproj index 52c449f..c192166 100644 --- a/axios/Axios_WP7.csproj +++ b/axios/Axios_WP7.csproj @@ -156,6 +156,7 @@ + @@ -202,6 +203,7 @@ + diff --git a/axios/Axios_Windows.csproj b/axios/Axios_Windows.csproj index 538e531..0108daf 100644 --- a/axios/Axios_Windows.csproj +++ b/axios/Axios_Windows.csproj @@ -10,7 +10,8 @@ Axios Axios.Windows v4.0 - Client + + v4.0 Windows HiDef @@ -44,6 +45,13 @@ true + + ..\..\..\git\axiosmapeditor\Gleed2D-master\src\Gleed2D.Core\bin\x86\Debug\Gleed2D.Core.dll + + + False + ..\..\..\git\axiosmapeditor\Gleed2D-master\src\Gleed2D.Core\bin\x86\Debug\Gleed2D.InGame.dll + False @@ -99,6 +107,7 @@ + @@ -221,14 +230,8 @@ - - - - - - @@ -246,6 +249,7 @@ + @@ -286,7 +290,6 @@ - diff --git a/axios/Axios_Windows.csproj.user b/axios/Axios_Windows.csproj.user index 76fe5a5..566c009 100644 --- a/axios/Axios_Windows.csproj.user +++ b/axios/Axios_Windows.csproj.user @@ -1,6 +1,6 @@  - ProjectFiles + ShowAllFiles \ No newline at end of file diff --git a/axios/Axios_Xbox_360.csproj b/axios/Axios_Xbox_360.csproj index 1af380f..7b86e17 100644 --- a/axios/Axios_Xbox_360.csproj +++ b/axios/Axios_Xbox_360.csproj @@ -150,6 +150,7 @@ + @@ -195,6 +196,7 @@ + diff --git a/axios/Axios_settings.cs b/axios/Axios_settings.cs index 96aaec6..70dc7a2 100644 --- a/axios/Axios_settings.cs +++ b/axios/Axios_settings.cs @@ -122,6 +122,13 @@ * 1.0.1.8 - 1/12/2012 * - 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 diff --git a/axios/Engine/AxiosGameScreen.cs b/axios/Engine/AxiosGameScreen.cs index f289845..ef25755 100644 --- a/axios/Engine/AxiosGameScreen.cs +++ b/axios/Engine/AxiosGameScreen.cs @@ -12,8 +12,15 @@ using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using GameStateManagement; using Microsoft.Xna.Framework.Input; -using Axios.Engine.Gleed2D; 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 { @@ -36,6 +43,12 @@ namespace Axios.Engine private List _timers; private List _uiobjects; + protected Dictionary PathItems = new Dictionary(); + protected Dictionary TextureItems = new Dictionary(); + //protected List TextureItems = new List(); + + protected Dictionary cache = new Dictionary(); + private AxiosUIObject prevuiobj; 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) { Vector2 ret; @@ -234,10 +297,16 @@ namespace Axios.Engine foreach (Layer layer in Level.Layers) { Vector2 oldcameraposition = camera.Position; - camera.Position *= layer.ScrollSpeed; + //camera.Position *= layer.ScrollSpeed; 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(); camera.Position = oldcameraposition; @@ -250,6 +319,8 @@ namespace Axios.Engine foreach(AxiosUIObject g in (from x in _uiobjects orderby x.DrawOrder select x)) ((IDrawableAxiosGameObject)g).Draw(this, gameTime); + + base.Draw(gameTime); //This is placed at the end so that Farseer debug information is visible } @@ -459,25 +530,31 @@ namespace Axios.Engine /// /// /// - 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) { } + } } diff --git a/axios/Engine/Gleed2D/Item.cs b/axios/Engine/Gleed2D/Item.cs index 92c69a4..46d81ac 100644 --- a/axios/Engine/Gleed2D/Item.cs +++ b/axios/Engine/Gleed2D/Item.cs @@ -8,48 +8,19 @@ using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Content; using FarseerPhysics.Dynamics; +using Gleed2D.InGame; namespace Axios.Engine.Gleed2D { - [XmlInclude(typeof(TextureItem))] - [XmlInclude(typeof(RectangleItem))] - [XmlInclude(typeof(CircleItem))] - [XmlInclude(typeof(PathItem))] - public partial class Item + public class Item { - /// - /// The name of this item. - /// - [XmlAttribute()] - public String Name; - /// - /// Should this item be visible? - /// - [XmlAttribute()] - public bool Visible; - - /// - /// The item's position in world space. - /// - public Vector2 Position; - - /// - /// A Dictionary containing any user-defined Properties. - /// - public SerializableDictionary CustomProperties; - - - public Item() - { - CustomProperties = new SerializableDictionary(); - } /// /// 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). /// - public virtual void load(AxiosGameScreen gameScreen, ref Dictionary cache, Layer layer) + public virtual void load(AxiosGameScreen gameScreen, ref Dictionary cache) { } diff --git a/axios/Engine/Gleed2D/PathItem.cs b/axios/Engine/Gleed2D/PathItem.cs index 08494a1..8f22ac3 100644 --- a/axios/Engine/Gleed2D/PathItem.cs +++ b/axios/Engine/Gleed2D/PathItem.cs @@ -9,36 +9,39 @@ using FarseerPhysics.Factories; using Microsoft.Xna.Framework.Content; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework; +using Gleed2D.InGame; namespace Axios.Engine.Gleed2D { - public partial class PathItem : Item + public class PathItem : Item { - public Vector2[] LocalPoints; - public Vector2[] WorldPoints; - public bool IsPolygon; - public int LineWidth; - public Color LineColor; + private PathItemProperties _item; + + public PathItemProperties LayerItem + { + get { return _item; } + set { } + } Body _body; - public PathItem() + public PathItem(PathItemProperties i) { + this._item = i; } - public override void load(AxiosGameScreen gameScreen, ref Dictionary cache, Layer layer) + public override void load(AxiosGameScreen gameScreen, ref Dictionary cache) { - base.load(gameScreen, ref cache, layer); - if (gameScreen.LoadPathItem(this)) - { - Vertices v = new Vertices(LocalPoints.Length); - foreach (Vector2 vec in LocalPoints) - v.Add(new Vector2(ConvertUnits.ToSimUnits(vec.X), ConvertUnits.ToSimUnits(vec.Y))); + base.load(gameScreen, ref cache); + + Vertices v = new Vertices(LayerItem.LocalPoints.Count); + foreach (Vector2 vec in LayerItem.LocalPoints) + v.Add(new Vector2(ConvertUnits.ToSimUnits(vec.X), ConvertUnits.ToSimUnits(vec.Y))); - _body = BodyFactory.CreateLoopShape(gameScreen.World, v); - _body.Position = ConvertUnits.ToSimUnits(this.Position); - _body.UserData = this; - } + _body = BodyFactory.CreateLoopShape(gameScreen.World, v); + _body.Position = ConvertUnits.ToSimUnits(this.LayerItem.Position); + _body.UserData = this; + } } diff --git a/axios/Engine/Gleed2D/TextureItem.cs b/axios/Engine/Gleed2D/TextureItem.cs index 7fdfd28..e5f4da3 100644 --- a/axios/Engine/Gleed2D/TextureItem.cs +++ b/axios/Engine/Gleed2D/TextureItem.cs @@ -12,65 +12,25 @@ using FarseerPhysics.Dynamics; using FarseerPhysics.Common; using FarseerPhysics.SamplesFramework; using FarseerPhysics.Factories; +using Gleed2D.InGame; namespace Axios.Engine.Gleed2D { public partial class TextureItem : Item { - /// - /// The item's rotation in radians. - /// - public float Rotation; - - /// - /// The item's scale factor. - /// - public Vector2 Scale; - - /// - /// The color to tint the item's texture with (use white for no tint). - /// - public Color TintColor; - - /// - /// If true, the texture is flipped horizontally when drawn. - /// - public bool FlipHorizontally; - - /// - /// If true, the texture is flipped vertically when drawn. - /// - public bool FlipVertically; - - /// - /// The path to the texture's filename (including the extension) relative to ContentRootFolder. - /// - public String texture_filename; - - /// - /// The texture_filename without extension. For using in Content.Load(). - /// - public String asset_name; - - /// - /// 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. - /// public Texture2D texture; - /// - /// 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. - /// - public Vector2 Origin; + private TextureItemProperties _item; - public Layer Layer; - - - public TextureItem() + public TextureItemProperties LayerItem { + get { return _item; } + set { } + } + + public TextureItem(TextureItemProperties i) + { + this._item = i; } /// @@ -79,22 +39,21 @@ namespace Axios.Engine.Gleed2D /// You must provide your own implementation. However, you can rely on all public fields being /// filled by the level deserialization process. /// - public override void load(AxiosGameScreen gameScreen, ref Dictionary cache, Layer layer) + public override void load(AxiosGameScreen gameScreen, ref Dictionary cache) { - this.Layer = layer; - base.load(gameScreen, ref cache, layer); + base.load(gameScreen, ref cache); //throw new NotImplementedException(); //TODO: provide your own implementation of how a TextureItem loads its assets //for example: //this.texture = Texture2D.FromFile(, texture_filename); //or by using the Content Pipeline: - if (!cache.ContainsKey(asset_name)) + if (!cache.ContainsKey(LayerItem.AssetName)) { - cache[asset_name] = gameScreen.ScreenManager.Game.Content.Load(asset_name); + cache[LayerItem.AssetName] = gameScreen.ScreenManager.Game.Content.Load(LayerItem.AssetName); } - this.texture = cache[asset_name]; - Visible = gameScreen.LoadTextureItem(this); + this.texture = cache[LayerItem.AssetName]; + //Visible = gameScreen.LoadTextureItem(this); //this.texture = cm.Load(asset_name); @@ -102,11 +61,11 @@ namespace Axios.Engine.Gleed2D public override void draw(SpriteBatch sb) { - if (!Visible) return; + if (!LayerItem.Visible) return; SpriteEffects effects = SpriteEffects.None; - if (FlipHorizontally) effects |= SpriteEffects.FlipHorizontally; - if (FlipVertically) effects |= SpriteEffects.FlipVertically; - sb.Draw(texture, Position, null, TintColor, Rotation, Origin, Scale, effects, 0); + if (LayerItem.FlipHorizontally) effects |= SpriteEffects.FlipHorizontally; + if (LayerItem.FlipVertically) effects |= SpriteEffects.FlipVertically; + sb.Draw(texture, LayerItem.Position, null, LayerItem.TintColor, LayerItem.Rotation, LayerItem.Origin, LayerItem.Scale, effects, 0); } } } diff --git a/axios/Factories/Prompt.cs b/axios/Factories/Prompt.cs new file mode 100644 index 0000000..2b85228 --- /dev/null +++ b/axios/Factories/Prompt.cs @@ -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 + /// + /// Creates a rounded rectangle + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + /// + public static Texture2D CreateRoundedRectangleTexture(this GraphicsDevice graphics, int width, int height, int borderThickness, int borderRadius, int borderShadow, List backgroundColors, List 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); + return texture; + } + + private static Color ColorBorder(int x, int y, int width, int height, int borderThickness, int borderRadius, int borderShadow, Color initialColor, List 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); + } + } +} diff --git a/axios/Properties/AssemblyInfo.cs b/axios/Properties/AssemblyInfo.cs index bc3d36d..8580126 100644 --- a/axios/Properties/AssemblyInfo.cs +++ b/axios/Properties/AssemblyInfo.cs @@ -9,7 +9,7 @@ using System.Runtime.InteropServices; [assembly: AssemblyProduct("Axios")] [assembly: AssemblyDescription("XNA 2D Game Engine")] [assembly: AssemblyCompany("")] -[assembly: AssemblyCopyright("Copyright © 2012 - Nathan Adams")] +[assembly: AssemblyCopyright("Copyright © 2014 - Nathan Adams")] [assembly: AssemblyTrademark("")] [assembly: AssemblyCulture("")] @@ -31,7 +31,7 @@ using System.Runtime.InteropServices; // Build Number // Revision // -[assembly: AssemblyVersion("1.0.1.7")] +[assembly: AssemblyVersion("1.0.1.10")] #if DEBUG [assembly: AssemblyConfiguration("Debug")] diff --git a/axios/ScreenSystem/PhysicsGameScreen.cs b/axios/ScreenSystem/PhysicsGameScreen.cs index 53cbed2..a88c5cc 100644 --- a/axios/ScreenSystem/PhysicsGameScreen.cs +++ b/axios/ScreenSystem/PhysicsGameScreen.cs @@ -57,7 +57,7 @@ namespace GameStateManagement base.Activate(instancePreserved); //We enable diagnostics to show get values for our performance counters. - Settings.EnableDiagnostics = true; + FarseerPhysics.Settings.EnableDiagnostics = true; if (World == null) {