NScumm.Scumm.ScummEngine.DrawObject C# (CSharp) Метод

DrawObject() защищенный Метод

protected DrawObject ( int obj, int arg ) : void
obj int
arg int
Результат void
        void DrawObject(int obj, int arg)
        {
            var od = _objs[obj];

            if (_bgNeedsRedraw)
                arg = 0;

            if (od.Number == 0)
                return;

            var xpos = (od.Position.X / 8);
            var ypos = od.Position.Y;

            var width = od.Width / 8;
            var height = (od.Height &= 0xFFF8); // Mask out last 3 bits

            // Short circuit for objects which aren't visible at all.
            if (width == 0 || xpos > _screenEndStrip || xpos + width < _screenStartStrip)
                return;

            if (od == null || od.Images == null || od.Images.Count == 0)
                return;

            var x = 0xFFFF;

            int numstrip;
            for (var a = numstrip = 0; a < width; a++)
            {
                var tmp = xpos + a;
                if (tmp < _screenStartStrip || _screenEndStrip < tmp)
                    continue;
                if (arg > 0 && _screenStartStrip + arg <= tmp)
                    continue;
                if (arg < 0 && tmp <= _screenEndStrip + arg)
                    continue;
                Gdi.SetGfxUsageBit(tmp, Gdi.UsageBitDirty);
                if (tmp < x)
                    x = tmp;
                numstrip++;
            }

            if (numstrip != 0)
            {
                var flags = od.Flags | DrawBitmaps.ObjectMode;
                // Sam & Max needs this to fix object-layering problems with
                // the inventory and conversation icons.
                if ((_game.GameId == GameId.SamNMax && GetClass(od.Number, ObjectClass.IgnoreBoxes)) ||
                    (_game.GameId == GameId.FullThrottle && GetClass(od.Number, ObjectClass.Player)))
                    flags |= DrawBitmaps.DrawMaskOnAll;

                ImageData img = null;
                if (Game.Version > 4)
                {
                    var state = GetStateCore(od.Number);
                    if (state > 0 && (state - 1) < od.Images.Count)
                    {
                        img = od.Images[state - 1];
                    }
                }
                else
                {
                    img = od.Images.FirstOrDefault();
                }

                if (img != null)
                {
                    Gdi.DrawBitmap(img, _mainVirtScreen, x, ypos, width * 8, height, x - xpos, numstrip, roomData.Header.Width, flags);
                }
            }
        }
ScummEngine