From 6055fba959f048d6645c038873bd5b1bb009deea Mon Sep 17 00:00:00 2001 From: Pasha Date: Wed, 20 May 2026 21:03:54 +0100 Subject: [PATCH] Added basic lobby --- Assets/Prefabs/LobbyClientDisplay.prefab | 288 ++++++++++++++++ Assets/Prefabs/LobbyClientDisplay.prefab.meta | 7 + Assets/Scenes/LobbyScene.unity | 288 ++++++++++++++++ Assets/Scenes/MainMenu.unity | 307 ++++++++++++++++++ Assets/Scripts/BootstrapLoader.cs | 5 + .../Extensions/MonoBehaviourExtensions.cs | 2 +- Assets/Scripts/Lobby.meta | 8 + Assets/Scripts/Lobby/LobbyClientDisplay.cs | 19 ++ .../Scripts/Lobby/LobbyClientDisplay.cs.meta | 3 + .../Lobby/LobbyClientDisplayManager.cs | 36 ++ .../Lobby/LobbyClientDisplayManager.cs.meta | 2 + Assets/Scripts/MainMenu/MainMenuController.cs | 12 + Assets/Scripts/Network/ConnectionManager.cs | 2 +- Assets/Scripts/Network/NetworkClient.cs | 44 ++- ProjectSettings/ProjectSettings.asset | 2 +- 15 files changed, 1019 insertions(+), 6 deletions(-) create mode 100644 Assets/Prefabs/LobbyClientDisplay.prefab create mode 100644 Assets/Prefabs/LobbyClientDisplay.prefab.meta create mode 100644 Assets/Scripts/Lobby.meta create mode 100644 Assets/Scripts/Lobby/LobbyClientDisplay.cs create mode 100644 Assets/Scripts/Lobby/LobbyClientDisplay.cs.meta create mode 100644 Assets/Scripts/Lobby/LobbyClientDisplayManager.cs create mode 100644 Assets/Scripts/Lobby/LobbyClientDisplayManager.cs.meta diff --git a/Assets/Prefabs/LobbyClientDisplay.prefab b/Assets/Prefabs/LobbyClientDisplay.prefab new file mode 100644 index 0000000..d5e3c4f --- /dev/null +++ b/Assets/Prefabs/LobbyClientDisplay.prefab @@ -0,0 +1,288 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1731785061231096504 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 568031932444753965} + - component: {fileID: 5715379059503040891} + m_Layer: 0 + m_Name: LobbyClientDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &568031932444753965 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731785061231096504} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 5454021162233887598} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 250, y: 125} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &5715379059503040891 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1731785061231096504} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9f49201e34d24522b93e78c7c24206ee, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PashaBibko.PenguinChase.Lobby.LobbyClientDisplay + PlayerCountDisplay: {fileID: 5016478900188628952} + PlayerNameDisplay: {fileID: 2927124329200506382} +--- !u!1 &3325961059732178405 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1339993375784524221} + - component: {fileID: 4772571460339679419} + - component: {fileID: 2927124329200506382} + m_Layer: 0 + m_Name: Name + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1339993375784524221 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3325961059732178405} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5454021162233887598} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4772571460339679419 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3325961059732178405} + m_CullTransparentMesh: 1 +--- !u!114 &2927124329200506382 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3325961059732178405} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!1 &6121900887065300528 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3637417835473780944} + - component: {fileID: 2413306377182285772} + - component: {fileID: 5016478900188628952} + m_Layer: 0 + m_Name: LocalPlayers + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3637417835473780944 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6121900887065300528} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5454021162233887598} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 126.7, y: 0} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2413306377182285772 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6121900887065300528} + m_CullTransparentMesh: 1 +--- !u!114 &5016478900188628952 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6121900887065300528} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: New Text +--- !u!1 &7133340523144642247 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5454021162233887598} + - component: {fileID: 1402786641566405931} + - component: {fileID: 552117979157072335} + m_Layer: 0 + m_Name: Holder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5454021162233887598 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7133340523144642247} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1339993375784524221} + - {fileID: 3637417835473780944} + m_Father: {fileID: 568031932444753965} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 250, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1402786641566405931 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7133340523144642247} + m_CullTransparentMesh: 1 +--- !u!114 &552117979157072335 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7133340523144642247} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Prefabs/LobbyClientDisplay.prefab.meta b/Assets/Prefabs/LobbyClientDisplay.prefab.meta new file mode 100644 index 0000000..83ecd75 --- /dev/null +++ b/Assets/Prefabs/LobbyClientDisplay.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 581e7ffdda360f34b97a40dbe936dac8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/LobbyScene.unity b/Assets/Scenes/LobbyScene.unity index d3765ce..68b98c7 100644 --- a/Assets/Scenes/LobbyScene.unity +++ b/Assets/Scenes/LobbyScene.unity @@ -119,6 +119,81 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} +--- !u!1 &358904803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 358904804} + - component: {fileID: 358904805} + - component: {fileID: 358904806} + m_Layer: 5 + m_Name: ConnectedClientsDisplay + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &358904804 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 358904803} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1459674156} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -300, y: 0} + m_SizeDelta: {x: 250, y: 500} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &358904805 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 358904803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 8a8695521f0d02e499659fee002a26c2, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GridLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_StartCorner: 0 + m_StartAxis: 0 + m_CellSize: {x: 250, y: 125} + m_Spacing: {x: 0, y: 0} + m_Constraint: 0 + m_ConstraintCount: 2 +--- !u!114 &358904806 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 358904803} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3dbc4cc72e209e84aa134a24a54c818f, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::PashaBibko.PenguinChase.Lobby.LobbyClientDisplayManager + ClientDisplayPrefab: {fileID: 1731785061231096504, guid: 581e7ffdda360f34b97a40dbe936dac8, type: 3} + ClientDisplayParent: {fileID: 358904803} --- !u!1 &558542300 GameObject: m_ObjectHideFlags: 0 @@ -129,6 +204,7 @@ GameObject: m_Component: - component: {fileID: 558542302} - component: {fileID: 558542301} + - component: {fileID: 558542303} m_Layer: 0 m_Name: Directional Light m_TagString: Untagged @@ -216,6 +292,114 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!114 &558542303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 558542300} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.RenderPipelines.Universal.Runtime::UnityEngine.Rendering.Universal.UniversalAdditionalLightData + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_CustomShadowLayers: 0 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 + m_RenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_ShadowRenderingLayersMask: + serializedVersion: 0 + m_Bits: 1 + m_Version: 4 + m_LightLayerMask: 1 + m_ShadowLayerMask: 1 + m_RenderingLayers: 1 + m_ShadowRenderingLayers: 1 +--- !u!1 &588930324 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 588930327} + - component: {fileID: 588930326} + - component: {fileID: 588930325} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &588930325 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588930324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.InputSystem::UnityEngine.InputSystem.UI.InputSystemUIInputModule + m_SendPointerHoverToParent: 1 + m_MoveRepeatDelay: 0.5 + m_MoveRepeatRate: 0.1 + m_XRTrackingOrigin: {fileID: 0} + m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_PointAction: {fileID: -1654692200621890270, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MoveAction: {fileID: -8784545083839296357, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_SubmitAction: {fileID: 392368643174621059, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_CancelAction: {fileID: 7727032971491509709, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_LeftClickAction: {fileID: 3001919216989983466, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_MiddleClickAction: {fileID: -2185481485913320682, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_RightClickAction: {fileID: -4090225696740746782, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_ScrollWheelAction: {fileID: 6240969308177333660, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDevicePositionAction: {fileID: 6564999863303420839, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_TrackedDeviceOrientationAction: {fileID: 7970375526676320489, guid: ca9f5fa95ffab41fb9a615ab714db018, type: 3} + m_DeselectOnBackgroundClick: 1 + m_PointerBehavior: 0 + m_CursorLockBehavior: 0 + m_ScrollDeltaPerTick: 6 +--- !u!114 &588930326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588930324} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.EventSystems.EventSystem + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &588930327 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 588930324} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1148355526 GameObject: m_ObjectHideFlags: 0 @@ -308,9 +492,113 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1459674152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1459674156} + - component: {fileID: 1459674155} + - component: {fileID: 1459674154} + - component: {fileID: 1459674153} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1459674153 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1459674152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.GraphicRaycaster + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1459674154 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1459674152} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.CanvasScaler + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1459674155 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1459674152} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1459674156 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1459674152} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 358904804} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} --- !u!1660057539 &9223372036854775807 SceneRoots: m_ObjectHideFlags: 0 m_Roots: - {fileID: 1148355529} - {fileID: 558542302} + - {fileID: 1459674156} + - {fileID: 588930327} diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity index 51f8971..f46f95d 100644 --- a/Assets/Scenes/MainMenu.unity +++ b/Assets/Scenes/MainMenu.unity @@ -218,6 +218,7 @@ RectTransform: - {fileID: 581763571} - {fileID: 601452186} - {fileID: 1115757044} + - {fileID: 1043143541} m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -458,6 +459,85 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &211759927 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 211759928} + - component: {fileID: 211759930} + - component: {fileID: 211759929} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &211759928 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211759927} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1043143541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &211759929 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211759927} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 1 + m_LineSpacing: 1 + m_Text: Enter player name +--- !u!222 &211759930 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 211759927} + m_CullTransparentMesh: 1 --- !u!1 &252366347 GameObject: m_ObjectHideFlags: 0 @@ -1907,6 +1987,152 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1034086469} m_CullTransparentMesh: 1 +--- !u!1 &1043143540 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1043143541} + - component: {fileID: 1043143544} + - component: {fileID: 1043143543} + - component: {fileID: 1043143542} + m_Layer: 5 + m_Name: PlayerNameInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1043143541 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043143540} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 211759928} + - {fileID: 1798060555} + m_Father: {fileID: 35427959} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: -170} + m_SizeDelta: {x: 160, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1043143542 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043143540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.InputField + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1043143543} + m_TextComponent: {fileID: 1798060556} + m_Placeholder: {fileID: 211759929} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 0 + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnDidEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 + m_ShouldActivateOnSelect: 1 +--- !u!114 &1043143543 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043143540} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1043143544 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1043143540} + m_CullTransparentMesh: 1 --- !u!1 &1115757043 GameObject: m_ObjectHideFlags: 0 @@ -2413,6 +2639,87 @@ MonoBehaviour: JoinButton: {fileID: 601452187} HostCode: {fileID: 581763572} HostNetworkType: {fileID: 1324713622} + PlayerName: {fileID: 1043143542} + PlayerCount: {fileID: 1115757045} +--- !u!1 &1798060554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1798060555} + - component: {fileID: 1798060557} + - component: {fileID: 1798060556} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1798060555 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798060554} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1043143541} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1798060556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798060554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Text + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!222 &1798060557 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1798060554} + m_CullTransparentMesh: 1 --- !u!1 &1860033504 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/BootstrapLoader.cs b/Assets/Scripts/BootstrapLoader.cs index 6997a11..8e9788d 100644 --- a/Assets/Scripts/BootstrapLoader.cs +++ b/Assets/Scripts/BootstrapLoader.cs @@ -1,4 +1,5 @@ using UnityEngine; +using UnityEngine.SceneManagement; namespace PashaBibko.PenguinChase.Core { @@ -7,6 +8,10 @@ namespace PashaBibko.PenguinChase.Core [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] private static void LoadBoostrapScene() { + // Makes sure the game onto the first scene + SceneManager.LoadScene(0); + + // Loads the bootstrap object GameObject go = Resources.Load("Bootstrap"); GameObject instance = Object.Instantiate(go); diff --git a/Assets/Scripts/Extensions/MonoBehaviourExtensions.cs b/Assets/Scripts/Extensions/MonoBehaviourExtensions.cs index 55e122e..3a35363 100644 --- a/Assets/Scripts/Extensions/MonoBehaviourExtensions.cs +++ b/Assets/Scripts/Extensions/MonoBehaviourExtensions.cs @@ -12,4 +12,4 @@ namespace PashaBibko.PenguinChase.Extensions } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Lobby.meta b/Assets/Scripts/Lobby.meta new file mode 100644 index 0000000..08f14c2 --- /dev/null +++ b/Assets/Scripts/Lobby.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 24cb1941713e23d4dbc9f68bb85d6435 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Lobby/LobbyClientDisplay.cs b/Assets/Scripts/Lobby/LobbyClientDisplay.cs new file mode 100644 index 0000000..ac9e48e --- /dev/null +++ b/Assets/Scripts/Lobby/LobbyClientDisplay.cs @@ -0,0 +1,19 @@ +using PashaBibko.PenguinChase.Network; +using UnityEngine.UI; +using UnityEngine; + +namespace PashaBibko.PenguinChase.Lobby +{ + public class LobbyClientDisplay : MonoBehaviour + { + [Header("References")] + [SerializeField] private Text PlayerCountDisplay; + [SerializeField] private Text PlayerNameDisplay; + + public void SetText(GameNetworkClient client) + { + PlayerCountDisplay.text = $"[{client.LocalPlayerCount}]"; + PlayerNameDisplay.text = client.PlayerName; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Lobby/LobbyClientDisplay.cs.meta b/Assets/Scripts/Lobby/LobbyClientDisplay.cs.meta new file mode 100644 index 0000000..e817364 --- /dev/null +++ b/Assets/Scripts/Lobby/LobbyClientDisplay.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 9f49201e34d24522b93e78c7c24206ee +timeCreated: 1779304359 \ No newline at end of file diff --git a/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs b/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs new file mode 100644 index 0000000..42ae2f3 --- /dev/null +++ b/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs @@ -0,0 +1,36 @@ +using PashaBibko.PenguinChase.Network; +using UnityEngine; + +namespace PashaBibko.PenguinChase.Lobby +{ + public class LobbyClientDisplayManager : MonoBehaviour + { + [Header("References")] + [SerializeField] private GameObject ClientDisplayPrefab; + [SerializeField] private GameObject ClientDisplayParent; + + private int mCachedClientCount = -1; // Forces a refresh on initial load + + private void Update() + { + // Checks if the client count has changed since last update + if (mCachedClientCount != GameNetworkClient.ConnectedClientCount) + { + // Clears all old client displays + foreach (Transform child in ClientDisplayParent.transform) + { + Destroy(child.gameObject); + } + + // Creates new objects for each client + GameNetworkClient[] clients = GameNetworkClient.ConnectedClients; + foreach (GameNetworkClient client in clients) + { + GameObject go = Instantiate(ClientDisplayPrefab, ClientDisplayParent.transform); + LobbyClientDisplay display = go.GetComponent(); + display.SetText(client); + } + } + } + } +} diff --git a/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs.meta b/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs.meta new file mode 100644 index 0000000..866e268 --- /dev/null +++ b/Assets/Scripts/Lobby/LobbyClientDisplayManager.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3dbc4cc72e209e84aa134a24a54c818f \ No newline at end of file diff --git a/Assets/Scripts/MainMenu/MainMenuController.cs b/Assets/Scripts/MainMenu/MainMenuController.cs index 0daf09b..adb23f3 100644 --- a/Assets/Scripts/MainMenu/MainMenuController.cs +++ b/Assets/Scripts/MainMenu/MainMenuController.cs @@ -10,6 +10,8 @@ public class MainMenuController : MonoBehaviour [SerializeField] private Button JoinButton; [SerializeField] private InputField HostCode; [SerializeField] private Dropdown HostNetworkType; + [SerializeField] private InputField PlayerName; + [SerializeField] private Slider PlayerCount; private void Start() { @@ -35,5 +37,15 @@ public class MainMenuController : MonoBehaviour Network.Join(code); }); + + PlayerCount.onValueChanged.AddListener(value => + { + GameNetworkClient.LocalClientCount = Mathf.RoundToInt(value); + }); + + PlayerName.onEndEdit.AddListener(value => + { + GameNetworkClient.LocalName = value; + }); } } diff --git a/Assets/Scripts/Network/ConnectionManager.cs b/Assets/Scripts/Network/ConnectionManager.cs index 7a106fa..dced9b7 100644 --- a/Assets/Scripts/Network/ConnectionManager.cs +++ b/Assets/Scripts/Network/ConnectionManager.cs @@ -45,4 +45,4 @@ namespace PashaBibko.PenguinChase.Network networkObject.SpawnAsPlayerObject(id); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Network/NetworkClient.cs b/Assets/Scripts/Network/NetworkClient.cs index 398870d..cf2c492 100644 --- a/Assets/Scripts/Network/NetworkClient.cs +++ b/Assets/Scripts/Network/NetworkClient.cs @@ -1,18 +1,54 @@ using System.Collections.Generic; using Unity.Netcode; +using System.Linq; +using Unity.Collections; using UnityEngine; namespace PashaBibko.PenguinChase.Network { public class GameNetworkClient : NetworkBehaviour { - private static Dictionary sConnectedClients = new(); + public static int LocalClientCount { get; set; } + public static string LocalName { get; set; } + + private static readonly Dictionary sConnectedClients = new(); private static bool sDoneInitialSearch = false; + public static GameNetworkClient LocalClient { get; private set; } + + public static GameNetworkClient[] ConnectedClients => sConnectedClients.Values.ToArray(); + public static int ConnectedClientCount => sConnectedClients.Count; + + private readonly NetworkVariable mPlayerName = new + ( + default, + NetworkVariableReadPermission.Everyone, + NetworkVariableWritePermission.Owner + ); + + private readonly NetworkVariable mLocalPlayerCount = new + ( + 0, + NetworkVariableReadPermission.Everyone, + NetworkVariableWritePermission.Owner + ); + + public int LocalPlayerCount => mLocalPlayerCount.Value; + public string PlayerName => mPlayerName.Value.ToString(); + private void Start() { - name = $"NetworkClient-{OwnerClientId}"; - + // If it is the local instance registers it as such + if (IsOwner) + { + mLocalPlayerCount.Value = LocalClientCount; + mPlayerName.Value = LocalName; + + LocalClient = this; + + Debug.Log($"[Game Network Client] has had start called [{LocalName} | {mPlayerName.Value}]"); + } + // Searches for existing clients if it is the first one to be locally loaded if (!sDoneInitialSearch) { @@ -32,5 +68,7 @@ namespace PashaBibko.PenguinChase.Network sConnectedClients.Add(OwnerClientId, this); } } + + public override void OnDestroy() => sConnectedClients.Remove(OwnerClientId); } } diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 1089cd2..9383262 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -13,7 +13,7 @@ PlayerSettings: useOnDemandResources: 0 accelerometerFrequency: 60 companyName: DefaultCompany - productName: PenguinsTwoChase + productName: PenguinsTwoChase (Client) defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}