Equipment & inhands. (#110)
* Equipment WiP * Equipment's starting to work. * Equipment works properly 100% now. * Inhands work. Also more clothes.
@@ -68,7 +68,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="EntryPoint.cs" />
|
<Compile Include="EntryPoint.cs" />
|
||||||
|
<Compile Include="GameObjects\Components\Clothing\ClothingComponent.cs" />
|
||||||
<Compile Include="GameObjects\Components\Inventory\ClientInventoryComponent.cs" />
|
<Compile Include="GameObjects\Components\Inventory\ClientInventoryComponent.cs" />
|
||||||
|
<Compile Include="GameObjects\Components\Items\ItemComponent.cs" />
|
||||||
<Compile Include="GameObjects\Components\Power\ApcBoundUserInterface.cs" />
|
<Compile Include="GameObjects\Components\Power\ApcBoundUserInterface.cs" />
|
||||||
<Compile Include="GameObjects\Components\Storage\ClientStorageComponent.cs" />
|
<Compile Include="GameObjects\Components\Storage\ClientStorageComponent.cs" />
|
||||||
<Compile Include="Input\ContentContexts.cs" />
|
<Compile Include="Input\ContentContexts.cs" />
|
||||||
@@ -121,4 +123,4 @@
|
|||||||
<Compile Include="Construction\ConstructionPlacementHijack.cs" />
|
<Compile Include="Construction\ConstructionPlacementHijack.cs" />
|
||||||
<Compile Include="GameObjects\Components\IconSmoothing\IconSmoothComponent.cs" />
|
<Compile Include="GameObjects\Components\IconSmoothing\IconSmoothComponent.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
using Content.Client.GameObjects;
|
using Content.Client.GameObjects;
|
||||||
|
using Content.Client.GameObjects.Components.Clothing;
|
||||||
using Content.Client.GameObjects.Components.Construction;
|
using Content.Client.GameObjects.Components.Construction;
|
||||||
using Content.Client.GameObjects.Components.Power;
|
using Content.Client.GameObjects.Components.Power;
|
||||||
using Content.Client.GameObjects.Components.SmoothWalling;
|
using Content.Client.GameObjects.Components.SmoothWalling;
|
||||||
@@ -24,7 +25,6 @@ namespace Content.Client
|
|||||||
var factory = IoCManager.Resolve<IComponentFactory>();
|
var factory = IoCManager.Resolve<IComponentFactory>();
|
||||||
var prototypes = IoCManager.Resolve<IPrototypeManager>();
|
var prototypes = IoCManager.Resolve<IPrototypeManager>();
|
||||||
|
|
||||||
factory.RegisterIgnore("Item");
|
|
||||||
factory.RegisterIgnore("Interactable");
|
factory.RegisterIgnore("Interactable");
|
||||||
factory.RegisterIgnore("Damageable");
|
factory.RegisterIgnore("Damageable");
|
||||||
factory.RegisterIgnore("Destructible");
|
factory.RegisterIgnore("Destructible");
|
||||||
@@ -48,7 +48,6 @@ namespace Content.Client
|
|||||||
factory.RegisterIgnore("MeleeWeapon");
|
factory.RegisterIgnore("MeleeWeapon");
|
||||||
|
|
||||||
factory.RegisterIgnore("Storeable");
|
factory.RegisterIgnore("Storeable");
|
||||||
factory.RegisterIgnore("Clothing");
|
|
||||||
|
|
||||||
factory.RegisterIgnore("Material");
|
factory.RegisterIgnore("Material");
|
||||||
factory.RegisterIgnore("Stack");
|
factory.RegisterIgnore("Stack");
|
||||||
@@ -61,6 +60,9 @@ namespace Content.Client
|
|||||||
factory.Register<ConstructorComponent>();
|
factory.Register<ConstructorComponent>();
|
||||||
factory.Register<ConstructionGhostComponent>();
|
factory.Register<ConstructionGhostComponent>();
|
||||||
factory.Register<IconSmoothComponent>();
|
factory.Register<IconSmoothComponent>();
|
||||||
|
factory.Register<ClothingComponent>();
|
||||||
|
factory.Register<ItemComponent>();
|
||||||
|
factory.RegisterReference<ClothingComponent, ItemComponent>();
|
||||||
|
|
||||||
factory.RegisterIgnore("Construction");
|
factory.RegisterIgnore("Construction");
|
||||||
factory.RegisterIgnore("Apc");
|
factory.RegisterIgnore("Apc");
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
using Content.Shared.GameObjects.Components.Inventory;
|
||||||
|
using SS14.Client.Graphics;
|
||||||
|
|
||||||
|
namespace Content.Client.GameObjects.Components.Clothing
|
||||||
|
{
|
||||||
|
public class ClothingComponent : ItemComponent
|
||||||
|
{
|
||||||
|
public override string Name => "Clothing";
|
||||||
|
|
||||||
|
public (RSI rsi, RSI.StateId stateId)? GetEquippedStateInfo(EquipmentSlotDefines.SlotFlags slot)
|
||||||
|
{
|
||||||
|
if (RsiPath == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rsi = GetRSI();
|
||||||
|
var stateId = EquippedPrefix != null ? $"{EquippedPrefix}-equipped-{slot}" : $"equipped-{slot}";
|
||||||
|
if (rsi.TryGetState(stateId, out _))
|
||||||
|
{
|
||||||
|
return (rsi, stateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,46 +6,118 @@ using SS14.Client.Interfaces.Input;
|
|||||||
using SS14.Client.UserInterface;
|
using SS14.Client.UserInterface;
|
||||||
using SS14.Client.UserInterface.Controls;
|
using SS14.Client.UserInterface.Controls;
|
||||||
using SS14.Client.UserInterface.CustomControls;
|
using SS14.Client.UserInterface.CustomControls;
|
||||||
using SS14.Shared.ContentPack;
|
|
||||||
using SS14.Shared.GameObjects;
|
using SS14.Shared.GameObjects;
|
||||||
using SS14.Shared.Input;
|
using SS14.Shared.Input;
|
||||||
using SS14.Shared.Interfaces.GameObjects;
|
using SS14.Shared.Interfaces.GameObjects;
|
||||||
using SS14.Shared.Interfaces.Network;
|
using SS14.Shared.Interfaces.Network;
|
||||||
using SS14.Shared.IoC;
|
using SS14.Shared.IoC;
|
||||||
using SS14.Shared.Log;
|
|
||||||
using SS14.Shared.Maths;
|
|
||||||
using SS14.Shared.Serialization;
|
using SS14.Shared.Serialization;
|
||||||
using SS14.Shared.Utility;
|
using SS14.Shared.Utility;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using Content.Client.GameObjects.Components.Clothing;
|
||||||
|
using SS14.Shared.Interfaces.Reflection;
|
||||||
using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines;
|
using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines;
|
||||||
using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage;
|
using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage;
|
||||||
using static Content.Shared.GameObjects.SharedInventoryComponent.ServerInventoryMessage;
|
|
||||||
|
|
||||||
namespace Content.Client.GameObjects
|
namespace Content.Client.GameObjects
|
||||||
{
|
{
|
||||||
public class ClientInventoryComponent : SharedInventoryComponent
|
public class ClientInventoryComponent : SharedInventoryComponent
|
||||||
{
|
{
|
||||||
private InventoryWindow Window;
|
private Dictionary<Slots, IEntity> _slots = new Dictionary<Slots, IEntity>();
|
||||||
private string TemplateName = "HumanInventory"; //stored for serialization purposes
|
|
||||||
|
private InventoryWindow _window;
|
||||||
|
private string _templateName = "HumanInventory"; //stored for serialization purposes
|
||||||
|
|
||||||
private InputCmdHandler _openMenuCmdHandler;
|
private InputCmdHandler _openMenuCmdHandler;
|
||||||
|
private Inventory _inventory;
|
||||||
|
|
||||||
|
private ISpriteComponent _sprite;
|
||||||
|
|
||||||
public override void OnRemove()
|
public override void OnRemove()
|
||||||
{
|
{
|
||||||
base.OnRemove();
|
base.OnRemove();
|
||||||
|
|
||||||
Window.Dispose();
|
_window.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnAdd()
|
||||||
|
{
|
||||||
|
base.OnAdd();
|
||||||
|
|
||||||
|
_openMenuCmdHandler = InputCmdHandler.FromDelegate(session => { _window.AddToScreen(); _window.Open(); });
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
var reflectionManager = IoCManager.Resolve<IReflectionManager>();
|
||||||
|
var type = reflectionManager.LooseGetType(_templateName);
|
||||||
|
DebugTools.Assert(type != null);
|
||||||
|
_inventory = (Inventory)Activator.CreateInstance(type);
|
||||||
|
|
||||||
|
_window = new InventoryWindow(this);
|
||||||
|
_window.CreateInventory(_inventory);
|
||||||
|
|
||||||
|
if (Owner.TryGetComponent(out _sprite))
|
||||||
|
{
|
||||||
|
foreach (var mask in _inventory.SlotMasks.OrderBy(s => _inventory.SlotDrawingOrder(s)))
|
||||||
|
{
|
||||||
|
if (mask == Slots.NONE)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
_sprite.LayerMapReserveBlank(mask);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Component state already came in but we couldn't set anything visually because, well, we didn't initialize yet.
|
||||||
|
foreach (var (slot, entity) in _slots)
|
||||||
|
{
|
||||||
|
_setSlot(slot, entity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void ExposeData(ObjectSerializer serializer)
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
{
|
{
|
||||||
base.ExposeData(serializer);
|
base.ExposeData(serializer);
|
||||||
|
|
||||||
Window = new InventoryWindow(this);
|
serializer.DataField(ref _templateName, "Template", "HumanInventory");
|
||||||
_openMenuCmdHandler = InputCmdHandler.FromDelegate(session => { Window.AddToScreen(); Window.Open(); });
|
}
|
||||||
serializer.DataField(ref TemplateName, "Template", "HumanInventory");
|
|
||||||
Window.CreateInventory(TemplateName);
|
public override void HandleComponentState(ComponentState state)
|
||||||
|
{
|
||||||
|
base.HandleComponentState(state);
|
||||||
|
var cast = (InventoryComponentState) state;
|
||||||
|
|
||||||
|
var doneSlots = new HashSet<Slots>();
|
||||||
|
|
||||||
|
var entityManager = IoCManager.Resolve<IEntityManager>();
|
||||||
|
|
||||||
|
foreach (var (slot, entityUid) in cast.Entities)
|
||||||
|
{
|
||||||
|
if (_slots.ContainsKey(slot))
|
||||||
|
{
|
||||||
|
_slots.Remove(slot);
|
||||||
|
_clearSlot(slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
var entity = entityManager.GetEntity(entityUid);
|
||||||
|
_slots[slot] = entity;
|
||||||
|
_setSlot(slot, entity);
|
||||||
|
doneSlots.Add(slot);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var slot in _slots.Keys.ToList())
|
||||||
|
{
|
||||||
|
if (!doneSlots.Contains(slot))
|
||||||
|
{
|
||||||
|
_clearSlot(slot);
|
||||||
|
_slots.Remove(slot);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null)
|
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null)
|
||||||
@@ -53,18 +125,6 @@ namespace Content.Client.GameObjects
|
|||||||
var inputMgr = IoCManager.Resolve<IInputManager>();
|
var inputMgr = IoCManager.Resolve<IInputManager>();
|
||||||
switch (message)
|
switch (message)
|
||||||
{
|
{
|
||||||
//Updates what we are storing in UI slots
|
|
||||||
case ServerInventoryMessage msg:
|
|
||||||
if (msg.Updatetype == ServerInventoryUpdate.Addition)
|
|
||||||
{
|
|
||||||
Window.AddToSlot(msg);
|
|
||||||
}
|
|
||||||
else if (msg.Updatetype == ServerInventoryUpdate.Removal)
|
|
||||||
{
|
|
||||||
Window.RemoveFromSlot(msg);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case PlayerAttachedMsg _:
|
case PlayerAttachedMsg _:
|
||||||
inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, _openMenuCmdHandler);
|
inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, _openMenuCmdHandler);
|
||||||
break;
|
break;
|
||||||
@@ -75,6 +135,34 @@ namespace Content.Client.GameObjects
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void _setSlot(Slots slot, IEntity entity)
|
||||||
|
{
|
||||||
|
if (_sprite != null && entity.TryGetComponent(out ClothingComponent clothing))
|
||||||
|
{
|
||||||
|
var flag = SlotMasks[slot];
|
||||||
|
var data = clothing.GetEquippedStateInfo(flag);
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
|
_sprite.LayerSetVisible(slot, false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var (rsi, state) = data.Value;
|
||||||
|
_sprite.LayerSetVisible(slot, true);
|
||||||
|
_sprite.LayerSetRSI(slot, rsi);
|
||||||
|
_sprite.LayerSetState(slot, state);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
_window?.AddToSlot(slot, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void _clearSlot(Slots slot)
|
||||||
|
{
|
||||||
|
_window?.RemoveFromSlot(slot);
|
||||||
|
_sprite?.LayerSetVisible(slot, false);
|
||||||
|
}
|
||||||
|
|
||||||
public void SendUnequipMessage(Slots slot)
|
public void SendUnequipMessage(Slots slot)
|
||||||
{
|
{
|
||||||
var unequipmessage = new ClientInventoryMessage(slot, ClientInventoryUpdate.Unequip);
|
var unequipmessage = new ClientInventoryMessage(slot, ClientInventoryUpdate.Unequip);
|
||||||
@@ -109,14 +197,10 @@ namespace Content.Client.GameObjects
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a grid container filled with slot buttons loaded from an inventory template
|
/// Creates a grid container filled with slot buttons loaded from an inventory template
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="TemplateName"></param>
|
public void CreateInventory(Inventory inventory)
|
||||||
public void CreateInventory(string TemplateName)
|
|
||||||
{
|
{
|
||||||
Type type = AppDomain.CurrentDomain.GetAssemblyByName("Content.Shared").GetType("Content.Shared.GameObjects." + TemplateName);
|
|
||||||
Inventory inventory = (Inventory)Activator.CreateInstance(type);
|
|
||||||
|
|
||||||
elements_x = inventory.Columns;
|
elements_x = inventory.Columns;
|
||||||
|
|
||||||
GridContainer = (GridContainer)Contents.GetChild("PanelContainer").GetChild("CenterContainer").GetChild("GridContainer");
|
GridContainer = (GridContainer)Contents.GetChild("PanelContainer").GetChild("CenterContainer").GetChild("GridContainer");
|
||||||
@@ -151,14 +235,11 @@ namespace Content.Client.GameObjects
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds the item we have equipped to the slot texture and prepares the slot button for removal
|
/// Adds the item we have equipped to the slot texture and prepares the slot button for removal
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message"></param>
|
public void AddToSlot(Slots slot, IEntity entity)
|
||||||
public void AddToSlot(ServerInventoryMessage message)
|
|
||||||
{
|
{
|
||||||
InventoryButton button = InventorySlots[message.Inventoryslot];
|
var button = InventorySlots[slot];
|
||||||
var entity = IoCManager.Resolve<IEntityManager>().GetEntity(message.EntityUid);
|
|
||||||
|
|
||||||
button.EntityUid = message.EntityUid;
|
button.EntityUid = entity.Uid;
|
||||||
var container = button.GetChild("CenterContainer");
|
|
||||||
button.GetChild<Button>("Button").OnPressed += RemoveFromInventory;
|
button.GetChild<Button>("Button").OnPressed += RemoveFromInventory;
|
||||||
button.GetChild<Button>("Button").OnPressed -= AddToInventory;
|
button.GetChild<Button>("Button").OnPressed -= AddToInventory;
|
||||||
|
|
||||||
@@ -187,10 +268,9 @@ namespace Content.Client.GameObjects
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// Remove element from the UI and update its button to blank texture and prepare for insertion again
|
/// Remove element from the UI and update its button to blank texture and prepare for insertion again
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="message"></param>
|
public void RemoveFromSlot(Slots slot)
|
||||||
public void RemoveFromSlot(ServerInventoryMessage message)
|
|
||||||
{
|
{
|
||||||
InventoryButton button = InventorySlots[message.Inventoryslot];
|
var button = InventorySlots[slot];
|
||||||
button.GetChild<SpriteView>("SpriteView").Sprite = null;
|
button.GetChild<SpriteView>("SpriteView").Sprite = null;
|
||||||
button.EntityUid = EntityUid.Invalid;
|
button.EntityUid = EntityUid.Invalid;
|
||||||
button.GetChild<Button>("Button").OnPressed -= RemoveFromInventory;
|
button.GetChild<Button>("Button").OnPressed -= RemoveFromInventory;
|
||||||
|
|||||||
@@ -6,19 +6,60 @@ using SS14.Shared.GameObjects;
|
|||||||
using SS14.Shared.Interfaces.GameObjects;
|
using SS14.Shared.Interfaces.GameObjects;
|
||||||
using SS14.Shared.IoC;
|
using SS14.Shared.IoC;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using SS14.Client.GameObjects;
|
||||||
|
using SS14.Client.Interfaces.GameObjects.Components;
|
||||||
|
using SS14.Shared.Interfaces.Network;
|
||||||
|
using SS14.Shared.Serialization;
|
||||||
|
using SS14.Shared.Utility;
|
||||||
using SS14.Shared.ViewVariables;
|
using SS14.Shared.ViewVariables;
|
||||||
|
|
||||||
namespace Content.Client.GameObjects
|
namespace Content.Client.GameObjects
|
||||||
{
|
{
|
||||||
public class HandsComponent : SharedHandsComponent, IHandsComponent
|
public class HandsComponent : SharedHandsComponent, IHandsComponent
|
||||||
{
|
{
|
||||||
private readonly Dictionary<string, IEntity> hands = new Dictionary<string, IEntity>();
|
private HandsGui _gui;
|
||||||
[ViewVariables]
|
private IUserInterfaceManager _userInterfaceManager;
|
||||||
public string ActiveIndex { get; private set; }
|
|
||||||
|
[ViewVariables] private readonly Dictionary<string, IEntity> _hands = new Dictionary<string, IEntity>();
|
||||||
|
|
||||||
|
[ViewVariables] public string ActiveIndex { get; private set; }
|
||||||
|
|
||||||
|
[ViewVariables] private ISpriteComponent _sprite;
|
||||||
|
|
||||||
|
public override void OnAdd()
|
||||||
|
{
|
||||||
|
base.OnAdd();
|
||||||
|
|
||||||
|
_userInterfaceManager = IoCManager.Resolve<IUserInterfaceManager>();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void OnRemove()
|
||||||
|
{
|
||||||
|
base.OnRemove();
|
||||||
|
|
||||||
|
_gui?.Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void Initialize()
|
||||||
|
{
|
||||||
|
base.Initialize();
|
||||||
|
|
||||||
|
_userInterfaceManager = IoCManager.Resolve<IUserInterfaceManager>();
|
||||||
|
|
||||||
|
if (Owner.TryGetComponent(out _sprite))
|
||||||
|
{
|
||||||
|
foreach (var slot in _hands.Keys)
|
||||||
|
{
|
||||||
|
_sprite.LayerMapReserveBlank($"hand-{slot}");
|
||||||
|
_setHand(slot, _hands[slot]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public IEntity GetEntity(string index)
|
public IEntity GetEntity(string index)
|
||||||
{
|
{
|
||||||
if (hands.TryGetValue(index, out var entity))
|
if (_hands.TryGetValue(index, out var entity))
|
||||||
{
|
{
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
@@ -28,31 +69,104 @@ namespace Content.Client.GameObjects
|
|||||||
|
|
||||||
public override void HandleComponentState(ComponentState state)
|
public override void HandleComponentState(ComponentState state)
|
||||||
{
|
{
|
||||||
var cast = (HandsComponentState)state;
|
var cast = (HandsComponentState) state;
|
||||||
hands.Clear();
|
foreach (var (slot, uid) in cast.Hands)
|
||||||
foreach (var hand in cast.Hands)
|
|
||||||
{
|
{
|
||||||
IEntity entity = null;
|
IEntity entity = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
entity = Owner.EntityManager.GetEntity(hand.Value);
|
entity = Owner.EntityManager.GetEntity(uid);
|
||||||
}
|
}
|
||||||
catch
|
catch
|
||||||
{
|
{
|
||||||
// Nothing.
|
// Nothing.
|
||||||
}
|
}
|
||||||
hands[hand.Key] = entity;
|
|
||||||
|
_hands[slot] = entity;
|
||||||
|
_setHand(slot, entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var slot in _hands.Keys.ToList())
|
||||||
|
{
|
||||||
|
if (!cast.Hands.ContainsKey(slot))
|
||||||
|
{
|
||||||
|
_hands[slot] = null;
|
||||||
|
_setHand(slot, null);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ActiveIndex = cast.ActiveIndex;
|
ActiveIndex = cast.ActiveIndex;
|
||||||
// Tell UI to update.
|
|
||||||
var uiMgr = IoCManager.Resolve<IUserInterfaceManager>();
|
_gui?.UpdateHandIcons();
|
||||||
if (!uiMgr.StateRoot.TryGetChild<HandsGui>("HandsGui", out var control))
|
}
|
||||||
|
|
||||||
|
private void _setHand(string hand, IEntity entity)
|
||||||
|
{
|
||||||
|
if (_sprite == null)
|
||||||
{
|
{
|
||||||
control = new HandsGui();
|
return;
|
||||||
uiMgr.StateRoot.AddChild(control);
|
}
|
||||||
|
|
||||||
|
if (entity == null)
|
||||||
|
{
|
||||||
|
_sprite.LayerSetVisible($"hand-{hand}", false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var item = entity.GetComponent<ItemComponent>();
|
||||||
|
var maybeInhands = item.GetInHandStateInfo(hand);
|
||||||
|
if (!maybeInhands.HasValue)
|
||||||
|
{
|
||||||
|
_sprite.LayerSetVisible($"hand-{hand}", false);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var (rsi, state) = maybeInhands.Value;
|
||||||
|
_sprite.LayerSetVisible($"hand-{hand}", true);
|
||||||
|
_sprite.LayerSetState($"hand-{hand}", state, rsi);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
|
{
|
||||||
|
base.ExposeData(serializer);
|
||||||
|
|
||||||
|
if (!serializer.Reading)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var slot in serializer.ReadDataFieldCached("hands", new List<string>()))
|
||||||
|
{
|
||||||
|
_hands.Add(slot, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null,
|
||||||
|
IComponent component = null)
|
||||||
|
{
|
||||||
|
base.HandleMessage(message, netChannel, component);
|
||||||
|
|
||||||
|
switch (message)
|
||||||
|
{
|
||||||
|
case PlayerAttachedMsg _:
|
||||||
|
if (_gui == null)
|
||||||
|
{
|
||||||
|
_gui = new HandsGui();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_gui.Parent?.RemoveChild(_gui);
|
||||||
|
}
|
||||||
|
|
||||||
|
_userInterfaceManager.StateRoot.AddChild(_gui);
|
||||||
|
_gui.UpdateHandIcons();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PlayerDetachedMsg _:
|
||||||
|
_gui.Parent?.RemoveChild(_gui);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
control.UpdateHandIcons();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendChangeHand(string index)
|
public void SendChangeHand(string index)
|
||||||
|
|||||||
60
Content.Client/GameObjects/Components/Items/ItemComponent.cs
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
using Content.Shared.GameObjects.Components.Inventory;
|
||||||
|
using SS14.Client.Graphics;
|
||||||
|
using SS14.Client.Interfaces.ResourceManagement;
|
||||||
|
using SS14.Client.ResourceManagement;
|
||||||
|
using SS14.Shared.GameObjects;
|
||||||
|
using SS14.Shared.GameObjects.Components.Renderable;
|
||||||
|
using SS14.Shared.IoC;
|
||||||
|
using SS14.Shared.Serialization;
|
||||||
|
using SS14.Shared.Utility;
|
||||||
|
using SS14.Shared.ViewVariables;
|
||||||
|
|
||||||
|
namespace Content.Client.GameObjects
|
||||||
|
{
|
||||||
|
public class ItemComponent : Component
|
||||||
|
{
|
||||||
|
public override string Name => "Item";
|
||||||
|
|
||||||
|
[ViewVariables] protected ResourcePath RsiPath;
|
||||||
|
|
||||||
|
private string _equippedPrefix;
|
||||||
|
|
||||||
|
[ViewVariables(VVAccess.ReadWrite)]
|
||||||
|
public string EquippedPrefix
|
||||||
|
{
|
||||||
|
get => _equippedPrefix;
|
||||||
|
set => _equippedPrefix = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public (RSI rsi, RSI.StateId stateId)? GetInHandStateInfo(string hand)
|
||||||
|
{
|
||||||
|
if (RsiPath == null)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
var rsi = GetRSI();
|
||||||
|
var stateId = EquippedPrefix != null ? $"{EquippedPrefix}-inhand-{hand}" : $"inhand-{hand}";
|
||||||
|
if (rsi.TryGetState(stateId, out _))
|
||||||
|
{
|
||||||
|
return (rsi, stateId);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
|
{
|
||||||
|
base.ExposeData(serializer);
|
||||||
|
|
||||||
|
serializer.DataFieldCached(ref RsiPath, "sprite", null);
|
||||||
|
serializer.DataFieldCached(ref _equippedPrefix, "prefix", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected RSI GetRSI()
|
||||||
|
{
|
||||||
|
var resourceCache = IoCManager.Resolve<IResourceCache>();
|
||||||
|
return resourceCache.GetResource<RSIResource>(SharedSpriteComponent.TextureRoot / RsiPath).RSI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -119,6 +119,10 @@ namespace Content.Client.UserInterface
|
|||||||
|
|
||||||
public void UpdateHandIcons()
|
public void UpdateHandIcons()
|
||||||
{
|
{
|
||||||
|
if (Parent == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
UpdateDraw();
|
UpdateDraw();
|
||||||
|
|
||||||
if (!TryGetHands(out IHandsComponent hands))
|
if (!TryGetHands(out IHandsComponent hands))
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ using Content.Server.GameObjects.EntitySystems;
|
|||||||
using Content.Server.Mobs;
|
using Content.Server.Mobs;
|
||||||
using Content.Server.Players;
|
using Content.Server.Players;
|
||||||
using Content.Server.GameObjects.Components.Interactable;
|
using Content.Server.GameObjects.Components.Interactable;
|
||||||
|
using Content.Shared.GameObjects.Components.Inventory;
|
||||||
|
|
||||||
namespace Content.Server
|
namespace Content.Server
|
||||||
{
|
{
|
||||||
@@ -233,7 +234,15 @@ namespace Content.Server
|
|||||||
|
|
||||||
IEntity SpawnPlayerMob()
|
IEntity SpawnPlayerMob()
|
||||||
{
|
{
|
||||||
return entityManager.ForceSpawnEntityAt(PlayerPrototypeName, SpawnPoint);
|
var entity = entityManager.ForceSpawnEntityAt(PlayerPrototypeName, SpawnPoint);
|
||||||
|
var shoes = entityManager.SpawnEntity("ShoesItem");
|
||||||
|
var uniform = entityManager.SpawnEntity("UniformAssistant");
|
||||||
|
if (entity.TryGetComponent(out InventoryComponent inventory))
|
||||||
|
{
|
||||||
|
inventory.Equip(EquipmentSlotDefines.Slots.INNERCLOTHING, uniform.GetComponent<ClothingComponent>());
|
||||||
|
inventory.Equip(EquipmentSlotDefines.Slots.SHOES, shoes.GetComponent<ClothingComponent>());
|
||||||
|
}
|
||||||
|
return entity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using SS14.Server.GameObjects;
|
using SS14.Server.GameObjects.Components.Container;
|
||||||
using SS14.Server.GameObjects.Components.Container;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Content.Shared.GameObjects;
|
using Content.Shared.GameObjects;
|
||||||
@@ -8,19 +7,22 @@ using SS14.Shared.GameObjects;
|
|||||||
using SS14.Shared.Interfaces.GameObjects;
|
using SS14.Shared.Interfaces.GameObjects;
|
||||||
using SS14.Shared.Interfaces.Network;
|
using SS14.Shared.Interfaces.Network;
|
||||||
using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage;
|
using static Content.Shared.GameObjects.SharedInventoryComponent.ClientInventoryMessage;
|
||||||
using static Content.Shared.GameObjects.SharedInventoryComponent.ServerInventoryMessage;
|
|
||||||
using SS14.Shared.IoC;
|
using SS14.Shared.IoC;
|
||||||
using SS14.Server.Interfaces.Player;
|
using SS14.Server.Interfaces.Player;
|
||||||
using SS14.Shared.ContentPack;
|
using SS14.Shared.ContentPack;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using SS14.Shared.Serialization;
|
using SS14.Shared.Serialization;
|
||||||
using SS14.Shared.Interfaces.GameObjects.Components;
|
using SS14.Shared.Interfaces.GameObjects.Components;
|
||||||
|
using SS14.Shared.Utility;
|
||||||
|
using SS14.Shared.ViewVariables;
|
||||||
|
|
||||||
namespace Content.Server.GameObjects
|
namespace Content.Server.GameObjects
|
||||||
{
|
{
|
||||||
public class InventoryComponent : SharedInventoryComponent
|
public class InventoryComponent : SharedInventoryComponent
|
||||||
{
|
{
|
||||||
|
[ViewVariables]
|
||||||
private Dictionary<Slots, ContainerSlot> SlotContainers = new Dictionary<Slots, ContainerSlot>();
|
private Dictionary<Slots, ContainerSlot> SlotContainers = new Dictionary<Slots, ContainerSlot>();
|
||||||
|
|
||||||
string TemplateName = "HumanInventory"; //stored for serialization purposes
|
string TemplateName = "HumanInventory"; //stored for serialization purposes
|
||||||
|
|
||||||
public override void ExposeData(ObjectSerializer serializer)
|
public override void ExposeData(ObjectSerializer serializer)
|
||||||
@@ -36,13 +38,14 @@ namespace Content.Server.GameObjects
|
|||||||
|
|
||||||
private void CreateInventory(string TemplateName)
|
private void CreateInventory(string TemplateName)
|
||||||
{
|
{
|
||||||
Type type = AppDomain.CurrentDomain.GetAssemblyByName("Content.Shared").GetType("Content.Shared.GameObjects." + TemplateName);
|
Type type = AppDomain.CurrentDomain.GetAssemblyByName("Content.Shared")
|
||||||
Inventory inventory = (Inventory)Activator.CreateInstance(type);
|
.GetType("Content.Shared.GameObjects." + TemplateName);
|
||||||
|
Inventory inventory = (Inventory) Activator.CreateInstance(type);
|
||||||
foreach (Slots slotnames in inventory.SlotMasks)
|
foreach (Slots slotnames in inventory.SlotMasks)
|
||||||
{
|
{
|
||||||
if (slotnames != Slots.NONE)
|
if (slotnames != Slots.NONE)
|
||||||
{
|
{
|
||||||
var newslot = AddSlot(slotnames);
|
AddSlot(slotnames);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -54,6 +57,7 @@ namespace Content.Server.GameObjects
|
|||||||
{
|
{
|
||||||
RemoveSlot(slot);
|
RemoveSlot(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
base.OnRemove();
|
base.OnRemove();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,11 +94,13 @@ namespace Content.Server.GameObjects
|
|||||||
{
|
{
|
||||||
if (clothing == null)
|
if (clothing == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(clothing), "Clothing must be passed here. To remove some clothing from a slot, use Unequip()");
|
throw new ArgumentNullException(nameof(clothing),
|
||||||
|
"Clothing must be passed here. To remove some clothing from a slot, use Unequip()");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (clothing.SlotFlags == SlotFlags.PREVENTEQUIP //Flag to prevent equipping at all
|
if (clothing.SlotFlags == SlotFlags.PREVENTEQUIP //Flag to prevent equipping at all
|
||||||
|| (clothing.SlotFlags & SlotMasks[slot]) == 0) //Does the clothing flag have any of our requested slot flags
|
|| (clothing.SlotFlags & SlotMasks[slot]) == 0
|
||||||
|
) //Does the clothing flag have any of our requested slot flags
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -107,15 +113,7 @@ namespace Content.Server.GameObjects
|
|||||||
|
|
||||||
clothing.EquippedToSlot(inventorySlot);
|
clothing.EquippedToSlot(inventorySlot);
|
||||||
|
|
||||||
var UIupdatemessage = new ServerInventoryMessage()
|
Dirty();
|
||||||
{
|
|
||||||
Inventoryslot = slot,
|
|
||||||
EntityUid = clothing.Owner.Uid,
|
|
||||||
Updatetype = ServerInventoryUpdate.Addition
|
|
||||||
};
|
|
||||||
|
|
||||||
SendNetworkMessage(UIupdatemessage);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -149,19 +147,12 @@ namespace Content.Server.GameObjects
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var UIupdatemessage = new ServerInventoryMessage()
|
|
||||||
{
|
|
||||||
Inventoryslot = slot,
|
|
||||||
EntityUid = item.Owner.Uid,
|
|
||||||
Updatetype = ServerInventoryUpdate.Removal
|
|
||||||
};
|
|
||||||
SendNetworkMessage(UIupdatemessage);
|
|
||||||
|
|
||||||
item.RemovedFromSlot();
|
item.RemovedFromSlot();
|
||||||
|
|
||||||
// TODO: The item should be dropped to the container our owner is in, if any.
|
// TODO: The item should be dropped to the container our owner is in, if any.
|
||||||
var itemTransform = item.Owner.GetComponent<ITransformComponent>();
|
var itemTransform = item.Owner.GetComponent<ITransformComponent>();
|
||||||
itemTransform.LocalPosition = Owner.GetComponent<ITransformComponent>().LocalPosition;
|
itemTransform.LocalPosition = Owner.GetComponent<ITransformComponent>().LocalPosition;
|
||||||
|
Dirty();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -192,6 +183,7 @@ namespace Content.Server.GameObjects
|
|||||||
throw new InvalidOperationException($"Slot '{slot}' already exists.");
|
throw new InvalidOperationException($"Slot '{slot}' already exists.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Dirty();
|
||||||
return SlotContainers[slot] = ContainerManagerComponent.Create<ContainerSlot>(GetSlotString(slot), Owner);
|
return SlotContainers[slot] = ContainerManagerComponent.Create<ContainerSlot>(GetSlotString(slot), Owner);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -212,10 +204,12 @@ namespace Content.Server.GameObjects
|
|||||||
if (GetSlotItem(slot) != null && !Unequip(slot))
|
if (GetSlotItem(slot) != null && !Unequip(slot))
|
||||||
{
|
{
|
||||||
// TODO: Handle this potential failiure better.
|
// TODO: Handle this potential failiure better.
|
||||||
throw new InvalidOperationException("Unable to remove slot as the contained clothing could not be dropped");
|
throw new InvalidOperationException(
|
||||||
|
"Unable to remove slot as the contained clothing could not be dropped");
|
||||||
}
|
}
|
||||||
|
|
||||||
SlotContainers.Remove(slot);
|
SlotContainers.Remove(slot);
|
||||||
|
Dirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -259,7 +253,8 @@ namespace Content.Server.GameObjects
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null)
|
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null,
|
||||||
|
IComponent component = null)
|
||||||
{
|
{
|
||||||
base.HandleMessage(message, netChannel, component);
|
base.HandleMessage(message, netChannel, component);
|
||||||
|
|
||||||
@@ -275,5 +270,18 @@ namespace Content.Server.GameObjects
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override ComponentState GetComponentState()
|
||||||
|
{
|
||||||
|
var list = new List<KeyValuePair<Slots, EntityUid>>();
|
||||||
|
foreach (var (slot, container) in SlotContainers)
|
||||||
|
{
|
||||||
|
if (container.ContainedEntity != null)
|
||||||
|
{
|
||||||
|
list.Add(new KeyValuePair<Slots, EntityUid>(slot, container.ContainedEntity.Uid));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new InventoryComponentState(list);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -110,4 +110,4 @@
|
|||||||
<Compile Include="Construction\ConstructionPrototype.cs" />
|
<Compile Include="Construction\ConstructionPrototype.cs" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
</Project>
|
</Project>
|
||||||
@@ -3,11 +3,13 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using SS14.Shared.Serialization;
|
||||||
|
|
||||||
namespace Content.Shared.GameObjects.Components.Inventory
|
namespace Content.Shared.GameObjects.Components.Inventory
|
||||||
{
|
{
|
||||||
public static class EquipmentSlotDefines
|
public static class EquipmentSlotDefines
|
||||||
{
|
{
|
||||||
|
[Serializable, NetSerializable]
|
||||||
public enum Slots
|
public enum Slots
|
||||||
{
|
{
|
||||||
NONE,
|
NONE,
|
||||||
@@ -30,6 +32,7 @@ namespace Content.Shared.GameObjects.Components.Inventory
|
|||||||
EXOSUITSLOT2
|
EXOSUITSLOT2
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Serializable, NetSerializable]
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum SlotFlags
|
public enum SlotFlags
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -5,21 +5,50 @@ namespace Content.Shared.GameObjects
|
|||||||
{
|
{
|
||||||
public abstract class Inventory
|
public abstract class Inventory
|
||||||
{
|
{
|
||||||
abstract public int Columns { get; }
|
public abstract int Columns { get; }
|
||||||
|
|
||||||
abstract public List<Slots> SlotMasks { get; }
|
public abstract IReadOnlyList<Slots> SlotMasks { get; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the drawing order of a slot.
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// An int that can be used for sorting relative to other drawing orders.
|
||||||
|
/// The value returned does not mean anything else.
|
||||||
|
/// </returns>
|
||||||
|
public abstract int SlotDrawingOrder(Slots slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HumanInventory : Inventory
|
public class HumanInventory : Inventory
|
||||||
{
|
{
|
||||||
public override int Columns => 3;
|
public override int Columns => 3;
|
||||||
|
|
||||||
public override List<Slots> SlotMasks => new List<Slots>()
|
private static Dictionary<Slots, int> _slotDrawingOrder = new Dictionary<Slots, int>
|
||||||
{
|
{
|
||||||
Slots.EYES, Slots.HEAD, Slots.EARS,
|
{Slots.HEAD, 10},
|
||||||
Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING,
|
{Slots.MASK, 9},
|
||||||
Slots.BACKPACK, Slots.BELT, Slots.GLOVES,
|
{Slots.EARS, 8},
|
||||||
Slots.NONE, Slots.SHOES, Slots.IDCARD
|
{Slots.BACKPACK, 7},
|
||||||
};
|
{Slots.EYES, 6},
|
||||||
|
{Slots.OUTERCLOTHING, 5},
|
||||||
|
{Slots.BELT, 4},
|
||||||
|
{Slots.GLOVES, 3},
|
||||||
|
{Slots.SHOES, 2},
|
||||||
|
{Slots.IDCARD, 1},
|
||||||
|
{Slots.INNERCLOTHING, 0}
|
||||||
|
};
|
||||||
|
|
||||||
|
public override IReadOnlyList<Slots> SlotMasks { get; } = new List<Slots>()
|
||||||
|
{
|
||||||
|
Slots.EYES, Slots.HEAD, Slots.EARS,
|
||||||
|
Slots.OUTERCLOTHING, Slots.MASK, Slots.INNERCLOTHING,
|
||||||
|
Slots.BACKPACK, Slots.BELT, Slots.GLOVES,
|
||||||
|
Slots.NONE, Slots.SHOES, Slots.IDCARD
|
||||||
|
};
|
||||||
|
|
||||||
|
public override int SlotDrawingOrder(Slots slot)
|
||||||
|
{
|
||||||
|
return _slotDrawingOrder.TryGetValue(slot, out var val) ? val : 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using SS14.Shared.GameObjects;
|
using SS14.Shared.GameObjects;
|
||||||
using SS14.Shared.Serialization;
|
using SS14.Shared.Serialization;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines;
|
using static Content.Shared.GameObjects.Components.Inventory.EquipmentSlotDefines;
|
||||||
|
|
||||||
namespace Content.Shared.GameObjects
|
namespace Content.Shared.GameObjects
|
||||||
@@ -8,26 +9,17 @@ namespace Content.Shared.GameObjects
|
|||||||
public abstract class SharedInventoryComponent : Component
|
public abstract class SharedInventoryComponent : Component
|
||||||
{
|
{
|
||||||
public sealed override string Name => "Inventory";
|
public sealed override string Name => "Inventory";
|
||||||
|
public sealed override uint? NetID => ContentNetIDs.STORAGE;
|
||||||
public override uint? NetID => ContentNetIDs.STORAGE;
|
public sealed override Type StateType => typeof(InventoryComponentState);
|
||||||
|
|
||||||
|
|
||||||
[Serializable, NetSerializable]
|
[Serializable, NetSerializable]
|
||||||
public class ServerInventoryMessage : ComponentMessage
|
protected class InventoryComponentState : ComponentState
|
||||||
{
|
{
|
||||||
public Slots Inventoryslot;
|
public List<KeyValuePair<Slots, EntityUid>> Entities { get; }
|
||||||
public EntityUid EntityUid;
|
|
||||||
public ServerInventoryUpdate Updatetype;
|
|
||||||
|
|
||||||
public ServerInventoryMessage()
|
public InventoryComponentState(List<KeyValuePair<Slots, EntityUid>> entities) : base(ContentNetIDs.STORAGE)
|
||||||
{
|
{
|
||||||
Directed = true;
|
Entities = entities;
|
||||||
}
|
|
||||||
|
|
||||||
public enum ServerInventoryUpdate
|
|
||||||
{
|
|
||||||
Removal = 0,
|
|
||||||
Addition = 1
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,170 +2,13 @@
|
|||||||
name: "Clothing"
|
name: "Clothing"
|
||||||
id: Clothing
|
id: Clothing
|
||||||
parent: BaseItem
|
parent: BaseItem
|
||||||
|
abstract: true
|
||||||
components:
|
components:
|
||||||
- type: Clothing
|
- type: Clothing
|
||||||
Size: 5
|
Size: 5
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: ShoesItem
|
|
||||||
name: Shoes
|
|
||||||
description: Don't take them off at your office Christmas party
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Objects/shoes.png
|
|
||||||
|
|
||||||
- type: Icon
|
|
||||||
texture: Objects/shoes.png
|
|
||||||
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- shoes
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: JanitorUniform
|
|
||||||
name: Janitor Jumpsuit
|
|
||||||
description: The jumpsuit for the poor sop with a mop
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Objects/janitorsuit.png
|
|
||||||
|
|
||||||
- type: Icon
|
|
||||||
texture: Objects/janitorsuit.png
|
|
||||||
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- innerclothing
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: SecurityVestClothing
|
|
||||||
name: Security Vest
|
|
||||||
description: Bulletproof vest, more or less
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/armorvest.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/armorvest.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- outerclothing
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: UtilityBeltClothing
|
|
||||||
name: Utility Belt
|
|
||||||
description: Belt for holding all your usual tools
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/belt_utility.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/belt_utility.png
|
|
||||||
Size: 30
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- belt
|
|
||||||
- type: Storage
|
|
||||||
Capacity: 30
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: BackpackClothing
|
|
||||||
name: Backpack
|
|
||||||
description: A convenient storage pack
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/backpack.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/backpack.png
|
|
||||||
Size: 9999
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- back
|
|
||||||
- type: Storage
|
|
||||||
Capacity: 100
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: MesonGlasses
|
|
||||||
name: Optical Meson Scanners
|
|
||||||
description: The pinnacle of modern science, wallhacks in real life
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/glasses_meson.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/glasses_meson.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- eyes
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: YellowGloves
|
|
||||||
name: Insulated Gloves
|
|
||||||
description: Electrical gloves that keep you from frying
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/gloves_yellow.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/gloves_yellow.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- gloves
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: HelmetSecurity
|
|
||||||
name: Security Helmet
|
|
||||||
description: "A slick logo covers the ear: \"Concussions are better than holes!\""
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/helmet_sec.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/helmet_sec.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- head
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: GasMaskClothing
|
|
||||||
name: Gas Mask
|
|
||||||
description: Regulations require these to be stocked after the fourth coolant leak
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/gasmask.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/gasmask.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- mask
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: IDCardStandard
|
|
||||||
name: Identification Card
|
|
||||||
description: A card necessary to access various areas aboard the station
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/idcard_standard.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/idcard_standard.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- idcard
|
|
||||||
|
|
||||||
- type: entity
|
|
||||||
parent: Clothing
|
|
||||||
id: RadioHeadsetEars
|
|
||||||
name: Headset Radio
|
|
||||||
description: The radio to keep up to date in real time with fun onboard station activities
|
|
||||||
components:
|
|
||||||
- type: Sprite
|
|
||||||
texture: Clothing/ears_headset.png
|
|
||||||
- type: Icon
|
|
||||||
texture: Clothing/ears_headset.png
|
|
||||||
- type: Clothing
|
|
||||||
Slots:
|
|
||||||
- ears
|
|
||||||
|
|||||||
13
Resources/Prototypes/Entities/Clothing/IDs.yml
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: IDCardStandard
|
||||||
|
name: Identification Card
|
||||||
|
description: A card necessary to access various areas aboard the station
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
texture: Clothing/idcard_standard.png
|
||||||
|
- type: Icon
|
||||||
|
texture: Clothing/idcard_standard.png
|
||||||
|
- type: Clothing
|
||||||
|
Slots:
|
||||||
|
- idcard
|
||||||
19
Resources/Prototypes/Entities/Clothing/backpacks.yml
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: BackpackClothing
|
||||||
|
name: Backpack
|
||||||
|
description: A convenient storage pack
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/backpack.rsi
|
||||||
|
state: backpack
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/backpack.rsi
|
||||||
|
state: backpack
|
||||||
|
- type: Clothing
|
||||||
|
Size: 9999
|
||||||
|
Slots:
|
||||||
|
- back
|
||||||
|
sprite: Clothing/backpack.rsi
|
||||||
|
- type: Storage
|
||||||
|
Capacity: 100
|
||||||
26
Resources/Prototypes/Entities/Clothing/belts.yml
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: BeltBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [belt]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: BeltBase
|
||||||
|
id: UtilityBeltClothing
|
||||||
|
name: Utility Belt
|
||||||
|
description: Belt for holding all your usual tools
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/belt_utility.rsi
|
||||||
|
state: utilitybelt
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/belt_utility.rsi
|
||||||
|
state: utilitybelt
|
||||||
|
- type: Clothing
|
||||||
|
Size: 30
|
||||||
|
sprite: Clothing/belt_utility.rsi
|
||||||
|
- type: Storage
|
||||||
|
Capacity: 30
|
||||||
16
Resources/Prototypes/Entities/Clothing/ears.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: RadioHeadsetEars
|
||||||
|
name: Headset Radio
|
||||||
|
description: The radio to keep up to date in real time with fun onboard station activities
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/headset.rsi
|
||||||
|
state: headset
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/headset.rsi
|
||||||
|
state: headset
|
||||||
|
- type: Clothing
|
||||||
|
Slots:
|
||||||
|
- ears
|
||||||
|
sprite: Clothing/headset.rsi
|
||||||
39
Resources/Prototypes/Entities/Clothing/eyes.yml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: GlassesBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [eyes]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: GlassesBase
|
||||||
|
id: MesonGlasses
|
||||||
|
name: Optical Meson Scanners
|
||||||
|
description: The pinnacle of modern science, wallhacks in real life
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/meson_scanners.rsi
|
||||||
|
state: meson
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/meson_scanners.rsi
|
||||||
|
state: meson
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/meson_scanners.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: GlassesBase
|
||||||
|
id: SunGlasses
|
||||||
|
name: Sun Glasses
|
||||||
|
description: Useful both for security and cargonia
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/sunglasses.rsi
|
||||||
|
state: sunglasses
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/sunglasses.rsi
|
||||||
|
state: sunglasses
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/sunglasses.rsi
|
||||||
39
Resources/Prototypes/Entities/Clothing/gloves.yml
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: GlovesBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [gloves]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: GlovesBase
|
||||||
|
id: YellowGloves
|
||||||
|
name: Insulated Gloves
|
||||||
|
description: Electrical gloves that keep you from frying
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/gloves_yellow.rsi
|
||||||
|
state: yellow
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/gloves_yellow.rsi
|
||||||
|
state: yellow
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/gloves_yellow.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: GlovesBase
|
||||||
|
id: BlackGloves
|
||||||
|
name: Insulated Gloves
|
||||||
|
description: Regular gloves that do not keep you from frying
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/gloves_black.rsi
|
||||||
|
state: black
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/gloves_black.rsi
|
||||||
|
state: black
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/gloves_black.rsi
|
||||||
16
Resources/Prototypes/Entities/Clothing/helmets.yml
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: HelmetSecurity
|
||||||
|
name: Security Helmet
|
||||||
|
description: "A slick logo covers the ear: \"Concussions are better than holes!\""
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/helmet_sec.rsi
|
||||||
|
state: helmet
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/helmet_sec.rsi
|
||||||
|
state: helmet
|
||||||
|
- type: Clothing
|
||||||
|
Slots:
|
||||||
|
- head
|
||||||
|
sprite: Clothing/helmet_sec.rsi
|
||||||
35
Resources/Prototypes/Entities/Clothing/masks.yml
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: MasksBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [mask]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: MasksBase
|
||||||
|
id: GasMaskClothing
|
||||||
|
name: Gas Mask
|
||||||
|
description: Regulations require these to be stocked after the fourth coolant leak
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
texture: Clothing/gasmask.png
|
||||||
|
- type: Icon
|
||||||
|
texture: Clothing/gasmask.png
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: MasksBase
|
||||||
|
id: BreathMaskClothing
|
||||||
|
name: Breath Mask
|
||||||
|
description: Might as well keep this on 24/7
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/mask_breath.rsi
|
||||||
|
state: breath
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/mask_breath.rsi
|
||||||
|
state: breath
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/mask_breath.rsi
|
||||||
43
Resources/Prototypes/Entities/Clothing/shoes.yml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: ShoesBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [shoes]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ShoesBase
|
||||||
|
id: ShoesItem
|
||||||
|
name: Black Shoes
|
||||||
|
description: Don't take them off at your office Christmas party
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/shoes_black.rsi
|
||||||
|
state: black
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/shoes_black.rsi
|
||||||
|
state: black
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/shoes_black.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: ShoesBase
|
||||||
|
id: WhiteShoes
|
||||||
|
name: White Shoes
|
||||||
|
description: Don't take them off at your office Christmas party
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/shoes_white.rsi
|
||||||
|
state: white
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/shoes_white.rsi
|
||||||
|
state: white
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/shoes_white.rsi
|
||||||
43
Resources/Prototypes/Entities/Clothing/suits.yml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: SuitBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [outerclothing]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: SuitBase
|
||||||
|
id: SecurityVestClothing
|
||||||
|
name: Security Vest
|
||||||
|
description: Bulletproof vest, more or less
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/armor.rsi
|
||||||
|
state: armor
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/armor.rsi
|
||||||
|
state: armor
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/armor.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: SuitBase
|
||||||
|
id: HazardVestClothing
|
||||||
|
name: Hazard Vest
|
||||||
|
description: Prevents accidents
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/vest_hazard.rsi
|
||||||
|
state: hazard
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/vest_hazard.rsi
|
||||||
|
state: hazard
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/vest_hazard.rsi
|
||||||
76
Resources/Prototypes/Entities/Clothing/uniforms.yml
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
- type: entity
|
||||||
|
parent: Clothing
|
||||||
|
id: UniformBase
|
||||||
|
abstract: true
|
||||||
|
components:
|
||||||
|
- type: Clothing
|
||||||
|
Slots: [innerclothing]
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: UniformBase
|
||||||
|
id: JanitorUniform
|
||||||
|
name: Janitor Jumpsuit
|
||||||
|
description: The jumpsuit for the poor sop with a mop
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/uniform_janitor.rsi
|
||||||
|
state: janitor
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/uniform_janitor.rsi
|
||||||
|
state: janitor
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/uniform_janitor.rsi
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: UniformBase
|
||||||
|
id: UniformGrey
|
||||||
|
name: Grey Jumpsuit
|
||||||
|
description: Greytide. Worldwide.
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/uniform_grey.rsi
|
||||||
|
state: grey
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/uniform_grey.rsi
|
||||||
|
state: grey
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/uniform_grey.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: UniformBase
|
||||||
|
id: UniformEngineering
|
||||||
|
name: Engineering Jumpsuit
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/uniform_engineering.rsi
|
||||||
|
state: engine
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/uniform_engineering.rsi
|
||||||
|
state: engine
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/uniform_engineering.rsi
|
||||||
|
|
||||||
|
|
||||||
|
- type: entity
|
||||||
|
parent: UniformBase
|
||||||
|
id: UniformAssistant
|
||||||
|
name: Assistant Jumpsuit
|
||||||
|
components:
|
||||||
|
- type: Sprite
|
||||||
|
sprite: Clothing/uniform_assistant.rsi
|
||||||
|
state: assistant
|
||||||
|
|
||||||
|
- type: Icon
|
||||||
|
sprite: Clothing/uniform_assistant.rsi
|
||||||
|
state: assistant
|
||||||
|
|
||||||
|
- type: Clothing
|
||||||
|
sprite: Clothing/uniform_assistant.rsi
|
||||||
@@ -12,13 +12,29 @@
|
|||||||
- type: Constructor
|
- type: Constructor
|
||||||
- type: Clickable
|
- type: Clickable
|
||||||
- type: Sprite
|
- type: Sprite
|
||||||
sprite: Mob/greyshirt.rsi
|
netsync: false
|
||||||
state: greyshirt
|
|
||||||
drawdepth: Mobs
|
drawdepth: Mobs
|
||||||
|
|
||||||
|
layers:
|
||||||
|
- sprite: Mob/human.rsi
|
||||||
|
state: male
|
||||||
|
- map: ["enum.Slots.INNERCLOTHING"]
|
||||||
|
- map: ["enum.Slots.IDCARD"]
|
||||||
|
- map: ["enum.Slots.SHOES"]
|
||||||
|
- map: ["enum.Slots.GLOVES"]
|
||||||
|
- map: ["enum.Slots.BELT"]
|
||||||
|
- map: ["enum.Slots.OUTERCLOTHING"]
|
||||||
|
- map: ["enum.Slots.EYES"]
|
||||||
|
- map: ["enum.Slots.BACKPACK"]
|
||||||
|
- map: ["enum.Slots.EARS"]
|
||||||
|
- map: ["enum.Slots.MASK"]
|
||||||
|
- map: ["enum.Slots.HEAD"]
|
||||||
|
- map: ["hand-left"]
|
||||||
|
- map: ["hand-right"]
|
||||||
|
|
||||||
- type: Icon
|
- type: Icon
|
||||||
sprite: Mob/greyshirt.rsi
|
sprite: Mob/human.rsi
|
||||||
state: greyshirt
|
state: male
|
||||||
|
|
||||||
- type: BoundingBox
|
- type: BoundingBox
|
||||||
aabb: "-0.5,-0.25,-0.05,0.25"
|
aabb: "-0.5,-0.25,-0.05,0.25"
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ action_mode = 0
|
|||||||
enabled_focus_mode = 2
|
enabled_focus_mode = 2
|
||||||
shortcut = null
|
shortcut = null
|
||||||
group = null
|
group = null
|
||||||
text = "Slut"
|
text = "Slot"
|
||||||
flat = true
|
flat = true
|
||||||
clip_text = true
|
clip_text = true
|
||||||
align = 1
|
align = 1
|
||||||
|
|||||||
BIN
Resources/Textures/Clothing/armor.rsi/armor.png
Normal file
|
After Width: | Height: | Size: 441 B |
BIN
Resources/Textures/Clothing/armor.rsi/equipped-OUTERCLOTHING.png
Normal file
|
After Width: | Height: | Size: 660 B |
BIN
Resources/Textures/Clothing/armor.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 526 B |
BIN
Resources/Textures/Clothing/armor.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 508 B |
1
Resources/Textures/Clothing/armor.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "armor", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-OUTERCLOTHING", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/backpack.rsi/backpack.png
Normal file
|
After Width: | Height: | Size: 378 B |
BIN
Resources/Textures/Clothing/backpack.rsi/equipped-BACKPACK.png
Normal file
|
After Width: | Height: | Size: 638 B |
BIN
Resources/Textures/Clothing/backpack.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 465 B |
BIN
Resources/Textures/Clothing/backpack.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 455 B |
1
Resources/Textures/Clothing/backpack.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "backpack", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-BACKPACK", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/belt_utility.rsi/equipped-BELT.png
Normal file
|
After Width: | Height: | Size: 294 B |
1
Resources/Textures/Clothing/belt_utility.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-BELT", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "utilitybelt", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/belt_utility.rsi/utilitybelt.png
Normal file
|
After Width: | Height: | Size: 463 B |
BIN
Resources/Textures/Clothing/gloves_black.rsi/black.png
Normal file
|
After Width: | Height: | Size: 456 B |
BIN
Resources/Textures/Clothing/gloves_black.rsi/equipped-HAND.png
Normal file
|
After Width: | Height: | Size: 261 B |
BIN
Resources/Textures/Clothing/gloves_black.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 205 B |
BIN
Resources/Textures/Clothing/gloves_black.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 214 B |
1
Resources/Textures/Clothing/gloves_black.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "black", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-HAND", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/gloves_yellow.rsi/equipped-HAND.png
Normal file
|
After Width: | Height: | Size: 280 B |
BIN
Resources/Textures/Clothing/gloves_yellow.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 221 B |
BIN
Resources/Textures/Clothing/gloves_yellow.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 232 B |
1
Resources/Textures/Clothing/gloves_yellow.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-HAND", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-left", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "inhand-right", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "yellow", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/gloves_yellow.rsi/yellow.png
Normal file
|
After Width: | Height: | Size: 351 B |
BIN
Resources/Textures/Clothing/headset.rsi/equipped-EARS.png
Normal file
|
After Width: | Height: | Size: 165 B |
BIN
Resources/Textures/Clothing/headset.rsi/headset.png
Normal file
|
After Width: | Height: | Size: 298 B |
1
Resources/Textures/Clothing/headset.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-EARS", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "headset", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/helmet_sec.rsi/equipped-HELMET.png
Normal file
|
After Width: | Height: | Size: 644 B |
BIN
Resources/Textures/Clothing/helmet_sec.rsi/helmet.png
Normal file
|
After Width: | Height: | Size: 378 B |
1
Resources/Textures/Clothing/helmet_sec.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-HELMET", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "helmet", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/mask_breath.rsi/breath.png
Normal file
|
After Width: | Height: | Size: 307 B |
BIN
Resources/Textures/Clothing/mask_breath.rsi/equipped-MASK.png
Normal file
|
After Width: | Height: | Size: 378 B |
1
Resources/Textures/Clothing/mask_breath.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "breath", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-MASK", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/meson_scanners.rsi/equipped-EYES.png
Normal file
|
After Width: | Height: | Size: 286 B |
BIN
Resources/Textures/Clothing/meson_scanners.rsi/meson.png
Normal file
|
After Width: | Height: | Size: 329 B |
1
Resources/Textures/Clothing/meson_scanners.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-EYES", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "meson", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/shoes_black.rsi/black.png
Normal file
|
After Width: | Height: | Size: 324 B |
BIN
Resources/Textures/Clothing/shoes_black.rsi/equipped-FEET.png
Normal file
|
After Width: | Height: | Size: 374 B |
1
Resources/Textures/Clothing/shoes_black.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "black", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-FEET", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/shoes_white.rsi/equipped-FEET.png
Normal file
|
After Width: | Height: | Size: 424 B |
1
Resources/Textures/Clothing/shoes_white.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-FEET", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "white", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/shoes_white.rsi/white.png
Normal file
|
After Width: | Height: | Size: 259 B |
BIN
Resources/Textures/Clothing/sunglasses.rsi/equipped-EYES.png
Normal file
|
After Width: | Height: | Size: 187 B |
1
Resources/Textures/Clothing/sunglasses.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-EYES", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "sunglasses", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/sunglasses.rsi/sun.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
Resources/Textures/Clothing/sunglasses.rsi/sunglasses.png
Normal file
|
After Width: | Height: | Size: 226 B |
BIN
Resources/Textures/Clothing/uniform_assistant.rsi/assistant.png
Normal file
|
After Width: | Height: | Size: 426 B |
|
After Width: | Height: | Size: 1.2 KiB |
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "assistant", "directions": 1, "delays": [[1.0]]}, {"name": "equipped-INNERCLOTHING", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}]}
|
||||||
BIN
Resources/Textures/Clothing/uniform_engineering.rsi/engine.png
Normal file
|
After Width: | Height: | Size: 446 B |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 509 B |
|
After Width: | Height: | Size: 532 B |
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5",
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "engine",
|
||||||
|
"directions": 1,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "equipped-INNERCLOTHING",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 993 B |
BIN
Resources/Textures/Clothing/uniform_grey.rsi/grey.png
Normal file
|
After Width: | Height: | Size: 394 B |
BIN
Resources/Textures/Clothing/uniform_grey.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 487 B |
BIN
Resources/Textures/Clothing/uniform_grey.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 507 B |
74
Resources/Textures/Clothing/uniform_grey.rsi/meta.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5",
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "equipped-INNERCLOTHING",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "grey",
|
||||||
|
"directions": 1,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.6 KiB |
BIN
Resources/Textures/Clothing/uniform_janitor.rsi/inhand-left.png
Normal file
|
After Width: | Height: | Size: 513 B |
BIN
Resources/Textures/Clothing/uniform_janitor.rsi/inhand-right.png
Normal file
|
After Width: | Height: | Size: 561 B |
BIN
Resources/Textures/Clothing/uniform_janitor.rsi/janitor.png
Normal file
|
After Width: | Height: | Size: 456 B |
74
Resources/Textures/Clothing/uniform_janitor.rsi/meta.json
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5",
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "equipped-INNERCLOTHING",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-left",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "inhand-right",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "janitor",
|
||||||
|
"directions": 1,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 757 B |
BIN
Resources/Textures/Clothing/vest_hazard.rsi/hazard.png
Normal file
|
After Width: | Height: | Size: 448 B |
1
Resources/Textures/Clothing/vest_hazard.rsi/meta.json
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version": 1, "size": {"x": 32, "y": 32}, "license": "CC-BY-SA-3.0", "copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5", "states": [{"name": "equipped-OUTERCLOTHING", "directions": 4, "delays": [[1.0], [1.0], [1.0], [1.0]]}, {"name": "hazard", "directions": 1, "delays": [[1.0]]}]}
|
||||||
BIN
Resources/Textures/Mob/human.rsi/male.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
29
Resources/Textures/Mob/human.rsi/meta.json
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"size": {
|
||||||
|
"x": 32,
|
||||||
|
"y": 32
|
||||||
|
},
|
||||||
|
"license": "CC-BY-SA-3.0",
|
||||||
|
"copyright": "Taken from https://github.com/discordia-space/CEV-Eris at commit 9a3a3a180344460263e8df7ea2565128e07b86b5",
|
||||||
|
"states": [
|
||||||
|
{
|
||||||
|
"name": "male",
|
||||||
|
"directions": 4,
|
||||||
|
"delays": [
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
],
|
||||||
|
[
|
||||||
|
1.0
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
2
SpaceStation14Content.sln.DotSettings
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
||||||
|
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/Abbreviations/=RSI/@EntryIndexedValue">RSI</s:String></wpf:ResourceDictionary>
|
||||||