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);
}
}
}