Beispiel #1
0
        public static gfx_object_list gfxobj_create(int nums, int max_priority, gfx_object def_object)
        {
            gfx_object_list object_list;

            /* priority limit check */
            if (max_priority >= MAX_PRIORITY)
                return null;

            /* allocate object liset */
            object_list = new gfx_object_list();

            //memset(object_list,0,sizeof(struct gfx_object_list));

            /* allocate objects */
            object_list.objects = new gfx_object[nums];

            if (def_object == null)
            {	/* clear all objects */
                for (int i = 0; i < nums; i++)
                    object_list.objects[i] = new gfx_object();//memset(object_list.objects,0,nums*sizeof(struct gfx_object));
            }
            else
            {	/* preset with default objects */
                for (int i = 0; i < nums; i++)
                    object_list.objects[i] = def_object;
            }
            /* setup objects */
            for (int i = 0; i < nums; i++)
            {
                /*	dirty flag */
                object_list.objects[i].dirty_flag = GFXOBJ_DIRTY_ALL;
                /* link map */
                object_list.objects[i].next = i < nums - 1 ? object_list.objects[i + 1] : null;
                object_list.objects[i].prev = i > 0 ? object_list.objects[i - 1] : null;
            }
            /* setup object_list */
            object_list.max_priority = max_priority;
            object_list.nums = nums;
            object_list.first_object = object_list.objects[0]; /* top of link */
            object_list.objects[nums - 1].next = null; /* bottom of link */
            object_list.sort_type = GFXOBJ_SORT_DEFAULT;
            /* resource tracking */
            object_list.next = first_object_list;
            first_object_list = object_list;

            return object_list;
        }
Beispiel #2
0
        public static void gfxobj_draw(gfx_object_list object_list)
        {
            osd_bitmap bitmap = Machine.scrbitmap;
            gfx_object _object;

            for (_object = object_list.first_object; _object != null; _object = _object.next)
            {
                if (_object.visible)
                    draw_object_one(bitmap, _object);
            }
        }
Beispiel #3
0
 void gfxobj_init()
 {
     first_object_list = null;
 }
Beispiel #4
0
        static void gfxobj_update_one(gfx_object_list object_list)
        {
            throw new Exception();
#if false
            gfx_object _object;
            gfx_object start_object, last_object;
            int dx, start_priority, end_priority;
            int priorities = object_list.max_priority;
            int priority;

            if ((object_list.sort_type & GFXOBJ_DO_SORT) != 0)
            {
                gfx_object[] top_object = new gfx_object[MAX_PRIORITY], end_object = new gfx_object[MAX_PRIORITY];
                /* object sort direction */
                if ((object_list.sort_type & GFXOBJ_SORT_OBJECT_BACK) != 0)
                {
                    start_object = object_list.objects[object_list.nums - 1];
                    last_object = object_list.objects[0].prev;
                    dx = -1;
                }
                else
                {
                    start_object = object_list.objects[0];
                    last_object = object_list.objects[object_list.nums];
                    dx = 1;
                }
                /* reset each priority point */
                for (priority = 0; priority < priorities; priority++)
                    end_object[priority] = null;
                /* update and sort */
                for (_object = start_object; _object != last_object; )
                {
                    /* update all objects */
                    if (_object.dirty_flag != 0)
                        object_update(_object);
                    /* store link */
                    if (_object.visible)
                    {
                        priority = _object.priority;
                        if (end_object[priority] != null)
                            end_object[priority].next = _object;
                        else
                            top_object[priority] = _object;
                        end_object[priority] = _object;
                    }
                    for (int i = 0; i < dx; i++) _object = _object.next;
                }

                /* priority sort direction */
                if ((object_list.sort_type & GFXOBJ_SORT_PRIORITY_BACK) != 0)
                {
                    start_priority = priorities - 1;
                    end_priority = -1;
                    dx = -1;
                }
                else
                {
                    start_priority = 0;
                    end_priority = priorities;
                    dx = 1;
                }
                /* link between priority */
                last_object = null;
                for (priority = start_priority; priority != end_priority; priority += dx)
                {
                    if (end_object[priority] != null)
                    {
                        if (last_object != null)
                            last_object.next = top_object[priority];
                        else
                            object_list.first_object = top_object[priority];
                        last_object = end_object[priority];
                    }
                }
                if (last_object == null)
                    object_list.first_object = null;
                else
                    last_object.next = null;
            }
            else
            {	/* non sort , update only linked object */
                for (_object = object_list.first_object; _object != null; _object = _object.next)
                {
                    /* update all objects */
                    if (_object.dirty_flag != 0)
                        object_update(_object);
                }
            }
            /* palette resource */
            if (_object.palette_flag != 0)
            {
                /* !!!!! do not supported yet !!!!! */
            }
#endif
        }