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); }
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); } }
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); } }
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; }
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); }
protected override void Unsubscribed() { _sprite?.Dispose(); _sprite = null; }
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; } }