mirror of
https://github.com/space-wizards/RobustToolbox.git
synced 2026-02-15 03:30:53 +01:00
* UIControllerManager Implemented UI Controller Manager * added fetch function * added note * Hiding some internal stuff * Implemented event on gamestate switch for ui * Fix serialization field assigner emit * fixing issues with ILEmitter stuff * AHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Blame Smug * fixing nullref * Add checking for no backing field / property for ui system dependencies * fixes Gamestate detection * Implemented event on UIControllers on system load * Updated systemload/unload listeners * Had this backwards lol * Fix nulling systems before calling OnSystemUnloaded, broke InventoryUIController.Hands.cs * Created UI Window management system - A manager that allows for easy creation and access of popup or gamestate windows * Changing to use basewindow instead of default window * Implemented UI Theming that isn't ass * Updated default theme loading and validation * Added path validation for themes * Implemented UI Themes * Implemented UI Theme prototypes * Implementing theming for texture buttons and Texturerects * fixing server error * Remove IUILink * Implemented default theme overriding and theme colors * Fixing sandbox lul * Added error for not finding UITheme * fixing setting default theme in content * Move entity and tile spawn window logic to controllers * Add 2 TODOs * Merge fixes * Add IOnStateChanged for UI controllers * Fix inventory window being slow to open Caches resources when the UI theme is changed * Remove caching on theme change The real fix was fixing the path for resources * Remove test method * Fix crash when controllers implement non generic interfaces * Add controllers frame update * Split UserInterfaceManager into partials - Created UI screen * Converted more UI managers into partials * Setup UIScreen manager system * Added some widget utility funcs updated adding widgets * Started removing HUDManager * Moved UiController Manager to Partials Finished moving all UIController code to UIManager * Fixed screen loading * Fixed Screen scaling * Fixed Screen scaling cleanup * wat * IwantToDie * Fixed resolving ResourceCache instead of IResourceCache * Split IOnStateChanged into IOnStateEntered and IOnStateExited * Implemented helpers for adjusting UIAutoscale for screens * Fixed autoscale, removed archiving from autoscale * Implemented popups and adjusted some stuff * Fixing some popup related shinanegans * Fixing some draw order issues * fixing dumb shit * Fix indentation in UserInterfaceManager.Input.cs * Moved screen setup to post init (run after content) * Fix updating theme * Merge fixes * Fix resolving sprite system on control creation * Fix min size of tile spawn window * Add UIController.Initialize method * https://tenor.com/view/minor-spelling-mistake-gif-21179057 * Add doc comment to UIController * Split UIController.cs and UISystemDependency.cs into their own files * Add more documentation to ui controllers * Add AttributeUsage to UISystemDependencyAttribute * Fix method naming * Add documentation for assigners * Return casted widgets where relevant * Fix entity spawner scroll (#1) * Add CloseOnClick and CloseOnEscape for popups * Remove named windows and popups * Cleanup controller code * Add IOnStateChanged, IOnSystemChanged, IOnSystemLoaded, IOnSystemUnloaded * Add more docs to state and system change interfaces * Fixing Window issues * Fixing some window fuckery * Added OnOpen event to windows, updated sandbox window Sandbox windows now persist values and positions * Recurse through controls to register widgets (#2) * Allow path to be folder * Fix local player shutdown * Fixing escape menu * Fix backing field in DataDefinition.Emitters * Ent+Tile spawn no crash * Skip no-spawn in entity spawn menu Co-authored-by: Jezithyr <jmaster9999@gmail.com> Co-authored-by: DrSmugleaf <DrSmugleaf@users.noreply.github.com> Co-authored-by: Jezithyr <Jezithyr@gmail.com> Co-authored-by: wrexbe <81056464+wrexbe@users.noreply.github.com> Co-authored-by: Flipp Syder <76629141+vulppine@users.noreply.github.com> Co-authored-by: wrexbe <wrexbe@protonmail.com>
172 lines
5.5 KiB
C#
172 lines
5.5 KiB
C#
using System;
|
|
using System.Diagnostics;
|
|
using Robust.Client.GameObjects;
|
|
using Robust.Shared.Enums;
|
|
using Robust.Shared.GameObjects;
|
|
using Robust.Shared.IoC;
|
|
using Robust.Shared.Network;
|
|
using Robust.Shared.Players;
|
|
using Robust.Shared.ViewVariables;
|
|
|
|
namespace Robust.Client.Player
|
|
{
|
|
/// <summary>
|
|
/// Variables and functions that deal with the local client's session.
|
|
/// </summary>
|
|
public sealed class LocalPlayer
|
|
{
|
|
/// <summary>
|
|
/// An entity has been attached to the local player.
|
|
/// </summary>
|
|
public event Action<EntityAttachedEventArgs>? EntityAttached;
|
|
|
|
/// <summary>
|
|
/// An entity has been detached from the local player.
|
|
/// </summary>
|
|
public event Action<EntityDetachedEventArgs>? EntityDetached;
|
|
|
|
/// <summary>
|
|
/// Game entity that the local player is controlling. If this is default, the player is not attached to any
|
|
/// entity at all.
|
|
/// </summary>
|
|
[ViewVariables] public EntityUid? ControlledEntity { get; private set; }
|
|
|
|
[ViewVariables] public NetUserId UserId { get; set; }
|
|
|
|
/// <summary>
|
|
/// Session of the local client.
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public ICommonSession Session => InternalSession;
|
|
|
|
internal PlayerSession InternalSession { get; set; } = default!;
|
|
|
|
/// <summary>
|
|
/// OOC name of the local player.
|
|
/// </summary>
|
|
[ViewVariables]
|
|
public string Name { get; set; } = default!;
|
|
|
|
/// <summary>
|
|
/// The status of the client's session has changed.
|
|
/// </summary>
|
|
public event EventHandler<StatusEventArgs>? StatusChanged;
|
|
|
|
/// <summary>
|
|
/// Attaches a client to an entity.
|
|
/// </summary>
|
|
/// <param name="entity">Entity to attach the client to.</param>
|
|
public void AttachEntity(EntityUid entity)
|
|
{
|
|
// Detach and cleanup first
|
|
DetachEntity();
|
|
|
|
ControlledEntity = entity;
|
|
InternalSession.AttachedEntity = entity;
|
|
|
|
var entMan = IoCManager.Resolve<IEntityManager>();
|
|
|
|
if (!entMan.TryGetComponent<EyeComponent?>(entity, out var eye))
|
|
{
|
|
eye = entMan.AddComponent<EyeComponent>(entity);
|
|
}
|
|
eye.Current = true;
|
|
|
|
EntityAttached?.Invoke(new EntityAttachedEventArgs(entity));
|
|
|
|
// notify ECS Systems
|
|
var eventBus = entMan.EventBus;
|
|
eventBus.RaiseEvent(EventSource.Local, new PlayerAttachSysMessage(entity));
|
|
eventBus.RaiseLocalEvent(entity, new PlayerAttachedEvent(entity), true);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Detaches the client from an entity.
|
|
/// </summary>
|
|
public void DetachEntity()
|
|
{
|
|
var entMan = IoCManager.Resolve<IEntityManager>();
|
|
var previous = ControlledEntity;
|
|
if (entMan.TryGetComponent(previous, out MetaDataComponent? metaData) &&
|
|
metaData.EntityInitialized &&
|
|
!metaData.EntityDeleted)
|
|
{
|
|
entMan.GetComponent<EyeComponent>(previous.Value).Current = false;
|
|
}
|
|
|
|
ControlledEntity = null;
|
|
InternalSession.AttachedEntity = null;
|
|
|
|
if (previous != null)
|
|
{
|
|
entMan.EventBus.RaiseEvent(EventSource.Local, new PlayerAttachSysMessage(default));
|
|
entMan.EventBus.RaiseLocalEvent(previous.Value, new PlayerDetachedEvent(previous.Value), true);
|
|
EntityDetached?.Invoke(new EntityDetachedEventArgs(previous.Value));
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the state of the session.
|
|
/// </summary>
|
|
public void SwitchState(SessionStatus newStatus)
|
|
{
|
|
SwitchState(Session.Status, newStatus);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Changes the state of the session. This overload allows you to spoof the oldStatus, use with caution.
|
|
/// </summary>
|
|
public void SwitchState(SessionStatus oldStatus, SessionStatus newStatus)
|
|
{
|
|
var args = new StatusEventArgs(oldStatus, newStatus);
|
|
Session.Status = newStatus;
|
|
StatusChanged?.Invoke(this, args);
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Event arguments for when the status of a session changes.
|
|
/// </summary>
|
|
public sealed class StatusEventArgs : EventArgs
|
|
{
|
|
/// <summary>
|
|
/// Status that the session switched from.
|
|
/// </summary>
|
|
public SessionStatus OldStatus { get; }
|
|
|
|
/// <summary>
|
|
/// Status that the session switched to.
|
|
/// </summary>
|
|
public SessionStatus NewStatus { get; }
|
|
|
|
/// <summary>
|
|
/// Constructs a new instance of the class.
|
|
/// </summary>
|
|
public StatusEventArgs(SessionStatus oldStatus, SessionStatus newStatus)
|
|
{
|
|
OldStatus = oldStatus;
|
|
NewStatus = newStatus;
|
|
}
|
|
}
|
|
|
|
public sealed class EntityDetachedEventArgs : EventArgs
|
|
{
|
|
public EntityDetachedEventArgs(EntityUid oldEntity)
|
|
{
|
|
OldEntity = oldEntity;
|
|
}
|
|
|
|
public EntityUid OldEntity { get; }
|
|
}
|
|
|
|
public sealed class EntityAttachedEventArgs : EventArgs
|
|
{
|
|
public EntityAttachedEventArgs(EntityUid newEntity)
|
|
{
|
|
NewEntity = newEntity;
|
|
}
|
|
|
|
public EntityUid NewEntity { get; }
|
|
}
|
|
}
|