Main
using System;
using System.Collections;
using System.Collections.Generic;
using Sifteo;

namespace Libraries
{
    // Purpose:
    // Stores render objects.
    public class ObjManager
    {
        // Purpose:
        // Default constructor.
        public ObjManager()
        {
            m_objs = new List<Obj>();
        }

        // Purpose:
        // Store the given obj, if possible.  If the obj has a ID, then the ID must be unique.  If there is a ID that isn't unque in the manager, then the obj won't be stored.
        // obj - Obj to store.
        // Return:
        // Value is true if the obj is stored, false if not.
        public bool StoreObj(Obj obj)
        {
            if (null == obj)
                return false;
            else if (null != GetObj(obj.GetID()))
                return false;

            m_objs.Add(obj);
            return true;
        }

        // Purpose:
        // Retrive the obj with the matching ID, if a match exists.
        // ID - ID of the obj to find.
        // Return:
        // Value is the obj if a match was found, null if not.
        public Obj GetObj(String ID)
        {
            if (null != ID)
            {
                foreach (Obj holdObj in m_objs)
                {
                    if (holdObj.GetID() == ID)
                        return holdObj;
                }
            }

            return null;
        }

        // Purpose:
        // Retrive the object cast as a Sprite.
        // ID -ID of the object to retrive.
        //
        // Return:
        // Value is null if the object wasn't found or wasn't a Sprite.
        public Sprite GetAsSprite(String ID)
        {
            return (Sprite)GetObj(ID);         
        }

        // Purpose:
        // Destroy the given obj with the given ID.  Clear will be called on the obj.
        // ID - ID of the obj to destroy.
        // Return:
        // Value is true if the obj was destroyed, false if not.
        public bool DestroyObj(String ID)
        {
            if (null != ID)
            {
                Obj holdObj = null;
                foreach (Obj hold in m_objs)
                {
                    if ((null != hold.GetID()) && (hold.GetID() == ID))
                    {
                        holdObj = hold;
                        break;
                    }
                }

                if (null != holdObj)
                {
                    m_objs.Remove(holdObj);
                    return true;
                }
            }

            return false;
        }

        // Purpose:
        // Create a list that contains all the objs in the manager.
        // Return:
        // Value is the list that contains every obj in the manager.
        public List<Obj> GetObjs()
        {
            List<Obj> hold = new List<Obj>();
            hold.AddRange(m_objs);
            return hold;
        }

        // Purpose:
        // Clear the data stored in the object.
        public virtual void Clear()
        {
            m_objs.Clear();
            m_objs = null;
        }

        // Purpose:
        // Fill the given renderer with objects from the manager.
        // Only objects that need to be rendered will be inserted.
        // renderer          - Renderer to fill.
        // forceRenderNeeded - External way of saying a render has to happen for a reason outside of one of the render objects needing to render.
        public void FillObjRenderer(Renderer renderer,
                                    bool forceRenderNeeded)
        {
            bool render = forceRenderNeeded;

            if(!render)
            {
                // Requires render.
                foreach(RenderObj obj in m_objs)
                {
                    if(obj.m_needsRender)
                    {
                        render = true;
                        break;
                    }
                }
            }

            if(render)
            {
                foreach(RenderObj obj in m_objs)
                {  
                    if(obj.m_needsRender || obj.m_renderIfCubeRender)
                        renderer.Insert(obj);
                }
            }
        }

        // Stores the objs in the manager.
        protected List<Obj> m_objs;
    }
}

 
Website copyright (c) 2012 Benjamin Millek, all rights reserved.