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