From 90db53bc469592d5ee50bd4c3a0f3c48bebc17ae Mon Sep 17 00:00:00 2001 From: Devin Wood Date: Thu, 16 Dec 2021 21:35:07 -0500 Subject: [PATCH 1/2] initial commit 4 ryguy --- .vs/Assets/v16/.suo | Bin 0 -> 14336 bytes .vs/VSWorkspaceState.json | 6 + .vs/slnx.sqlite | Bin 0 -> 98304 bytes ItemDB.meta | 8 + ItemDB/Lucky Sword.prefab | 144 ++ ItemDB/Lucky Sword.prefab.meta | 7 + ItemDB/LuckySword.asset | 21 + ItemDB/LuckySword.asset.meta | 8 + ItemDB/Not So Lucky Sword.prefab | 144 ++ ItemDB/Not So Lucky Sword.prefab.meta | 7 + ItemDB/NotSoLuckySword.asset | 21 + ItemDB/NotSoLuckySword.asset.meta | 8 + Prefabs.meta | 8 + Prefabs/Enemy.prefab | 172 +++ Prefabs/Enemy.prefab.meta | 7 + Prefabs/NPC.prefab | 149 ++ Prefabs/NPC.prefab.meta | 7 + Prefabs/Player.prefab | 198 +++ Prefabs/Player.prefab.meta | 7 + Scenes.meta | 8 + Scenes/ServerView.unity | 1979 +++++++++++++++++++++++++ Scenes/ServerView.unity.meta | 7 + Scripts.meta | 8 + Scripts/ClientRef.cs | 258 ++++ Scripts/ClientRef.cs.meta | 11 + Scripts/Constants.cs | 10 + Scripts/Constants.cs.meta | 11 + Scripts/Enemy.cs | 49 + Scripts/Enemy.cs.meta | 11 + Scripts/EnemyManager.cs | 84 ++ Scripts/EnemyManager.cs.meta | 11 + Scripts/EnemyStats.cs | 40 + Scripts/EnemyStats.cs.meta | 11 + Scripts/EntityStats.cs | 44 + Scripts/EntityStats.cs.meta | 11 + Scripts/EquipmentManager.cs | 59 + Scripts/EquipmentManager.cs.meta | 11 + Scripts/Focus.cs | 29 + Scripts/Focus.cs.meta | 11 + Scripts/GameServer.cs | 159 ++ Scripts/GameServer.cs.meta | 11 + Scripts/Interactable.cs | 46 + Scripts/Interactable.cs.meta | 11 + Scripts/Inventory.cs | 36 + Scripts/Inventory.cs.meta | 11 + Scripts/Item.cs | 21 + Scripts/Item.cs.meta | 11 + Scripts/ItemDrop.cs | 30 + Scripts/ItemDrop.cs.meta | 11 + Scripts/ItemManager.cs | 20 + Scripts/ItemManager.cs.meta | 11 + Scripts/LocalItemDB.cs | 23 + Scripts/LocalItemDB.cs.meta | 11 + Scripts/NPC.cs | 25 + Scripts/NPC.cs.meta | 11 + Scripts/NetworkManager.cs | 99 ++ Scripts/NetworkManager.cs.meta | 11 + Scripts/Packet.cs | 409 +++++ Scripts/Packet.cs.meta | 11 + Scripts/Player.cs | 89 ++ Scripts/Player.cs.meta | 11 + Scripts/PlayerStats.cs | 28 + Scripts/PlayerStats.cs.meta | 11 + Scripts/RegularEquipment.cs | 39 + Scripts/RegularEquipment.cs.meta | 11 + Scripts/ServerHandle.cs | 188 +++ Scripts/ServerHandle.cs.meta | 11 + Scripts/ServerSend.cs | 249 ++++ Scripts/ServerSend.cs.meta | 11 + Scripts/SessionManager.cs | 13 + Scripts/SessionManager.cs.meta | 11 + Scripts/SpellPiece.cs | 19 + Scripts/SpellPiece.cs.meta | 11 + Scripts/Stat.cs | 38 + Scripts/Stat.cs.meta | 11 + Scripts/ThreadManager.cs | 51 + Scripts/ThreadManager.cs.meta | 11 + 77 files changed, 5376 insertions(+) create mode 100644 .vs/Assets/v16/.suo create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/slnx.sqlite create mode 100644 ItemDB.meta create mode 100644 ItemDB/Lucky Sword.prefab create mode 100644 ItemDB/Lucky Sword.prefab.meta create mode 100644 ItemDB/LuckySword.asset create mode 100644 ItemDB/LuckySword.asset.meta create mode 100644 ItemDB/Not So Lucky Sword.prefab create mode 100644 ItemDB/Not So Lucky Sword.prefab.meta create mode 100644 ItemDB/NotSoLuckySword.asset create mode 100644 ItemDB/NotSoLuckySword.asset.meta create mode 100644 Prefabs.meta create mode 100644 Prefabs/Enemy.prefab create mode 100644 Prefabs/Enemy.prefab.meta create mode 100644 Prefabs/NPC.prefab create mode 100644 Prefabs/NPC.prefab.meta create mode 100644 Prefabs/Player.prefab create mode 100644 Prefabs/Player.prefab.meta create mode 100644 Scenes.meta create mode 100644 Scenes/ServerView.unity create mode 100644 Scenes/ServerView.unity.meta create mode 100644 Scripts.meta create mode 100644 Scripts/ClientRef.cs create mode 100644 Scripts/ClientRef.cs.meta create mode 100644 Scripts/Constants.cs create mode 100644 Scripts/Constants.cs.meta create mode 100644 Scripts/Enemy.cs create mode 100644 Scripts/Enemy.cs.meta create mode 100644 Scripts/EnemyManager.cs create mode 100644 Scripts/EnemyManager.cs.meta create mode 100644 Scripts/EnemyStats.cs create mode 100644 Scripts/EnemyStats.cs.meta create mode 100644 Scripts/EntityStats.cs create mode 100644 Scripts/EntityStats.cs.meta create mode 100644 Scripts/EquipmentManager.cs create mode 100644 Scripts/EquipmentManager.cs.meta create mode 100644 Scripts/Focus.cs create mode 100644 Scripts/Focus.cs.meta create mode 100644 Scripts/GameServer.cs create mode 100644 Scripts/GameServer.cs.meta create mode 100644 Scripts/Interactable.cs create mode 100644 Scripts/Interactable.cs.meta create mode 100644 Scripts/Inventory.cs create mode 100644 Scripts/Inventory.cs.meta create mode 100644 Scripts/Item.cs create mode 100644 Scripts/Item.cs.meta create mode 100644 Scripts/ItemDrop.cs create mode 100644 Scripts/ItemDrop.cs.meta create mode 100644 Scripts/ItemManager.cs create mode 100644 Scripts/ItemManager.cs.meta create mode 100644 Scripts/LocalItemDB.cs create mode 100644 Scripts/LocalItemDB.cs.meta create mode 100644 Scripts/NPC.cs create mode 100644 Scripts/NPC.cs.meta create mode 100644 Scripts/NetworkManager.cs create mode 100644 Scripts/NetworkManager.cs.meta create mode 100644 Scripts/Packet.cs create mode 100644 Scripts/Packet.cs.meta create mode 100644 Scripts/Player.cs create mode 100644 Scripts/Player.cs.meta create mode 100644 Scripts/PlayerStats.cs create mode 100644 Scripts/PlayerStats.cs.meta create mode 100644 Scripts/RegularEquipment.cs create mode 100644 Scripts/RegularEquipment.cs.meta create mode 100644 Scripts/ServerHandle.cs create mode 100644 Scripts/ServerHandle.cs.meta create mode 100644 Scripts/ServerSend.cs create mode 100644 Scripts/ServerSend.cs.meta create mode 100644 Scripts/SessionManager.cs create mode 100644 Scripts/SessionManager.cs.meta create mode 100644 Scripts/SpellPiece.cs create mode 100644 Scripts/SpellPiece.cs.meta create mode 100644 Scripts/Stat.cs create mode 100644 Scripts/Stat.cs.meta create mode 100644 Scripts/ThreadManager.cs create mode 100644 Scripts/ThreadManager.cs.meta diff --git a/.vs/Assets/v16/.suo b/.vs/Assets/v16/.suo new file mode 100644 index 0000000000000000000000000000000000000000..00f4ca8b97fe70ee462994594eb5c46d54a28182 GIT binary patch literal 14336 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 literal 0 HcmV?d00001 diff --git a/ItemDB.meta b/ItemDB.meta new file mode 100644 index 0000000..8f467f4 --- /dev/null +++ b/ItemDB.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2e69ec3905c982346a149334cd4a824b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ItemDB/Lucky Sword.prefab b/ItemDB/Lucky Sword.prefab new file mode 100644 index 0000000..5a083ad --- /dev/null +++ b/ItemDB/Lucky Sword.prefab @@ -0,0 +1,144 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &284073984168042100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284073984168042102} + - component: {fileID: 284073984168042103} + m_Layer: 0 + m_Name: Lucky Sword + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &284073984168042102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073984168042100} + m_LocalRotation: {x: 0, y: 0.195561, z: 0, w: 0.98069155} + m_LocalPosition: {x: 0.16, y: -5.3, z: 44.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 284073985645531310} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 22.555, z: 0} +--- !u!114 &284073984168042103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073984168042100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 320ef2fe090406d4a9fe8199c477964d, type: 3} + m_Name: + m_EditorClassIdentifier: + id: 0 + isFocused: 0 + hasInteracted: 0 + interactRadius: 3 + item: {fileID: 11400000, guid: 1135a3cf0301b1c46823d38926e75cfc, type: 2} +--- !u!1 &284073985645531311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284073985645531310} + - component: {fileID: 284073985645531307} + - component: {fileID: 284073985645531304} + - component: {fileID: 284073985645531305} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &284073985645531310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.07, z: 0} + m_LocalScale: {x: 1.937589, y: 0.1184092, z: 0.37564} + m_Children: [] + m_Father: {fileID: 284073984168042102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &284073985645531307 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &284073985645531304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!65 &284073985645531305 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/ItemDB/Lucky Sword.prefab.meta b/ItemDB/Lucky Sword.prefab.meta new file mode 100644 index 0000000..7d65183 --- /dev/null +++ b/ItemDB/Lucky Sword.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c1ca30307112da348ac4b844f1bfcb58 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ItemDB/LuckySword.asset b/ItemDB/LuckySword.asset new file mode 100644 index 0000000..e1afbf3 --- /dev/null +++ b/ItemDB/LuckySword.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f32da428f21bf94ab2c209423d37ef8, type: 3} + m_Name: LuckySword + m_EditorClassIdentifier: + id: 0 + name: LuckySword + icon: {fileID: 0} + isDefaultItem: 0 + equipSlot: 9 + armorModifier: 0 + damageModifier: 4 diff --git a/ItemDB/LuckySword.asset.meta b/ItemDB/LuckySword.asset.meta new file mode 100644 index 0000000..3699421 --- /dev/null +++ b/ItemDB/LuckySword.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1135a3cf0301b1c46823d38926e75cfc +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ItemDB/Not So Lucky Sword.prefab b/ItemDB/Not So Lucky Sword.prefab new file mode 100644 index 0000000..0330498 --- /dev/null +++ b/ItemDB/Not So Lucky Sword.prefab @@ -0,0 +1,144 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &284073984168042100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284073984168042102} + - component: {fileID: 284073984168042103} + m_Layer: 0 + m_Name: Not So Lucky Sword + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &284073984168042102 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073984168042100} + m_LocalRotation: {x: 0, y: 0.195561, z: 0, w: 0.98069155} + m_LocalPosition: {x: 0.16, y: -5.3, z: 44.7} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 284073985645531310} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 22.555, z: 0} +--- !u!114 &284073984168042103 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073984168042100} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 320ef2fe090406d4a9fe8199c477964d, type: 3} + m_Name: + m_EditorClassIdentifier: + id: 1 + isFocused: 0 + hasInteracted: 0 + interactRadius: 3 + item: {fileID: 11400000, guid: bfbc6cc0bec257140b27867c269c291d, type: 2} +--- !u!1 &284073985645531311 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 284073985645531310} + - component: {fileID: 284073985645531307} + - component: {fileID: 284073985645531304} + - component: {fileID: 284073985645531305} + m_Layer: 0 + m_Name: Model + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &284073985645531310 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.07, z: 0} + m_LocalScale: {x: 1.937589, y: 0.1184092, z: 0.37564} + m_Children: [] + m_Father: {fileID: 284073984168042102} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &284073985645531307 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &284073985645531304 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!65 &284073985645531305 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 284073985645531311} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} diff --git a/ItemDB/Not So Lucky Sword.prefab.meta b/ItemDB/Not So Lucky Sword.prefab.meta new file mode 100644 index 0000000..27a488e --- /dev/null +++ b/ItemDB/Not So Lucky Sword.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0db320093ea3d5b448864bc2ed54428b +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ItemDB/NotSoLuckySword.asset b/ItemDB/NotSoLuckySword.asset new file mode 100644 index 0000000..9eafc4d --- /dev/null +++ b/ItemDB/NotSoLuckySword.asset @@ -0,0 +1,21 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f32da428f21bf94ab2c209423d37ef8, type: 3} + m_Name: NotSoLuckySword + m_EditorClassIdentifier: + id: 0 + name: New Item + icon: {fileID: 0} + isDefaultItem: 0 + equipSlot: 0 + armorModifier: 0 + damageModifier: 0 diff --git a/ItemDB/NotSoLuckySword.asset.meta b/ItemDB/NotSoLuckySword.asset.meta new file mode 100644 index 0000000..84c9783 --- /dev/null +++ b/ItemDB/NotSoLuckySword.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bfbc6cc0bec257140b27867c269c291d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs.meta b/Prefabs.meta new file mode 100644 index 0000000..4314d08 --- /dev/null +++ b/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ef17f923f3ddca4cbca3098d9a7547d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/Enemy.prefab b/Prefabs/Enemy.prefab new file mode 100644 index 0000000..3d62bf8 --- /dev/null +++ b/Prefabs/Enemy.prefab @@ -0,0 +1,172 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8365780486085420431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6432124833508518527} + - component: {fileID: 3554109758470739974} + - component: {fileID: 7791124450410057734} + m_Layer: 0 + m_Name: Collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6432124833508518527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + 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_Children: [] + m_Father: {fileID: 1212606147804292961} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3554109758470739974 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7791124450410057734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!1 &8611467844914570594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1212606147804292961} + - component: {fileID: 7474231715138914666} + - component: {fileID: 3013900500313223034} + - component: {fileID: 4080737244005278309} + m_Layer: 0 + m_Name: Enemy + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1212606147804292961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + 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_Children: + - {fileID: 6432124833508518527} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!143 &7474231715138914666 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &3013900500313223034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a94a0e09355e0db45b6a922aaedf326a, type: 3} + m_Name: + m_EditorClassIdentifier: + id: 0 + isFocused: 0 + hasInteracted: 0 + interactRadius: 0 + entityName: + gravity: 0 + moveSpeed: 0 +--- !u!114 &4080737244005278309 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 970bb08bb36559142b6b97aa2c073422, type: 3} + m_Name: + m_EditorClassIdentifier: + maxHealth: 100 + currentHealth: 100 + damage: + baseValue: 0 + armor: + baseValue: 0 + lootDrops: + - {fileID: 284073984168042100, guid: c1ca30307112da348ac4b844f1bfcb58, type: 3} diff --git a/Prefabs/Enemy.prefab.meta b/Prefabs/Enemy.prefab.meta new file mode 100644 index 0000000..9677c43 --- /dev/null +++ b/Prefabs/Enemy.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b18ee323596aff74bbcbce59a159fa54 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/NPC.prefab b/Prefabs/NPC.prefab new file mode 100644 index 0000000..9935663 --- /dev/null +++ b/Prefabs/NPC.prefab @@ -0,0 +1,149 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8365780486085420431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6432124833508518527} + - component: {fileID: 3554109758470739974} + - component: {fileID: 7791124450410057734} + m_Layer: 0 + m_Name: Collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6432124833508518527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + 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_Children: [] + m_Father: {fileID: 1212606147804292961} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3554109758470739974 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7791124450410057734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!1 &8611467844914570594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1212606147804292961} + - component: {fileID: 7658026733673540080} + - component: {fileID: 7474231715138914666} + m_Layer: 0 + m_Name: NPC + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1212606147804292961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + 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_Children: + - {fileID: 6432124833508518527} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &7658026733673540080 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 321b549eff4e9d645aea8b965c1d1aca, type: 3} + m_Name: + m_EditorClassIdentifier: + id: 0 + isFocused: 0 + name: + gravity: -9.18 + moveSpeed: 5 +--- !u!143 &7474231715138914666 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Prefabs/NPC.prefab.meta b/Prefabs/NPC.prefab.meta new file mode 100644 index 0000000..5607ee1 --- /dev/null +++ b/Prefabs/NPC.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8a3256f6f3a12a848a3443f4f31c64dc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Prefabs/Player.prefab b/Prefabs/Player.prefab new file mode 100644 index 0000000..836bea1 --- /dev/null +++ b/Prefabs/Player.prefab @@ -0,0 +1,198 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &8365780486085420431 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6432124833508518527} + - component: {fileID: 3554109758470739974} + - component: {fileID: 7791124450410057734} + m_Layer: 0 + m_Name: Collider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &6432124833508518527 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + 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_Children: [] + m_Father: {fileID: 1212606147804292961} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &3554109758470739974 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Mesh: {fileID: 10208, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &7791124450410057734 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365780486085420431} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!1 &8611467844914570594 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1212606147804292961} + - component: {fileID: 257345741035949171} + - component: {fileID: 1389609434891966730} + - component: {fileID: 1549596798853889766} + - component: {fileID: 8021349615318193849} + - component: {fileID: 7474231715138914666} + m_Layer: 0 + m_Name: Player + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1212606147804292961 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + 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_Children: + - {fileID: 6432124833508518527} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &257345741035949171 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 095e16624d184fc4b908203d1fc7630a, type: 3} + m_Name: + m_EditorClassIdentifier: + focus: {fileID: 0} + inventory: {fileID: 0} + id: 0 + username: + charControl: {fileID: 7474231715138914666} + gravity: -18.36 + moveSpeed: 5 + jumpSpeed: 9 +--- !u!114 &1389609434891966730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5948b070793bfce4e8b489fccae9f746, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 0} +--- !u!114 &1549596798853889766 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ae64ed8f14b119045a814da78f9a7bbe, type: 3} + m_Name: + m_EditorClassIdentifier: + maxHealth: 100 + currentHealth: 0 + damage: + baseValue: 0 + armor: + baseValue: 0 +--- !u!114 &8021349615318193849 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: b47a2eb38ce51c346b2401ca8344a45f, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!143 &7474231715138914666 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Prefabs/Player.prefab.meta b/Prefabs/Player.prefab.meta new file mode 100644 index 0000000..ed41ec8 --- /dev/null +++ b/Prefabs/Player.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 24a623eb0c8f3d8429cb79e502e24054 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scenes.meta b/Scenes.meta new file mode 100644 index 0000000..db13f07 --- /dev/null +++ b/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c1be821d14d832f4a9c4944786cd9d9c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scenes/ServerView.unity b/Scenes/ServerView.unity new file mode 100644 index 0000000..5799c83 --- /dev/null +++ b/Scenes/ServerView.unity @@ -0,0 +1,1979 @@ +%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: 9 + 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: 705507994} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 1 + 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_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + 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 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &146451875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 146451878} + - component: {fileID: 146451879} + - component: {fileID: 146451877} + - component: {fileID: 146451876} + m_Layer: 0 + m_Name: ServerManager + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &146451876 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ebd1e0e244c889c40b33a6d2bac9c89e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &146451877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a4274b17a8039147ae17c52aba55873, type: 3} + m_Name: + m_EditorClassIdentifier: + playerPrefab: {fileID: 8611467844914570594, guid: 24a623eb0c8f3d8429cb79e502e24054, + type: 3} + enemyPrefab: {fileID: 8611467844914570594, guid: b18ee323596aff74bbcbce59a159fa54, + type: 3} +--- !u!4 &146451878 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &146451879 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56d97fa4a02b5754bb4106ad395d7f32, type: 3} + m_Name: + m_EditorClassIdentifier: + enemyPrefab: {fileID: 8611467844914570594, guid: b18ee323596aff74bbcbce59a159fa54, + type: 3} +--- !u!1 &170306121 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 170306122} + - component: {fileID: 170306125} + - component: {fileID: 170306124} + - component: {fileID: 170306123} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &170306122 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170306121} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.50731105, y: 39.13733, z: -1.791542} + m_LocalScale: {x: 9.3444, y: 3.8147, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &170306123 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170306121} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &170306124 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170306121} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &170306125 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 170306121} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &246839235 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 246839236} + - component: {fileID: 246839239} + - component: {fileID: 246839238} + - component: {fileID: 246839237} + m_Layer: 0 + m_Name: Plane (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &246839236 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 246839235} + m_LocalRotation: {x: 0.70710677, y: 0, z: 0, w: 0.70710677} + m_LocalPosition: {x: 0.04, y: 2.11, z: -5.04} + m_LocalScale: {x: 1, y: 1, z: 0.40906} + m_Children: [] + m_Father: {fileID: 929271467} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 90, y: 90, z: 90} +--- !u!64 &246839237 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 246839235} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &246839238 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 246839235} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &246839239 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 246839235} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &293346804 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 293346805} + - component: {fileID: 293346808} + - component: {fileID: 293346807} + - component: {fileID: 293346806} + m_Layer: 0 + m_Name: path_start_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &293346805 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293346804} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: 57.2, y: -6.39, z: 115.1} + m_LocalScale: {x: 1, y: 1, z: 4.0071} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!64 &293346806 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293346804} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &293346807 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293346804} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &293346808 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 293346804} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &424784824 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 424784825} + - component: {fileID: 424784828} + - component: {fileID: 424784827} + - component: {fileID: 424784826} + m_Layer: 0 + m_Name: SpawnPlat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &424784825 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424784824} + 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_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &424784826 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424784824} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &424784827 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424784824} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &424784828 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 424784824} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &641374100 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 641374101} + - component: {fileID: 641374104} + - component: {fileID: 641374103} + - component: {fileID: 641374102} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &641374101 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 641374100} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.50731105, y: 38.327328, z: -28.28154} + m_LocalScale: {x: 9.3444, y: 2.1803, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &641374102 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 641374100} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &641374103 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 641374100} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &641374104 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 641374100} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &705507993 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 705507995} + - component: {fileID: 705507994} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &705507994 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + 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: 1 + 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_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &705507995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 705507993} + 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_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &714529634 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 714529635} + - component: {fileID: 714529638} + - component: {fileID: 714529637} + - component: {fileID: 714529636} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &714529635 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714529634} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.9626889, y: 38.557327, z: -3.2515411} + m_LocalScale: {x: 2.022315, y: 2.7525, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &714529636 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714529634} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &714529637 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714529634} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &714529638 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 714529634} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &861307371 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 861307372} + - component: {fileID: 861307375} + - component: {fileID: 861307374} + - component: {fileID: 861307373} + m_Layer: 0 + m_Name: EntranceRamp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &861307372 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861307371} + m_LocalRotation: {x: 0.16994654, y: -0, z: -0, w: 0.98545337} + m_LocalPosition: {x: 0, y: -3.21, z: 14.01} + m_LocalScale: {x: 1, y: 1, z: 1.908} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 19.569, y: 0, z: 0} +--- !u!64 &861307373 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861307371} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &861307374 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861307371} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &861307375 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 861307371} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &929271466 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 929271467} + m_Layer: 0 + m_Name: Walls (SERVERONLY) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &929271467 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 929271466} + 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_Children: + - {fileID: 986082942} + - {fileID: 1502067984} + - {fileID: 246839236} + m_Father: {fileID: 1035307392} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &963194225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 963194228} + - component: {fileID: 963194227} + - component: {fileID: 963194226} + 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 &963194226 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_Enabled: 1 +--- !u!20 &963194227 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + 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_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + 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 &963194228 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 963194225} + m_LocalRotation: {x: 0.2892117, y: -0, z: -0, w: 0.9572652} + m_LocalPosition: {x: 0, y: 7.3, z: -9.67} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 33.622, y: 0, z: 0} +--- !u!1 &986082941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 986082942} + - component: {fileID: 986082945} + - component: {fileID: 986082944} + - component: {fileID: 986082943} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &986082942 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986082941} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: -5, y: 2.11, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.40906} + m_Children: [] + m_Father: {fileID: 929271467} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 90} +--- !u!64 &986082943 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986082941} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &986082944 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986082941} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &986082945 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 986082941} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1035307391 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1035307392} + m_Layer: 0 + m_Name: WorldData + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1035307392 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1035307391} + 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_Children: + - {fileID: 929271467} + - {fileID: 424784825} + - {fileID: 861307372} + - {fileID: 1394718326} + - {fileID: 1991002431} + - {fileID: 1957725728} + - {fileID: 293346805} + - {fileID: 1878838810} + - {fileID: 1835622735} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1394718325 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1394718326} + - component: {fileID: 1394718329} + - component: {fileID: 1394718328} + - component: {fileID: 1394718327} + m_Layer: 0 + m_Name: ConnectToFirstPlat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1394718326 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394718325} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -6.39, z: 43.08} + m_LocalScale: {x: 1, y: 1, z: 4.0071} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1394718327 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394718325} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1394718328 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394718325} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1394718329 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1394718325} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1502067983 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1502067984} + - component: {fileID: 1502067987} + - component: {fileID: 1502067986} + - component: {fileID: 1502067985} + m_Layer: 0 + m_Name: Plane (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1502067984 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502067983} + m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} + m_LocalPosition: {x: 4.98, y: 2.11, z: 0} + m_LocalScale: {x: 1, y: 1, z: 0.40906} + m_Children: [] + m_Father: {fileID: 929271467} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 90, y: 0, z: 90} +--- !u!64 &1502067985 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502067983} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1502067986 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502067983} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1502067987 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1502067983} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1807095920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1807095921} + - component: {fileID: 1807095924} + - component: {fileID: 1807095923} + - component: {fileID: 1807095922} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1807095921 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807095920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -3.647311, y: 37.88733, z: -30.44154} + m_LocalScale: {x: 1.3007329, y: 1.5498502, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1807095922 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807095920} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1807095923 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807095920} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1807095924 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1807095920} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1835622734 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1835622735} + m_Layer: 0 + m_Name: Obstacles + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1835622735 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1835622734} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.57731104, y: -43.647327, z: 62.71154} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2099712717} + - {fileID: 641374101} + - {fileID: 170306122} + - {fileID: 714529635} + - {fileID: 1907060722} + - {fileID: 1807095921} + m_Father: {fileID: 1035307392} + m_RootOrder: 8 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1878838809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1878838810} + - component: {fileID: 1878838813} + - component: {fileID: 1878838812} + - component: {fileID: 1878838811} + m_Layer: 0 + m_Name: path_start_forward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1878838810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1878838809} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -6.39, z: 187} + m_LocalScale: {x: 1, y: 1, z: 4.0071} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1878838811 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1878838809} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1878838812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1878838809} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1878838813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1878838809} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1907060721 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1907060722} + - component: {fileID: 1907060725} + - component: {fileID: 1907060724} + - component: {fileID: 1907060723} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1907060722 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907060721} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0.45268893, y: 37.88733, z: -4.9315414} + m_LocalScale: {x: 1.3007329, y: 1.5498502, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1907060723 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907060721} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1907060724 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907060721} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1907060725 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1907060721} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1957725727 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1957725728} + - component: {fileID: 1957725731} + - component: {fileID: 1957725730} + - component: {fileID: 1957725729} + m_Layer: 0 + m_Name: path_start_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1957725728 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1957725727} + m_LocalRotation: {x: 0, y: 0.7071068, z: 0, w: 0.7071068} + m_LocalPosition: {x: -56.7, y: -6.39, z: 115.1} + m_LocalScale: {x: 1, y: 1, z: 4.0071} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 90, z: 0} +--- !u!64 &1957725729 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1957725727} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1957725730 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1957725727} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1957725731 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1957725727} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1991002430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1991002431} + - component: {fileID: 1991002434} + - component: {fileID: 1991002433} + - component: {fileID: 1991002432} + m_Layer: 0 + m_Name: FirstPlatform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1991002431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991002430} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -6.39, z: 115.2} + m_LocalScale: {x: 7.4745, y: 1, z: 10.433287} + m_Children: [] + m_Father: {fileID: 1035307392} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!64 &1991002432 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991002430} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 4 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &1991002433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991002430} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &1991002434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1991002430} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2099712716 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2099712717} + - component: {fileID: 2099712720} + - component: {fileID: 2099712719} + - component: {fileID: 2099712718} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2099712717 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099712716} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -0.50731105, y: 37.747326, z: -34.38154} + m_LocalScale: {x: 9.3444, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1835622735} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2099712718 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099712716} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2099712719 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099712716} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + 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: 0 + 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 +--- !u!33 &2099712720 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2099712716} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Scenes/ServerView.unity.meta b/Scenes/ServerView.unity.meta new file mode 100644 index 0000000..952bd1e --- /dev/null +++ b/Scenes/ServerView.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9fc0d4010bbf28b4594072e72b8655ab +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts.meta b/Scripts.meta new file mode 100644 index 0000000..b5af392 --- /dev/null +++ b/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cf89ee71d8903ab4abea5501b9b4c1c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ClientRef.cs b/Scripts/ClientRef.cs new file mode 100644 index 0000000..760a042 --- /dev/null +++ b/Scripts/ClientRef.cs @@ -0,0 +1,258 @@ +using System; +using System.Net; +using System.Net.Sockets; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ClientRef +{ + public static int dataBufferSize = 4096; + + //define scoped variables + public int CID; + public Player player; + public Enemy enemy; + public TCP tcp; + public UDP udp; + + //define client constructor + public ClientRef(int _CID) + { + CID = _CID; + tcp = new TCP(CID); + udp = new UDP(CID); + } + + //create a TCP "interface" for ease of use + public class TCP + { + //store an instance of the client to send back for reference + public TcpClient socket; + private readonly int cid; + private NetworkStream stream; + private Packet receiveData; + private byte[] receiveBuffer; + public TCP(int _cid) + { + cid = _cid; + } + + //connecting takes an instance of the client + public void Connect(TcpClient _socket) + { + //set the client instance to whichever client we pass in + socket = _socket; + //make sure the socket is sending/receiving at proper rates + socket.ReceiveBufferSize = dataBufferSize; + socket.SendBufferSize = dataBufferSize; + + //read the whole stream of data + stream = socket.GetStream(); + + //interpret the packet + receiveData = new Packet(); + + //create a buffer for the data + receiveBuffer = new byte[dataBufferSize]; + + //finally, read the data + stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); + + //TODO: send a response packet + ServerSend.WelcomePacket(cid, "Authorizing login..."); + //ServerSend.LoginRequest(cid, "Login Server connected and ready!"); + } + + //Send some data using packets + //REFERENCES: ServerSend.cs -> Packet.cs + public void SendData(Packet _packet) + { + try + { + //make sure there is a connection before sending anything + if (socket != null) + { + stream.BeginWrite(_packet.ToArray(), 0, _packet.Length(), null, null); + } + } + catch (Exception _ex) + { + Debug.Log($"ERROR SENDING DATA to player: {cid} via TCP: {_ex}"); + } + } + + private void ReceiveCallback(IAsyncResult _result) + { + try + { + //return an int representing the number of bytes read from stream + int _byteLength = stream.EndRead(_result); + //make sure some data actually made a transaction + if (_byteLength <= 0) + { + GameServer.clients[cid].Disconnect(); + //TODO: handle empty connections + return; + } + + //if there is data though, + //replicate our data into a new array with a length of byteLength + byte[] _data = new byte[_byteLength]; + //then copy the data into our new array + Array.Copy(receiveBuffer, _data, _byteLength); + + //TODO: handle that data + receiveData.Reset(HandleData(_data)); + //FORNOW: just keep reading data from the stream + stream.BeginRead(receiveBuffer, 0, dataBufferSize, ReceiveCallback, null); + } + catch (Exception _ex) + { + Debug.Log("ERROR: " + _ex); + //TODO: properly disconnect the client on connection error + } + } + + private bool HandleData(byte[] _data) + { + int _packetLength = 0; + //set receivedData to the bytes from our tcp byteStream + receiveData.SetBytes(_data); + //check if there are more than 4 unread bytes. if yes, + //there is a new packet waiting because the first value + //of a packet is also the length of the packet represented + //by an int + if (receiveData.UnreadLength() >= 4) + { + _packetLength = receiveData.ReadInt(); + if (_packetLength < 1) + //there isn't much left of the packet, + //so we return true in order to reset data + return true; + } + + while (_packetLength > 0 && _packetLength <= receiveData.UnreadLength()) + { + //entering this loop means that we've got more bytes to read from another + //packet. we'll copy the unread bytes to a new byte array to update the + //data. + byte[] _packetBytes = receiveData.ReadBytes(_packetLength); + //on a new thread, create a new packet and assign it the proper id + ThreadManager.ExecuteOnMainThread(() => { + using (Packet _packet = new Packet(_packetBytes)) + { + int _packetId = _packet.ReadInt(); + GameServer.packetHandlers[_packetId](cid, _packet); + } + }); + + _packetLength = 0; + if (receiveData.UnreadLength() >= 4) + { + _packetLength = receiveData.ReadInt(); + if (_packetLength < 1) + //there isn't much left of the packet, + //so we return true in order to reset data + return true; + } + } + + if (_packetLength <= 1) + return true; + + return false; + } + + public void Disconnect() + { + socket.Close(); + stream = null; + receiveData = null; + receiveBuffer = null; + socket = null; + } + } + + public class UDP + { + public IPEndPoint endPoint; + + private int cid; + + public UDP(int _cid) + { + cid = _cid; + } + + public void Connect(IPEndPoint _endPoint) + { + endPoint = _endPoint; + //ServerSend.UserSession(cid); + } + + public void SendData(Packet _packet) + { + GameServer.SendUDPData(endPoint, _packet); + } + + public void HandleData(Packet _packetData) + { + int _packetLength = _packetData.ReadInt(); + byte[] _packetBytes = _packetData.ReadBytes(_packetLength); + + ThreadManager.ExecuteOnMainThread(() => { + using (Packet _packet = new Packet(_packetBytes)) + { + int _packetId = _packet.ReadInt(); + GameServer.packetHandlers[_packetId](cid, _packet); + } + }); + } + + public void Disconnect() + { + endPoint = null; + } + } + + public void SpawnInGame(string _playerName) + { + player = NetworkManager.instance.InstantiatePlayer(); + player.Initialize(CID, _playerName); + foreach (ClientRef _client in GameServer.clients.Values) + { + if (_client.player != null) + { + if (_client.CID != CID) + { + ServerSend.SpawnPlayer(CID, _client.player); + } + } + } + + foreach (ClientRef _client in GameServer.clients.Values) + { + if (_client.player != null) + { + ServerSend.SpawnPlayer(_client.CID, player); + } + } + } + + private void Disconnect() + { + Debug.Log($"{tcp.socket.Client.RemoteEndPoint} has disconnected from the server."); + + ThreadManager.ExecuteOnMainThread(() => { + UnityEngine.Object.Destroy(player.gameObject); + player = null; + }); + + + tcp.Disconnect(); + udp.Disconnect(); + + ServerSend.PlayerDisconnected(CID); + } +} diff --git a/Scripts/ClientRef.cs.meta b/Scripts/ClientRef.cs.meta new file mode 100644 index 0000000..4340491 --- /dev/null +++ b/Scripts/ClientRef.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ec903b025563c9747a041b96cffc66af +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Constants.cs b/Scripts/Constants.cs new file mode 100644 index 0000000..1919f6a --- /dev/null +++ b/Scripts/Constants.cs @@ -0,0 +1,10 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Constants +{ + public const int TICKS_PER_SEC = 30; + public const int MS_PER_TICK = 1000 / TICKS_PER_SEC; + public const int targetFPS = 30; +} diff --git a/Scripts/Constants.cs.meta b/Scripts/Constants.cs.meta new file mode 100644 index 0000000..072a89d --- /dev/null +++ b/Scripts/Constants.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 824eed6eae3be224f882a049810f6741 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Enemy.cs b/Scripts/Enemy.cs new file mode 100644 index 0000000..225c115 --- /dev/null +++ b/Scripts/Enemy.cs @@ -0,0 +1,49 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public class Enemy : NPC +{ + public Enemy(int _id, string _name) + { + id = _id; + entityName = _name; + } + + public override bool Interact(int _fromCID, Vector3 _comparePosition) + { + if (GameServer.clients[_fromCID].player != null) + { + + //Debug.Log($"Client {_fromCID} is trying to interact with an enemy from position {_comparePosition}"); + if (base.Interact(_fromCID, _comparePosition)) + { + string _msg = $"You are now interacting with: {GetComponent().entityName}"; + + GetComponent().TakeDamage(_fromCID, 20); + ServerSend.InteractionConfirmed(_fromCID, GetComponent().id, _msg); + return true; + } + else + { + return false; + } + } + else + { + return false; + } + + } + public void SpawnInGame() + { + if(this != null) + { + ServerSend.SpawnEnemy(gameObject); + } + } +} + diff --git a/Scripts/Enemy.cs.meta b/Scripts/Enemy.cs.meta new file mode 100644 index 0000000..c199dd3 --- /dev/null +++ b/Scripts/Enemy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a94a0e09355e0db45b6a922aaedf326a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/EnemyManager.cs b/Scripts/EnemyManager.cs new file mode 100644 index 0000000..a2301ad --- /dev/null +++ b/Scripts/EnemyManager.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +public class EnemyManager : MonoBehaviour +{ + public static EnemyManager instance; + public static Dictionary enemies = new Dictionary(); + + public GameObject enemyPrefab; + public float enemyRespawnCooldown = 20.0f; + private float respawnTimer; + //public static int fakeEnemies = 10; + + void Awake() + { + if (instance == null) + instance = this; + else if (instance != this) + Destroy(this); + } + + void FixedUpdate() + { + if (respawnTimer <= 0) + { + //RespawnEnemies(); + respawnTimer = enemyRespawnCooldown; + } + if(respawnTimer > 0) + respawnTimer -= Time.deltaTime; + + } + public void InitEnemyData() + { + ///////////////////////////////////////////////////////// + //init the enemies in the scene + + //Define an empty enemy prefab + GameObject enemy = NetworkManager.instance.InstantiateEnemy(0.16f, -5.3f, 25.0f); + + //Define that enemy's traits + enemy.GetComponent().id = 0; + enemy.GetComponent().entityName = "DaddiChz"; + enemy.GetComponent().interactRadius = 5f; + + //finally add the enemy to the list of enemies to be spawned on the server + enemies.Add(0, enemy); + + //////////////////////////////////////////////////////// + + // A couple more enemies just for testing + // TODO: create a method for each enemy that returns an enemy + // gObject which can be added to the list + + GameObject difEnemy = NetworkManager.instance.InstantiateEnemy(0.16f, -5.3f, 44.7f); + difEnemy.GetComponent().id = 1; + difEnemy.GetComponent().entityName = "SauceMama"; + difEnemy.GetComponent().interactRadius = 5f; + + + enemies.Add(1, difEnemy); + + for (int i = 0; i < enemies.Count; i++) + { + enemies[i].GetComponent().SpawnInGame(); + } + + + } + + public void LoadEnemiesOnClient(int _fromClient) + { + for (int i = 0; i < enemies.Count; i++) + { + if(enemies[i] != null) + ServerSend.SendEnemyData(_fromClient, enemies[i]); + } + + } +} + diff --git a/Scripts/EnemyManager.cs.meta b/Scripts/EnemyManager.cs.meta new file mode 100644 index 0000000..94ea38f --- /dev/null +++ b/Scripts/EnemyManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56d97fa4a02b5754bb4106ad395d7f32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/EnemyStats.cs b/Scripts/EnemyStats.cs new file mode 100644 index 0000000..f78a2ec --- /dev/null +++ b/Scripts/EnemyStats.cs @@ -0,0 +1,40 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +[RequireComponent(typeof(Enemy))] +public class EnemyStats : EntityStats +{ + public List lootDrops = new List(); + public override void HandleDeath() + { + base.HandleDeath(); + //handle an enemy death + //and loot drops + EnemyManager.enemies.Remove(GetComponent().id); + ServerSend.KillEnemy(gameObject); + + Destroy(gameObject); + + for(int i = 0; i < lootDrops.Count; i++) + { + int _setID = ItemManager.instance.localItems.Count; + + lootDrops[i].transform.position = transform.position; + SpawnLoot(lootDrops[i], _setID); + ServerSend.SendClientsLootData(lootDrops[i].GetComponent().item.id, _setID, transform.position); + } + + } + + public void SpawnLoot(GameObject _item, int _setID) + { + GameObject copy = Instantiate(_item, transform.position, Quaternion.identity); + copy.GetComponent().id = _setID; + ItemManager.instance.localItems.Add(copy); + + } +} \ No newline at end of file diff --git a/Scripts/EnemyStats.cs.meta b/Scripts/EnemyStats.cs.meta new file mode 100644 index 0000000..e3484ad --- /dev/null +++ b/Scripts/EnemyStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 970bb08bb36559142b6b97aa2c073422 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/EntityStats.cs b/Scripts/EntityStats.cs new file mode 100644 index 0000000..5c6fa8e --- /dev/null +++ b/Scripts/EntityStats.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public class EntityStats : MonoBehaviour +{ + public int maxHealth = 100; + public int currentHealth; + public Stat damage; + public Stat armor; + + void Awake() + { + currentHealth = maxHealth; + } + + void FixedUpdate() + { + + } + public void TakeDamage(int _eID, int _damage) + { + _damage -= armor.GetValue(); + _damage = Mathf.Clamp(_damage, 0, int.MaxValue); + + currentHealth -= _damage; + Debug.Log($"{transform.name} took {_damage} damage and now has {currentHealth} health. {armor.GetValue()} armor affected this hit."); + ServerSend.UpdateEnemyStats(gameObject); + if (currentHealth <= 0) + { + HandleDeath(); + return; + } + } + + public virtual void HandleDeath() + { + //TODO: handle death + currentHealth = maxHealth; + } +} diff --git a/Scripts/EntityStats.cs.meta b/Scripts/EntityStats.cs.meta new file mode 100644 index 0000000..4356222 --- /dev/null +++ b/Scripts/EntityStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 288a3b15388d76e4fb244c8e58208d1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/EquipmentManager.cs b/Scripts/EquipmentManager.cs new file mode 100644 index 0000000..1122b84 --- /dev/null +++ b/Scripts/EquipmentManager.cs @@ -0,0 +1,59 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class EquipmentManager : MonoBehaviour +{ + public static EquipmentManager instance; + public delegate void OnEquipmentChanged(RegularEquipment newItem, RegularEquipment oldItem); + public OnEquipmentChanged onEquipmentChanged; + Inventory inventory; + private void Awake() + { + if (instance == null) + instance = this; + else if (instance != this) + Destroy(this); + } + + RegularEquipment[] equipped; + void Start() + { + inventory = GetComponent(); + //returns a string array with all enum types + int slots = System.Enum.GetNames(typeof(EquipmentSlot)).Length; + equipped = new RegularEquipment[slots]; + } + + public void Equip(RegularEquipment equipItem) + { + RegularEquipment oldItem = null; + int slotIndex = (int)equipItem.equipSlot; + + if (equipped[slotIndex] != null) + { + oldItem = equipped[slotIndex]; + GetComponent().Add(oldItem); + } + + if (onEquipmentChanged != null) + onEquipmentChanged.Invoke(equipItem, oldItem); + + equipped[slotIndex] = equipItem; + } + + public void Unequip(int slotIndex) + { + if (equipped[slotIndex] != null) + { + RegularEquipment oldItem = equipped[slotIndex]; + inventory.Add(oldItem); + equipped[slotIndex] = null; + if (onEquipmentChanged != null) + onEquipmentChanged.Invoke(null, oldItem); + } + } + +} + + diff --git a/Scripts/EquipmentManager.cs.meta b/Scripts/EquipmentManager.cs.meta new file mode 100644 index 0000000..c0a04e1 --- /dev/null +++ b/Scripts/EquipmentManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b47a2eb38ce51c346b2401ca8344a45f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Focus.cs b/Scripts/Focus.cs new file mode 100644 index 0000000..6838fdb --- /dev/null +++ b/Scripts/Focus.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +public class Focus : MonoBehaviour +{ + [SerializeField] + public Transform target; + + public void SetFocus(Transform _target) + { + _target.parent.GetComponent().isFocused = true; + target = _target; + //Debug.Log($"Now focusing {target}"); + } + + public void ClearFocus() + { + if (target != null) + { + target.parent.GetComponent().isFocused = false; + target = null; + } + + //Debug.Log($"Now focusing {target}"); + } +} diff --git a/Scripts/Focus.cs.meta b/Scripts/Focus.cs.meta new file mode 100644 index 0000000..c1fd647 --- /dev/null +++ b/Scripts/Focus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5948b070793bfce4e8b489fccae9f746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/GameServer.cs b/Scripts/GameServer.cs new file mode 100644 index 0000000..5c3c3b7 --- /dev/null +++ b/Scripts/GameServer.cs @@ -0,0 +1,159 @@ +using System; +using System.Net; +using System.Net.Sockets; +using System.Collections.Generic; +using UnityEngine; + +public class GameServer +{ + static string _consoleTitle = "RPGNet Logic/Game Server"; + public static int Port { get; private set; } + public static int MaxPlayers { get; private set; } + //the tcplistener is functionally our server, which looks for incoming requests + //and messages + private static TcpListener tcpListener; + private static UdpClient udpListener; + public static Dictionary clients = new Dictionary(); + + public delegate void PacketHandler(int _fromClient, Packet _packet); + public static Dictionary packetHandlers; + + public static void StartServer(int _maxPlayers, int _port) + { + //set the server variables + Port = _port; + MaxPlayers = _maxPlayers; + Console.Title = _consoleTitle; + + //Handle all initial server data + InitializeServerData(); + + //create our tcpListener + tcpListener = new TcpListener(IPAddress.Any, Port); + //start and init the listener + tcpListener.Start(); + //once listening, create a callback to handle messages + //the null param can be passed an object + //to send data when callback is complete + tcpListener.BeginAcceptTcpClient(new AsyncCallback(TcpConnectCallback), null); + + udpListener = new UdpClient(Port); + udpListener.BeginReceive(UDPReceiveCallback, null); + Debug.Log($"Game Server successfully started!\n Running on port: {Port}"); + } + + private static void TcpConnectCallback(IAsyncResult _result) + { + //after received a request, create a copy of the client and stop listening + //for that machine/client + TcpClient _client = tcpListener.EndAcceptTcpClient(_result); + //we want others to connect freely still, so restart the listener after + //closing the connection + tcpListener.BeginAcceptTcpClient(new AsyncCallback(TcpConnectCallback), null); + + Debug.Log($" Incoming Game Server request from: {_client.Client.RemoteEndPoint}."); + + //LEFT OFF HERE + for (int i = 1; i <= MaxPlayers; i++) + { + if (clients[i].tcp.socket == null) + { + clients[i].tcp.Connect(_client); + return; + } + + } + + //HandleServerFull(); + //if we can't add anymore connections, + //handle that + //TODO: actually handle SERVER_MAX_SIZE + Debug.Log($"{_client.Client.RemoteEndPoint} failed to connect! Server is full!"); + } + + private static void UDPReceiveCallback(IAsyncResult _result) + { + try + { + IPEndPoint _clientEndPoint = new IPEndPoint(IPAddress.Any, 0); + byte[] _data = udpListener.EndReceive(_result, ref _clientEndPoint); + udpListener.BeginReceive(UDPReceiveCallback, null); + + if (_data.Length < 4) + { + return; + } + + using (Packet _packet = new Packet(_data)) + { + int _clientId = _packet.ReadInt(); + if (_clientId == 0) + return; + if (clients[_clientId].udp.endPoint == null) + { + clients[_clientId].udp.Connect(_clientEndPoint); + return; + } + + if (clients[_clientId].udp.endPoint.ToString() == _clientEndPoint.ToString()) + { + //this provides client server authority to make sure the sender isn't impersonating anyone + clients[_clientId].udp.HandleData(_packet); + } + } + } + catch (Exception _ex) + { + Debug.Log($"Error receiving UDP data: {_ex}"); + } + } + + public static void SendUDPData(IPEndPoint _clientEndPoint, Packet _packet) + { + try + { + if (_clientEndPoint != null) + { + udpListener.BeginSend(_packet.ToArray(), _packet.Length(), _clientEndPoint, null, null); + } + } + catch (Exception _ex) + { + Debug.Log($"Error sending UDP data to {_clientEndPoint}: {_ex}"); + } + } + + private static void InitializeServerData() + { + //PLAYER DATA + for (int i = 1; i < MaxPlayers; i++) + { + clients.Add(i, new ClientRef(i)); + } + + //ENEMY DATA + EnemyManager.instance.InitEnemyData(); + + packetHandlers = new Dictionary() + { + { (int)ClientPackets.welcomeReceived, ServerHandle.WelcomeReceived }, + { (int)ClientPackets.userSessionConfirmed, ServerHandle.UserSessionReceived }, + { (int)ClientPackets.playerMovement, ServerHandle.PlayerMovement }, + { (int)ClientPackets.requestFocus, ServerHandle.FocusGranted }, + { (int)ClientPackets.clearFocus, ServerHandle.ClearFocus }, + { (int)ClientPackets.requestAttack, ServerHandle.RequestAttack }, + { (int)ClientPackets.killEnemy, ServerHandle.KillEnemy}, + { (int)ClientPackets.requestInteract, ServerHandle.RequestInteract}, + { (int)ClientPackets.requestLoot, ServerHandle.OnLootRequested}, + { (int)ClientPackets.requestUseItem, ServerHandle.OnUseItemRequested}, + { (int)ClientPackets.requestEquipItem, ServerHandle.OnEquipItemRequested} + }; + Debug.Log("Initialized packets."); + } + + public static void Stop() + { + tcpListener.Stop(); + udpListener.Close(); + } +} diff --git a/Scripts/GameServer.cs.meta b/Scripts/GameServer.cs.meta new file mode 100644 index 0000000..4e2f172 --- /dev/null +++ b/Scripts/GameServer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d38642e420a5e24883327c3a14d7517 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Interactable.cs b/Scripts/Interactable.cs new file mode 100644 index 0000000..87988b8 --- /dev/null +++ b/Scripts/Interactable.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public class Interactable : MonoBehaviour +{ + public int id; + public bool isFocused; + public bool hasInteracted = false; + public float interactRadius = 3f; + + void FixedUpdate() + { + + } + + public virtual bool Interact(int _fromCID, Vector3 _comparePosition) + { + + Debug.Log($"{GameServer.clients[_fromCID].player.username} is focusing {transform.name}"); + float distance = Vector3.Distance(_comparePosition, transform.position); + if (distance <= interactRadius) + { + Debug.Log($"{GameServer.clients[_fromCID].player.username} is in range of {transform.position}"); + return true; + //Interact(GameServer.clients[i].player.id); + } + else + { + ServerSend.InteractableTooFar(GameServer.clients[_fromCID].CID); + Debug.Log($"Player {GameServer.clients[_fromCID].player.username} is trying to interact with: {transform.name} but is too far away!"); + return false; + } + + } + + void OnDrawGizmosSelected() + { + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, interactRadius); + } +} + diff --git a/Scripts/Interactable.cs.meta b/Scripts/Interactable.cs.meta new file mode 100644 index 0000000..0a566af --- /dev/null +++ b/Scripts/Interactable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0023047e3c191a847bf0eb3e6129e7a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Inventory.cs b/Scripts/Inventory.cs new file mode 100644 index 0000000..1889edd --- /dev/null +++ b/Scripts/Inventory.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public class Inventory : MonoBehaviour +{ + public int bagSpace = 20; + public List items = new List(); + + public delegate void OnItemChanged(); + public OnItemChanged onItemChangedCallback; + + public bool Add(Item _item) + { + if(items.Count >= bagSpace) + { + Debug.Log("Not enough inventory room."); + return false; + } + items.Add(_item); + if (onItemChangedCallback != null) + onItemChangedCallback.Invoke(); + Debug.Log($"ID: {_item} was added to {GetComponent().username}s inventory."); + return true; + } + + public void Remove(Item item) + { + items.Remove(item); + if (onItemChangedCallback != null) + onItemChangedCallback.Invoke(); + } +} diff --git a/Scripts/Inventory.cs.meta b/Scripts/Inventory.cs.meta new file mode 100644 index 0000000..49c76f8 --- /dev/null +++ b/Scripts/Inventory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ac678b7493bb284d85696c860498d1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Item.cs b/Scripts/Item.cs new file mode 100644 index 0000000..035f7bd --- /dev/null +++ b/Scripts/Item.cs @@ -0,0 +1,21 @@ +using UnityEngine; + +[CreateAssetMenu(fileName = "New Item", menuName = "Inventory/Item")] +public class Item : ScriptableObject +{ + public int id; + new public string name = "New Item"; + public Sprite icon = null; + public bool isDefaultItem = false; + + public virtual void Use(int _fromCID) + { + Debug.Log($"{GameServer.clients[_fromCID].player.username} used item: {name}"); + Dispose(_fromCID); + } + + public void Dispose(int _fromCID) + { + GameServer.clients[_fromCID].player.GetComponent().Remove(this); + } +} diff --git a/Scripts/Item.cs.meta b/Scripts/Item.cs.meta new file mode 100644 index 0000000..ed410d6 --- /dev/null +++ b/Scripts/Item.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd372f0a1384b6e419dba9a0520e92ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ItemDrop.cs b/Scripts/ItemDrop.cs new file mode 100644 index 0000000..6a9c240 --- /dev/null +++ b/Scripts/ItemDrop.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEngine; + +public class ItemDrop : Interactable +{ + public Item item; + + public override bool Interact(int _fromCID, Vector3 _comparePosition) + { + if (base.Interact(_fromCID, _comparePosition)) + { + Debug.Log($"Tryin to loot item: {item.name}"); + + bool pickedUp = GameServer.clients[_fromCID].player.inventory.Add(item); + + if(pickedUp) + { + Destroy(ItemManager.instance.localItems[id]); + ServerSend.ItemLooted(_fromCID, id, item.id); + return true; + } + + } + + return false; + } +} diff --git a/Scripts/ItemDrop.cs.meta b/Scripts/ItemDrop.cs.meta new file mode 100644 index 0000000..5dae3a4 --- /dev/null +++ b/Scripts/ItemDrop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 320ef2fe090406d4a9fe8199c477964d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ItemManager.cs b/Scripts/ItemManager.cs new file mode 100644 index 0000000..7d410fb --- /dev/null +++ b/Scripts/ItemManager.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +public class ItemManager : MonoBehaviour +{ + public static ItemManager instance; + private void Awake() + { + if (instance == null) + instance = this; + else if (instance != this) + Destroy(this); + } + + public List localItems = new List(); + +} diff --git a/Scripts/ItemManager.cs.meta b/Scripts/ItemManager.cs.meta new file mode 100644 index 0000000..3e29277 --- /dev/null +++ b/Scripts/ItemManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 56429fbcc9321f9488402e664ac007d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/LocalItemDB.cs b/Scripts/LocalItemDB.cs new file mode 100644 index 0000000..a5147d7 --- /dev/null +++ b/Scripts/LocalItemDB.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +class LocalItemDB : MonoBehaviour +{ + public static LocalItemDB instance; + private void Awake() + { + if (instance == null) + instance = this; + else if (instance != this) + Destroy(this); + } + + public List consumables = new List(); + public List equipment = new List(); +} + + diff --git a/Scripts/LocalItemDB.cs.meta b/Scripts/LocalItemDB.cs.meta new file mode 100644 index 0000000..753cdf0 --- /dev/null +++ b/Scripts/LocalItemDB.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e5bf6f590ba4664c9f5967991cdff13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/NPC.cs b/Scripts/NPC.cs new file mode 100644 index 0000000..b145ee6 --- /dev/null +++ b/Scripts/NPC.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +public class NPC : Interactable +{ + public string entityName; + public float gravity = -9.18f; + public float moveSpeed = 5f; + + private void Start() + { + gravity *= Time.fixedDeltaTime * Time.fixedDeltaTime; + moveSpeed *= Time.fixedDeltaTime; + } + + public void Initialize(int _id) + { + id = _id; + } +} + diff --git a/Scripts/NPC.cs.meta b/Scripts/NPC.cs.meta new file mode 100644 index 0000000..1b2f9e9 --- /dev/null +++ b/Scripts/NPC.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 321b549eff4e9d645aea8b965c1d1aca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/NetworkManager.cs b/Scripts/NetworkManager.cs new file mode 100644 index 0000000..4921d34 --- /dev/null +++ b/Scripts/NetworkManager.cs @@ -0,0 +1,99 @@ +using System; +using System.Net; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class NetworkManager : MonoBehaviour +{ + public static NetworkManager instance; + public GameObject playerPrefab; + public GameObject enemyPrefab; + public static string setPName; + void Awake() + { + if(instance == null) + { + instance = this; + } + else if(instance != this) + { + Debug.Log("A NetworkManager already exists. Destroying this one!"); + Destroy(this); + } + } + + private void Start() + { + QualitySettings.vSyncCount = 0; + Application.targetFrameRate = Constants.targetFPS; + GameServer.StartServer(10, 3600); + } + + private void OnApplicationQuit() + { + GameServer.Stop(); + } + + public Player InstantiatePlayer() + { + return Instantiate(playerPrefab, new Vector3(0f, 0.2f, 0f), Quaternion.identity).GetComponent(); + } + + public GameObject InstantiateEnemy(float x, float y, float z) + { + return Instantiate(enemyPrefab, new Vector3(x, y, z), Quaternion.identity); + } + + public static bool AttemptNewSession(string _username, string _password) + { + string accountJSON = ConnectAndAuth(_username, _password); + string _sessionPlayerName = JSON.HandleUserJSON(accountJSON); + if (_sessionPlayerName != null) + { + setPName = _sessionPlayerName; + return true; + } + else + return false; + + } + + private static string ConnectAndAuth(string _username, string _password) + { + string url = $"http://127.0.0.1:3000/login/{_username}/{_password}"; + return HTTP.GET(url); + } + + class JSON + { + class AccountData + { + public string email; + public string password; + public string username; + } + public static string HandleUserJSON(string _json) + { + AccountData jObj = JsonUtility.FromJson(_json); + return jObj.username; + } + } + + class HTTP + { + //HTTP&WEB + public static string GET(string _uri) + { + HttpWebRequest request = (HttpWebRequest)WebRequest.Create(_uri); + request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate; + using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) + using (Stream stream = response.GetResponseStream()) + using (StreamReader reader = new StreamReader(stream)) + { + return reader.ReadToEnd(); + } + } + } +} diff --git a/Scripts/NetworkManager.cs.meta b/Scripts/NetworkManager.cs.meta new file mode 100644 index 0000000..783a845 --- /dev/null +++ b/Scripts/NetworkManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a4274b17a8039147ae17c52aba55873 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Packet.cs b/Scripts/Packet.cs new file mode 100644 index 0000000..c2ef7f7 --- /dev/null +++ b/Scripts/Packet.cs @@ -0,0 +1,409 @@ +using System; +using System.Text; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public enum ServerPackets +{ + welcome = 1, + userSession = 3, + spawnPlayer, + playerPosition, + playerRotation, + playerDisconnected, + interactableTooFar, + spawnEnemy, + updateEnemyStats, + loadEnemiesOnClient, + focusGranted, + clearFocus, + requestAttack, + killEnemy, + interactionConfirmed, + lootGranted, + sendClientsLootData, + itemLooted, + itemEquipped +} + +//Sent from client to server. +public enum ClientPackets +{ + welcomeReceived = 1, + playerMovement, + userSessionConfirmed = 3, + enemySpawned, + loadEnemyData, + clearFocus, + requestAttack, + requestInteract, + killEnemy, + updateEnemyStats, + interactableTooFar, + requestFocus, + interactionConfirmed, + requestLoot, + requestUseItem, + requestEquipItem +} +public class Packet : IDisposable + { + private List buffer; + private byte[] readableBuffer; + private int readPos; + + /// Creates a new empty packet (without an ID). + public Packet() + { + buffer = new List(); // Intitialize buffer + readPos = 0; // Set readPos to 0 + } + + /// Creates a new packet with a given ID. Used for sending. + /// The packet ID. + public Packet(int _id) + { + buffer = new List(); // Intitialize buffer + readPos = 0; // Set readPos to 0 + + Write(_id); // Write packet id to the buffer + } + + /// Creates a packet from which data can be read. Used for receiving. + /// The bytes to add to the packet. + public Packet(byte[] _data) + { + buffer = new List(); // Intitialize buffer + readPos = 0; // Set readPos to 0 + + SetBytes(_data); + } + + #region Functions + /// Sets the packet's content and prepares it to be read. + /// The bytes to add to the packet. + public void SetBytes(byte[] _data) + { + Write(_data); + readableBuffer = buffer.ToArray(); + } + + /// Inserts the length of the packet's content at the start of the buffer. + public void WriteLength() + { + buffer.InsertRange(0, BitConverter.GetBytes(buffer.Count)); // Insert the byte length of the packet at the very beginning + } + + /// Inserts the given int at the start of the buffer. + /// The int to insert. + public void InsertInt(int _value) + { + buffer.InsertRange(0, BitConverter.GetBytes(_value)); // Insert the int at the start of the buffer + } + + /// Gets the packet's content in array form. + public byte[] ToArray() + { + readableBuffer = buffer.ToArray(); + return readableBuffer; + } + + /// Gets the length of the packet's content. + public int Length() + { + return buffer.Count; // Return the length of buffer + } + + /// Gets the length of the unread data contained in the packet. + public int UnreadLength() + { + return Length() - readPos; // Return the remaining length (unread) + } + + /// Resets the packet instance to allow it to be reused. + /// Whether or not to reset the packet. + public void Reset(bool _shouldReset = true) + { + if (_shouldReset) + { + buffer.Clear(); // Clear buffer + readableBuffer = null; + readPos = 0; // Reset readPos + } + else + { + readPos -= 4; // "Unread" the last read int + } + } + #endregion + + #region Write Data + /// Adds a byte to the packet. + /// The byte to add. + public void Write(byte _value) + { + buffer.Add(_value); + } + /// Adds an array of bytes to the packet. + /// The byte array to add. + public void Write(byte[] _value) + { + buffer.AddRange(_value); + } + /// Adds a short to the packet. + /// The short to add. + public void Write(short _value) + { + buffer.AddRange(BitConverter.GetBytes(_value)); + } + /// Adds an int to the packet. + /// The int to add. + public void Write(int _value) + { + buffer.AddRange(BitConverter.GetBytes(_value)); + } + /// Adds a long to the packet. + /// The long to add. + public void Write(long _value) + { + buffer.AddRange(BitConverter.GetBytes(_value)); + } + /// Adds a float to the packet. + /// The float to add. + public void Write(float _value) + { + buffer.AddRange(BitConverter.GetBytes(_value)); + } + /// Adds a bool to the packet. + /// The bool to add. + public void Write(bool _value) + { + buffer.AddRange(BitConverter.GetBytes(_value)); + } + /// Adds a string to the packet. + /// The string to add. + public void Write(string _value) + { + Write(_value.Length); // Add the length of the string to the packet + buffer.AddRange(Encoding.ASCII.GetBytes(_value)); // Add the string itself + } + public void Write(Vector3 _value) + { + Write(_value.x); + Write(_value.y); + Write(_value.z); + } + public void Write(Quaternion _value) + { + Write(_value.x); + Write(_value.y); + Write(_value.z); + Write(_value.w); + } + #endregion + + #region Read Data + /// Reads a byte from the packet. + /// Whether or not to move the buffer's read position. + public byte ReadByte(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + byte _value = readableBuffer[readPos]; // Get the byte at readPos' position + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += 1; // Increase readPos by 1 + } + return _value; // Return the byte + } + else + { + throw new Exception("Could not read value of type 'byte'!"); + } + } + + /// Reads an array of bytes from the packet. + /// The length of the byte array. + /// Whether or not to move the buffer's read position. + public byte[] ReadBytes(int _length, bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + byte[] _value = buffer.GetRange(readPos, _length).ToArray(); // Get the bytes at readPos' position with a range of _length + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += _length; // Increase readPos by _length + } + return _value; // Return the bytes + } + else + { + throw new Exception("Could not read value of type 'byte[]'!"); + } + } + + /// Reads a short from the packet. + /// Whether or not to move the buffer's read position. + public short ReadShort(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + short _value = BitConverter.ToInt16(readableBuffer, readPos); // Convert the bytes to a short + if (_moveReadPos) + { + // If _moveReadPos is true and there are unread bytes + readPos += 2; // Increase readPos by 2 + } + return _value; // Return the short + } + else + { + throw new Exception("Could not read value of type 'short'!"); + } + } + + /// Reads an int from the packet. + /// Whether or not to move the buffer's read position. + public int ReadInt(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + int _value = BitConverter.ToInt32(readableBuffer, readPos); // Convert the bytes to an int + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += 4; // Increase readPos by 4 + } + return _value; // Return the int + } + else + { + throw new Exception("Could not read value of type 'int'!"); + } + } + + /// Reads a long from the packet. + /// Whether or not to move the buffer's read position. + public long ReadLong(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + long _value = BitConverter.ToInt64(readableBuffer, readPos); // Convert the bytes to a long + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += 8; // Increase readPos by 8 + } + return _value; // Return the long + } + else + { + throw new Exception("Could not read value of type 'long'!"); + } + } + + /// Reads a float from the packet. + /// Whether or not to move the buffer's read position. + public float ReadFloat(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + float _value = BitConverter.ToSingle(readableBuffer, readPos); // Convert the bytes to a float + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += 4; // Increase readPos by 4 + } + return _value; // Return the float + } + else + { + throw new Exception("Could not read value of type 'float'!"); + } + } + + /// Reads a bool from the packet. + /// Whether or not to move the buffer's read position. + public bool ReadBool(bool _moveReadPos = true) + { + if (buffer.Count > readPos) + { + // If there are unread bytes + bool _value = BitConverter.ToBoolean(readableBuffer, readPos); // Convert the bytes to a bool + if (_moveReadPos) + { + // If _moveReadPos is true + readPos += 1; // Increase readPos by 1 + } + return _value; // Return the bool + } + else + { + throw new Exception("Could not read value of type 'bool'!"); + } + } + + /// Reads a string from the packet. + /// Whether or not to move the buffer's read position. + public string ReadString(bool _moveReadPos = true) + { + try + { + int _length = ReadInt(); // Get the length of the string + string _value = Encoding.ASCII.GetString(readableBuffer, readPos, _length); // Convert the bytes to a string + if (_moveReadPos && _value.Length > 0) + { + // If _moveReadPos is true string is not empty + readPos += _length; // Increase readPos by the length of the string + } + return _value; // Return the string + } + catch + { + throw new Exception("Could not read value of type 'string'!"); + } + } + + public Vector3 ReadVector3(bool _moveReadPos = true) + { + return new Vector3(ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos)); + } + + public Quaternion ReadQuaternion(bool _moveReadPos = true) + { + return new Quaternion(ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos), ReadFloat(_moveReadPos)); + } + #endregion + + private bool disposed = false; + + protected virtual void Dispose(bool _disposing) + { + if (!disposed) + { + if (_disposing) + { + buffer = null; + readableBuffer = null; + readPos = 0; + } + + disposed = true; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + } diff --git a/Scripts/Packet.cs.meta b/Scripts/Packet.cs.meta new file mode 100644 index 0000000..989d2e8 --- /dev/null +++ b/Scripts/Packet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee8e3eacb8aa2324ea86ce44be1fd86a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Player.cs b/Scripts/Player.cs new file mode 100644 index 0000000..7794a4f --- /dev/null +++ b/Scripts/Player.cs @@ -0,0 +1,89 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class Player : MonoBehaviour +{ + + public Focus focus; + public Inventory inventory; + + public int id; + public string username; + public CharacterController charControl; + public float gravity = -9.18f; + public float moveSpeed = 5f; + public float jumpSpeed = 5f; + + private bool[] inputs; + private float yVelocity = 0; + + private void Start() + { + if (inventory == null) + inventory = gameObject.AddComponent(); + gravity *= Time.fixedDeltaTime * Time.fixedDeltaTime; + moveSpeed *= Time.fixedDeltaTime; + jumpSpeed *= Time.fixedDeltaTime; + focus = GetComponent(); + } + + public void Initialize(int _id, string _username) + { + id = _id; + username = _username; + + //a bool array the length of all readable inputs + inputs = new bool[5]; + } + + public void FixedUpdate() + { + Vector2 _inputDirection = Vector2.zero; + if (inputs[0]) + { + _inputDirection.y += 1; + } + if (inputs[1]) + { + _inputDirection.x -= 1; + } + if (inputs[2]) + { + _inputDirection.y -= 1; + } + if (inputs[3]) + { + _inputDirection.x += 1; + } + + Move(_inputDirection); + } + + private void Move(Vector2 _inputDirection) + { + Vector3 _moveDirection = transform.right * _inputDirection.x + transform.forward * _inputDirection.y; + _moveDirection *= moveSpeed; + + if(charControl.isGrounded) + { + yVelocity = 0f; + if(inputs[4]) + { + yVelocity = jumpSpeed; + } + } + yVelocity += gravity; + _moveDirection.y = yVelocity; + charControl.Move(_moveDirection); + + ServerSend.PlayerPosition(this); + ServerSend.PlayerRotation(this); + } + + public void SetInput(bool[] _inputs, Quaternion _rotation) + { + inputs = _inputs; + transform.rotation = _rotation; + } +} diff --git a/Scripts/Player.cs.meta b/Scripts/Player.cs.meta new file mode 100644 index 0000000..7ded28f --- /dev/null +++ b/Scripts/Player.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 095e16624d184fc4b908203d1fc7630a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/PlayerStats.cs b/Scripts/PlayerStats.cs new file mode 100644 index 0000000..5d6d9f0 --- /dev/null +++ b/Scripts/PlayerStats.cs @@ -0,0 +1,28 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class PlayerStats : EntityStats +{ + // Start is called before the first frame update + void Start() + { + GetComponent().onEquipmentChanged += OnEquipmentChanged; + } + + void OnEquipmentChanged(RegularEquipment newItem, RegularEquipment oldItem) + { + if (newItem != null) + { + armor.AddModifier(newItem.armorModifier); + damage.AddModifier(newItem.damageModifier); + } + + if (oldItem != null) + { + armor.RemoveModifier(oldItem.armorModifier); + damage.RemoveModifier(oldItem.damageModifier); + } + + } +} diff --git a/Scripts/PlayerStats.cs.meta b/Scripts/PlayerStats.cs.meta new file mode 100644 index 0000000..77f3af9 --- /dev/null +++ b/Scripts/PlayerStats.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae64ed8f14b119045a814da78f9a7bbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/RegularEquipment.cs b/Scripts/RegularEquipment.cs new file mode 100644 index 0000000..0897db4 --- /dev/null +++ b/Scripts/RegularEquipment.cs @@ -0,0 +1,39 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(fileName = "New Regular Equipment", menuName = "Inventory/Equipment/New Regular Equipment")] +public class RegularEquipment : Item +{ + public EquipmentSlot equipSlot; + public int armorModifier; + public int damageModifier; + + public override void Use(int _fromCID) + { + base.Use(_fromCID); + if(GameServer.clients[_fromCID].player.GetComponent() != null) + { + GameServer.clients[_fromCID].player.GetComponent().Equip(this); + ServerSend.ItemEquipped(_fromCID, id); + Dispose(_fromCID); + } + + + } +} + +public enum EquipmentSlot +{ + Head, + Neck, + Shoulder, + Back, + Chest, + Waist, + Legs, + Feet, + Trinket, + MainHand, + OffHand +} diff --git a/Scripts/RegularEquipment.cs.meta b/Scripts/RegularEquipment.cs.meta new file mode 100644 index 0000000..527e6a4 --- /dev/null +++ b/Scripts/RegularEquipment.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f32da428f21bf94ab2c209423d37ef8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ServerHandle.cs b/Scripts/ServerHandle.cs new file mode 100644 index 0000000..9f6c77d --- /dev/null +++ b/Scripts/ServerHandle.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ServerHandle +{ + public static void WelcomeReceived(int _fromClient, Packet _packet) + { + //read everything from the packet + int _clientIdCheck = _packet.ReadInt(); + string _username = _packet.ReadString(); + string _password = _packet.ReadString(); + + + try + { + if (NetworkManager.AttemptNewSession(_username, _password)) + { + //PLAYER DATA + ServerSend.UserSession(_fromClient, NetworkManager.setPName); + GameServer.clients[_fromClient].SpawnInGame(NetworkManager.setPName); + + //ENEMIES + //load the enemies + EnemyManager.instance.LoadEnemiesOnClient(_fromClient); + + + + + Debug.Log($"{GameServer.clients[_fromClient].tcp.socket.Client.RemoteEndPoint} connected successfully with client: {_fromClient} as {NetworkManager.setPName}."); + } + else + { + Debug.Log($"{GameServer.clients[_fromClient].tcp.socket.Client.RemoteEndPoint} tried to login from client: {_fromClient} but failed to authorize."); + } + } + catch (Exception _ex) + { + Debug.Log(_ex); + } + + //check if the clientid matches + if (_fromClient != _clientIdCheck) + { + Debug.Log($"Player \"{_username}\" (ID: {_fromClient}) has assumed the wrong client ID (Expected: {_clientIdCheck})"); + } + + //The welcome transaction was finished and received, so send the player into the game + } + + public static void UserSessionReceived(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + string _msg = _packet.ReadString(); + + Debug.Log(_msg); + } + + public static void PlayerMovement(int _fromClient, Packet _packet) + { + bool[] _inputs = new bool[_packet.ReadInt()]; + for (int i = 0; i < _inputs.Length; i++) + { + _inputs[i] = _packet.ReadBool(); + } + Quaternion _rotation = _packet.ReadQuaternion(); + GameServer.clients[_fromClient].player.SetInput(_inputs, _rotation); + } + + public static void FocusGranted(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _eID = _packet.ReadInt(); + string _eName = _packet.ReadString(); + + //set focus + Debug.Log($"Client {_fromCID} is trying to focus entity: {_eID} with EntityName: {_eName}"); + + + } + + public static void ClearFocus(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + Debug.Log($"Client {_fromCID} cleared their focus."); + GameServer.clients[_fromCID].player.focus.target = null; + } + + public static void RequestAttack(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _eID = _packet.ReadInt(); + int _damage = _packet.ReadInt(); + Debug.Log($"Client {_fromCID} is trying to attack enemy: {EnemyManager.enemies[_eID].gameObject.name} for {_damage}."); + + EnemyManager.enemies[_eID].GetComponent().TakeDamage(_eID, _damage); + } + + public static void RequestInteract(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _eID = _packet.ReadInt(); + string _type = _packet.ReadString(); + Vector3 _comparePosition = GameServer.clients[_fromCID].player.transform.position; + + + + if (_type == "Enemy") + { + Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {EnemyManager.enemies[_eID].gameObject.name} from position {_comparePosition}."); + EnemyManager.enemies[_eID].GetComponent().Interact(_fromCID, _comparePosition); + } + else if(_type == "Item") + { + Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {ItemManager.instance.localItems[_eID]} from position {_comparePosition}."); + ItemManager.instance.localItems[_eID].GetComponent().Interact(_fromCID, _comparePosition); + } + } + + public static void OnLootRequested(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _itemID = _packet.ReadInt(); + Vector3 _comparePosition = GameServer.clients[_fromCID].player.transform.position; + + Debug.Log($"Client {_fromCID} is trying to loot item with ID: {_itemID}."); + //TODO: create a list of global items somewhere so i can + //add a global reference to the players instance of inventory + ItemManager.instance.localItems[_itemID].GetComponent().Interact(_fromCID, _comparePosition); + //GameServer.clients[_fromCID].player.inventory.Add(GlobalItemDB.instance.globalItems[_itemID]); + } + + public static void OnUseItemRequested(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _itemID = _packet.ReadInt(); + string _itemName = _packet.ReadString(); + + for(int i = 0; i < GameServer.clients[_fromCID].player.GetComponent().items.Count; i++) + { + if(GameServer.clients[_fromCID].player.GetComponent().items[i].id == _itemID) + { + Debug.Log($"{GameServer.clients[_fromCID].player.username} used item {_itemName}"); + GameServer.clients[_fromCID].player.GetComponent().items[i].Use(_fromCID); + //We don't want to spam use items if we have multiple, + //so just return out of the method after first use + return; + } + else + { + Debug.Log("That item doesn't exist in the players inventory..."); + } + + } + //GameServer.clients[_fromCID].player.GetComponent().items[].id; + } + + public static void OnEquipItemRequested(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _itemID = _packet.ReadInt(); + + for (int i = 0; i < GameServer.clients[_fromCID].player.GetComponent().items.Count; i++) + { + if (GameServer.clients[_fromCID].player.GetComponent().items[i].id == _itemID) + { + Debug.Log($"{GameServer.clients[_fromCID].player.username} equipped item {GameServer.clients[_fromCID].player.GetComponent().items[i].name}"); + + //We don't want to spam use items if we have multiple, + //so just return out of the method after first use + return; + } + else + { + Debug.Log("That item doesn't exist in the players inventory..."); + } + + } + //GameServer.clients[_fromCID].player.GetComponent().items[].id; + } + + public static void KillEnemy(int _fromClient, Packet _packet) + { + int _fromCID = _packet.ReadInt(); + int _eID = _packet.ReadInt(); + } +} diff --git a/Scripts/ServerHandle.cs.meta b/Scripts/ServerHandle.cs.meta new file mode 100644 index 0000000..0c8b5d3 --- /dev/null +++ b/Scripts/ServerHandle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f66e5e273935284191c938a05f5819a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ServerSend.cs b/Scripts/ServerSend.cs new file mode 100644 index 0000000..d80e2a3 --- /dev/null +++ b/Scripts/ServerSend.cs @@ -0,0 +1,249 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ServerSend +{ + //once the packet is created, we need to send the data through a tcp socket + //this will prepare the packet for sending and ultimately finalize the signal + private static void SendTcpData(int _toCID, Packet _packet) + { + _packet.WriteLength(); + GameServer.clients[_toCID].tcp.SendData(_packet); + } + + private static void SendUdpData(int _toCID, Packet _packet) + { + _packet.WriteLength(); + GameServer.clients[_toCID].udp.SendData(_packet); + } + + private static void SendTCPDataToAll(Packet _packet) + { + _packet.WriteLength(); + for (int i = 1; i < GameServer.MaxPlayers; i++) + { + GameServer.clients[i].tcp.SendData(_packet); + } + } + + private static void SendTCPDataToAllExceptOne(int _exceptClient, Packet _packet) + { + _packet.WriteLength(); + for (int i = 1; i < GameServer.MaxPlayers; i++) + { + if (i != _exceptClient) + { + GameServer.clients[i].tcp.SendData(_packet); + } + + } + } + + private static void SendUDPDataToAll(Packet _packet) + { + _packet.WriteLength(); + for (int i = 1; i < GameServer.MaxPlayers; i++) + { + GameServer.clients[i].udp.SendData(_packet); + } + } + + private static void SendUDPDataToAllExceptOne(int _exceptClient, Packet _packet) + { + _packet.WriteLength(); + for (int i = 1; i < GameServer.MaxPlayers; i++) + { + if (i != _exceptClient) + { + GameServer.clients[i].udp.SendData(_packet); + } + + } + } + + //this is where we'll create methods to create packets which will be sent over the server + //for example chat packets, move packets, interact packets, etc + + //NOTE: send order is VERY important. please take note of how you're sending and + //receiving data. + + //CID = Client ID. + //See "ClientRef.cs" + public static void WelcomePacket(int _toCID, string _msg) + { + //create an instance of a packet + using (Packet _packet = new Packet((int)ServerPackets.welcome)) + { + _packet.Write(_msg); + _packet.Write(_toCID); + + SendTcpData(_toCID, _packet); + } + } + + public static void UserSession(int _toCID, string _username) + { + using (Packet _packet = new Packet((int)ServerPackets.userSession)) + { + _packet.Write(_toCID); + _packet.Write(_username); + + SendTcpData(_toCID, _packet); + } + } + + public static void SpawnPlayer(int _toCID, Player _player) + { + using (Packet _packet = new Packet((int)ServerPackets.spawnPlayer)) + { + _packet.Write(_player.id); + _packet.Write(_player.username); + _packet.Write(_player.transform.position); + _packet.Write(_player.transform.rotation); + + SendTcpData(_toCID, _packet); + } + } + + //ENEMY DATA + public static void SpawnEnemy(GameObject _enemy) + { + using (Packet _packet = new Packet((int)ServerPackets.spawnEnemy)) + { + _packet.Write(_enemy.GetComponent().id); + _packet.Write(_enemy.GetComponent().entityName); + _packet.Write(_enemy.transform.position); + _packet.Write(_enemy.transform.rotation); + + SendTCPDataToAll(_packet); + } + } + + public static void SendEnemyData(int _toCID, GameObject _enemy) + { + using (Packet _packet = new Packet((int)ServerPackets.loadEnemiesOnClient)) + { + _packet.Write(_enemy.GetComponent().id); + _packet.Write(_enemy.GetComponent().entityName); + _packet.Write(_enemy.transform.position); + _packet.Write(_enemy.transform.rotation); + + SendTcpData(_toCID, _packet); + } + } + + public static void UpdateEnemyStats(GameObject _enemy) + { + using (Packet _packet = new Packet((int)ServerPackets.updateEnemyStats)) + { + _packet.Write(_enemy.GetComponent().id); + _packet.Write(_enemy.GetComponent().currentHealth); + + SendTCPDataToAll(_packet); + } + } + + public static void KillEnemy(GameObject _enemy) + { + using (Packet _packet = new Packet((int)ServerPackets.killEnemy)) + { + Debug.Log("KILL ENEMY: " + _enemy.GetComponent().id); + _packet.Write(_enemy.GetComponent().id); + + SendTCPDataToAll(_packet); + } + } + + public static void PlayerPosition(Player _player) + { + //create an instance of a packet + using (Packet _packet = new Packet((int)ServerPackets.playerPosition)) + { + _packet.Write(_player.id); + _packet.Write(_player.transform.position); + + SendUDPDataToAll(_packet); + } + } + + public static void PlayerRotation(Player _player) + { + //create an instance of a packet + using (Packet _packet = new Packet((int)ServerPackets.playerRotation)) + { + _packet.Write(_player.id); + _packet.Write(_player.transform.rotation); + + SendUDPDataToAllExceptOne(_player.id, _packet); + } + } + + public static void PlayerDisconnected(int _pid) + { + //create an instance of a packet + using (Packet _packet = new Packet((int)ServerPackets.playerDisconnected)) + { + _packet.Write(_pid); + + SendTCPDataToAll(_packet); + } + } + + public static void InteractableTooFar(int _toCID) + { + using (Packet _packet = new Packet((int)ServerPackets.interactableTooFar)) + { + _packet.Write("You need to move closer to interact with that!"); + + SendTcpData(_toCID, _packet); + } + } + + public static void InteractionConfirmed(int _toCID, int _eID, string _msg) + { + using (Packet _packet = new Packet((int)ServerPackets.interactionConfirmed)) + { + _packet.Write(_toCID); + _packet.Write(_eID); + _packet.Write(_msg); + + SendTcpData(_toCID, _packet); + } + } + + public static void SendClientsLootData(int _itemID, int _eID, Vector3 _lootSpawnPos) + { + using (Packet _packet = new Packet((int)ServerPackets.sendClientsLootData)) + { + _packet.Write(_itemID); + _packet.Write(_eID); + _packet.Write(_lootSpawnPos); + + SendTCPDataToAll(_packet); + } + } + + public static void ItemLooted(int _fromCID, int _eID, int _itemID) + { + using (Packet _packet = new Packet((int)ServerPackets.itemLooted)) + { + _packet.Write(_fromCID); + _packet.Write(_eID); + _packet.Write(_itemID); + + SendTCPDataToAll(_packet); + } + } + public static void ItemEquipped(int _toCID, int _itemID) + { + using (Packet _packet = new Packet((int)ServerPackets.itemEquipped)) + { + _packet.Write(_toCID); + _packet.Write(_itemID); + + SendTcpData(_toCID, _packet); + } + } +} diff --git a/Scripts/ServerSend.cs.meta b/Scripts/ServerSend.cs.meta new file mode 100644 index 0000000..15608ce --- /dev/null +++ b/Scripts/ServerSend.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab88af9a673e6c94c82edbaf53c00507 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/SessionManager.cs b/Scripts/SessionManager.cs new file mode 100644 index 0000000..68906f6 --- /dev/null +++ b/Scripts/SessionManager.cs @@ -0,0 +1,13 @@ +using System; +using System.Net; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class SessionManager +{ + public static string playerName = ""; + + +} diff --git a/Scripts/SessionManager.cs.meta b/Scripts/SessionManager.cs.meta new file mode 100644 index 0000000..0729453 --- /dev/null +++ b/Scripts/SessionManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 99a726c2687bd9049ad55ed644fe9f18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/SpellPiece.cs b/Scripts/SpellPiece.cs new file mode 100644 index 0000000..ca416d2 --- /dev/null +++ b/Scripts/SpellPiece.cs @@ -0,0 +1,19 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[CreateAssetMenu(fileName = "New Spell Piece", menuName = "Inventory/Equipment/New Spell Piece")] +public class SpellPiece : RegularEquipment +{ + // Start is called before the first frame update + void Start() + { + + } + + // Update is called once per frame + void Update() + { + + } +} diff --git a/Scripts/SpellPiece.cs.meta b/Scripts/SpellPiece.cs.meta new file mode 100644 index 0000000..958b12f --- /dev/null +++ b/Scripts/SpellPiece.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc47636890274bc4a9a21ed60b4fc4dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Stat.cs b/Scripts/Stat.cs new file mode 100644 index 0000000..65c961b --- /dev/null +++ b/Scripts/Stat.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +[System.Serializable] +public class Stat +{ + [SerializeField] + int baseValue; + + private List modifiers = new List(); + + public int GetValue() + { + //int finalValue = baseValue; + //modifiers.ForEach(x => finalValue += x); + return baseValue; + } + + public void SetValue(int _newValue) + { + baseValue = _newValue; + } + + public void AddModifier(int modifier) + { + if (modifier != 0) + modifiers.Add(modifier); + } + + public void RemoveModifier(int modifier) + { + if (modifier != 0) + modifiers.Remove(modifier); + } +} diff --git a/Scripts/Stat.cs.meta b/Scripts/Stat.cs.meta new file mode 100644 index 0000000..4ecfcfc --- /dev/null +++ b/Scripts/Stat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de03ca7b9206e2943839f82323a32402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/ThreadManager.cs b/Scripts/ThreadManager.cs new file mode 100644 index 0000000..f607c32 --- /dev/null +++ b/Scripts/ThreadManager.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ThreadManager : MonoBehaviour +{ + private static readonly List executeOnMainThread = new List(); + private static readonly List executeCopiedOnMainThread = new List(); + private static bool actionToExecuteOnMainThread = false; + + private void FixedUpdate() +{ + UpdateMain(); +} + + public static void ExecuteOnMainThread(Action _action) + { + if (_action == null) + { + Console.WriteLine("No action to execute on main thread!"); + return; + } + + lock (executeOnMainThread) + { + executeOnMainThread.Add(_action); + actionToExecuteOnMainThread = true; + } + } + + /// Executes all code meant to run on the main thread. NOTE: Call this ONLY from the main thread. + public static void UpdateMain() + { + if (actionToExecuteOnMainThread) + { + executeCopiedOnMainThread.Clear(); + lock (executeOnMainThread) + { + executeCopiedOnMainThread.AddRange(executeOnMainThread); + executeOnMainThread.Clear(); + actionToExecuteOnMainThread = false; + } + + for (int i = 0; i < executeCopiedOnMainThread.Count; i++) + { + executeCopiedOnMainThread[i](); + } + } + } +} diff --git a/Scripts/ThreadManager.cs.meta b/Scripts/ThreadManager.cs.meta new file mode 100644 index 0000000..e5cf910 --- /dev/null +++ b/Scripts/ThreadManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebd1e0e244c889c40b33a6d2bac9c89e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: From 8c803b88d2eabbd243ae0a06bce3cb3b7ad67262 Mon Sep 17 00:00:00 2001 From: Devin Wood Date: Sat, 18 Dec 2021 20:15:42 -0500 Subject: [PATCH 2/2] updated combat and minor bug fixes --- ItemDB/NotSoLuckySword.asset | 8 +-- Prefabs/Enemy.prefab | 60 ++++++++++++---- Prefabs/NPC.prefab | 37 +++++++++- Prefabs/Player.prefab | 17 ++++- Scenes/ServerView.meta | 8 +++ Scenes/ServerView.unity | 79 +++++++++++++++++---- Scenes/ServerView/NavMesh.asset | Bin 0 -> 10916 bytes Scenes/ServerView/NavMesh.asset.meta | 8 +++ Scripts/AIController.cs | 102 +++++++++++++++++++++++++++ Scripts/AIController.cs.meta | 11 +++ Scripts/Combat.cs | 30 ++++++++ Scripts/Combat.cs.meta | 11 +++ Scripts/Enemy.cs | 11 ++- Scripts/EntityStats.cs | 2 +- Scripts/GameServer.cs | 4 +- Scripts/Interactable.cs | 2 +- Scripts/ItemDrop.cs | 2 +- Scripts/NPC.cs | 33 +++++++++ Scripts/NPCManager.cs | 72 +++++++++++++++++++ Scripts/NPCManager.cs.meta | 11 +++ Scripts/NetworkManager.cs | 6 ++ Scripts/Packet.cs | 4 +- Scripts/ServerHandle.cs | 38 ++++++---- Scripts/ServerSend.cs | 47 ++++++++++++ Scripts/Stat.cs | 6 +- 25 files changed, 551 insertions(+), 58 deletions(-) create mode 100644 Scenes/ServerView.meta create mode 100644 Scenes/ServerView/NavMesh.asset create mode 100644 Scenes/ServerView/NavMesh.asset.meta create mode 100644 Scripts/AIController.cs create mode 100644 Scripts/AIController.cs.meta create mode 100644 Scripts/Combat.cs create mode 100644 Scripts/Combat.cs.meta create mode 100644 Scripts/NPCManager.cs create mode 100644 Scripts/NPCManager.cs.meta diff --git a/ItemDB/NotSoLuckySword.asset b/ItemDB/NotSoLuckySword.asset index 9eafc4d..4403792 100644 --- a/ItemDB/NotSoLuckySword.asset +++ b/ItemDB/NotSoLuckySword.asset @@ -12,10 +12,10 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 5f32da428f21bf94ab2c209423d37ef8, type: 3} m_Name: NotSoLuckySword m_EditorClassIdentifier: - id: 0 - name: New Item + id: 1 + name: Not So Lucky Sword icon: {fileID: 0} isDefaultItem: 0 - equipSlot: 0 + equipSlot: 9 armorModifier: 0 - damageModifier: 0 + damageModifier: 1 diff --git a/Prefabs/Enemy.prefab b/Prefabs/Enemy.prefab index 3d62bf8..cb5e663 100644 --- a/Prefabs/Enemy.prefab +++ b/Prefabs/Enemy.prefab @@ -88,9 +88,11 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1212606147804292961} - - component: {fileID: 7474231715138914666} + - component: {fileID: 3852461386853265974} - component: {fileID: 3013900500313223034} - component: {fileID: 4080737244005278309} + - component: {fileID: 914026757338584785} + - component: {fileID: 3295653811711352889} m_Layer: 0 m_Name: Enemy m_TagString: Untagged @@ -113,24 +115,22 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!143 &7474231715138914666 -CharacterController: +--- !u!114 &3852461386853265974 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8611467844914570594} - m_Material: {fileID: 0} - m_IsTrigger: 0 m_Enabled: 1 - serializedVersion: 2 - m_Height: 2 - m_Radius: 0.5 - m_SlopeLimit: 45 - m_StepOffset: 0.3 - m_SkinWidth: 0.08 - m_MinMoveDistance: 0.001 - m_Center: {x: 0, y: 0, z: 0} + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 88baf260392e42d4391b885affb6cdd1, type: 3} + m_Name: + m_EditorClassIdentifier: + gravity: -9.18 + moveSpeed: 5 + jumpSpeed: 5 + lookRadius: 6 --- !u!114 &3013900500313223034 MonoBehaviour: m_ObjectHideFlags: 0 @@ -162,7 +162,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 970bb08bb36559142b6b97aa2c073422, type: 3} m_Name: m_EditorClassIdentifier: - maxHealth: 100 + maxHealth: 20 currentHealth: 100 damage: baseValue: 0 @@ -170,3 +170,35 @@ MonoBehaviour: baseValue: 0 lootDrops: - {fileID: 284073984168042100, guid: c1ca30307112da348ac4b844f1bfcb58, type: 3} +--- !u!114 &914026757338584785 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f92ec9c99732416418b4c618e07d1e6b, type: 3} + m_Name: + m_EditorClassIdentifier: + attackSpeed: 1 + castSpeed: 0 +--- !u!143 &3295653811711352889 +CharacterController: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Height: 2 + m_Radius: 0.5 + m_SlopeLimit: 45 + m_StepOffset: 0.3 + m_SkinWidth: 0.08 + m_MinMoveDistance: 0.001 + m_Center: {x: 0, y: 0, z: 0} diff --git a/Prefabs/NPC.prefab b/Prefabs/NPC.prefab index 9935663..f5d2129 100644 --- a/Prefabs/NPC.prefab +++ b/Prefabs/NPC.prefab @@ -88,7 +88,9 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 1212606147804292961} + - component: {fileID: 6547453085002550639} - component: {fileID: 7658026733673540080} + - component: {fileID: 4960314061581055372} - component: {fileID: 7474231715138914666} m_Layer: 0 m_Name: NPC @@ -112,6 +114,19 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6547453085002550639 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5948b070793bfce4e8b489fccae9f746, type: 3} + m_Name: + m_EditorClassIdentifier: + target: {fileID: 0} --- !u!114 &7658026733673540080 MonoBehaviour: m_ObjectHideFlags: 0 @@ -126,9 +141,29 @@ MonoBehaviour: m_EditorClassIdentifier: id: 0 isFocused: 0 - name: + hasInteracted: 0 + interactRadius: 3 + entityName: gravity: -9.18 moveSpeed: 5 +--- !u!114 &4960314061581055372 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 288a3b15388d76e4fb244c8e58208d1a, type: 3} + m_Name: + m_EditorClassIdentifier: + maxHealth: 600 + currentHealth: 0 + damage: + baseValue: 0 + armor: + baseValue: 0 --- !u!143 &7474231715138914666 CharacterController: m_ObjectHideFlags: 0 diff --git a/Prefabs/Player.prefab b/Prefabs/Player.prefab index 836bea1..3969e29 100644 --- a/Prefabs/Player.prefab +++ b/Prefabs/Player.prefab @@ -91,6 +91,7 @@ GameObject: - component: {fileID: 257345741035949171} - component: {fileID: 1389609434891966730} - component: {fileID: 1549596798853889766} + - component: {fileID: 4275847527765037165} - component: {fileID: 8021349615318193849} - component: {fileID: 7474231715138914666} m_Layer: 0 @@ -163,9 +164,23 @@ MonoBehaviour: maxHealth: 100 currentHealth: 0 damage: - baseValue: 0 + baseValue: 5 armor: baseValue: 0 +--- !u!114 &4275847527765037165 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8611467844914570594} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f92ec9c99732416418b4c618e07d1e6b, type: 3} + m_Name: + m_EditorClassIdentifier: + attackSpeed: 1 + castSpeed: 0 --- !u!114 &8021349615318193849 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Scenes/ServerView.meta b/Scenes/ServerView.meta new file mode 100644 index 0000000..108800e --- /dev/null +++ b/Scenes/ServerView.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f79bdc3feb3f65d498f3a373859ec96f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scenes/ServerView.unity b/Scenes/ServerView.unity index 5799c83..a425b96 100644 --- a/Scenes/ServerView.unity +++ b/Scenes/ServerView.unity @@ -120,7 +120,7 @@ NavMeshSettings: accuratePlacement: 0 debug: m_Flags: 0 - m_NavMeshData: {fileID: 0} + m_NavMeshData: {fileID: 23800000, guid: f4cf81223bfa3e64bbd93d53fc14876b, type: 2} --- !u!1 &146451875 GameObject: m_ObjectHideFlags: 0 @@ -130,9 +130,12 @@ GameObject: serializedVersion: 6 m_Component: - component: {fileID: 146451878} + - component: {fileID: 146451882} + - component: {fileID: 146451880} - component: {fileID: 146451879} - component: {fileID: 146451877} - component: {fileID: 146451876} + - component: {fileID: 146451881} m_Layer: 0 m_Name: ServerManager m_TagString: Untagged @@ -168,6 +171,8 @@ MonoBehaviour: type: 3} enemyPrefab: {fileID: 8611467844914570594, guid: b18ee323596aff74bbcbce59a159fa54, type: 3} + npcPrefab: {fileID: 8611467844914570594, guid: 8a3256f6f3a12a848a3443f4f31c64dc, + type: 3} --- !u!4 &146451878 Transform: m_ObjectHideFlags: 0 @@ -196,6 +201,50 @@ MonoBehaviour: m_EditorClassIdentifier: enemyPrefab: {fileID: 8611467844914570594, guid: b18ee323596aff74bbcbce59a159fa54, type: 3} + enemyRespawnCooldown: 20 +--- !u!114 &146451880 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56429fbcc9321f9488402e664ac007d6, type: 3} + m_Name: + m_EditorClassIdentifier: + localItems: [] +--- !u!114 &146451881 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6e5bf6f590ba4664c9f5967991cdff13, type: 3} + m_Name: + m_EditorClassIdentifier: + consumables: [] + equipment: + - {fileID: 11400000, guid: 1135a3cf0301b1c46823d38926e75cfc, type: 2} +--- !u!114 &146451882 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 146451875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ee67f1a1108c7d54e81131f1105919d5, type: 3} + m_Name: + m_EditorClassIdentifier: + npcPrefab: {fileID: 8611467844914570594, guid: 8a3256f6f3a12a848a3443f4f31c64dc, + type: 3} + npcRespawnCooldown: 20 --- !u!1 &170306121 GameObject: m_ObjectHideFlags: 0 @@ -395,12 +444,12 @@ GameObject: - component: {fileID: 293346808} - component: {fileID: 293346807} - component: {fileID: 293346806} - m_Layer: 0 + m_Layer: 8 m_Name: path_start_right m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &293346805 Transform: @@ -489,12 +538,12 @@ GameObject: - component: {fileID: 424784828} - component: {fileID: 424784827} - component: {fileID: 424784826} - m_Layer: 0 + m_Layer: 8 m_Name: SpawnPlat m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &424784825 Transform: @@ -861,12 +910,12 @@ GameObject: - component: {fileID: 861307375} - component: {fileID: 861307374} - component: {fileID: 861307373} - m_Layer: 0 + m_Layer: 8 m_Name: EntranceRamp m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &861307372 Transform: @@ -1204,12 +1253,12 @@ GameObject: - component: {fileID: 1394718329} - component: {fileID: 1394718328} - component: {fileID: 1394718327} - m_Layer: 0 + m_Layer: 8 m_Name: ConnectToFirstPlat m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &1394718326 Transform: @@ -1521,12 +1570,12 @@ GameObject: - component: {fileID: 1878838813} - component: {fileID: 1878838812} - component: {fileID: 1878838811} - m_Layer: 0 + m_Layer: 8 m_Name: path_start_forward m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &1878838810 Transform: @@ -1708,12 +1757,12 @@ GameObject: - component: {fileID: 1957725731} - component: {fileID: 1957725730} - component: {fileID: 1957725729} - m_Layer: 0 + m_Layer: 8 m_Name: path_start_left m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &1957725728 Transform: @@ -1802,12 +1851,12 @@ GameObject: - component: {fileID: 1991002434} - component: {fileID: 1991002433} - component: {fileID: 1991002432} - m_Layer: 0 + m_Layer: 8 m_Name: FirstPlatform m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 + m_StaticEditorFlags: 8 m_IsActive: 1 --- !u!4 &1991002431 Transform: diff --git a/Scenes/ServerView/NavMesh.asset b/Scenes/ServerView/NavMesh.asset new file mode 100644 index 0000000000000000000000000000000000000000..bc021fc21197fd59a1d6de9b4a17d9d942fe2806 GIT binary patch literal 10916 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 + controller = GetComponent(); + } + + void FixedUpdate() + { + if(target == null) + SearchForPlayersInsideRadius(); + if (target != null) + { + Vector3 _direction = target.transform.position - transform.position; + if (TargetInLineOfSight()) + Move(_direction, moveSpeed); + } + } + + private void SearchForPlayersInsideRadius() + { + foreach(ClientRef _client in GameServer.clients.Values) + { + if(_client.player != null) + { + Vector3 playerPos = _client.player.transform.position; + Vector3 _direction = playerPos - transform.position; + //float distance = Vector3.Distance(playerPos, transform.position); + + if (_direction.magnitude <= lookRadius) + { + //Debug.Log("Player near enemy search radius!"); + if (Physics.Raycast(transform.position, playerPos, out RaycastHit _hit, lookRadius)) + { + //Define what happens if you're in the search radius AND + //you can draw a line from enemy to player + target = _hit.collider.GetComponent(); + } + } + } + } + } + + private bool TargetInLineOfSight() + { + if (target == null) + return false; + + if(Physics.Raycast(transform.position, target.transform.position - transform.position, out RaycastHit _hit, lookRadius)) + { + if(_hit.collider != null) + { + return true; + } + } + + return false; + } + + private void Move(Vector3 _direction, float _speed) + { + + _direction.y = 0f; + transform.forward = _direction; + Vector3 _movement = transform.forward * _speed; + + if(controller.isGrounded) + { + yVelocity = 0f; + } + yVelocity += gravity; + + _movement.y = yVelocity; + controller.Move(_movement); + + ServerSend.UpdateEnemyPosition(gameObject); + } + void OnDrawGizmosSelected() + { + Gizmos.color = Color.red; + Gizmos.DrawWireSphere(transform.position, lookRadius); + } +} diff --git a/Scripts/AIController.cs.meta b/Scripts/AIController.cs.meta new file mode 100644 index 0000000..ac9ff4a --- /dev/null +++ b/Scripts/AIController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 88baf260392e42d4391b885affb6cdd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Combat.cs b/Scripts/Combat.cs new file mode 100644 index 0000000..18b5d71 --- /dev/null +++ b/Scripts/Combat.cs @@ -0,0 +1,30 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +[RequireComponent(typeof(EntityStats))] +class Combat : MonoBehaviour +{ + public float attackSpeed = 1.0f; + private float attackCooldown = 0f; + public float castSpeed; + EntityStats myStats; + + void Start() + { + myStats = GetComponent(); + } + + void Update() + { + attackCooldown -= Time.deltaTime; + } + public void Attack(EntityStats targetStats) + { + if(attackCooldown <= 0f) + { + targetStats.TakeDamage(myStats.damage.GetValue()); + attackCooldown = 1f / attackSpeed; + } + } +} diff --git a/Scripts/Combat.cs.meta b/Scripts/Combat.cs.meta new file mode 100644 index 0000000..f27c6f1 --- /dev/null +++ b/Scripts/Combat.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f92ec9c99732416418b4c618e07d1e6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/Enemy.cs b/Scripts/Enemy.cs index 225c115..6db9738 100644 --- a/Scripts/Enemy.cs +++ b/Scripts/Enemy.cs @@ -7,12 +7,17 @@ public class Enemy : NPC { + EnemyStats myStats; public Enemy(int _id, string _name) { id = _id; entityName = _name; } + void Start() + { + myStats = GetComponent(); + } public override bool Interact(int _fromCID, Vector3 _comparePosition) { if (GameServer.clients[_fromCID].player != null) @@ -23,7 +28,11 @@ public override bool Interact(int _fromCID, Vector3 _comparePosition) { string _msg = $"You are now interacting with: {GetComponent().entityName}"; - GetComponent().TakeDamage(_fromCID, 20); + Combat playerCombat = GameServer.clients[_fromCID].player.GetComponent(); + + if(playerCombat != null) + playerCombat.Attack(myStats); + ServerSend.InteractionConfirmed(_fromCID, GetComponent().id, _msg); return true; } diff --git a/Scripts/EntityStats.cs b/Scripts/EntityStats.cs index 5c6fa8e..da8768d 100644 --- a/Scripts/EntityStats.cs +++ b/Scripts/EntityStats.cs @@ -21,7 +21,7 @@ void FixedUpdate() { } - public void TakeDamage(int _eID, int _damage) + public void TakeDamage(int _damage) { _damage -= armor.GetValue(); _damage = Mathf.Clamp(_damage, 0, int.MaxValue); diff --git a/Scripts/GameServer.cs b/Scripts/GameServer.cs index 5c3c3b7..ef2842e 100644 --- a/Scripts/GameServer.cs +++ b/Scripts/GameServer.cs @@ -133,6 +133,9 @@ private static void InitializeServerData() //ENEMY DATA EnemyManager.instance.InitEnemyData(); + + //NPC DATA + NPCManager.instance.InitNPCData(); packetHandlers = new Dictionary() { @@ -141,7 +144,6 @@ private static void InitializeServerData() { (int)ClientPackets.playerMovement, ServerHandle.PlayerMovement }, { (int)ClientPackets.requestFocus, ServerHandle.FocusGranted }, { (int)ClientPackets.clearFocus, ServerHandle.ClearFocus }, - { (int)ClientPackets.requestAttack, ServerHandle.RequestAttack }, { (int)ClientPackets.killEnemy, ServerHandle.KillEnemy}, { (int)ClientPackets.requestInteract, ServerHandle.RequestInteract}, { (int)ClientPackets.requestLoot, ServerHandle.OnLootRequested}, diff --git a/Scripts/Interactable.cs b/Scripts/Interactable.cs index 87988b8..67b14f6 100644 --- a/Scripts/Interactable.cs +++ b/Scripts/Interactable.cs @@ -22,7 +22,7 @@ public virtual bool Interact(int _fromCID, Vector3 _comparePosition) Debug.Log($"{GameServer.clients[_fromCID].player.username} is focusing {transform.name}"); float distance = Vector3.Distance(_comparePosition, transform.position); - if (distance <= interactRadius) + if (distance <= interactRadius && hasInteracted == false) { Debug.Log($"{GameServer.clients[_fromCID].player.username} is in range of {transform.position}"); return true; diff --git a/Scripts/ItemDrop.cs b/Scripts/ItemDrop.cs index 6a9c240..ea0421c 100644 --- a/Scripts/ItemDrop.cs +++ b/Scripts/ItemDrop.cs @@ -18,8 +18,8 @@ public override bool Interact(int _fromCID, Vector3 _comparePosition) if(pickedUp) { - Destroy(ItemManager.instance.localItems[id]); ServerSend.ItemLooted(_fromCID, id, item.id); + Destroy(ItemManager.instance.localItems[id].gameObject); return true; } diff --git a/Scripts/NPC.cs b/Scripts/NPC.cs index b145ee6..1c51613 100644 --- a/Scripts/NPC.cs +++ b/Scripts/NPC.cs @@ -21,5 +21,38 @@ public void Initialize(int _id) { id = _id; } + + public override bool Interact(int _fromCID, Vector3 _comparePosition) + { + if (GameServer.clients[_fromCID].player != null) + { + + //Debug.Log($"Client {_fromCID} is trying to interact with an enemy from position {_comparePosition}"); + if (base.Interact(_fromCID, _comparePosition)) + { + string _msg = $"You are now interacting with: {GetComponent().entityName}"; + + ServerSend.InteractionConfirmed(_fromCID, GetComponent().id, _msg); + return true; + } + else + { + return false; + } + } + else + { + return false; + } + + } + + public void SpawnInGame() + { + if (this != null) + { + ServerSend.SpawnNPC(gameObject); + } + } } diff --git a/Scripts/NPCManager.cs b/Scripts/NPCManager.cs new file mode 100644 index 0000000..9b944a5 --- /dev/null +++ b/Scripts/NPCManager.cs @@ -0,0 +1,72 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +class NPCManager : MonoBehaviour +{ + public static NPCManager instance; + public static Dictionary npcList = new Dictionary(); + + public GameObject npcPrefab; + public float npcRespawnCooldown = 20.0f; + private float respawnTimer; + + void Awake() + { + if (instance == null) + instance = this; + else if (instance != this) + Destroy(this); + } + + void FixedUpdate() + { + if (respawnTimer <= 0) + { + //RespawnEnemies(); + respawnTimer = npcRespawnCooldown; + } + if (respawnTimer > 0) + respawnTimer -= Time.deltaTime; + + } + public void InitNPCData() + { + ///////////////////////////////////////////////////////// + //init the enemies in the scene + + //Define an empty enemy prefab + GameObject npc = NetworkManager.instance.InstantiateNPC(-3.2f, 1.0f, 1.1f); + + //Define that enemy's traits + npc.GetComponent().id = 0; + npc.GetComponent().entityName = "Tutorial Guide"; + npc.GetComponent().interactRadius = 5f; + + //finally add the enemy to the list of enemies to be spawned on the server + npcList.Add(npc.GetComponent().id, npc); + + //////////////////////////////////////////////////////// + + + for (int i = 0; i < npcList.Count; i++) + { + npcList[i].GetComponent().SpawnInGame(); + } + + + } + + public void LoadNPCListOnClient(int _fromClient) + { + for (int i = 0; i < npcList.Count; i++) + { + if (npcList[i] != null) + ServerSend.SendNPCData(_fromClient, npcList[i]); + } + + } +} diff --git a/Scripts/NPCManager.cs.meta b/Scripts/NPCManager.cs.meta new file mode 100644 index 0000000..a9c5d19 --- /dev/null +++ b/Scripts/NPCManager.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ee67f1a1108c7d54e81131f1105919d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Scripts/NetworkManager.cs b/Scripts/NetworkManager.cs index 4921d34..572cdcd 100644 --- a/Scripts/NetworkManager.cs +++ b/Scripts/NetworkManager.cs @@ -10,6 +10,7 @@ public class NetworkManager : MonoBehaviour public static NetworkManager instance; public GameObject playerPrefab; public GameObject enemyPrefab; + public GameObject npcPrefab; public static string setPName; void Awake() { @@ -46,6 +47,11 @@ public GameObject InstantiateEnemy(float x, float y, float z) return Instantiate(enemyPrefab, new Vector3(x, y, z), Quaternion.identity); } + public GameObject InstantiateNPC(float x, float y, float z) + { + return Instantiate(npcPrefab, new Vector3(x, y, z), Quaternion.identity); + } + public static bool AttemptNewSession(string _username, string _password) { string accountJSON = ConnectAndAuth(_username, _password); diff --git a/Scripts/Packet.cs b/Scripts/Packet.cs index c2ef7f7..9bc0fc2 100644 --- a/Scripts/Packet.cs +++ b/Scripts/Packet.cs @@ -14,8 +14,11 @@ public enum ServerPackets playerDisconnected, interactableTooFar, spawnEnemy, + spawnNPC, updateEnemyStats, + updateEnemyPosition, loadEnemiesOnClient, + loadNPCsOnClient, focusGranted, clearFocus, requestAttack, @@ -36,7 +39,6 @@ public enum ClientPackets enemySpawned, loadEnemyData, clearFocus, - requestAttack, requestInteract, killEnemy, updateEnemyStats, diff --git a/Scripts/ServerHandle.cs b/Scripts/ServerHandle.cs index 9f6c77d..1cf0a4d 100644 --- a/Scripts/ServerHandle.cs +++ b/Scripts/ServerHandle.cs @@ -24,6 +24,7 @@ public static void WelcomeReceived(int _fromClient, Packet _packet) //ENEMIES //load the enemies EnemyManager.instance.LoadEnemiesOnClient(_fromClient); + NPCManager.instance.LoadNPCListOnClient(_fromClient); @@ -87,16 +88,6 @@ public static void ClearFocus(int _fromClient, Packet _packet) GameServer.clients[_fromCID].player.focus.target = null; } - public static void RequestAttack(int _fromClient, Packet _packet) - { - int _fromCID = _packet.ReadInt(); - int _eID = _packet.ReadInt(); - int _damage = _packet.ReadInt(); - Debug.Log($"Client {_fromCID} is trying to attack enemy: {EnemyManager.enemies[_eID].gameObject.name} for {_damage}."); - - EnemyManager.enemies[_eID].GetComponent().TakeDamage(_eID, _damage); - } - public static void RequestInteract(int _fromClient, Packet _packet) { int _fromCID = _packet.ReadInt(); @@ -108,13 +99,32 @@ public static void RequestInteract(int _fromClient, Packet _packet) if (_type == "Enemy") { - Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {EnemyManager.enemies[_eID].gameObject.name} from position {_comparePosition}."); - EnemyManager.enemies[_eID].GetComponent().Interact(_fromCID, _comparePosition); + + if(EnemyManager.enemies[_eID]) + { + Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {EnemyManager.enemies[_eID].gameObject.name} from position {_comparePosition}."); + EnemyManager.enemies[_eID].GetComponent().Interact(_fromCID, _comparePosition); + } + } + else if (_type == "NPC") + { + + if (NPCManager.npcList[_eID] != null) + { + Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {null} from position {_comparePosition}."); + NPCManager.npcList[_eID].GetComponent().Interact(_fromCID, _comparePosition); + } + } else if(_type == "Item") { - Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {ItemManager.instance.localItems[_eID]} from position {_comparePosition}."); - ItemManager.instance.localItems[_eID].GetComponent().Interact(_fromCID, _comparePosition); + + if (ItemManager.instance.localItems[_eID].GetComponent() != null) + { + Debug.Log($"Client {_fromCID} is trying to interact with an {_type}: {ItemManager.instance.localItems[_eID]} from position {_comparePosition}."); + ItemManager.instance.localItems[_eID].GetComponent().Interact(_fromCID, _comparePosition); + } + } } diff --git a/Scripts/ServerSend.cs b/Scripts/ServerSend.cs index d80e2a3..8ddff00 100644 --- a/Scripts/ServerSend.cs +++ b/Scripts/ServerSend.cs @@ -107,6 +107,23 @@ public static void SpawnPlayer(int _toCID, Player _player) } } + //------------------------ NPC DATA + + public static void SpawnNPC(GameObject _npc) + { + using (Packet _packet = new Packet((int)ServerPackets.spawnNPC)) + { + _packet.Write(_npc.GetComponent().id); + _packet.Write(_npc.GetComponent().entityName); + _packet.Write(_npc.GetComponent().maxHealth); + _packet.Write(_npc.GetComponent().currentHealth); + _packet.Write(_npc.transform.position); + _packet.Write(_npc.transform.rotation); + + SendTCPDataToAll(_packet); + } + } + //ENEMY DATA public static void SpawnEnemy(GameObject _enemy) { @@ -114,6 +131,8 @@ public static void SpawnEnemy(GameObject _enemy) { _packet.Write(_enemy.GetComponent().id); _packet.Write(_enemy.GetComponent().entityName); + _packet.Write(_enemy.GetComponent().maxHealth); + _packet.Write(_enemy.GetComponent().currentHealth); _packet.Write(_enemy.transform.position); _packet.Write(_enemy.transform.rotation); @@ -127,6 +146,8 @@ public static void SendEnemyData(int _toCID, GameObject _enemy) { _packet.Write(_enemy.GetComponent().id); _packet.Write(_enemy.GetComponent().entityName); + _packet.Write(_enemy.GetComponent().maxHealth); + _packet.Write(_enemy.GetComponent().currentHealth); _packet.Write(_enemy.transform.position); _packet.Write(_enemy.transform.rotation); @@ -134,6 +155,21 @@ public static void SendEnemyData(int _toCID, GameObject _enemy) } } + public static void SendNPCData(int _toCID, GameObject _npc) + { + using (Packet _packet = new Packet((int)ServerPackets.loadNPCsOnClient)) + { + _packet.Write(_npc.GetComponent().id); + _packet.Write(_npc.GetComponent().entityName); + _packet.Write(_npc.GetComponent().maxHealth); + _packet.Write(_npc.GetComponent().currentHealth); + _packet.Write(_npc.transform.position); + _packet.Write(_npc.transform.rotation); + + SendTcpData(_toCID, _packet); + } + } + public static void UpdateEnemyStats(GameObject _enemy) { using (Packet _packet = new Packet((int)ServerPackets.updateEnemyStats)) @@ -145,6 +181,17 @@ public static void UpdateEnemyStats(GameObject _enemy) } } + public static void UpdateEnemyPosition(GameObject _enemy) + { + using (Packet _packet = new Packet((int)ServerPackets.updateEnemyPosition)) + { + _packet.Write(_enemy.GetComponent().id); + _packet.Write(_enemy.transform.position); + + SendUDPDataToAll(_packet); + } + } + public static void KillEnemy(GameObject _enemy) { using (Packet _packet = new Packet((int)ServerPackets.killEnemy)) diff --git a/Scripts/Stat.cs b/Scripts/Stat.cs index 65c961b..5fc64ec 100644 --- a/Scripts/Stat.cs +++ b/Scripts/Stat.cs @@ -14,9 +14,9 @@ public class Stat public int GetValue() { - //int finalValue = baseValue; - //modifiers.ForEach(x => finalValue += x); - return baseValue; + int finalValue = baseValue; + modifiers.ForEach(x => finalValue += x); + return finalValue; } public void SetValue(int _newValue)