using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml; using System.Xml.Serialization; using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using Microsoft.Xna.Framework.Content; using System.IO; using FarseerPhysics.Dynamics; using FarseerPhysics.Common; using FarseerPhysics.SamplesFramework; using FarseerPhysics.Factories; 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. /// /// [XmlIgnore] 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; public Layer Layer; public TextureItem() { } /// /// Called by Level.FromFile(filename) on each Item after the deserialization process. /// Loads all assets needed by the TextureItem, especially the Texture2D. /// 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) { this.Layer = layer; base.load(gameScreen, ref cache, layer); //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)) { cache[asset_name] = gameScreen.ScreenManager.Game.Content.Load(asset_name); } this.texture = cache[asset_name]; Visible = gameScreen.LoadTextureItem(this); //this.texture = cm.Load(asset_name); } public override void draw(SpriteBatch sb) { if (!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); } } }