diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/Cloth.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/Cloth.cs
index a75c4e98ca..8f0308d792 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/Cloth.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/Cloth.cs
@@ -5,6 +5,10 @@
namespace SS3D.Systems.Inventory.Containers
{
+ ///
+ /// Script to put on cloth, which are gameobjects going to the clothes slots.
+ /// In the future, should be the folded models, and could contain a reference to the worn mesh version (and maybe torn mesh version, stuff like that...)
+ ///
public class Cloth : MonoBehaviour
{
[SerializeField]
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothType.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothType.cs
index ce5cca8488..c67ccf0ae3 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothType.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothType.cs
@@ -1,9 +1,8 @@
-using System.Collections;
-using System.Collections.Generic;
-using UnityEngine;
-
-namespace SS3D.Systems.Inventory.Containers
+namespace SS3D.Systems.Inventory.Containers
{
+ ///
+ /// List of different types of clothes, mostly useful to decide what can go where.
+ ///
public enum ClothType
{
ShoeLeft,
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothedBodyPart.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothedBodyPart.cs
index 437f2308b7..8760ae0b25 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothedBodyPart.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothedBodyPart.cs
@@ -4,6 +4,9 @@
namespace SS3D.Systems.Inventory.Containers
{
+ ///
+ /// Used on bodypart of entities to indicate which type of clothes can be worn on them.
+ ///
public class ClothedBodyPart : MonoBehaviour
{
[SerializeField]
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothesDisplayer.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothesDisplayer.cs
index 7542ce87aa..0c25c453cc 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothesDisplayer.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ClothesDisplayer.cs
@@ -9,21 +9,11 @@
using UnityEditor;
using FishNet.Object;
-// nouvel item
-// add item
-// item has a cloth type
-// find network object with same clothtype
-// add new clothdisplay data using this clothtype and item to display
-
-// remove item
-// item has cloth type
-// find network object with same clothtype
-// remove cloth display data using this cloth type and item to display.
namespace SS3D.Systems.Inventory.Containers
{
///
- /// Display cloth on player for all clients.
+ /// Display clothes on player for all clients.
///
public class ClothesDisplayer : NetworkActor
{
@@ -42,18 +32,17 @@ public ClothDisplayData(NetworkObject bodyPart, Item clothToDisplay)
public Item _clothToDisplay;
}
+ ///
+ /// The inventory containing the player's clothing slots.
+ ///
public HumanInventory _inventory;
- // The root game objects for clothes
- public Transform ClothesRoot;
-
-
+ ///
+ /// Synced list of body part associated to the clothes on them.
+ ///
[SyncObject]
private readonly SyncList _clothedBodyParts = new SyncList();
- [SerializeField]
- private List startingClothedBodyPart;
-
public override void OnStartServer()
{
base.OnStartServer();
@@ -66,7 +55,9 @@ public override void OnStartClient()
_clothedBodyParts.OnChange += ClothedBodyPartsOnChange;
}
-
+ ///
+ /// Callback when the syncedList _clothedBodyParts changes. Update the displayed clothes on the player.
+ ///
private void ClothedBodyPartsOnChange(SyncListOperation op, int index,
ClothDisplayData oldData, ClothDisplayData newData, bool asServer)
{
@@ -75,6 +66,7 @@ private void ClothedBodyPartsOnChange(SyncListOperation op, int index,
switch (op)
{
+ // Show the new cloth on the player
case SyncListOperation.Add:
NetworkObject newBodyPart = newData._bodyPart;
Item newItem = newData._clothToDisplay;
@@ -87,6 +79,7 @@ private void ClothedBodyPartsOnChange(SyncListOperation op, int index,
renderer.sharedMesh = newItem.gameObject.GetComponentInChildren().sharedMesh;
break;
+ // Stop displaying cloth on the player
case SyncListOperation.RemoveAt:
NetworkObject oldBodyPart = oldData._bodyPart;
oldBodyPart.gameObject.SetActive(false);
@@ -123,6 +116,10 @@ public void HandleContainerContentChanged(Container container, IEnumerable-
}
}
+ ///
+ /// Adds a cloth to the synced list, making a few checks to find where to add it, if possible.
+ ///
+ /// The item to add, it should have a Cloth component on it.
[Server]
private void AddCloth(Item item)
{
@@ -143,6 +140,10 @@ private void AddCloth(Item item)
}
}
+ ///
+ /// Remove a cloth from the synced list, check if it's there before removing.
+ ///
+ /// The item to add, it should have a Cloth component on it.
[Server]
private void RemoveCloth(Item item)
{
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerView.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerView.cs
index 8d1dc8ec85..2ce62354e3 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerView.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerView.cs
@@ -12,11 +12,19 @@
namespace SS3D.Systems.Inventory.UI
{
+ ///
+ /// Add and remove UIs for containers.
+ ///
public class ContainerView : View
{
-
+ ///
+ /// The script handling logic regarding when to remove and add container UIs.
+ ///
private ContainerViewer containerViewer;
+ ///
+ /// List of displayed containers on the player screen.
+ ///
private readonly List _containerDisplays = new();
///
@@ -24,8 +32,6 @@ public class ContainerView : View
///
public GameObject ContainerUiPrefab;
- // Maybe HandsUI should only handle selected hand highlight and inventory UI
- // should handle setting up containers to UI.
public void Setup(ContainerViewer viewer)
{
containerViewer = viewer;
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerViewer.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerViewer.cs
index bb6d9ef8d9..9338696f95 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerViewer.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/ContainerViewer.cs
@@ -15,7 +15,7 @@
namespace SS3D.Systems.Inventory.Containers
{
///
- /// This handles displaying and removing containers UI that are not part of the inventory of the player, such as a toolbox.
+ /// This handles displaying and removing containers UI that are not part of the inventory of the player, such as a toolbox's container.
///
public class ContainerViewer : NetworkActor
{
@@ -32,7 +32,7 @@ public class ContainerViewer : NetworkActor
///
private readonly List _displayedContainers = new();
- // Reference to the player human inventory.
+ // Reference to the player's inventory.
public HumanInventory inventory;
public override void OnStartClient()
@@ -81,7 +81,7 @@ private void SetOpenState(GameObject containerObject, bool state)
}
///
- /// Does this have a specific container ?
+ /// Does the player have the UI opened for a specific container ?
///
public bool HasContainer(AttachedContainer container)
{
@@ -97,19 +97,13 @@ public bool CanModifyContainer(AttachedContainer container)
[TargetRpc]
private void TargetOpenContainer(NetworkConnection target, AttachedContainer container)
{
- InvokeContainerOpened(container);
- }
-
- private void InvokeContainerOpened(AttachedContainer container)
- {
- OnContainerOpened?.Invoke(container);
- }
-
+ OnContainerOpened?.Invoke(container);
+ }
///
/// Make this inventory open an container.
///
- public void OpenContainer(AttachedContainer attachedContainer)
+ public void ShowContainerUI(AttachedContainer attachedContainer)
{
attachedContainer.Container.AddObserver(GetComponent());
_displayedContainers.Add(attachedContainer);
@@ -122,9 +116,9 @@ public void OpenContainer(AttachedContainer attachedContainer)
}
///
- /// Removes a container from this inventory.
+ /// Removes a container from the list of visible containers UI.
///
- public void CloseContainer(AttachedContainer container)
+ public void CloseContainerUI(AttachedContainer container)
{
container.Container.RemoveObserver(GetComponent());
if (_displayedContainers.Remove(container))
@@ -157,7 +151,7 @@ private void HandleUpdate(ref EventContext context, in UpdateEvent updateEvent)
continue;
}
- CloseContainer(attachedContainer);
+ CloseContainerUI(attachedContainer);
i--;
}
@@ -167,20 +161,14 @@ private void HandleUpdate(ref EventContext context, in UpdateEvent updateEvent)
[ServerRpc]
public void CmdContainerClose(AttachedContainer container)
{
- CloseContainer(container);
+ CloseContainerUI(container);
}
-
[TargetRpc]
private void TargetCloseContainer(NetworkConnection target, AttachedContainer container)
{
- InvokeContainerClosed(container);
- }
-
- private void InvokeContainerClosed(AttachedContainer container)
- {
- OnContainerClosed?.Invoke(container);
- }
+ OnContainerClosed?.Invoke(container);
+ }
}
}
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/Hands.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/Hands.cs
index ed382adb30..e1112b21e2 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/Hands.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/Hands.cs
@@ -1,4 +1,4 @@
-using System;
+using System;
using System.Linq;
using FishNet.Object;
using SS3D.Core;
@@ -15,6 +15,11 @@
namespace SS3D.Systems.Inventory.Containers
{
+
+ ///
+ /// Handle selections of the hands, holding stuff, using tools, and interacting..
+ /// Should probably have some of this code in independent hand components, to allow hands to not be usable after loosing one.
+ ///
[RequireComponent(typeof(HumanInventory))]
public class Hands : InteractionSource, IToolHolder, IInteractionRangeLimit, IInteractionOriginProvider
{
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Containers/HumanInventory.cs b/Assets/Scripts/SS3D/Systems/Inventory/Containers/HumanInventory.cs
index d708046003..987cd6af17 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Containers/HumanInventory.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Containers/HumanInventory.cs
@@ -25,21 +25,30 @@ namespace SS3D.Systems.Inventory.Containers
///
public class HumanInventory : NetworkActor
{
+ ///
+ /// List of containers present on the player, meaning, in the player HUD, shown as slots.
+ ///
[SyncObject]
private readonly SyncList ContainersOnPlayer = new();
+
public delegate void InventoryContainerModifiedEventHandler(AttachedContainer container);
public delegate void ContainerContentsEventHandler(Container container, IEnumerable
- oldItems, IEnumerable
- newItems, ContainerChangeType type);
public delegate void Notify();
+ // When a container is added to this inventory
public event InventoryContainerModifiedEventHandler OnInventoryContainerAdded;
+ // When a container is removed from this inventory
public event InventoryContainerModifiedEventHandler OnInventoryContainerRemoved;
+ // When the content of a container in this inventory changes
public event ContainerContentsEventHandler OnContainerContentChanged;
+ // When the inventory is done doing its setup
public event Notify OnInventorySetUp;
+ // reference to the component allowing to display out of inventory containers.
public ContainerViewer containerViewer;
public List Containers => ContainersOnPlayer.Collection.ToList();
@@ -183,6 +192,10 @@ private void RemoveContainer(AttachedContainer container)
container.OnAttachedContainerDisabled -= RemoveContainer;
}
+ ///
+ /// Try to add a container to this inventory, check first if not already added.
+ /// TODO: Should also check if it's the kind of container that can go in inventory.
+ ///
[Server]
public bool TryAddContainer(AttachedContainer container)
{
@@ -194,6 +207,9 @@ public bool TryAddContainer(AttachedContainer container)
return false;
}
+ ///
+ /// Try to remove a container already present in this inventory.
+ ///
[Server]
public bool TryRemoveContainer(AttachedContainer container)
{
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/Interactions/ViewContainerInteraction.cs b/Assets/Scripts/SS3D/Systems/Inventory/Interactions/ViewContainerInteraction.cs
index 445806487c..74be450c30 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/Interactions/ViewContainerInteraction.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/Interactions/ViewContainerInteraction.cs
@@ -59,7 +59,7 @@ public override bool Start(InteractionEvent interactionEvent, InteractionReferen
{
var containerViewer = interactionEvent.Source.GetComponentInTree();
- containerViewer.OpenContainer(AttachedContainer);
+ containerViewer.ShowContainerUI(AttachedContainer);
return false;
}
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/UI/DummySlot.cs b/Assets/Scripts/SS3D/Systems/Inventory/UI/DummySlot.cs
index a908cc9202..59536fda4c 100644
--- a/Assets/Scripts/SS3D/Systems/Inventory/UI/DummySlot.cs
+++ b/Assets/Scripts/SS3D/Systems/Inventory/UI/DummySlot.cs
@@ -4,6 +4,11 @@
namespace SS3D.Systems.Inventory.UI
{
+ ///
+ /// Component only useful to indicate a slot is a dummy slot.
+ /// Dummy slots are invisible slots, only useful to take place in the UI.
+ /// This is necessary for working with stuff like grid layouts.
+ ///
public class DummySlot : MonoBehaviour
{
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElementAlt.cs b/Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElement.cs
similarity index 100%
rename from Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElementAlt.cs
rename to Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElement.cs
diff --git a/Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElementAlt.cs.meta b/Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElement.cs.meta
similarity index 100%
rename from Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElementAlt.cs.meta
rename to Assets/Scripts/SS3D/Systems/Inventory/UI/InventoryDisplayElement.cs.meta