Table of Contents

Class UITKContainer

Namespace
FishMMO.Client
Assembly
FishMMO.Client.dll

UI Toolkit implementation of the world container panel — chests, crates, wardrobes. Binds to UIContainer.uxml / UIContainer.uss.

public class UITKContainer : UITKCharacterControl
Inheritance
Object
Component
Behaviour
MonoBehaviour
UITKContainer
Inherited Members
MonoBehaviour.IsInvoking()
MonoBehaviour.CancelInvoke()
MonoBehaviour.StopCoroutine(Coroutine)
MonoBehaviour.StopAllCoroutines()
MonoBehaviour.destroyCancellationToken
MonoBehaviour.useGUILayout
MonoBehaviour.didStart
MonoBehaviour.didAwake
MonoBehaviour.runInEditMode
Behaviour.enabled
Behaviour.isActiveAndEnabled
Component.GetComponent<T>()
Component.TryGetComponent<T>(out T)
Component.GetComponentInChildren<T>()
Component.GetComponentsInChildren<T>()
Component.GetComponentInParent<T>()
Component.GetComponentsInParent<T>()
Component.GetComponents<T>()
Component.GetComponentIndex()
Component.CompareTag(TagHandle)
Component.transform
Component.transformHandle
Component.gameObject
Component.tag
Object.GetEntityId()
Object.GetInstanceID()
Object.GetHashCode()
Object.InstantiateAsync<T>(T)
Object.InstantiateAsync<T>(T, Transform)
Object.InstantiateAsync<T>(T, Vector3, Quaternion)
Object.InstantiateAsync<T>(T, Transform, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion)
Object.Instantiate(Object, Vector3, Quaternion, Transform)
Object.Instantiate(Object)
Object.Instantiate(Object, Scene)
Object.Instantiate<T>(T, InstantiateParameters)
Object.Instantiate<T>(T, Vector3, Quaternion, InstantiateParameters)
Object.Instantiate(Object, Transform)
Object.Instantiate<T>(T)
Object.Instantiate<T>(T, Vector3, Quaternion)
Object.Instantiate<T>(T, Vector3, Quaternion, Transform)
Object.Instantiate<T>(T, Transform)
Object.Destroy(Object)
Object.DestroyImmediate(Object)
Object.DontDestroyOnLoad(Object)
Object.DestroyObject(Object)
Object.FindObjectsOfType<T>()
Object.FindObjectsByType<T>(FindObjectsSortMode)
Object.FindObjectsByType<T>(FindObjectsInactive, FindObjectsSortMode)
Object.FindObjectOfType<T>()
Object.FindFirstObjectByType<T>()
Object.FindAnyObjectByType<T>()
Object.FindFirstObjectByType<T>(FindObjectsInactive)
Object.FindAnyObjectByType<T>(FindObjectsInactive)
Object.FindObjectsByType<T>()
Object.FindObjectsByType<T>(FindObjectsInactive)
Object.ToString()
Object.name
Object.hideFlags

Remarks

A pure view of server state, for the same reason the corpse loot panel is one: a container in the world is not private, so the item a player is looking at may already have been taken by somebody else standing at the same chest. Nothing here removes a row — a click sends a request naming a slot index, the row is marked as waiting, and what changes the display is the server sending the container's contents back.

ContainerOpenBroadcast serves as both the open message and the refresh, so there is exactly one code path for "here is what is in the box". A client that missed an update converges on the next one rather than compounding the error.

Methods

Hide(bool)

Hides the panel unless overrideIsAlwaysOpen is true.

public override void Hide(bool overrideIsAlwaysOpen)

Parameters

overrideIsAlwaysOpen bool

When true, the call is a no-op.

OnAfterShow()

Fills the panel on every show, including the very first one.

protected override void OnAfterShow()

Remarks

Enabling the document re-clones the UXML, so anything written before Show() is discarded. This panel's first open is always driven by a server broadcast rather than by startup, which is exactly the case where OnAfterStarting alone is not enough. Both hooks do the work and both are idempotent.

OnAfterStarting()

Re-applies the character once the visual tree exists.

protected override void OnAfterStarting()

Remarks

World entry calls FishMMO.Client.UIManager.SetCharacter(FishMMO.Shared.Core.IPlayerCharacter) for every control at once, and a control that starts hidden has no visual tree until something shows it — so OnPostSetCharacter() can run before OnStarting has cached any elements. Overrides that write into those elements would then dereference null, and even a null-safe one would leave the panel showing nothing, because the only call that had data already happened. Running it again here is what makes the two orders equivalent.

OnClientSet()

Called when a Client is injected via SetClient(Client). Override to subscribe to client events.

public override void OnClientSet()

OnClientUnset()

Called when the Client is cleared via SetClient(Client). Override to unsubscribe from client events.

public override void OnClientUnset()

OnDestroying()

Runs the character-unset path when this control is destroyed.

public override void OnDestroying()

Remarks

The unset path, not a bare null assignment. Panels drop their subscriptions to the character's events in OnPreUnsetCharacter(), and clearing the field behind their back skipped every one of them. The character outlives the panel — it is the panel that is destroyed on a scene change, not the character — so those still-live events kept invoking handlers on a destroyed MonoBehaviour: the panel is leaked by its own subscriptions, and the first handler to touch a Unity object throws MissingReferenceException from inside the character's event dispatch.

OnStarting()

Called once the control's visual tree is available. Override to perform one-time initialisation against Root.

public override void OnStarting()

Remarks

Guaranteed to see a populated Root. For a control that starts hidden this runs when it is first shown rather than at Awake, because a hidden panel's UIDocument is disabled and has no tree to query.

OnTick()

Per-frame hook for controls that need one.

protected override void OnTick()