All pastes #146362 Raw Edit

Managed Handles

public text v1 · immutable
#146362 ·published 2006-08-23 15:10 UTC
rendered paste body
//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];
        }
    }