コード例 #1
0
ファイル: CursorManager.cs プロジェクト: Metibor/ualbion
        void RenderCursor(IAssetManager assets, ISpriteManager sm, IWindowManager window, Vector3 position)
        {
            if (!_showCursor)
            {
                _cursorSprite?.Dispose();
                _itemSprite?.Dispose();
                _cursorSprite = null;
                _itemSprite   = null;
                return;
            }

            var cursorTexture = assets.LoadTexture(_cursorId);

            if (cursorTexture == null)
            {
                return;
            }

            if (cursorTexture != _cursorSprite?.Key.Texture)
            {
                _cursorSprite?.Dispose();
                var key = new SpriteKey(cursorTexture, DrawLayer.Cursor, SpriteKeyFlags.NoDepthTest | SpriteKeyFlags.NoTransform);
                _cursorSprite = sm.Borrow(key, 1, this);
            }

            var instances = _cursorSprite.Access();
            var size      = window.UiToNormRelative(new Vector2(cursorTexture.Width, cursorTexture.Height));

            instances[0] = SpriteInstanceData.TopMid(position, size, _cursorSprite, 0, 0);
        }
コード例 #2
0
ファイル: CursorManager.cs プロジェクト: lucorp/ualbion
        void RenderHotspot(ISpriteManager sm, IWindowManager window, bool showHotspot)
        {
            if (!showHotspot)
            {
                _hotspotSprite?.Dispose();
                _hotspotSprite = null;
                return;
            }

            var commonColors = Resolve <ICommonColors>();

            if (_hotspotSprite == null)
            {
                var key = new SpriteKey(commonColors.BorderTexture, SpriteSampler.Point, DrawLayer.MaxLayer, SpriteKeyFlags.NoTransform | SpriteKeyFlags.NoDepthTest);
                _hotspotSprite = sm.Borrow(key, 1, this);
            }

            var position = new Vector3(window.PixelToNorm(Position), 0.0f);
            var size     = window.UiToNormRelative(Vector2.One);

            bool lockWasTaken = false;
            var  instances    = _hotspotSprite.Lock(ref lockWasTaken);

            try
            {
                var region = _hotspotSprite.Key.Texture.Regions[(int)commonColors.Palette[CommonColor.Yellow3]];
                instances[0] = new SpriteInstanceData(position, size, region, SpriteFlags.TopMid);
            }
            finally { _hotspotSprite.Unlock(lockWasTaken); }
        }
コード例 #3
0
ファイル: CursorManager.cs プロジェクト: lucorp/ualbion
        void RenderCursor(IAssetManager assets, ISpriteManager sm, IWindowManager window, Vector3 position)
        {
            if (!_showCursor)
            {
                _cursorSprite?.Dispose();
                _itemSprite?.Dispose();
                _cursorSprite = null;
                _itemSprite   = null;
                return;
            }

            var cursorTexture = assets.LoadTexture(_cursorId);

            if (cursorTexture == null)
            {
                return;
            }

            if (cursorTexture != _cursorSprite?.Key.Texture)
            {
                _cursorSprite?.Dispose();
                var key = new SpriteKey(cursorTexture, SpriteSampler.Point, DrawLayer.Cursor, SpriteKeyFlags.NoDepthTest | SpriteKeyFlags.NoTransform);
                _cursorSprite = sm.Borrow(key, 1, this);
            }

            var size = window.UiToNormRelative(new Vector2(cursorTexture.Width, cursorTexture.Height));

            bool lockWasTaken = false;
            var  instances    = _cursorSprite.Lock(ref lockWasTaken);

            try
            {
                instances[0] = new SpriteInstanceData(position, size, _cursorSprite.Key.Texture.Regions[0], SpriteFlags.TopMid);
            }
            finally { _cursorSprite.Unlock(lockWasTaken); }
        }
コード例 #4
0
        void UpdateSprite(Vector3 position, Vector2 size, DrawLayer layer)
        {
            if (layer != _sprite?.Key.RenderOrder)
            {
                _sprite?.Dispose();

                var sm  = Resolve <ISpriteManager>();
                var key = new SpriteKey(CommonColors.BorderTexture, layer, SpriteKeyFlags.NoTransform | SpriteKeyFlags.NoDepthTest);
                _sprite = sm.Borrow(key, 1, this);
            }
            else if (_lastPosition == position && _lastSize == size)
            {
                return;
            }

            var instances = _sprite.Access();

            instances[0]  = SpriteInstanceData.TopLeft(position, size, _sprite, (int)CommonColors.Palette[_color], 0);
            _lastPosition = position;
            _lastSize     = size;
        }
コード例 #5
0
ファイル: CursorManager.cs プロジェクト: Metibor/ualbion
        void RenderHotspot(ISpriteManager sm, IWindowManager window, bool showHotspot)
        {
            if (!showHotspot)
            {
                _hotspotSprite?.Dispose();
                _hotspotSprite = null;
                return;
            }

            var commonColors = Resolve <ICommonColors>();

            if (_hotspotSprite == null)
            {
                var key = new SpriteKey(commonColors.BorderTexture, DrawLayer.MaxLayer, SpriteKeyFlags.NoTransform | SpriteKeyFlags.NoDepthTest);
                _hotspotSprite = sm.Borrow(key, 1, this);
            }

            var instances = _hotspotSprite.Access();
            var position  = new Vector3(window.PixelToNorm(Position), 0.0f);
            var size      = window.UiToNormRelative(Vector2.One);

            instances[0] = SpriteInstanceData.TopLeft(position, size, _hotspotSprite, (int)commonColors.Palette[CommonColor.Yellow3], 0);
        }
コード例 #6
0
 protected override void Unsubscribed()
 {
     _sprite?.Dispose();
     _sprite = null;
 }
コード例 #7
0
        void Render()
        {
            if (!_dirty)
            {
                return;
            }
            _dirty = false;

            var assets = Resolve <IAssetManager>();
            var sm     = Resolve <ISpriteManager>();
            var window = Resolve <IWindowManager>();

            if (window.Size.X < 1 || window.Size.Y < 1)
            {
                return;
            }

            var cursorTexture = assets.LoadTexture(_cursorId);

            if (cursorTexture == null)
            {
                return;
            }

            if (cursorTexture != _cursorSprite?.Key.Texture)
            {
                _cursorSprite?.Dispose();

                var key = new SpriteKey(cursorTexture, DrawLayer.MaxLayer,
                                        SpriteKeyFlags.NoDepthTest | SpriteKeyFlags.NoTransform);

                _cursorSprite = sm.Borrow(key, 1, this);
            }

            var instances = _cursorSprite.Access();
            var position  = new Vector3(window.PixelToNorm(_position), 0.0f);
            var size      = window.UiToNormRelative(_size) / 2;

            instances[0] = SpriteInstanceData.TopMid(position, size, _cursorSprite, 0, 0);

            if (_cursorId == CoreSpriteId.CursorSmall) // Inventory screen, check what's being held.
            {
                var held = Resolve <IInventoryScreenState>().ItemInHand;

                int      subItem = 0;
                ITexture texture = null;

                if (held is GoldInHand)
                {
                    texture = assets.LoadTexture(CoreSpriteId.UiGold);
                }
                else if (held is RationsInHand)
                {
                    texture = assets.LoadTexture(CoreSpriteId.UiFood);
                }
                else if (held is ItemSlot itemInHand)
                {
                    var          item     = assets.LoadItem(itemInHand.Id);
                    ItemSpriteId spriteId = item.Icon + _frame % item.IconAnim;
                    texture = assets.LoadTexture(spriteId);
                    subItem = (int)spriteId;
                }

                if (texture == null)
                {
                    _itemSprite?.Dispose();
                    _itemSprite = null;
                    return;
                }

                if (texture != _itemSprite?.Key.Texture)
                {
                    _itemSprite?.Dispose();

                    var key = new SpriteKey(texture, DrawLayer.MaxLayer,
                                            SpriteKeyFlags.NoDepthTest | SpriteKeyFlags.NoTransform);

                    _itemSprite = sm.Borrow(key, 1, this);
                }

                texture.GetSubImageDetails(subItem, out size, out var to, out var ts, out var tl);

                // TODO: Quantity text
                instances    = _itemSprite.Access();
                instances[0] = SpriteInstanceData.TopMid(
                    position + new Vector3(window.UiToNormRelative(new Vector2(6, 6)), 0),
                    window.UiToNormRelative(size),
                    to, ts, tl, 0);
            }
            else
            {
                _itemSprite?.Dispose();
                _itemSprite = null;
            }
        }