void Render(RenderEvent e) { var window = Resolve <IWindowManager>(); if (window.Size.X < 1 || window.Size.Y < 1) { return; } var position = new Vector3(window.PixelToNorm(_position), 0.0f); var size = new Vector2(window.GuiScale, -window.GuiScale) * _size / window.Size; e.Add(new Sprite <CoreSpriteId>(_cursorId, 0, position, (int)DrawLayer.MaxLayer, SpriteFlags.NoTransform | SpriteFlags.NoDepthTest, size)); if (_cursorId == CoreSpriteId.CursorSmall) // Inventory screen, check what's being held. { var assets = Resolve <IAssetManager>(); var state = Resolve <IGameState>(); var held = Resolve <IInventoryScreenState>().ItemInHand; if (held is GoldInHand) { var spriteId = CoreSpriteId.UiGold; var texture = assets.LoadTexture(spriteId); texture.GetSubImageDetails(0, out var itemSize, out _, out _, out _); e.Add(BuildItemInHandSprite(spriteId, itemSize, position)); } else if (held is RationsInHand) { var spriteId = CoreSpriteId.UiFood; var texture = assets.LoadTexture(spriteId); texture.GetSubImageDetails(0, out var itemSize, out _, out _, out _); e.Add(BuildItemInHandSprite(spriteId, itemSize, position)); } else if (held is ItemSlot itemInHand) { var item = assets.LoadItem(itemInHand.Id); ItemSpriteId spriteId = item.Icon + state.TickCount % item.IconAnim; var texture = assets.LoadTexture(spriteId); texture.GetSubImageDetails((int)spriteId, out var itemSize, out _, out _, out _); e.Add(new Sprite <ItemSpriteId>(spriteId, (int)spriteId, position + new Vector3(window.UiToNormRelative(new Vector2(6, 0)), 0), (int)DrawLayer.MaxLayer, SpriteFlags.NoTransform | SpriteFlags.NoDepthTest, window.UiToNormRelative(itemSize))); // TODO: Quantity text } } }
void RenderItemInHandCursor(IAssetManager assets, ISpriteManager sm, IWindowManager window, Vector3 normPosition) { var held = Resolve <IInventoryManager>().ItemInHand; var itemAmountText = GetAmountText(); if (_lastItemAmountText != itemAmountText) { var tm = Resolve <ITextManager>(); _lastItemAmountText = itemAmountText; _itemAmountSprite?.Dispose(); _itemAmountSprite = itemAmountText == null ? null : tm.BuildRenderable(new TextBlock(itemAmountText), DrawLayer.MaxLayer, null, this); } if (_cursorId != CoreSpriteId.CursorSmall) // Inventory screen, check what's being held. { _itemSprite?.Dispose(); _itemSprite = null; _itemAmountSprite?.Dispose(); _itemAmountSprite = null; return; } int subItem = 0; ITexture texture = null; switch (held.Item) { case Gold _: texture = assets.LoadTexture(CoreSpriteId.UiGold); break; case Rations _: texture = assets.LoadTexture(CoreSpriteId.UiFood); break; case ItemData item: { ItemSpriteId spriteId = (ItemSpriteId)((int)item.Icon + _frame % item.IconAnim); texture = assets.LoadTexture(spriteId); subItem = (int)spriteId; break; } } if (texture == null) { _itemSprite?.Dispose(); _itemSprite = null; return; } if (texture != _itemSprite?.Key.Texture) { _itemSprite?.Dispose(); var key = new SpriteKey(texture, DrawLayer.Cursor, SpriteKeyFlags.NoDepthTest | SpriteKeyFlags.NoTransform); _itemSprite = sm.Borrow(key, 1, this); } var subImage = texture.GetSubImageDetails(subItem); // TODO: Quantity text var instances = _itemSprite.Access(); instances[0] = SpriteInstanceData.TopMid( normPosition + new Vector3(window.UiToNormRelative(6, 6), 0), window.UiToNormRelative(subImage.Size), subImage, 0); if (_itemAmountSprite != null) { _itemAmountSprite.Position = normPosition + new Vector3(window.UiToNormRelative(6, 18), 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; } }
public UiItemSprite(ItemSpriteId id) : base(null) { Id = id; }