Use Sprite proxies for GUIs. (#93)
AKA "welders actually light up in the hands GUI".
This commit is contained in:
committed by
GitHub
parent
fe1252cca7
commit
189a52c6d7
@@ -1,6 +1,7 @@
|
||||
using Content.Shared.GameObjects;
|
||||
using Content.Shared.Input;
|
||||
using SS14.Client.GameObjects;
|
||||
using SS14.Client.Interfaces.GameObjects.Components;
|
||||
using SS14.Client.Interfaces.Input;
|
||||
using SS14.Client.UserInterface;
|
||||
using SS14.Client.UserInterface.Controls;
|
||||
@@ -162,12 +163,14 @@ namespace Content.Client.GameObjects
|
||||
button.GetChild<Button>("Button").OnPressed -= AddToInventory;
|
||||
|
||||
//Gets entity sprite and assigns it to button texture
|
||||
if (entity.TryGetComponent(out IconComponent sprite))
|
||||
if (entity.TryGetComponent(out ISpriteComponent sprite))
|
||||
{
|
||||
var tex = sprite.Icon.Default;
|
||||
//var tex = sprite.Icon.Default;
|
||||
|
||||
var rect = button.GetChild("CenterContainer").GetChild<TextureRect>("TextureRect");
|
||||
var view = button.GetChild<SpriteView>("SpriteView");
|
||||
view.Sprite = sprite;
|
||||
|
||||
/*
|
||||
if (tex != null)
|
||||
{
|
||||
rect.Texture = tex;
|
||||
@@ -177,6 +180,7 @@ namespace Content.Client.GameObjects
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
@@ -187,7 +191,7 @@ namespace Content.Client.GameObjects
|
||||
public void RemoveFromSlot(ServerInventoryMessage message)
|
||||
{
|
||||
InventoryButton button = InventorySlots[message.Inventoryslot];
|
||||
button.GetChild("CenterContainer").GetChild<TextureRect>("TextureRect").Texture = null;
|
||||
button.GetChild<SpriteView>("SpriteView").Sprite = null;
|
||||
button.EntityUid = EntityUid.Invalid;
|
||||
button.GetChild<Button>("Button").OnPressed -= RemoveFromInventory;
|
||||
button.GetChild<Button>("Button").OnPressed += AddToInventory;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
using Content.Shared.GameObjects;
|
||||
using Content.Shared.GameObjects.Components.Storage;
|
||||
using SS14.Client.GameObjects;
|
||||
using SS14.Client.Interfaces.GameObjects.Components;
|
||||
using SS14.Client.UserInterface;
|
||||
using SS14.Client.UserInterface.Controls;
|
||||
using SS14.Client.UserInterface.CustomControls;
|
||||
@@ -136,22 +137,10 @@ namespace Content.Client.GameObjects.Components.Storage
|
||||
container.GetChild<Control>("Control").GetChild<Label>("Size").Text = string.Format("{0}", entityuid.Value);
|
||||
|
||||
//Gets entity sprite and assigns it to button texture
|
||||
if (entity.TryGetComponent(out IconComponent icon))
|
||||
if (entity.TryGetComponent(out ISpriteComponent sprite))
|
||||
{
|
||||
var tex = icon.Icon.Default;
|
||||
var rect = container.GetChild("TextureWrap").GetChild<TextureRect>("TextureRect");
|
||||
|
||||
if (tex != null)
|
||||
{
|
||||
rect.Texture = tex;
|
||||
// Copypasted but replaced with 32 dunno if good
|
||||
var scale = (float)32 / tex.Height;
|
||||
rect.Scale = new Vector2(scale, scale);
|
||||
}
|
||||
else
|
||||
{
|
||||
rect.Dispose();
|
||||
}
|
||||
var view = container.GetChild<SpriteView>("SpriteView");
|
||||
view.Sprite = sprite;
|
||||
}
|
||||
|
||||
EntityList.AddChild(button);
|
||||
|
||||
@@ -4,6 +4,7 @@ using SS14.Client.GameObjects;
|
||||
using SS14.Client.Graphics;
|
||||
using SS14.Client.Graphics.Drawing;
|
||||
using SS14.Client.Input;
|
||||
using SS14.Client.Interfaces.GameObjects.Components;
|
||||
using SS14.Client.Interfaces.Player;
|
||||
using SS14.Client.Interfaces.ResourceManagement;
|
||||
using SS14.Client.Interfaces.UserInterface;
|
||||
@@ -73,6 +74,7 @@ namespace Content.Client.UserInterface
|
||||
handle.DrawStyleBox(handBox, leftActive ? handL : handR);
|
||||
handle.DrawStyleBox(inactiveHandBox, leftActive ? handR : handL);
|
||||
|
||||
/*
|
||||
if (LeftHand.Entity != null && LeftHand.HeldSprite != null)
|
||||
{
|
||||
var bounds = LeftHand.HeldSprite.Size;
|
||||
@@ -90,6 +92,7 @@ namespace Content.Client.UserInterface
|
||||
handR.Top + (int)(handR.Height / 2f - bounds.Y / 2f),
|
||||
(int)bounds.X, (int)bounds.Y), tile: false);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -124,18 +127,26 @@ namespace Content.Client.UserInterface
|
||||
var left = hands.GetEntity("left");
|
||||
var right = hands.GetEntity("right");
|
||||
|
||||
// I'm naively gonna assume all items are 32x32.
|
||||
//const float HalfSize = 16;
|
||||
|
||||
if (left != null)
|
||||
{
|
||||
if (left != LeftHand.Entity)
|
||||
{
|
||||
LeftHand.Entity = left;
|
||||
LeftHand.HeldSprite = GetIconSprite(left);
|
||||
LeftHand.MirrorHandle?.Dispose();
|
||||
LeftHand.MirrorHandle = GetSpriteMirror(left);
|
||||
LeftHand.MirrorHandle.AttachToControl(this);
|
||||
LeftHand.MirrorHandle.Offset = new Vector2(handL.Left + (int)(handL.Width / 2f),
|
||||
handL.Top + (int)(handL.Height / 2f));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LeftHand.Entity = null;
|
||||
LeftHand.HeldSprite = null;
|
||||
LeftHand.MirrorHandle?.Dispose();
|
||||
LeftHand.MirrorHandle = null;
|
||||
}
|
||||
|
||||
if (right != null)
|
||||
@@ -143,13 +154,18 @@ namespace Content.Client.UserInterface
|
||||
if (right != RightHand.Entity)
|
||||
{
|
||||
RightHand.Entity = right;
|
||||
RightHand.HeldSprite = GetIconSprite(right);
|
||||
RightHand.MirrorHandle?.Dispose();
|
||||
RightHand.MirrorHandle = GetSpriteMirror(right);
|
||||
RightHand.MirrorHandle.AttachToControl(this);
|
||||
RightHand.MirrorHandle.Offset = new Vector2(handR.Left + (int)(handR.Width / 2f),
|
||||
handR.Top + (int)(handR.Height / 2f));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
RightHand.Entity = null;
|
||||
RightHand.HeldSprite = null;
|
||||
RightHand.MirrorHandle?.Dispose();
|
||||
RightHand.MirrorHandle = null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -204,19 +220,19 @@ namespace Content.Client.UserInterface
|
||||
}
|
||||
}
|
||||
|
||||
private static Texture GetIconSprite(IEntity entity)
|
||||
private static ISpriteProxy GetSpriteMirror(IEntity entity)
|
||||
{
|
||||
if (entity.TryGetComponent<IconComponent>(out var component) && component.Icon != null)
|
||||
if (entity.TryGetComponent(out ISpriteComponent component))
|
||||
{
|
||||
return component.Icon.Default;
|
||||
return component.CreateProxy();
|
||||
}
|
||||
return IoCManager.Resolve<IResourceCache>().GetFallback<TextureResource>();
|
||||
return null;
|
||||
}
|
||||
|
||||
private struct UiHandInfo
|
||||
{
|
||||
public IEntity Entity { get; set; }
|
||||
public Texture HeldSprite { get; set; }
|
||||
public ISpriteProxy MirrorHandle { get; set; }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user