* Initial resources commit * Initial code commit * Added additional resources * Continuing to build holopad and telephone systems * Added hologram shader * Added hologram system and entity * Holo calls now have a hologram of the user appear on them * Initial implementation of holopads transmitting nearby chatter * Added support for linking across multiple telephones/holopads/entities * Fixed a bunch of bugs * Tried simplifying holopad entity dependence, added support for mid-call user switching * Replaced PVS expansion with manually networked sprite states * Adjusted volume of ring tone * Added machine board * Minor features and tweaks * Resolving merge conflict * Recommit audio attributions * Telephone chat adjustments * Added support for AI interactions with holopads * Building the holopad UI * Holopad UI finished * Further UI tweaks * Station AI can hear local chatter when being projected from a holopad * Minor bug fixes * Added wire panels to holopads * Basic broadcasting * Start of emergency broadcasting code * Fixing issues with broadcasting * More work on emergency broadcasting * Updated holopad visuals * Added cooldown text to emergency broadcast and control lock out screen * Code clean up * Fixed issue with timing * Broadcasting now requires command access * Fixed some bugs * Added multiple holopad prototypes with different ranges * The AI no longer requires power to interact with holopads * Fixed some additional issues * Addressing more issues * Added emote support for holograms * Changed the broadcast lockout durations to their proper values * Added AI vision wire to holopads * Bug fixes * AI vision and interaction wires can be added to the same wire panel * Fixed error * More bug fixes * Fixed test fail * Embellished the emergency call lock out window * Holopads play borg sounds when speaking * Borg and AI names are listed as the caller ID on the holopad * Borg chassis can now be seen on holopad holograms * Holopad returns to a machine frame when badly damaged * Clarified some text * Fix merge conflict * Fixed merge conflict * Fixing merge conflict * Fixing merge conflict * Fixing merge conflict * Offset menu on open * AI can alt click on holopads to activate the projector * Bug fixes for intellicard interactions * Fixed speech issue with intellicards * The UI automatically opens for the AI when it alt-clicks on the holopad * Simplified shader math * Telephones will auto hang up 60 seconds after the last person on a call stops speaking * Added better support for AI requests when multiple AI cores are on the station * The call controls pop up for the AI when they accept a summons from a holopad * Compatibility mode fix for the hologram shader * Further shader fixes for compatibility mode * File clean up * More cleaning up * Removed access requirements from quantum holopads so they can used by nukies * The title of the holopad window now reflects the name of the device * Linked telephones will lose their connection if both move out of range of each other
102 lines
3.3 KiB
C#
102 lines
3.3 KiB
C#
using Content.Shared.Holopad;
|
|
using Content.Shared.Silicons.StationAi;
|
|
using Robust.Client.Graphics;
|
|
using Robust.Client.UserInterface;
|
|
using Robust.Shared.Player;
|
|
using System.Numerics;
|
|
|
|
namespace Content.Client.Holopad;
|
|
|
|
public sealed class HolopadBoundUserInterface : BoundUserInterface
|
|
{
|
|
[Dependency] private readonly ISharedPlayerManager _playerManager = default!;
|
|
[Dependency] private readonly IClyde _displayManager = default!;
|
|
|
|
[ViewVariables]
|
|
private HolopadWindow? _window;
|
|
|
|
public HolopadBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
|
{
|
|
IoCManager.InjectDependencies(this);
|
|
}
|
|
|
|
protected override void Open()
|
|
{
|
|
base.Open();
|
|
|
|
_window = this.CreateWindow<HolopadWindow>();
|
|
_window.Title = Loc.GetString("holopad-window-title", ("title", EntMan.GetComponent<MetaDataComponent>(Owner).EntityName));
|
|
|
|
if (this.UiKey is not HolopadUiKey)
|
|
{
|
|
Close();
|
|
return;
|
|
}
|
|
|
|
var uiKey = (HolopadUiKey)this.UiKey;
|
|
|
|
// AIs will see a different holopad interface to crew when interacting with them in the world
|
|
if (uiKey == HolopadUiKey.InteractionWindow && EntMan.HasComponent<StationAiHeldComponent>(_playerManager.LocalEntity))
|
|
uiKey = HolopadUiKey.InteractionWindowForAi;
|
|
|
|
_window.SetState(Owner, uiKey);
|
|
_window.UpdateState(new Dictionary<NetEntity, string>());
|
|
|
|
// Set message actions
|
|
_window.SendHolopadStartNewCallMessageAction += SendHolopadStartNewCallMessage;
|
|
_window.SendHolopadAnswerCallMessageAction += SendHolopadAnswerCallMessage;
|
|
_window.SendHolopadEndCallMessageAction += SendHolopadEndCallMessage;
|
|
_window.SendHolopadStartBroadcastMessageAction += SendHolopadStartBroadcastMessage;
|
|
_window.SendHolopadActivateProjectorMessageAction += SendHolopadActivateProjectorMessage;
|
|
_window.SendHolopadRequestStationAiMessageAction += SendHolopadRequestStationAiMessage;
|
|
|
|
// If this call is addressed to an AI, open the window in the bottom right hand corner of the screen
|
|
if (uiKey == HolopadUiKey.AiRequestWindow)
|
|
_window.OpenCenteredAt(new Vector2(1f, 1f));
|
|
|
|
// Otherwise offset to the left so the holopad can still be seen
|
|
else
|
|
_window.OpenCenteredAt(new Vector2(0.3333f, 0.50f));
|
|
}
|
|
|
|
protected override void UpdateState(BoundUserInterfaceState state)
|
|
{
|
|
base.UpdateState(state);
|
|
|
|
var castState = (HolopadBoundInterfaceState)state;
|
|
EntMan.TryGetComponent<TransformComponent>(Owner, out var xform);
|
|
|
|
_window?.UpdateState(castState.Holopads);
|
|
}
|
|
|
|
public void SendHolopadStartNewCallMessage(NetEntity receiver)
|
|
{
|
|
SendMessage(new HolopadStartNewCallMessage(receiver));
|
|
}
|
|
|
|
public void SendHolopadAnswerCallMessage()
|
|
{
|
|
SendMessage(new HolopadAnswerCallMessage());
|
|
}
|
|
|
|
public void SendHolopadEndCallMessage()
|
|
{
|
|
SendMessage(new HolopadEndCallMessage());
|
|
}
|
|
|
|
public void SendHolopadStartBroadcastMessage()
|
|
{
|
|
SendMessage(new HolopadStartBroadcastMessage());
|
|
}
|
|
|
|
public void SendHolopadActivateProjectorMessage()
|
|
{
|
|
SendMessage(new HolopadActivateProjectorMessage());
|
|
}
|
|
|
|
public void SendHolopadRequestStationAiMessage()
|
|
{
|
|
SendMessage(new HolopadStationAiRequestMessage());
|
|
}
|
|
}
|