From 52edef92e3ae7478a7efd745ecb7f2bd160d4d3a Mon Sep 17 00:00:00 2001 From: Pechnega Date: Sat, 15 Nov 2025 21:31:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=80=D0=BE=D0=B4=D0=B5=20=D0=BE=D0=BA,?= =?UTF-8?q?=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0=BE=D1=81=D1=8C=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=B8=D1=82=D1=8C=20=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B0=D0=BA=D1=82=D0=B8=D0=BA=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE,=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BD=D0=B0=D1=82?= =?UTF-8?q?=D1=8B=20=D0=B1=D1=83=D0=B4=D1=83=D1=82=20=D0=B3=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Assets/Code/Generator/RoomGenerator.cs | 129 ++++++++++++++---- .../Assets/Code/Generator/RoomType.cs | 3 +- .../Resources_moved/Rooms/Ladder.prefab | 50 +++++++ .../Resources_moved/Rooms/Ladder.prefab.meta | 7 + .../Resources_moved/Rooms/PickUp.prefab | 50 +++++++ .../Resources_moved/Rooms/PickUp.prefab.meta | 7 + .../Assets/Resources_moved/Rooms/Room4.prefab | 50 +++++++ .../Resources_moved/Rooms/Room4.prefab.meta | 7 + .../Assets/Resources_moved/Rooms/Save.prefab | 50 +++++++ .../Resources_moved/Rooms/Save.prefab.meta | 7 + 10 files changed, 333 insertions(+), 27 deletions(-) create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab.meta create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab.meta create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab.meta create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab create mode 100644 Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab.meta diff --git a/Game/CourierOld/Assets/Code/Generator/RoomGenerator.cs b/Game/CourierOld/Assets/Code/Generator/RoomGenerator.cs index f508536..44b9855 100644 --- a/Game/CourierOld/Assets/Code/Generator/RoomGenerator.cs +++ b/Game/CourierOld/Assets/Code/Generator/RoomGenerator.cs @@ -11,7 +11,7 @@ namespace Code.Generator private RoomGeneratorFactory _factory; private float _timer; - private List _roomIndexesStack; + private List _roomIndexesStack; private List _spawnedRooms; private async void Awake() @@ -25,20 +25,37 @@ namespace Code.Generator await _factory.PreloadRooms(); - CreateRoomsStack(); - await GenerateRoomsAsync(); + CreateRoomsStack(); + await GenerateRoomsAsync(); } private void CreateRoomsStack() { _roomIndexesStack.Clear(); var remainingTime = _timer; - var ladderTimer = 0f; + float ladderTimer = 0f; int totalRooms = generatorConfig.roomAssetReferences.Length; List availableIndexes = new List(); for (int i = 0; i < totalRooms; i++) availableIndexes.Add(i); + int saveIndex = FindRoomIndexByType(RoomType.Save); + if (saveIndex != -1) + { + var prefab = _factory.GetCachedPrefab(saveIndex); + if (prefab != null) + { + Room saveRoom = prefab.GetComponent(); + if (saveRoom != null) + { + _roomIndexesStack.Add(saveIndex); + availableIndexes.Remove(saveIndex); + + Debug.Log($"Первая комната: {saveRoom.name}"); + } + } + } + while (remainingTime > 0 && availableIndexes.Count > 0) { int randomIndex = Random.Range(0, availableIndexes.Count); @@ -47,33 +64,48 @@ namespace Code.Generator var prefab = _factory.GetCachedPrefab(chosenOne); if (prefab == null) continue; + Room room = prefab.GetComponent(); if (room == null) continue; - if (room.RoomType == RoomType.Basic) + switch (room.RoomType) { - float currentRoomTime = room.RoomTimer; - if (remainingTime >= currentRoomTime && ladderTimer < 30f) - { - _roomIndexesStack.Add(chosenOne); - remainingTime -= currentRoomTime; - ladderTimer += currentRoomTime; - Debug.Log($"комната {room.name} время {currentRoomTime} осталось: {remainingTime}"); - } + case RoomType.Save or RoomType.PickUp: + availableIndexes.RemoveAt(randomIndex); + continue; + + case RoomType.Basic: + float currentRoomTime = room.RoomTimer; + if (remainingTime >= currentRoomTime && ladderTimer < 30f) + { + _roomIndexesStack.Add(chosenOne); + remainingTime -= currentRoomTime; + ladderTimer += currentRoomTime; + Debug.Log($"комната {room.name} время {currentRoomTime} осталось: {remainingTime}"); + } + availableIndexes.RemoveAt(randomIndex); + break; + + case RoomType.Ladder: + if (ladderTimer >= 30f) + { + _roomIndexesStack.Add(chosenOne); + ladderTimer = 0f; + + availableIndexes.RemoveAt(randomIndex); + Debug.Log($"Лестница ура {room.name}"); + } + break; + + default: + Debug.Log($"тип комнаты {room.RoomType}"); + availableIndexes.RemoveAt(randomIndex); + break; } - else if (room.RoomType == RoomType.Ladder && ladderTimer >= 30f) - { - _roomIndexesStack.Add(chosenOne); - ladderTimer = 0f; - } - else - { - continue; - } - availableIndexes.RemoveAt(randomIndex); } + AddPickupRoom(); Debug.Log($"стек комнат: {_roomIndexesStack.Count}"); } @@ -98,12 +130,57 @@ namespace Code.Generator _spawnedRooms.Add(room); } } - - private void AddSaveZone(List roomIndexes) + + private int FindRoomIndexByType(RoomType neededType) { - + int totalRooms = generatorConfig.roomAssetReferences.Length; + for (int i = 0; i < totalRooms; i++) + { + var prefab = _factory.GetCachedPrefab(i); + if (prefab == null) + continue; + + Room room = prefab.GetComponent(); + if (room == null) + continue; + + if (room.RoomType == neededType) + return i; + } + + return -1; } + private void AddPickupRoom() + { + int pickupIndex = FindRoomIndexByType(RoomType.PickUp); + if (pickupIndex == -1) + { + Debug.Log("PickUp комнат не найдено але"); + return; + } + + var prefab = _factory.GetCachedPrefab(pickupIndex); + if (prefab == null) + return; + + Room pickupRoom = prefab.GetComponent(); + if (pickupRoom == null) + return; + + if (_roomIndexesStack.Count == 0) + { + Debug.LogWarning("стек пуст, нет позиции после первой"); + return; + } + + int insertPos = Random.Range(1, _roomIndexesStack.Count + 1); + + _roomIndexesStack.Insert(insertPos, pickupIndex); + Debug.Log($"PickUp комната '{pickupRoom.name}' позиция {insertPos}"); + } + + private void PlaceRoom(Room current, Room previous) { if (current.EnterMarker == null || previous.ExitMarker == null) diff --git a/Game/CourierOld/Assets/Code/Generator/RoomType.cs b/Game/CourierOld/Assets/Code/Generator/RoomType.cs index d720fc0..f9425eb 100644 --- a/Game/CourierOld/Assets/Code/Generator/RoomType.cs +++ b/Game/CourierOld/Assets/Code/Generator/RoomType.cs @@ -4,6 +4,7 @@ namespace Code.Generator { Basic, Ladder, - Save + Save, + PickUp } } \ No newline at end of file diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab b/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab new file mode 100644 index 0000000..0992a4e --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1210510213248623221 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2687956200588076758} + - component: {fileID: 8483856402102076135} + m_Layer: 0 + m_Name: Ladder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2687956200588076758 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1210510213248623221} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8483856402102076135 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1210510213248623221} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ba1a19c534f4401aa287d4b68ce470c, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Generator.Room + roomType: 1 + roomTimer: 0 + enterMarker: {fileID: 0} + exitMarker: {fileID: 0} diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab.meta b/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab.meta new file mode 100644 index 0000000..081c11b --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Ladder.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 90a339f078799f146aee5f482db994df +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab b/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab new file mode 100644 index 0000000..941d538 --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2465867831840681817 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3769058183323880653} + - component: {fileID: -721043246891927013} + m_Layer: 0 + m_Name: PickUp + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3769058183323880653 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2465867831840681817} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-721043246891927013 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2465867831840681817} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ba1a19c534f4401aa287d4b68ce470c, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Generator.Room + roomType: 3 + roomTimer: 0 + enterMarker: {fileID: 0} + exitMarker: {fileID: 0} diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab.meta b/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab.meta new file mode 100644 index 0000000..31cd7bc --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/PickUp.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b9f507af25f113b48a7bafe7c02da64d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab b/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab new file mode 100644 index 0000000..dbf637d --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &352515001007968155 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3783317667698125959} + - component: {fileID: 8644357564221115595} + m_Layer: 0 + m_Name: Room4 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3783317667698125959 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352515001007968155} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8644357564221115595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 352515001007968155} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ba1a19c534f4401aa287d4b68ce470c, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Generator.Room + roomType: 0 + roomTimer: 30 + enterMarker: {fileID: 0} + exitMarker: {fileID: 0} diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab.meta b/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab.meta new file mode 100644 index 0000000..b09a901 --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Room4.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 18c4fdd9261d275489e459ca70dfbcdc +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab b/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab new file mode 100644 index 0000000..e769719 --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &4585225813478361630 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4188259080799622194} + - component: {fileID: -986518061156804144} + m_Layer: 0 + m_Name: Save + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4188259080799622194 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4585225813478361630} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &-986518061156804144 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4585225813478361630} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5ba1a19c534f4401aa287d4b68ce470c, type: 3} + m_Name: + m_EditorClassIdentifier: Assembly-CSharp::Code.Generator.Room + roomType: 2 + roomTimer: 0 + enterMarker: {fileID: 0} + exitMarker: {fileID: 0} diff --git a/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab.meta b/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab.meta new file mode 100644 index 0000000..8660246 --- /dev/null +++ b/Game/CourierOld/Assets/Resources_moved/Rooms/Save.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3dc54d945f5468649b66664de9a18b12 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: