Adds character menu, crafting menu and tutorial to the top left.

This commit is contained in:
Pieter-Jan Briers
2019-07-17 21:37:58 +02:00
parent 69f9da944d
commit 4b9c4022b8
21 changed files with 508 additions and 213 deletions

View File

@@ -1,70 +0,0 @@
using Content.Client.GameObjects.Components.Construction;
using Robust.Client.Interfaces.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Shared.Maths;
using Robust.Shared.Utility;
namespace Content.Client.Construction
{
public class ConstructionButton : Button
{
public ConstructorComponent Owner
{
get => Menu.Owner;
set => Menu.Owner = value;
}
ConstructionMenu Menu;
public ConstructionButton()
{
PerformLayout();
}
protected override void Initialize()
{
base.Initialize();
SetAnchorPreset(LayoutPreset.BottomRight);
MarginLeft = -110.0f;
MarginTop = -70.0f;
MarginRight = -50.0f;
MarginBottom = -50.0f;
Text = "Crafting";
OnPressed += IWasPressed;
}
private void PerformLayout()
{
Menu = new ConstructionMenu();
Menu.AddToScreen();
}
void IWasPressed(ButtonEventArgs args)
{
Menu.Open();
}
public void AddToScreen()
{
UserInterfaceManager.StateRoot.AddChild(this);
}
public void RemoveFromScreen()
{
if (Parent != null)
{
Parent.RemoveChild(this);
}
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
Menu.Dispose();
}
base.Dispose(disposing);
}
}
}

View File

@@ -95,7 +95,7 @@ namespace Content.Client
else else
{ {
_gameHud.EscapeButtonDown = false; _gameHud.EscapeButtonDown = false;
_escapeMenu.Visible = false; _escapeMenu.Close();
} }
} }
} }

View File

@@ -1,15 +1,16 @@
using Content.Client.GameObjects.Components.Mobs; using System.Collections.Generic;
using System.Linq;
using Content.Client.GameObjects.Components.Mobs;
using Content.Client.UserInterface;
using Content.Shared.Input; using Content.Shared.Input;
using Robust.Client.GameObjects;
using Robust.Client.Interfaces.Input; using Robust.Client.Interfaces.Input;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.CustomControls; using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Input; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.Network;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Utility;
using System.Collections.Generic;
using System.Linq;
using Robust.Client.Interfaces.Graphics;
using Robust.Client.UserInterface.Controls;
namespace Content.Client.GameObjects.Components.Actor namespace Content.Client.GameObjects.Components.Actor
{ {
@@ -21,15 +22,15 @@ namespace Content.Client.GameObjects.Components.Actor
{ {
public override string Name => "Character Interface Component"; public override string Name => "Character Interface Component";
/// <summary> [Dependency]
/// Stored keybind to open the menu on keypress #pragma warning disable 649
/// </summary> private readonly IGameHud _gameHud;
private InputCmdHandler _openMenuCmdHandler; #pragma warning restore 649
/// <summary> /// <summary>
/// Window to hold each of the character interfaces /// Window to hold each of the character interfaces
/// </summary> /// </summary>
private SS14Window _window; public SS14Window Window { get; private set; }
/// <summary> /// <summary>
/// Create the window with all character UIs and bind it to a keypress /// Create the window with all character UIs and bind it to a keypress
@@ -39,26 +40,11 @@ namespace Content.Client.GameObjects.Components.Actor
base.Initialize(); base.Initialize();
//Use all the character ui interfaced components to create the character window //Use all the character ui interfaced components to create the character window
var UIcomponents = Owner.GetAllComponents<ICharacterUI>(); var uiComponents = Owner.GetAllComponents<ICharacterUI>();
_window = new CharacterWindow(UIcomponents); Window = new CharacterWindow(uiComponents);
Window.OnClose += () => _gameHud.CharacterButtonDown = false;
_window.AddToScreen(); Window.AddToScreen();
//Toggle window visible/invisible on keypress
_openMenuCmdHandler = InputCmdHandler.FromDelegate(session => {
if (_window.Visible)
{
_window.Close();
}
else
{
_window.Open();
}
});
//Set keybind to open character menu
var inputMgr = IoCManager.Resolve<IInputManager>();
inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, _openMenuCmdHandler);
} }
/// <summary> /// <summary>
@@ -68,13 +54,40 @@ namespace Content.Client.GameObjects.Components.Actor
{ {
base.OnRemove(); base.OnRemove();
_window.Dispose(); Window.Dispose();
_window = null; Window = null;
var inputMgr = IoCManager.Resolve<IInputManager>(); var inputMgr = IoCManager.Resolve<IInputManager>();
inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, null); inputMgr.SetInputCommand(ContentKeyFunctions.OpenCharacterMenu, null);
} }
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null)
{
base.HandleMessage(message, netChannel, component);
switch (message)
{
case PlayerAttachedMsg playerAttachedMsg:
_gameHud.CharacterButtonVisible = true;
_gameHud.CharacterButtonToggled = b =>
{
if (b)
{
Window.Open();
}
else
{
Window.Close();
}
};
break;
case PlayerDetachedMsg playerDetachedMsg:
_gameHud.CharacterButtonVisible = false;
break;
}
}
/// <summary> /// <summary>
/// A window that collects and shows all the individual character user interfaces /// A window that collects and shows all the individual character user interfaces
/// </summary> /// </summary>

View File

@@ -1,16 +1,15 @@
using System.Collections.Generic; using System.Collections.Generic;
using Content.Client.Construction; using Content.Client.Construction;
using Content.Client.UserInterface;
using Content.Shared.Construction; using Content.Shared.Construction;
using Content.Shared.GameObjects.Components.Construction; using Content.Shared.GameObjects.Components.Construction;
using Robust.Client.GameObjects; using Robust.Client.GameObjects;
using Robust.Client.Interfaces.GameObjects; using Robust.Client.Interfaces.GameObjects;
using Robust.Client.Interfaces.Graphics;
using Robust.Shared.GameObjects; using Robust.Shared.GameObjects;
using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.Interfaces.GameObjects;
using Robust.Shared.Interfaces.GameObjects.Components; using Robust.Shared.Interfaces.GameObjects.Components;
using Robust.Shared.Interfaces.Network; using Robust.Shared.Interfaces.Network;
using Robust.Shared.IoC; using Robust.Shared.IoC;
using Robust.Shared.Log;
using Robust.Shared.Map; using Robust.Shared.Map;
using Robust.Shared.Maths; using Robust.Shared.Maths;
@@ -18,17 +17,19 @@ namespace Content.Client.GameObjects.Components.Construction
{ {
public class ConstructorComponent : SharedConstructorComponent public class ConstructorComponent : SharedConstructorComponent
{ {
int nextId; #pragma warning disable 649
readonly Dictionary<int, ConstructionGhostComponent> Ghosts = new Dictionary<int, ConstructionGhostComponent>(); [Dependency] private readonly IGameHud _gameHud;
ConstructionButton Button; #pragma warning restore 649
ITransformComponent Transform; private int nextId;
private readonly Dictionary<int, ConstructionGhostComponent> Ghosts = new Dictionary<int, ConstructionGhostComponent>();
public ConstructionMenu ConstructionMenu { get; private set; }
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
Transform = Owner.GetComponent<ITransformComponent>(); Owner.GetComponent<ITransformComponent>();
} }
public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null) public override void HandleMessage(ComponentMessage message, INetChannel netChannel = null, IComponent component = null)
@@ -38,15 +39,30 @@ namespace Content.Client.GameObjects.Components.Construction
switch (message) switch (message)
{ {
case PlayerAttachedMsg _: case PlayerAttachedMsg _:
if (Button == null) if (ConstructionMenu == null)
{ {
Button = new ConstructionButton {Owner = this}; ConstructionMenu = new ConstructionMenu {Owner = this};
ConstructionMenu.OnClose += () => _gameHud.CraftingButtonDown = false;
} }
Button.AddToScreen(); ConstructionMenu.AddToScreen();
_gameHud.CraftingButtonVisible = true;
_gameHud.CraftingButtonToggled = b =>
{
if (b)
{
ConstructionMenu.Open();
}
else
{
ConstructionMenu.Close();
}
};
break; break;
case PlayerDetachedMsg _: case PlayerDetachedMsg _:
Button.RemoveFromScreen(); ConstructionMenu.Parent.RemoveChild(ConstructionMenu);
_gameHud.CraftingButtonVisible = false;
break; break;
case AckStructureConstructionMessage ackMsg: case AckStructureConstructionMessage ackMsg:
@@ -57,7 +73,7 @@ namespace Content.Client.GameObjects.Components.Construction
public override void OnRemove() public override void OnRemove()
{ {
Button?.Dispose(); ConstructionMenu?.Dispose();
} }
public void SpawnGhost(ConstructionPrototype prototype, GridCoordinates loc, Direction dir) public void SpawnGhost(ConstructionPrototype prototype, GridCoordinates loc, Direction dir)

View File

@@ -0,0 +1,70 @@
using Content.Client.GameObjects.Components.Actor;
using Content.Client.UserInterface;
using Content.Shared.Input;
using Robust.Client.GameObjects.EntitySystems;
using Robust.Client.Player;
using Robust.Client.UserInterface.CustomControls;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Input;
using Robust.Shared.IoC;
namespace Content.Client.GameObjects.EntitySystems
{
public sealed class CharacterInterfaceSystem : EntitySystem
{
#pragma warning disable 649
[Dependency] private readonly IGameHud _gameHud;
[Dependency] private readonly IPlayerManager _playerManager;
#pragma warning restore 649
public override void Initialize()
{
base.Initialize();
var inputSys = EntitySystemManager.GetEntitySystem<InputSystem>();
inputSys.BindMap.BindFunction(ContentKeyFunctions.OpenCharacterMenu,
new PointerInputCmdHandler(HandleOpenCharacterMenu));
}
private void HandleOpenCharacterMenu(in PointerInputCmdHandler.PointerInputCmdArgs args)
{
if (_playerManager.LocalPlayer.ControlledEntity == null
|| !_playerManager.LocalPlayer.ControlledEntity.TryGetComponent(out CharacterInterface characterInterface))
{
return;
}
var menu = characterInterface.Window;
if (menu.Visible)
{
if (menu.IsAtFront())
{
_setOpenValue(menu, false);
}
else
{
menu.MoveToFront();
}
}
else
{
_setOpenValue(menu, true);
}
}
private void _setOpenValue(SS14Window menu, bool value)
{
if (value)
{
_gameHud.CharacterButtonDown = true;
menu.OpenCentered();
}
else
{
_gameHud.CharacterButtonDown = false;
menu.Close();
}
}
}
}

View File

@@ -0,0 +1,70 @@
using Content.Client.Construction;
using Content.Client.GameObjects.Components.Construction;
using Content.Client.UserInterface;
using Content.Shared.Input;
using Robust.Client.GameObjects.EntitySystems;
using Robust.Client.Player;
using Robust.Shared.GameObjects.Systems;
using Robust.Shared.Input;
using Robust.Shared.IoC;
namespace Content.Client.GameObjects.EntitySystems
{
public sealed class ConstructorSystem : EntitySystem
{
#pragma warning disable 649
[Dependency] private readonly IGameHud _gameHud;
[Dependency] private readonly IPlayerManager _playerManager;
#pragma warning restore 649
public override void Initialize()
{
base.Initialize();
var inputSys = EntitySystemManager.GetEntitySystem<InputSystem>();
inputSys.BindMap.BindFunction(ContentKeyFunctions.OpenCraftingMenu,
new PointerInputCmdHandler(HandleOpenCraftingMenu));
}
private void HandleOpenCraftingMenu(in PointerInputCmdHandler.PointerInputCmdArgs args)
{
if (_playerManager.LocalPlayer.ControlledEntity == null
|| !_playerManager.LocalPlayer.ControlledEntity.TryGetComponent(out ConstructorComponent constructor))
{
return;
}
var menu = constructor.ConstructionMenu;
if (menu.Visible)
{
if (menu.IsAtFront())
{
_setOpenValue(menu, false);
}
else
{
menu.MoveToFront();
}
}
else
{
_setOpenValue(menu, true);
}
}
private void _setOpenValue(ConstructionMenu menu, bool value)
{
if (value)
{
_gameHud.CraftingButtonDown = true;
menu.OpenCentered();
}
else
{
_gameHud.CraftingButtonDown = false;
menu.Close();
}
}
}
}

View File

@@ -45,7 +45,6 @@ namespace Content.Client.GameTicking
[ViewVariables] private LobbyGui _lobby; [ViewVariables] private LobbyGui _lobby;
[ViewVariables] private bool _gameStarted; [ViewVariables] private bool _gameStarted;
[ViewVariables] private DateTime _startTime; [ViewVariables] private DateTime _startTime;
[ViewVariables] private TutorialButton _tutorialButton;
public void Initialize() public void Initialize()
{ {
@@ -172,12 +171,6 @@ namespace Content.Client.GameTicking
_gameChat = null; _gameChat = null;
} }
if (_tutorialButton != null)
{
_tutorialButton.Dispose();
_tutorialButton = null;
}
_gameHud.RootControl.Parent?.RemoveChild(_gameHud.RootControl); _gameHud.RootControl.Parent?.RemoveChild(_gameHud.RootControl);
_tickerState = TickerState.InLobby; _tickerState = TickerState.InLobby;
@@ -253,9 +246,6 @@ namespace Content.Client.GameTicking
_userInterfaceManager.StateRoot.AddChild(_gameChat); _userInterfaceManager.StateRoot.AddChild(_gameChat);
_userInterfaceManager.StateRoot.AddChild(_gameHud.RootControl); _userInterfaceManager.StateRoot.AddChild(_gameHud.RootControl);
_chatManager.SetChatBox(_gameChat); _chatManager.SetChatBox(_gameChat);
_tutorialButton = new TutorialButton();
_userInterfaceManager.StateRoot.AddChild(_tutorialButton);
_tutorialButton.SetAnchorAndMarginPreset(Control.LayoutPreset.BottomLeft, Control.LayoutPresetMode.MinSize, 50);
_gameChat.DefaultChatFormat = "say \"{0}\""; _gameChat.DefaultChatFormat = "say \"{0}\"";
} }

View File

@@ -24,6 +24,7 @@ namespace Content.Client.Input
human.AddFunction(ContentKeyFunctions.ActivateItemInWorld); human.AddFunction(ContentKeyFunctions.ActivateItemInWorld);
human.AddFunction(ContentKeyFunctions.ThrowItemInHand); human.AddFunction(ContentKeyFunctions.ThrowItemInHand);
human.AddFunction(ContentKeyFunctions.OpenContextMenu); human.AddFunction(ContentKeyFunctions.OpenContextMenu);
human.AddFunction(ContentKeyFunctions.OpenCraftingMenu);
// Disabled until there is feedback, so hitting tab doesn't suddenly break interaction. // Disabled until there is feedback, so hitting tab doesn't suddenly break interaction.
// human.AddFunction(ContentKeyFunctions.ToggleCombatMode); // human.AddFunction(ContentKeyFunctions.ToggleCombatMode);

View File

@@ -18,8 +18,21 @@ namespace Content.Client.UserInterface
{ {
Control RootControl { get; } Control RootControl { get; }
// Escape top button.
bool EscapeButtonDown { get; set; } bool EscapeButtonDown { get; set; }
Action<bool> EscapeButtonToggled { get; set; } Action<bool> EscapeButtonToggled { get; set; }
// Character top button.
bool CharacterButtonDown { get; set; }
bool CharacterButtonVisible { get; set; }
Action<bool> CharacterButtonToggled { get; set; }
// Crafting top button.
bool CraftingButtonDown { get; set; }
bool CraftingButtonVisible { get; set; }
Action<bool> CraftingButtonToggled { get; set; }
// Init logic.
void Initialize(); void Initialize();
} }
@@ -27,8 +40,10 @@ namespace Content.Client.UserInterface
{ {
private HBoxContainer _topButtonsContainer; private HBoxContainer _topButtonsContainer;
private TopButton _buttonEscapeMenu; private TopButton _buttonEscapeMenu;
private TopButton _buttonInventoryMenu; private TopButton _buttonTutorial;
private TopButton _buttonCharacterMenu;
private TopButton _buttonCraftingMenu; private TopButton _buttonCraftingMenu;
private TutorialWindow _tutorialWindow;
#pragma warning disable 649 #pragma warning disable 649
[Dependency] private readonly IResourceCache _resourceCache; [Dependency] private readonly IResourceCache _resourceCache;
@@ -42,6 +57,9 @@ namespace Content.Client.UserInterface
RootControl.SetAnchorPreset(Control.LayoutPreset.Wide); RootControl.SetAnchorPreset(Control.LayoutPreset.Wide);
var escapeTexture = _resourceCache.GetTexture("/Textures/UserInterface/hamburger.svg.96dpi.png"); var escapeTexture = _resourceCache.GetTexture("/Textures/UserInterface/hamburger.svg.96dpi.png");
var characterTexture = _resourceCache.GetTexture("/Textures/UserInterface/character.svg.96dpi.png");
var craftingTexture = _resourceCache.GetTexture("/Textures/UserInterface/hammer.svg.96dpi.png");
var tutorialTexture = _resourceCache.GetTexture("/Textures/UserInterface/tutorial.svg.96dpi.png");
_topButtonsContainer = new HBoxContainer _topButtonsContainer = new HBoxContainer
{ {
@@ -53,30 +71,71 @@ namespace Content.Client.UserInterface
// TODO: Pull key names here from the actual key binding config. // TODO: Pull key names here from the actual key binding config.
// Escape // Escape
_buttonEscapeMenu = new TopButton(escapeTexture, "esc") _buttonEscapeMenu = new TopButton(escapeTexture, "ESC")
{ {
ToolTip = _localizationManager.GetString("Open escape menu.") ToolTip = _localizationManager.GetString("Open escape menu.")
}; };
_topButtonsContainer.AddChild(_buttonEscapeMenu); _topButtonsContainer.AddChild(_buttonEscapeMenu);
// Inventory _buttonEscapeMenu.OnToggled += args => EscapeButtonToggled?.Invoke(args.Pressed);
_buttonInventoryMenu = new TopButton(escapeTexture, "i")
// Tutorial
_buttonTutorial = new TopButton(tutorialTexture, " ")
{ {
ToolTip = _localizationManager.GetString("Open inventory menu.") ToolTip = _localizationManager.GetString("Open tutorial.")
}; };
_topButtonsContainer.AddChild(_buttonInventoryMenu); _topButtonsContainer.AddChild(_buttonTutorial);
_buttonTutorial.OnToggled += ButtonTutorialOnOnToggled;
// Inventory
_buttonCharacterMenu = new TopButton(characterTexture, "C")
{
ToolTip = _localizationManager.GetString("Open character menu."),
Visible = false
};
_topButtonsContainer.AddChild(_buttonCharacterMenu);
_buttonCharacterMenu.OnToggled += args => CharacterButtonToggled?.Invoke(args.Pressed);
// Crafting // Crafting
_buttonCraftingMenu = new TopButton(escapeTexture, "g") _buttonCraftingMenu = new TopButton(craftingTexture, "G")
{ {
ToolTip = _localizationManager.GetString("Open crafting menu.") ToolTip = _localizationManager.GetString("Open crafting menu."),
Visible = false
}; };
_topButtonsContainer.AddChild(_buttonCraftingMenu); _topButtonsContainer.AddChild(_buttonCraftingMenu);
_buttonEscapeMenu.OnToggled += args => EscapeButtonToggled?.Invoke(args.Pressed); _buttonCraftingMenu.OnToggled += args => CraftingButtonToggled?.Invoke(args.Pressed);
_tutorialWindow = new TutorialWindow();
_tutorialWindow.AddToScreen();
_tutorialWindow.OnClose += () => _buttonTutorial.Pressed = false;
}
private void ButtonTutorialOnOnToggled(BaseButton.ButtonToggledEventArgs obj)
{
if (_tutorialWindow.Visible)
{
if (!_tutorialWindow.IsAtFront())
{
_tutorialWindow.MoveToFront();
}
else
{
_tutorialWindow.Close();
}
}
else
{
_tutorialWindow.OpenCentered();
_buttonTutorial.Pressed = true;
}
} }
public Control RootControl { get; private set; } public Control RootControl { get; private set; }
@@ -89,6 +148,33 @@ namespace Content.Client.UserInterface
public Action<bool> EscapeButtonToggled { get; set; } public Action<bool> EscapeButtonToggled { get; set; }
public bool CharacterButtonDown
{
get => _buttonCharacterMenu.Pressed;
set => _buttonCharacterMenu.Pressed = value;
}
public bool CharacterButtonVisible
{
get => _buttonCharacterMenu.Visible;
set => _buttonCharacterMenu.Visible = value;
}
public Action<bool> CharacterButtonToggled { get; set; }
public bool CraftingButtonDown
{
get => _buttonCraftingMenu.Pressed;
set => _buttonCraftingMenu.Pressed = value;
}
public bool CraftingButtonVisible
{
get => _buttonCraftingMenu.Visible;
set => _buttonCraftingMenu.Visible = value;
}
public Action<bool> CraftingButtonToggled { get; set; }
public sealed class TopButton : BaseButton public sealed class TopButton : BaseButton
{ {
@@ -110,8 +196,10 @@ namespace Content.Client.UserInterface
{ {
Texture = texture, Texture = texture,
SizeFlagsHorizontal = SizeFlags.ShrinkCenter, SizeFlagsHorizontal = SizeFlags.ShrinkCenter,
SizeFlagsVertical = SizeFlags.Expand | SizeFlags.ShrinkCenter,
MouseFilter = MouseFilterMode.Ignore, MouseFilter = MouseFilterMode.Ignore,
ModulateSelfOverride = ColorNormal ModulateSelfOverride = ColorNormal,
CustomMinimumSize = (0, 32)
}); });
_container.AddChild(_label = new Label _container.AddChild(_label = new Label

View File

@@ -4,7 +4,7 @@ using Robust.Shared.Utility;
namespace Content.Client.UserInterface namespace Content.Client.UserInterface
{ {
internal sealed class TutorialButton : Button public sealed class TutorialWindow : SS14Window
{ {
private const string TutorialContents = @"Hi and welcome to Space Station 14! private const string TutorialContents = @"Hi and welcome to Space Station 14!
@@ -21,32 +21,19 @@ New to SS14: You can press ""E"" to activate objects. This functions similarly t
You can talk in OOC by prefixing the message with [ or /ooc. You can talk in OOC by prefixing the message with [ or /ooc.
If you are not on a QWERTY keyboard, the keys mentioned above are bound to the physical location on your keyboard, If you are not on a QWERTY keyboard, the keys mentioned above are bound to the physical location on your keyboard, not what letter they correspond to.
not what letter they correspond to. For example on AZERTY movement is ZQSD, drop is A, W is activate in hand. For example on AZERTY movement is ZQSD, drop is A, W is activate in hand.
If you have any feedback, questions, bug reports, etc..., do not be afraid to tell us! If you have any feedback, questions, bug reports, etc..., do not be afraid to tell us!
You can ask on Discord or heck, just write it in OOC, we'll catch it. You can ask on Discord or heck, just write it in OOC! We'll catch it.";
";
public TutorialWindow()
public TutorialButton()
{ {
OnPressed += OnOnPressed; HideOnClose = true;
Visible = false;
Text = "Tutorial";
}
private void OnOnPressed(ButtonEventArgs obj)
{
_openTutorialWindow();
}
private void _openTutorialWindow()
{
var window = new SS14Window {Title = "Tutorial"};
var scrollContainer = new ScrollContainer(); var scrollContainer = new ScrollContainer();
window.Contents.AddChild(scrollContainer); Contents.AddChild(scrollContainer);
var label = new RichTextLabel(); var label = new RichTextLabel();
scrollContainer.AddChild(label); scrollContainer.AddChild(label);
@@ -54,8 +41,6 @@ You can ask on Discord or heck, just write it in OOC, we'll catch it.
var message = new FormattedMessage(); var message = new FormattedMessage();
message.AddText(TutorialContents); message.AddText(TutorialContents);
label.SetMessage(message); label.SetMessage(message);
window.AddToScreen();
} }
} }
} }

View File

@@ -9,6 +9,7 @@ namespace Content.Shared.Input
public static readonly BoundKeyFunction Drop = "Drop"; public static readonly BoundKeyFunction Drop = "Drop";
public static readonly BoundKeyFunction ActivateItemInHand = "ActivateItemInHand"; public static readonly BoundKeyFunction ActivateItemInHand = "ActivateItemInHand";
public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu"; public static readonly BoundKeyFunction OpenCharacterMenu = "OpenCharacterMenu";
public static readonly BoundKeyFunction OpenCraftingMenu = "OpenCraftingMenu";
public static readonly BoundKeyFunction ExamineEntity = "ExamineEntity"; public static readonly BoundKeyFunction ExamineEntity = "ExamineEntity";
public static readonly BoundKeyFunction UseItemInHand = "UseItemInHand"; // use hand item on world entity public static readonly BoundKeyFunction UseItemInHand = "UseItemInHand"; // use hand item on world entity
public static readonly BoundKeyFunction ActivateItemInWorld = "ActivateItemInWorld"; // default action on world entity public static readonly BoundKeyFunction ActivateItemInWorld = "ActivateItemInWorld"; // default action on world entity

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg897"
version="1.1"
viewBox="0 0 6.3499999 8.3998403"
height="8.3998404mm"
width="6.3499999mm">
<defs
id="defs891" />
<metadata
id="metadata894">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(34.169032,-124.25611)"
id="layer1">
<path
id="path825"
d="m -30.978686,128.48944 c 0.949854,0 1.719792,-0.94766 1.719792,-2.11667 0,-1.16901 -0.252677,-2.11666 -1.719792,-2.11666 -1.466929,0 -1.719792,0.94765 -1.719792,2.11666 0,1.16901 0.770017,2.11667 1.719792,2.11667 z"
style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd;stroke-width:0.26458332;fill-opacity:1" />
<path
id="path831"
d="m -27.822487,131.3878 c -0.03122,-2.02358 -0.287867,-2.60019 -2.251075,-2.96518 0,0 -0.276225,0.36274 -0.920486,0.36274 -0.644048,0 -0.920459,-0.36274 -0.920459,-0.36274 -1.941777,0.361 -2.213927,0.92906 -2.249725,2.89944 -0.0029,0.16089 -0.0043,0.16936 -0.0048,0.15068 1.33e-4,0.035 2.65e-4,0.0997 2.65e-4,0.21259 0,0 0.467386,0.97062 3.174735,0.97062 2.707482,0 3.175,-0.97062 3.175,-0.97062 0,-0.0725 0,-0.12295 0,-0.15727 -5.29e-4,0.0116 -0.0016,-0.0108 -0.0034,-0.14026 z"
style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd;stroke-width:0.26458332;fill-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

View File

@@ -1,45 +1,17 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#" xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="7.9563375mm"
height="7.1438789mm"
viewBox="0 0 7.9563375 7.1438789"
version="1.1"
id="svg4593" id="svg4593"
sodipodi:docname="hamburger.svg" version="1.1"
inkscape:export-filename="/home/pj/Projects/space-station-14-content/Resources/Textures/UserInterface/hamburger.svg.96dpi.png" viewBox="0 0 7.9563375 7.1438789"
inkscape:export-xdpi="95.998207" height="7.1438789mm"
inkscape:export-ydpi="95.998207" width="7.9563375mm">
inkscape:version="0.92.4 5da689c313, 2019-01-14">
<defs <defs
id="defs4587" /> id="defs4587" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="5.6"
inkscape:cx="35.456574"
inkscape:cy="-4.4711292"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1043"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
units="px" />
<metadata <metadata
id="metadata4590"> id="metadata4590">
<rdf:RDF> <rdf:RDF>
@@ -53,33 +25,19 @@
</rdf:RDF> </rdf:RDF>
</metadata> </metadata>
<g <g
inkscape:label="Layer 1" transform="translate(-97.319452,-120.31497)"
inkscape:groupmode="layer" id="layer1">
id="layer1"
transform="translate(-97.319452,-120.31497)">
<path <path
inkscape:connector-curvature="0"
style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1"
d="m 97.990331,120.97649 h 6.614579"
id="path4" id="path4"
inkscape:export-filename="/home/pj/Projects/space-station-14-content/Resources/Textures/UserInterface/hamburger.png" d="m 97.990331,120.97649 h 6.614579"
inkscape:export-xdpi="95.998207" style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1" />
inkscape:export-ydpi="95.998207" />
<path <path
inkscape:connector-curvature="0"
style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1"
d="m 97.990331,123.8869 h 6.614579"
id="path6" id="path6"
inkscape:export-filename="/home/pj/Projects/space-station-14-content/Resources/Textures/UserInterface/hamburger.png" d="m 97.990331,123.8869 h 6.614579"
inkscape:export-xdpi="95.998207" style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1" />
inkscape:export-ydpi="95.998207" />
<path <path
inkscape:connector-curvature="0"
style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1"
d="m 97.990331,126.79732 h 6.614579"
id="path8" id="path8"
inkscape:export-filename="/home/pj/Projects/space-station-14-content/Resources/Textures/UserInterface/hamburger.png" d="m 97.990331,126.79732 h 6.614579"
inkscape:export-xdpi="95.998207" style="stroke:#ffffff;stroke-width:1.32291663;stroke-linecap:round;stroke-opacity:1" />
inkscape:export-ydpi="95.998207" />
</g> </g>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg1486"
version="1.1"
viewBox="0 0 5.3584948 8.1514988"
height="8.1514988mm"
width="5.3584948mm">
<defs
id="defs1480" />
<metadata
id="metadata1483">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(75.250695,117.55798)"
id="layer1">
<path
id="path34"
d="m -70.236934,-117.55773 -0.861483,0.0297 c -0.04048,0.001 -0.07832,0.0195 -0.105569,0.0503 l -0.102658,0.11563 -0.112713,-0.10822 c -0.03016,-0.0288 -0.06958,-0.044 -0.109802,-0.0429 l -1.723231,0.0593 c -0.345546,0.0119 -0.924454,0.0318 -1.479814,0.65811 -0.555096,0.62585 -0.529432,1.18144 -0.51144,1.58708 0.0029,0.064 0.0426,0.12052 0.100806,0.14295 0.05821,0.0227 0.123296,0.007 0.164571,-0.04 0.827352,-0.93271 1.309423,-0.67016 1.599935,-0.39139 0.241565,0.23159 0.245269,0.55176 0.259557,0.73109 h 1.480872 c 0.0463,-0.33388 0.127,-0.82923 0.259028,-0.9535 l 0.154516,0.14827 c 0.03016,0.0288 0.06959,0.044 0.109802,0.0428 l 1.077119,-0.0371 c 0.04022,-0.002 0.07832,-0.0195 0.105569,-0.0503 l 0.0034,-0.004 c 0.02752,-0.033 0.04022,-0.0765 0.03519,-0.11983 l -0.184679,-1.67522 c -0.0093,-0.0833 -0.07858,-0.14548 -0.159015,-0.14294 z"
style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd;stroke-width:0.26458332;fill-opacity:0.94117647" />
<path
id="path36"
d="m -73.125919,-110.25648 c -0.004,0.22704 0.07726,0.43934 0.242094,0.61087 0.313531,0.32631 0.832379,0.31758 1.157287,-0.0195 0.165365,-0.17174 0.256381,-0.40722 0.249767,-0.64571 l -0.163777,-4.08366 h -1.485371 z"
style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd;stroke-width:0.26458332;fill-opacity:0.94117647" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 459 B

View File

@@ -0,0 +1,51 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg892"
version="1.1"
viewBox="0 0 7.1437076 8.3980603"
height="31.7407"
width="26.99984">
<defs
id="defs886" />
<metadata
id="metadata889">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-107.55313,-136.31883)"
id="layer1">
<path
id="path22"
d="m 113.55573,140.835 c 0,0.37476 -0.25718,0.68731 -0.57362,0.68731 h -0.0262 c -0.31618,0 -0.57415,-0.31255 -0.57415,-0.68731 v -0.54742 h -2.51354 v 0.54742 c 0,0.37476 -0.25797,0.68731 -0.57441,0.68731 h -0.0262 c -0.31645,0 -0.57362,-0.31255 -0.57362,-0.68731 v -0.54742 h -0.74401 v 3.75983 c 0,0.36743 0.24633,0.66948 0.55642,0.66948 h 5.2369 c 0.31009,0 0.55668,-0.30205 0.55668,-0.66948 v -3.75983 h -0.74427 z"
style="clip-rule:evenodd;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke-width:0.26458332" />
<path
id="path24"
d="m 112.77863,136.59632 c 0,-0.1513 -0.11139,-0.27749 -0.23892,-0.27749 h -2.82945 c -0.12779,0 -0.23892,0.12619 -0.23892,0.27749 v 0.54565 h 3.30729 z"
style="clip-rule:evenodd;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke-width:0.26458332" />
<path
id="path26"
d="m 114.13887,137.37719 h -6.02747 c -0.14791,-0.002 -0.29025,0.0669 -0.39503,0.19034 -0.10504,0.12348 -0.16377,0.2916 -0.16324,0.4668 v 2.08669 h 1.14114 v -0.56004 c 0,-0.0649 0.0444,-0.12592 0.0992,-0.12592 h 0.97473 c 0.0548,0 0.10001,0.061 0.10001,0.12592 v 0.56004 h 2.51354 v -0.56004 c 0,-0.0649 0.0452,-0.12592 0.10001,-0.12592 h 0.97499 c 0.0548,0 0.0992,0.061 0.0992,0.12592 v 0.56004 h 1.14088 v -2.08669 c 5.3e-4,-0.1752 -0.0582,-0.34332 -0.16324,-0.4668 -0.10478,-0.12348 -0.24712,-0.19204 -0.39476,-0.19034 z"
style="clip-rule:evenodd;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke-width:0.26458332" />
<path
id="path28"
d="m 112.98957,141.30192 c 0.20664,0 0.37517,-0.20703 0.37517,-0.45212 v -1.23338 h -0.77734 v 1.23338 c 0,0.24501 0.16907,0.45212 0.37597,0.45212 z"
style="clip-rule:evenodd;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke-width:0.26458332" />
<path
id="path30"
d="m 109.65798,139.61667 h -0.77734 v 1.23338 c 0,0.24501 0.16854,0.45212 0.37518,0.45212 h 0.0264 c 0.20664,0 0.37571,-0.20703 0.37571,-0.45212 v -0.62098 c 0,-0.011 -0.005,-0.0226 -0.005,-0.0347 0,-0.0121 0.005,-0.0237 0.005,-0.0347 z"
style="clip-rule:evenodd;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke-width:0.26458332" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 512 B

View File

@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg1475"
version="1.1"
viewBox="0 0 5.3731326 8.4666643"
height="8.4666643mm"
width="5.3731327mm">
<defs
id="defs1469" />
<metadata
id="metadata1472">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
transform="translate(-86.25635,-119.61469)"
id="layer1">
<path
id="path2050"
d="m 88.782112,125.68043 c 0,-0.22408 0.08061,-0.54167 0.147556,-0.68488 0.443259,-0.9484 2.067069,-0.31899 2.067069,-2.72423 0,-1.19082 -0.789124,-2.02388 -1.976921,-2.02388 -1.187795,0 -2.13072,0.83017 -2.13072,2.02388"
style="fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.26549149;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
<circle
r="0.94911855"
cy="127.13224"
cx="88.782127"
id="path5787"
style="fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2.95794892;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 B

View File

@@ -76,3 +76,6 @@ binds:
- function: ToggleCombatMode - function: ToggleCombatMode
type: Toggle type: Toggle
key: Tab key: Tab
- function: OpenCraftingMenu
type: state
key: G