//A sample consumer of the game's API
class Program
{
static void Main(string[] args)
{
Collection<SpriteHandle> sprites = new Collection<SpriteHandle>();
sprites.Add(SpriteManager.AddSprite());
sprites.Add(SpriteManager.AddSprite());
foreach (SpriteHandle handle in sprites)
{
Console.WriteLine(handle.Sprite.ToString());
}
Console.ReadKey();
}
}
//in a separate assembly which defines the game's API
public class Sprite
{
public SpriteHandle Handle;
internal Sprite()
{
}
public override string ToString()
{
return "Sprite: " + Handle.Index.ToString();
}
}
public struct SpriteHandle
{
internal int Index;
internal SpriteHandle(int index)
{
Index = index;
}
public Sprite Sprite
{
get { return SpriteManager.Find(this); }
}
}
public static class SpriteManager
{
private static List<Sprite> _sprites = new List<Sprite>();
public static SpriteHandle AddSprite()
{
Sprite sprite = new Sprite();
sprite.Handle.Index = _sprites.Count;
_sprites.Insert( sprite.Handle.Index, sprite);
return sprite.Handle;
}
public static Sprite Find(SpriteHandle handle)
{
return _sprites[handle.Index];
}
}