using UnityEngine; using System.Collections.Generic; public class ObjectSpawner : MonoBehaviour { public static ObjectSpawner Instance; [Header("Prefaby")] public GameObject[] objectPrefabs; public GameObject holePrefab; [Header("Počty")] [Tooltip("Kolik předmětů spawnovat")] public int objectCount = 3; [Tooltip("Kolik děr spawnovat")] public int holeCount = 1; [Header("Pohyb děr")] public bool holesMove = false; public float holeMoveSpeed = 2f; [Header("Spawn hranice (odpovídají kameře)")] public float minX = -3.5f; public float maxX = 3.5f; public float minY = -5f; public float maxY = 4f; [Header("Rodiče pro přehlednost (volitelné)")] public Transform objectParent; public Transform holeParent; private List spawnedObjects = new List(); private List spawnedHoles = new List(); void Awake() { if (Instance == null) Instance = this; else Destroy(gameObject); } void Start() { Spawn(); } public void Spawn() { Clear(); // LevelManager na aktuální počet if (LevelManager.Instance != null) { LevelManager.Instance.itemsToScore = objectCount; LevelManager.Instance.ResetCounter(); } SpawnHoles(); SpawnObjects(); } void SpawnHoles() { for (int i = 0; i < holeCount; i++) { Vector2 pos = RandomPos(1f); GameObject hole = Instantiate(holePrefab, pos, Quaternion.identity, holeParent); Hole h = hole.GetComponent(); if (h != null && holesMove) { h.hasMovement = true; h.moveSpeed = holeMoveSpeed; h.moveRange = new Vector2(Random.Range(0.8f, 1.8f), 0f); } spawnedHoles.Add(hole); } } void SpawnObjects() { for (int i = 0; i < objectCount; i++) { GameObject prefab = objectPrefabs[Random.Range(0, objectPrefabs.Length)]; Vector2 pos = RandomPos(0.5f); GameObject obj = Instantiate(prefab, pos, Quaternion.identity, objectParent); // Náhodná barva SpriteRenderer sr = obj.GetComponent(); if (sr != null) sr.color = Random.ColorHSV(0f, 1f, 0.7f, 1f, 0.9f, 1f); spawnedObjects.Add(obj); } } public void Clear() { foreach (var o in spawnedObjects) if (o != null) Destroy(o); foreach (var h in spawnedHoles) if (h != null) Destroy(h); spawnedObjects.Clear(); spawnedHoles.Clear(); } Vector2 RandomPos(float margin) => new Vector2( Random.Range(minX + margin, maxX - margin), Random.Range(minY + margin, maxY - margin) ); }