Триггеры на вход в комнату

This commit is contained in:
Pe4enega committed 2025-11-25 20:04:36 +03:00
1 parent ff8ed96138
commit cea36c0cda
5 files changed
+102 -27

No files matched your search

@@ -1,38 +1,66 @@
using System.Collections.Generic;
using Code.Gameplay.Orders.Order;
using Cysharp.Threading.Tasks;
using Reflex.Attributes;
using UnityEngine;
namespace Code.Generator
{
public class RoomGenerator : MonoBehaviour
{
[Inject] private IOrderService _orderService;
[SerializeField] private GeneratorConfig generatorConfig;
private RoomGeneratorFactory _factory;
private float _timer;
private List<int> _roomIndexesStack;
private List<Room> _spawnedRooms;
private int _nextRoomStackIndex;
private async void Awake()
{
_factory = new RoomGeneratorFactory(generatorConfig);
_spawnedRooms = new List<Room>();
_roomIndexesStack = new List<int>();
_timer = Random.Range(60, 120f);
Debug.LogWarning($"КОТЛЫ ГЕНЕРАЛЬСКИЕ{_timer}");
Debug.LogWarning($"КОТЛЫ ГЕНЕРАЛЬСКИЕ{_orderService.DeliveryTimer}");
await _factory.PreloadRooms();
CreateRoomsStack();
await GenerateRoomsAsync();
CreateRoomsStack();
await SpawnInitialRoomsAsync();
}
private void OnEnable()
{
RoomTrigger.PlayerEnteredRoom += OnPlayerEntered;
}
private void OnDisable()
{
RoomTrigger.PlayerEnteredRoom -= OnPlayerEntered;
}
public async void OnPlayerEntered()
{
await SpawnNextRoomAsync();
if (_spawnedRooms.Count > 2)
{
Room roomToRemove = _spawnedRooms[0];
_spawnedRooms.RemoveAt(0);
_factory.ReleaseRoom(roomToRemove);
Destroy(roomToRemove.gameObject);
}
}
private void CreateRoomsStack()
{
_roomIndexesStack.Clear();
var remainingTime = _timer;
var remainingTime = _orderService.DeliveryTimer;
float ladderTimer = 0f;
int totalRooms = generatorConfig.roomAssetReferences.Length;
List<int> availableIndexes = new List<int>();
@@ -109,26 +137,36 @@ namespace Code.Generator
Debug.Log($"стек комнат: {_roomIndexesStack.Count}");
}
private async UniTask GenerateRoomsAsync()
private async UniTask SpawnInitialRoomsAsync()
{
for (int i = 0; i < _roomIndexesStack.Count; i++)
_nextRoomStackIndex = 0;
await SpawnNextRoomAsync();
await SpawnNextRoomAsync();
}
private async UniTask SpawnNextRoomAsync()
{
if (_nextRoomStackIndex >= _roomIndexesStack.Count)
return;
int index = _roomIndexesStack[_nextRoomStackIndex];
Room room = await _factory.CreateRoomByIndex(index);
if (_spawnedRooms.Count == 0)
{
int index = _roomIndexesStack[i];
Room room = await _factory.CreateRoomByIndex(index);
if (i == 0)
{
room.transform.position = Vector3.zero;
room.transform.rotation = Quaternion.identity;
}
else
{
Room previousRoom = _spawnedRooms[i - 1];
PlaceRoom(room, previousRoom);
}
_spawnedRooms.Add(room);
room.transform.position = Vector3.zero;
room.transform.rotation = Quaternion.identity;
}
else
{
Room previousRoom = _spawnedRooms[_spawnedRooms.Count - 1];
PlaceRoom(room, previousRoom);
}
_spawnedRooms.Add(room);
_nextRoomStackIndex++;
}
private int FindRoomIndexByType(RoomType neededType)
@@ -170,7 +208,7 @@ namespace Code.Generator
if (_roomIndexesStack.Count == 0)
{
Debug.LogWarning("стек пуст, нет позиции после первой");
Debug.LogWarning("Стек пуст, нет позиции после первой");
return;
}