From a259a64e800d5e65cf485f67ae854cfc3d102348 Mon Sep 17 00:00:00 2001 From: AsanoRema Date: Tue, 4 Aug 2026 18:04:42 +0300 Subject: [PATCH] Added MainMenu, Bootstrap and Factory scenes --- Assets/CONTENT.meta | 8 + Assets/CONTENT/ART.meta | 8 + Assets/CONTENT/FEATURES.meta | 8 + Assets/CONTENT/Friendslop.meta | 8 + Assets/CONTENT/Friendslop/Prefabs.meta | 8 + .../Friendslop/Prefabs/NetworkPlayer.prefab | 216 +++++++++ .../Prefabs/NetworkPlayer.prefab.meta | 7 + Assets/CONTENT/Friendslop/Scripts.meta | 8 + .../Friendslop/Scripts/Networking.meta | 8 + .../Networking/FriendslopPlayerMotor.cs | 64 +++ .../Networking/FriendslopPlayerMotor.cs.meta | 2 + .../Scripts/Networking/FriendslopSession.cs | 60 +++ .../Networking/FriendslopSession.cs.meta | 2 + Assets/CONTENT/Friendslop/Scripts/UI.meta | 8 + .../Scripts/UI/FriendslopMainMenu.cs | 42 ++ .../Scripts/UI/FriendslopMainMenu.cs.meta | 2 + Assets/CONTENT/Game.meta | 8 + Assets/CONTENT/Game/Scripts.meta | 8 + Assets/CONTENT/Game/Scripts/Flow.meta | 8 + .../Game/Scripts/Flow/GameFlowController.cs | 11 + .../Scripts/Flow/GameFlowController.cs.meta | 2 + Assets/CONTENT/Game/Scripts/Networking.meta | 8 + .../Networking/NetworkSessionController.cs | 54 +++ .../NetworkSessionController.cs.meta | 2 + Assets/CONTENT/Game/Scripts/Player.meta | 8 + .../Game/Scripts/Player/PlayerFacade.cs | 23 + .../Game/Scripts/Player/PlayerFacade.cs.meta | 2 + .../Player/PlayerMovementController.cs | 29 ++ .../Player/PlayerMovementController.cs.meta | 2 + Assets/CONTENT/Game/Scripts/UI.meta | 8 + .../Game/Scripts/UI/MainMenuController.cs | 24 + .../Scripts/UI/MainMenuController.cs.meta | 2 + Assets/DefaultNetworkPrefabs.asset | 5 + Assets/Scenes/Bootstrap.unity | 262 ++++++++++ Assets/Scenes/Bootstrap.unity.meta | 7 + Assets/Scenes/Factory.unity | 450 ++++++++++++++++++ Assets/Scenes/Factory.unity.meta | 7 + Assets/Scenes/MainMenu.unity | 450 ++++++++++++++++++ Assets/Scenes/MainMenu.unity.meta | 7 + Assets/Scenes/SampleScene.unity | 19 +- ProjectSettings/EditorBuildSettings.asset | 10 +- .../com.unity.probuilder/Settings.json | 5 + ProjectSettings/SceneTemplateSettings.json | 121 +++++ 43 files changed, 1991 insertions(+), 10 deletions(-) create mode 100644 Assets/CONTENT.meta create mode 100644 Assets/CONTENT/ART.meta create mode 100644 Assets/CONTENT/FEATURES.meta create mode 100644 Assets/CONTENT/Friendslop.meta create mode 100644 Assets/CONTENT/Friendslop/Prefabs.meta create mode 100644 Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab create mode 100644 Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts/Networking.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs create mode 100644 Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs create mode 100644 Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts/UI.meta create mode 100644 Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs create mode 100644 Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs.meta create mode 100644 Assets/CONTENT/Game.meta create mode 100644 Assets/CONTENT/Game/Scripts.meta create mode 100644 Assets/CONTENT/Game/Scripts/Flow.meta create mode 100644 Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs create mode 100644 Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs.meta create mode 100644 Assets/CONTENT/Game/Scripts/Networking.meta create mode 100644 Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs create mode 100644 Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs.meta create mode 100644 Assets/CONTENT/Game/Scripts/Player.meta create mode 100644 Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs create mode 100644 Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs.meta create mode 100644 Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs create mode 100644 Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs.meta create mode 100644 Assets/CONTENT/Game/Scripts/UI.meta create mode 100644 Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs create mode 100644 Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs.meta create mode 100644 Assets/Scenes/Bootstrap.unity create mode 100644 Assets/Scenes/Bootstrap.unity.meta create mode 100644 Assets/Scenes/Factory.unity create mode 100644 Assets/Scenes/Factory.unity.meta create mode 100644 Assets/Scenes/MainMenu.unity create mode 100644 Assets/Scenes/MainMenu.unity.meta create mode 100644 ProjectSettings/SceneTemplateSettings.json diff --git a/Assets/CONTENT.meta b/Assets/CONTENT.meta new file mode 100644 index 0000000..1162277 --- /dev/null +++ b/Assets/CONTENT.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6fcd01d2a640b534fa9fb9538ed4cf7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/ART.meta b/Assets/CONTENT/ART.meta new file mode 100644 index 0000000..2eba595 --- /dev/null +++ b/Assets/CONTENT/ART.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 929222d873f1533459ce4b0d01c7330a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/FEATURES.meta b/Assets/CONTENT/FEATURES.meta new file mode 100644 index 0000000..59a27c3 --- /dev/null +++ b/Assets/CONTENT/FEATURES.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7644754fbb473cc49907c37dd3106478 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop.meta b/Assets/CONTENT/Friendslop.meta new file mode 100644 index 0000000..37001ab --- /dev/null +++ b/Assets/CONTENT/Friendslop.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9fd9e0ccd83d82f4fa34fe57219c9d5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Prefabs.meta b/Assets/CONTENT/Friendslop/Prefabs.meta new file mode 100644 index 0000000..56b42e6 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b1635a8bbb265d4fac387628ddd4c26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab b/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab new file mode 100644 index 0000000..9f1bf93 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab @@ -0,0 +1,216 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2724913065371725993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1483718432771122008} + - component: {fileID: 1682638732317101433} + - component: {fileID: 4069312895261827504} + - component: {fileID: 8756866276098507255} + - component: {fileID: 301346209279679251} + - component: {fileID: 1357666804646257111} + - component: {fileID: 1153956066580973303} + - component: {fileID: 8282202320765908976} + m_Layer: 0 + m_Name: NetworkPlayer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1483718432771122008 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, 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!33 &1682638732317101433 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!136 &4069312895261827504 +CapsuleCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Radius: 0.5 + m_Height: 2 + m_Direction: 1 + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &8756866276098507255 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!114 &301346209279679251 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d5a57f767e5e46a458fc5d3c628d0cbb, type: 3} + m_Name: + m_EditorClassIdentifier: + GlobalObjectIdHash: 2848357538 + InScenePlacedSourceGlobalObjectIdHash: 0 + DeferredDespawnTick: 0 + Ownership: 1 + AlwaysReplicateAsRoot: 0 + SynchronizeTransform: 1 + m_InScenePlaced: 0 + ActiveSceneSynchronization: 0 + SceneMigrationSynchronization: 0 + SpawnWithObservers: 1 + DontDestroyWithOwner: 0 + AutoObjectParentSync: 1 + SyncOwnerTransformWhenParented: 1 + AllowOwnerToParent: 0 +--- !u!114 &1357666804646257111 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e96cb6065543e43c4a752faaa1468eb1, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + NetworkTransformExpanded: 0 + AutoOwnerAuthorityTickOffset: 1 + PositionInterpolationType: 0 + RotationInterpolationType: 0 + ScaleInterpolationType: 0 + PositionLerpSmoothing: 1 + PositionMaxInterpolationTime: 0.1 + RotationLerpSmoothing: 1 + RotationMaxInterpolationTime: 0.1 + ScaleLerpSmoothing: 1 + ScaleMaxInterpolationTime: 0.1 + AuthorityMode: 0 + TickSyncChildren: 0 + UseUnreliableDeltas: 0 + SyncPositionX: 1 + SyncPositionY: 1 + SyncPositionZ: 1 + SyncRotAngleX: 1 + SyncRotAngleY: 1 + SyncRotAngleZ: 1 + SyncScaleX: 1 + SyncScaleY: 1 + SyncScaleZ: 1 + PositionThreshold: 0.001 + RotAngleThreshold: 0.01 + ScaleThreshold: 0.01 + UseQuaternionSynchronization: 0 + UseQuaternionCompression: 0 + UseHalfFloatPrecision: 0 + InLocalSpace: 0 + SwitchTransformSpaceWhenParented: 0 + Interpolate: 1 + SlerpPosition: 0 +--- !u!114 &1153956066580973303 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3b718b186a728344ab8c35780b227699, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + initializationOrder: [] +--- !u!114 &8282202320765908976 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2724913065371725993} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f8af29dd6e4daa6479ef978bdd3b2e6d, type: 3} + m_Name: + m_EditorClassIdentifier: + ShowTopMostFoldoutHeaderGroup: 1 + movementSpeed: 4.5 diff --git a/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab.meta b/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab.meta new file mode 100644 index 0000000..062cc47 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Prefabs/NetworkPlayer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f0d720ad6d7581844a2cf98deeac1e9a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Scripts.meta b/Assets/CONTENT/Friendslop/Scripts.meta new file mode 100644 index 0000000..9f23b71 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fe11cc7d57042f14d9c27104ec68e6cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Scripts/Networking.meta b/Assets/CONTENT/Friendslop/Scripts/Networking.meta new file mode 100644 index 0000000..680c2b2 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/Networking.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a940c46e5ab12f347a2eddcc30785021 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs new file mode 100644 index 0000000..79a0e11 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs @@ -0,0 +1,64 @@ +using Unity.Netcode; +using UnityEngine; +using UnityEngine.InputSystem; + +/// +/// Server-authoritative prototype movement. +/// The owner reads input, the server applies it, and NetworkTransform replicates the result. +/// +[RequireComponent(typeof(NetworkObject))] +public sealed class FriendslopPlayerMotor : NetworkBehaviour +{ + [SerializeField, Min(0.1f)] private float moveSpeed = 4.5f; + + private void Update() + { + if (!IsOwner || !IsSpawned || Keyboard.current == null) + { + return; + } + + Vector2 input = ReadMoveInput(); + if (IsServer) + { + MoveOnServer(input); + } + else + { + MoveServerRpc(input); + } + } + + [ServerRpc] + private void MoveServerRpc(Vector2 input) + { + MoveOnServer(input); + } + + private void MoveOnServer(Vector2 input) + { + if (input.sqrMagnitude > 1f) + { + input.Normalize(); + } + + Vector3 direction = new Vector3(input.x, 0f, input.y); + transform.position += direction * (moveSpeed * Time.deltaTime); + + if (direction.sqrMagnitude > 0.001f) + { + transform.forward = Vector3.Slerp(transform.forward, direction, 14f * Time.deltaTime); + } + } + + private static Vector2 ReadMoveInput() + { + Keyboard keyboard = Keyboard.current; + float horizontal = (keyboard.dKey.isPressed || keyboard.rightArrowKey.isPressed ? 1f : 0f) + - (keyboard.aKey.isPressed || keyboard.leftArrowKey.isPressed ? 1f : 0f); + float vertical = (keyboard.wKey.isPressed || keyboard.upArrowKey.isPressed ? 1f : 0f) + - (keyboard.sKey.isPressed || keyboard.downArrowKey.isPressed ? 1f : 0f); + + return new Vector2(horizontal, vertical); + } +} diff --git a/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs.meta b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs.meta new file mode 100644 index 0000000..b47b7c0 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopPlayerMotor.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fa9cb02e9bb4c4542aeeb0d7024b2d9d \ No newline at end of file diff --git a/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs new file mode 100644 index 0000000..3cfcd5a --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs @@ -0,0 +1,60 @@ +using Unity.Netcode; +using Unity.Netcode.Transports.UTP; +using UnityEngine; +using UnityEngine.SceneManagement; + +[RequireComponent(typeof(NetworkManager), typeof(UnityTransport))] +public sealed class FriendslopSession : MonoBehaviour +{ + public static FriendslopSession Instance { get; private set; } + [SerializeField] private NetworkObject playerPrefab; + [SerializeField] private string menuScene = "MainMenu"; + [SerializeField] private string gameplayScene = "Factory"; + public string Status { get; private set; } = "Ready."; + public bool IsOnline => NetworkManager.Singleton != null && NetworkManager.Singleton.IsListening; + + private NetworkManager manager; + private UnityTransport transport; + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; + DontDestroyOnLoad(gameObject); + manager = GetComponent(); + transport = GetComponent(); + manager.NetworkConfig.NetworkTransport = transport; + manager.NetworkConfig.PlayerPrefab = playerPrefab.gameObject; + manager.NetworkConfig.EnableSceneManagement = true; + manager.OnServerStarted += LoadGameplayForHost; + } + + private void Start() => SceneManager.LoadScene(menuScene); + + private void OnDestroy() + { + if (manager != null) manager.OnServerStarted -= LoadGameplayForHost; + if (Instance == this) Instance = null; + } + + public bool StartHost(ushort port) + { + transport.SetConnectionData("0.0.0.0", port, "0.0.0.0"); + Status = manager.StartHost() ? $"Host started on {port}." : "Host failed to start."; + return manager.IsHost; + } + + public bool StartClient(string address, ushort port) + { + transport.SetConnectionData(address.Trim(), port); + bool started = manager.StartClient(); + Status = started ? $"Connecting to {address}:{port}..." : "Client failed to start."; + return started; + } + + private void LoadGameplayForHost() + { + Status = "Loading factory..."; + manager.SceneManager.LoadScene(gameplayScene, LoadSceneMode.Single); + } +} \ No newline at end of file diff --git a/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs.meta b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs.meta new file mode 100644 index 0000000..5397f12 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/Networking/FriendslopSession.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 885bc2a800341c0479b5e41a114f3948 \ No newline at end of file diff --git a/Assets/CONTENT/Friendslop/Scripts/UI.meta b/Assets/CONTENT/Friendslop/Scripts/UI.meta new file mode 100644 index 0000000..eca9dc2 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cc579f5c1f6e6a41b2fa6d4de3fd5fb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs b/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs new file mode 100644 index 0000000..9b15ad0 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs @@ -0,0 +1,42 @@ +using UnityEngine; + +public sealed class FriendslopMainMenu : MonoBehaviour +{ + private string address = "127.0.0.1"; + private string portText = "7777"; + + private void OnGUI() + { + var session = FriendslopSession.Instance; + GUI.Box(new Rect(24, 24, 380, 285), string.Empty); + GUILayout.BeginArea(new Rect(44, 44, 340, 245)); + GUILayout.Label("FRIENDSLOP // MOUNTAIN FACTORY"); + GUILayout.Space(10); + if (session == null) { GUILayout.Label("Bootstrap is unavailable."); GUILayout.EndArea(); return; } + if (session.IsOnline) { GUILayout.Label(session.Status); GUILayout.EndArea(); return; } + GUILayout.Label("Host LAN IP"); + address = GUILayout.TextField(address); + GUILayout.Label("Port"); + portText = GUILayout.TextField(portText); + GUILayout.Space(12); + if (GUILayout.Button("Start Host", GUILayout.Height(36))) StartHost(session); + if (GUILayout.Button("Join Factory", GUILayout.Height(36))) StartClient(session); + GUILayout.FlexibleSpace(); + GUILayout.Label(session.Status); + GUILayout.EndArea(); + } + + private void StartHost(FriendslopSession session) + { + if (TryReadPort(out ushort port)) session.StartHost(port); + else Debug.LogWarning("Friendslop: invalid port."); + } + + private void StartClient(FriendslopSession session) + { + if (TryReadPort(out ushort port) && !string.IsNullOrWhiteSpace(address)) session.StartClient(address, port); + else Debug.LogWarning("Friendslop: enter a valid IP and port."); + } + + private bool TryReadPort(out ushort port) => ushort.TryParse(portText, out port) && port > 0; +} \ No newline at end of file diff --git a/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs.meta b/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs.meta new file mode 100644 index 0000000..4b3a8b9 --- /dev/null +++ b/Assets/CONTENT/Friendslop/Scripts/UI/FriendslopMainMenu.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: eaf978c3df4c1364083bd8a1f7d08861 \ No newline at end of file diff --git a/Assets/CONTENT/Game.meta b/Assets/CONTENT/Game.meta new file mode 100644 index 0000000..9de23c7 --- /dev/null +++ b/Assets/CONTENT/Game.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cb1a9a628bbe0464abbd4afd4a4c8293 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts.meta b/Assets/CONTENT/Game/Scripts.meta new file mode 100644 index 0000000..67ff6d8 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6d45b1190e0b7d74da1e2765116089b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts/Flow.meta b/Assets/CONTENT/Game/Scripts/Flow.meta new file mode 100644 index 0000000..ceffb12 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Flow.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfc6ac80efa537f4a94f84dd95531955 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs b/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs new file mode 100644 index 0000000..fc5ee6e --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs @@ -0,0 +1,11 @@ +using System; +using UnityEngine; + +public enum GamePhase { Menu, Loading, Playing, Results } + +public sealed class GameFlowController : MonoBehaviour +{ + public GamePhase Phase { get; private set; } = GamePhase.Menu; + public event Action PhaseChanged; + public void SetPhase(GamePhase phase) { if (Phase == phase) return; Phase = phase; PhaseChanged?.Invoke(Phase); } +} \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs.meta b/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs.meta new file mode 100644 index 0000000..2dbdc8f --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Flow/GameFlowController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a459064651fdcad4bb7e73452bef583f \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Networking.meta b/Assets/CONTENT/Game/Scripts/Networking.meta new file mode 100644 index 0000000..4d3848a --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Networking.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ecd91b8a689342b47858258adf659f90 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs b/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs new file mode 100644 index 0000000..9f81df5 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs @@ -0,0 +1,54 @@ +using Unity.Netcode; +using Unity.Netcode.Transports.UTP; +using UnityEngine; +using UnityEngine.SceneManagement; + +[RequireComponent(typeof(NetworkManager), typeof(UnityTransport))] +public sealed class NetworkSessionController : MonoBehaviour +{ + public static NetworkSessionController Instance { get; private set; } + [SerializeField] private NetworkObject playerPrefab; + [SerializeField] private string menuSceneName = "MainMenu"; + [SerializeField] private string gameplaySceneName = "Factory"; + public string Status { get; private set; } = "Ready."; + public bool IsOnline => NetworkManager.Singleton != null && NetworkManager.Singleton.IsListening; + private NetworkManager networkManager; + private UnityTransport transport; + + private void Awake() + { + if (Instance != null) { Destroy(gameObject); return; } + Instance = this; DontDestroyOnLoad(gameObject); + networkManager = GetComponent(); + transport = GetComponent(); + networkManager.NetworkConfig.NetworkTransport = transport; + networkManager.NetworkConfig.PlayerPrefab = playerPrefab.gameObject; + networkManager.NetworkConfig.EnableSceneManagement = true; + networkManager.OnServerStarted += LoadGameplayScene; + } + private void Start() => SceneManager.LoadScene(menuSceneName); + private void OnDestroy() + { + if (networkManager != null) networkManager.OnServerStarted -= LoadGameplayScene; + if (Instance == this) Instance = null; + } + public bool StartHost(ushort port) + { + transport.SetConnectionData("0.0.0.0", port, "0.0.0.0"); + bool started = networkManager.StartHost(); + Status = started ? $"Host started on {port}." : "Host failed to start."; + return started; + } + public bool StartClient(string address, ushort port) + { + transport.SetConnectionData(address.Trim(), port); + bool started = networkManager.StartClient(); + Status = started ? $"Connecting to {address}:{port}..." : "Client failed to start."; + return started; + } + private void LoadGameplayScene() + { + Status = "Loading factory..."; + networkManager.SceneManager.LoadScene(gameplaySceneName, LoadSceneMode.Single); + } +} \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs.meta b/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs.meta new file mode 100644 index 0000000..745386b --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Networking/NetworkSessionController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3a5771e8e4723ae498f3d83bf919341b \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Player.meta b/Assets/CONTENT/Game/Scripts/Player.meta new file mode 100644 index 0000000..985f363 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Player.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 41814467a228df8419dff1a72af910f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs b/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs new file mode 100644 index 0000000..ba8b72f --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs @@ -0,0 +1,23 @@ +using System; +using Unity.Netcode; +using UnityEngine; + +public interface IPlayerSystem { void Initialize(PlayerFacade facade); } + +[RequireComponent(typeof(NetworkObject))] +public sealed class PlayerFacade : NetworkBehaviour +{ + [SerializeField] private MonoBehaviour[] initializationOrder; + + public event Action Initialized; + + public override void OnNetworkSpawn() + { + MonoBehaviour[] systems = initializationOrder.Length > 0 + ? initializationOrder + : GetComponents(); + foreach (MonoBehaviour system in systems) + if (system is IPlayerSystem playerSystem) playerSystem.Initialize(this); + Initialized?.Invoke(this); + } +} diff --git a/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs.meta b/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs.meta new file mode 100644 index 0000000..ef0486a --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Player/PlayerFacade.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 3b718b186a728344ab8c35780b227699 \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs b/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs new file mode 100644 index 0000000..e008bc8 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs @@ -0,0 +1,29 @@ +using Unity.Netcode; +using UnityEngine; +using UnityEngine.InputSystem; + +public sealed class PlayerMovementController : NetworkBehaviour, IPlayerSystem +{ + [SerializeField, Min(0.1f)] private float movementSpeed = 4.5f; + private bool isInitialized; + + public void Initialize(PlayerFacade facade) => isInitialized = true; + + private void Update() + { + if (!isInitialized || !IsOwner || Keyboard.current == null) return; + Vector2 input = new( + (Keyboard.current.dKey.isPressed ? 1 : 0) - (Keyboard.current.aKey.isPressed ? 1 : 0), + (Keyboard.current.wKey.isPressed ? 1 : 0) - (Keyboard.current.sKey.isPressed ? 1 : 0)); + if (IsServer) Move(input); else MoveServerRpc(input); + } + + [ServerRpc] private void MoveServerRpc(Vector2 input) => Move(input); + private void Move(Vector2 input) + { + if (input.sqrMagnitude > 1) input.Normalize(); + Vector3 direction = new(input.x, 0, input.y); + transform.position += direction * (movementSpeed * Time.deltaTime); + if (direction.sqrMagnitude > 0.001f) transform.forward = direction; + } +} \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs.meta b/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs.meta new file mode 100644 index 0000000..252a0ff --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/Player/PlayerMovementController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f8af29dd6e4daa6479ef978bdd3b2e6d \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/UI.meta b/Assets/CONTENT/Game/Scripts/UI.meta new file mode 100644 index 0000000..69d433c --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 43128554abba77f4bb54725f63b84763 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs b/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs new file mode 100644 index 0000000..4a6ea5b --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +public sealed class MainMenuController : MonoBehaviour +{ + private string address = "127.0.0.1"; + private string portText = "7777"; + private void OnGUI() + { + NetworkSessionController session = NetworkSessionController.Instance; + GUI.Box(new Rect(24, 24, 380, 285), string.Empty); + GUILayout.BeginArea(new Rect(44, 44, 340, 245)); + GUILayout.Label("FRIENDSLOP // MOUNTAIN FACTORY"); GUILayout.Space(10); + if (session == null) { GUILayout.Label("Bootstrap is unavailable."); GUILayout.EndArea(); return; } + if (session.IsOnline) { GUILayout.Label(session.Status); GUILayout.EndArea(); return; } + GUILayout.Label("Host LAN IP"); address = GUILayout.TextField(address); + GUILayout.Label("Port"); portText = GUILayout.TextField(portText); GUILayout.Space(12); + if (GUILayout.Button("Start Host", GUILayout.Height(36))) StartHost(session); + if (GUILayout.Button("Join Factory", GUILayout.Height(36))) StartClient(session); + GUILayout.FlexibleSpace(); GUILayout.Label(session.Status); GUILayout.EndArea(); + } + private void StartHost(NetworkSessionController session) { if (TryReadPort(out ushort port)) session.StartHost(port); } + private void StartClient(NetworkSessionController session) { if (TryReadPort(out ushort port) && !string.IsNullOrWhiteSpace(address)) session.StartClient(address, port); } + private bool TryReadPort(out ushort port) => ushort.TryParse(portText, out port) && port > 0; +} \ No newline at end of file diff --git a/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs.meta b/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs.meta new file mode 100644 index 0000000..552ca71 --- /dev/null +++ b/Assets/CONTENT/Game/Scripts/UI/MainMenuController.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 056cb25917107d849860614254aa1795 \ No newline at end of file diff --git a/Assets/DefaultNetworkPrefabs.asset b/Assets/DefaultNetworkPrefabs.asset index cfbcdb4..2ebf8ce 100644 --- a/Assets/DefaultNetworkPrefabs.asset +++ b/Assets/DefaultNetworkPrefabs.asset @@ -19,3 +19,8 @@ MonoBehaviour: SourcePrefabToOverride: {fileID: 0} SourceHashToOverride: 0 OverridingTargetPrefab: {fileID: 0} + - Override: 0 + Prefab: {fileID: 2724913065371725993, guid: f0d720ad6d7581844a2cf98deeac1e9a, type: 3} + SourcePrefabToOverride: {fileID: 0} + SourceHashToOverride: 0 + OverridingTargetPrefab: {fileID: 0} diff --git a/Assets/Scenes/Bootstrap.unity b/Assets/Scenes/Bootstrap.unity new file mode 100644 index 0000000..b926f0c --- /dev/null +++ b/Assets/Scenes/Bootstrap.unity @@ -0,0 +1,262 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &535045605 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 535045610} + - component: {fileID: 535045609} + - component: {fileID: 535045608} + - component: {fileID: 535045606} + - component: {fileID: 535045611} + m_Layer: 0 + m_Name: NetworkBootstrap + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &535045606 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535045605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a459064651fdcad4bb7e73452bef583f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &535045608 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535045605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6960e84d07fb87f47956e7a81d71c4e6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ProtocolType: 0 + m_UseWebSockets: 0 + m_UseEncryption: 0 + m_MaxPacketQueueSize: 128 + m_MaxPayloadSize: 6144 + m_HeartbeatTimeoutMS: 500 + m_ConnectTimeoutMS: 1000 + m_MaxConnectAttempts: 60 + m_DisconnectTimeoutMS: 30000 + ConnectionData: + Address: 127.0.0.1 + Port: 7777 + WebSocketPath: / + ServerListenAddress: 127.0.0.1 + ClientBindPort: 0 + DebugSimulator: + PacketDelayMS: 0 + PacketJitterMS: 0 + PacketDropRate: 0 +--- !u!114 &535045609 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535045605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 593a2fe42fa9d37498c96f9a383b6521, type: 3} + m_Name: + m_EditorClassIdentifier: + NetworkManagerExpanded: 0 + NetworkConfig: + ProtocolVersion: 0 + NetworkTransport: {fileID: 0} + PlayerPrefab: {fileID: 0} + Prefabs: + NetworkPrefabsLists: + - {fileID: 11400000, guid: ade67b675ab279949a8c1b7b0684ce60, type: 2} + TickRate: 30 + ClientConnectionBufferTimeout: 10 + ConnectionApproval: 0 + ConnectionData: + EnableTimeResync: 0 + TimeResyncInterval: 30 + EnsureNetworkVariableLengthSafety: 0 + EnableSceneManagement: 1 + ForceSamePrefabs: 1 + RecycleNetworkIds: 1 + NetworkIdRecycleDelay: 120 + RpcHashSize: 0 + LoadSceneTimeOut: 120 + SpawnTimeout: 10 + EnableNetworkLogs: 1 + NetworkTopology: 0 + UseCMBService: 0 + AutoSpawnPlayerPrefabClientSide: 1 + NetworkMessageMetrics: 1 + NetworkProfilingMetrics: 1 + OldPrefabList: [] + RunInBackground: 1 + LogLevel: 1 +--- !u!4 &535045610 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535045605} + 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!114 &535045611 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 535045605} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3a5771e8e4723ae498f3d83bf919341b, type: 3} + m_Name: + m_EditorClassIdentifier: + playerPrefab: {fileID: 301346209279679251, guid: f0d720ad6d7581844a2cf98deeac1e9a, type: 3} + menuSceneName: MainMenu + gameplaySceneName: Factory +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 535045610} diff --git a/Assets/Scenes/Bootstrap.unity.meta b/Assets/Scenes/Bootstrap.unity.meta new file mode 100644 index 0000000..c407ede --- /dev/null +++ b/Assets/Scenes/Bootstrap.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3bbc4dc061015454a90b36c9a7c20f90 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/Factory.unity b/Assets/Scenes/Factory.unity new file mode 100644 index 0000000..5325db8 --- /dev/null +++ b/Assets/Scenes/Factory.unity @@ -0,0 +1,450 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &666592684 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 666592687} + - component: {fileID: 666592686} + - component: {fileID: 666592685} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &666592685 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666592684} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 +--- !u!108 &666592686 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666592684} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &666592687 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 666592684} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1926811236 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1926811240} + - component: {fileID: 1926811239} + - component: {fileID: 1926811238} + - component: {fileID: 1926811237} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &1926811237 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926811236} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &1926811238 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926811236} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &1926811239 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926811236} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &1926811240 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1926811236} + 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 &2019642851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2019642854} + - component: {fileID: 2019642853} + - component: {fileID: 2019642852} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &2019642852 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019642851} + m_Enabled: 1 +--- !u!20 &2019642853 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019642851} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &2019642854 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2019642851} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 2019642854} + - {fileID: 666592687} + - {fileID: 1926811240} diff --git a/Assets/Scenes/Factory.unity.meta b/Assets/Scenes/Factory.unity.meta new file mode 100644 index 0000000..4afca4b --- /dev/null +++ b/Assets/Scenes/Factory.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e3cc5e4a252eea74aa085c5003256b2f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/MainMenu.unity b/Assets/Scenes/MainMenu.unity new file mode 100644 index 0000000..3b2adf5 --- /dev/null +++ b/Assets/Scenes/MainMenu.unity @@ -0,0 +1,450 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 10 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 1 + m_PVRFilteringGaussRadiusAO: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 20201, guid: 0000000000000000f000000000000000, type: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &11955240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 11955243} + - component: {fileID: 11955242} + - component: {fileID: 11955241} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &11955241 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11955240} + m_Enabled: 1 +--- !u!20 &11955242 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11955240} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &11955243 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 11955240} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + 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 &825886286 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 825886290} + - component: {fileID: 825886289} + - component: {fileID: 825886288} + - component: {fileID: 825886287} + m_Layer: 0 + m_Name: Ground + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!23 &825886287 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 825886286} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RayTracingAccelStructBuildFlagsOverride: 0 + m_RayTracingAccelStructBuildFlags: 1 + m_SmallMeshCulling: 1 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 31321ba15b8f8eb4c954353edc038b1d, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 1 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &825886288 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 825886286} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!33 &825886289 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 825886286} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &825886290 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 825886286} + 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 &950187836 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 950187839} + - component: {fileID: 950187838} + - component: {fileID: 950187837} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &950187837 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950187836} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 474bcb49853aa07438625e644c072ee6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Version: 3 + m_UsePipelineSettings: 1 + m_AdditionalLightsShadowResolutionTier: 2 + m_LightLayerMask: 1 + m_RenderingLayers: 1 + m_CustomShadowLayers: 0 + m_ShadowLayerMask: 1 + m_ShadowRenderingLayers: 1 + m_LightCookieSize: {x: 1, y: 1} + m_LightCookieOffset: {x: 0, y: 0} + m_SoftShadowQuality: 0 +--- !u!108 &950187838 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950187836} + m_Enabled: 1 + serializedVersion: 11 + m_Type: 1 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ForceVisible: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 +--- !u!4 &950187839 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 950187836} + serializedVersion: 2 + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 11955243} + - {fileID: 950187839} + - {fileID: 825886290} diff --git a/Assets/Scenes/MainMenu.unity.meta b/Assets/Scenes/MainMenu.unity.meta new file mode 100644 index 0000000..c317a9b --- /dev/null +++ b/Assets/Scenes/MainMenu.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2d9794df5f23d4e498b7fb89519e7353 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/Assets/Scenes/SampleScene.unity index 1c63aa8..e8d0925 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/Assets/Scenes/SampleScene.unity @@ -38,12 +38,12 @@ RenderSettings: m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} - m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 13 + m_BakeOnSceneLoad: 0 m_GISettings: serializedVersion: 2 m_BounceScale: 1 @@ -250,12 +250,12 @@ MonoBehaviour: m_RequiresColorTexture: 0 m_Version: 2 m_TaaSettings: - quality: 3 - frameInfluence: 0.1 - jitterScale: 1 - mipBias: 0 - varianceClampScale: 0.9 - contrastAdaptiveSharpening: 0 + m_Quality: 3 + m_FrameInfluence: 0.1 + m_JitterScale: 1 + m_MipBias: 0 + m_VarianceClampScale: 0.9 + m_ContrastAdaptiveSharpening: 0 --- !u!1 &410087039 GameObject: m_ObjectHideFlags: 0 @@ -336,6 +336,9 @@ Light: m_ForceVisible: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 + m_LightUnit: 1 + m_LuxAtDistance: 1 + m_EnableSpotReflector: 1 --- !u!4 &410087041 Transform: m_ObjectHideFlags: 0 diff --git a/ProjectSettings/EditorBuildSettings.asset b/ProjectSettings/EditorBuildSettings.asset index d057ba3..2ff6dee 100644 --- a/ProjectSettings/EditorBuildSettings.asset +++ b/ProjectSettings/EditorBuildSettings.asset @@ -6,8 +6,14 @@ EditorBuildSettings: serializedVersion: 2 m_Scenes: - enabled: 1 - path: Assets/Scenes/SampleScene.unity - guid: 99c9720ab356a0642a771bea13969a05 + path: Assets/Scenes/Bootstrap.unity + guid: 3bbc4dc061015454a90b36c9a7c20f90 + - enabled: 1 + path: Assets/Scenes/MainMenu.unity + guid: 2d9794df5f23d4e498b7fb89519e7353 + - enabled: 1 + path: Assets/Scenes/Factory.unity + guid: e3cc5e4a252eea74aa085c5003256b2f m_configObjects: com.unity.input.settings.actions: {fileID: -944628639613478452, guid: 052faaac586de48259a63d0c4782560b, type: 3} m_UseUCBPForAssetBundles: 0 diff --git a/ProjectSettings/Packages/com.unity.probuilder/Settings.json b/ProjectSettings/Packages/com.unity.probuilder/Settings.json index 1490c12..b206de0 100644 --- a/ProjectSettings/Packages/com.unity.probuilder/Settings.json +++ b/ProjectSettings/Packages/com.unity.probuilder/Settings.json @@ -25,6 +25,11 @@ "type": "UnityEngine.ProBuilder.SemVer, Unity.ProBuilder, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "key": "preferences.version", "value": "{\"m_Value\":{\"m_Major\":6,\"m_Minor\":0,\"m_Patch\":9,\"m_Build\":-1,\"m_Type\":\"\",\"m_Metadata\":\"\",\"m_Date\":\"\"}}" + }, + { + "type": "System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", + "key": "lightmapping.autoUnwrapLightmapUV", + "value": "{\"m_Value\":true}" } ] } diff --git a/ProjectSettings/SceneTemplateSettings.json b/ProjectSettings/SceneTemplateSettings.json new file mode 100644 index 0000000..ede5887 --- /dev/null +++ b/ProjectSettings/SceneTemplateSettings.json @@ -0,0 +1,121 @@ +{ + "templatePinStates": [], + "dependencyTypeInfos": [ + { + "userAdded": false, + "type": "UnityEngine.AnimationClip", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Animations.AnimatorController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.AnimatorOverrideController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.Audio.AudioMixerController", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.ComputeShader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Cubemap", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.GameObject", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.LightingDataAsset", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.LightingSettings", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Material", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.MonoScript", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.PhysicsMaterial2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.PostProcessing.PostProcessResources", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Rendering.VolumeProfile", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEditor.SceneAsset", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Shader", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.ShaderVariantCollection", + "defaultInstantiationMode": 1 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Texture2D", + "defaultInstantiationMode": 0 + }, + { + "userAdded": false, + "type": "UnityEngine.Timeline.TimelineAsset", + "defaultInstantiationMode": 0 + } + ], + "defaultDependencyTypeInfo": { + "userAdded": false, + "type": "", + "defaultInstantiationMode": 1 + }, + "newSceneOverride": 0 +} \ No newline at end of file