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..4403792 --- /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: 1 + name: Not So Lucky Sword + icon: {fileID: 0} + isDefaultItem: 0 + equipSlot: 9 + armorModifier: 0 + damageModifier: 1 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..cb5e663 --- /dev/null +++ b/Prefabs/Enemy.prefab @@ -0,0 +1,204 @@ +%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: 3852461386853265974} + - component: {fileID: 3013900500313223034} + - component: {fileID: 4080737244005278309} + - component: {fileID: 914026757338584785} + - component: {fileID: 3295653811711352889} + 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!114 &3852461386853265974 +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: 88baf260392e42d4391b885affb6cdd1, type: 3} + m_Name: + m_EditorClassIdentifier: + gravity: -9.18 + moveSpeed: 5 + jumpSpeed: 5 + lookRadius: 6 +--- !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: 20 + currentHealth: 100 + damage: + baseValue: 0 + armor: + 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/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..f5d2129 --- /dev/null +++ b/Prefabs/NPC.prefab @@ -0,0 +1,184 @@ +%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: 6547453085002550639} + - component: {fileID: 7658026733673540080} + - component: {fileID: 4960314061581055372} + - 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 &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 + 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 + 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 + 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..3969e29 --- /dev/null +++ b/Prefabs/Player.prefab @@ -0,0 +1,213 @@ +%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: 4275847527765037165} + - 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: 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 + 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.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 new file mode 100644 index 0000000..a425b96 --- /dev/null +++ b/Scenes/ServerView.unity @@ -0,0 +1,2028 @@ +%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: 23800000, guid: f4cf81223bfa3e64bbd93d53fc14876b, type: 2} +--- !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: 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 + 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} + npcPrefab: {fileID: 8611467844914570594, guid: 8a3256f6f3a12a848a3443f4f31c64dc, + 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} + 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 + 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: 8 + m_Name: path_start_right + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: SpawnPlat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: EntranceRamp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: ConnectToFirstPlat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: path_start_forward + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: path_start_left + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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: 8 + m_Name: FirstPlatform + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 8 + 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/Scenes/ServerView/NavMesh.asset b/Scenes/ServerView/NavMesh.asset new file mode 100644 index 0000000..bc021fc Binary files /dev/null and b/Scenes/ServerView/NavMesh.asset differ diff --git a/Scenes/ServerView/NavMesh.asset.meta b/Scenes/ServerView/NavMesh.asset.meta new file mode 100644 index 0000000..ff8cc0b --- /dev/null +++ b/Scenes/ServerView/NavMesh.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f4cf81223bfa3e64bbd93d53fc14876b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 0 + 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/AIController.cs b/Scripts/AIController.cs new file mode 100644 index 0000000..d07418c --- /dev/null +++ b/Scripts/AIController.cs @@ -0,0 +1,102 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.AI; + +class AIController : MonoBehaviour +{ + CharacterController controller; + public float gravity = -9.18f; + public float moveSpeed = 5f; + public float jumpSpeed = 5f; + private float yVelocity = 0; + public float lookRadius = 6f; + Player target; + //Transform target; + //NavMeshAgent agent; + + void Start() + { + //agent = GetComponent(); + 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/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/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/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..6db9738 --- /dev/null +++ b/Scripts/Enemy.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +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) + { + + //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}"; + + Combat playerCombat = GameServer.clients[_fromCID].player.GetComponent(); + + if(playerCombat != null) + playerCombat.Attack(myStats); + + 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..da8768d --- /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 _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..ef2842e --- /dev/null +++ b/Scripts/GameServer.cs @@ -0,0 +1,161 @@ +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(); + + //NPC DATA + NPCManager.instance.InitNPCData(); + + 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.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..67b14f6 --- /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 && hasInteracted == false) + { + 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..ea0421c --- /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) + { + ServerSend.ItemLooted(_fromCID, id, item.id); + Destroy(ItemManager.instance.localItems[id].gameObject); + 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..1c51613 --- /dev/null +++ b/Scripts/NPC.cs @@ -0,0 +1,58 @@ +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; + } + + 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/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/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 new file mode 100644 index 0000000..572cdcd --- /dev/null +++ b/Scripts/NetworkManager.cs @@ -0,0 +1,105 @@ +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 GameObject npcPrefab; + 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 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); + 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..9bc0fc2 --- /dev/null +++ b/Scripts/Packet.cs @@ -0,0 +1,411 @@ +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, + spawnNPC, + updateEnemyStats, + updateEnemyPosition, + loadEnemiesOnClient, + loadNPCsOnClient, + 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, + 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..1cf0a4d --- /dev/null +++ b/Scripts/ServerHandle.cs @@ -0,0 +1,198 @@ +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); + NPCManager.instance.LoadNPCListOnClient(_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 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") + { + + 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") + { + + 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); + } + + } + } + + 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..8ddff00 --- /dev/null +++ b/Scripts/ServerSend.cs @@ -0,0 +1,296 @@ +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); + } + } + + //------------------------ 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) + { + using (Packet _packet = new Packet((int)ServerPackets.spawnEnemy)) + { + _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); + + 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.GetComponent().maxHealth); + _packet.Write(_enemy.GetComponent().currentHealth); + _packet.Write(_enemy.transform.position); + _packet.Write(_enemy.transform.rotation); + + SendTcpData(_toCID, _packet); + } + } + + 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)) + { + _packet.Write(_enemy.GetComponent().id); + _packet.Write(_enemy.GetComponent().currentHealth); + + SendTCPDataToAll(_packet); + } + } + + 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)) + { + 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..5fc64ec --- /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 finalValue; + } + + 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: