otamesi
This commit is contained in:
81
Assets/_Scripts/BossWebSpawner.cs
Normal file
81
Assets/_Scripts/BossWebSpawner.cs
Normal file
@@ -0,0 +1,81 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
public class BossWebSpawner : MonoBehaviour, IPauseable
|
||||
{
|
||||
[SerializeField] private GameObject warningMarkerPrefab;
|
||||
[SerializeField] private GameObject webPrefab;
|
||||
[field: SerializeField] public float WebAvoidanceRadius { get; private set; } = 2.5f;
|
||||
|
||||
public List<Vector3> ActiveWebPositions { get; private set; } = new List<Vector3>();
|
||||
private bool isPaused;
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (WorldPauseManager.Instance != null)
|
||||
{
|
||||
WorldPauseManager.Instance.Register(this);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnDestroy()
|
||||
{
|
||||
if (WorldPauseManager.Instance != null)
|
||||
{
|
||||
WorldPauseManager.Instance.Unregister(this);
|
||||
}
|
||||
}
|
||||
|
||||
public void Pause() => isPaused = true;
|
||||
public void Resume() => isPaused = false;
|
||||
|
||||
private IEnumerator WaitForUnpausedSeconds(float duration)
|
||||
{
|
||||
float timer = 0f;
|
||||
while (timer < duration)
|
||||
{
|
||||
if (!isPaused)
|
||||
{
|
||||
timer += Time.deltaTime;
|
||||
}
|
||||
yield return null;
|
||||
}
|
||||
}
|
||||
|
||||
public void SpawnWarningAndWeb(Vector3 targetGroundPos, float delay, float webDuration)
|
||||
{
|
||||
StartCoroutine(SpawnWebRoutine(targetGroundPos, delay, webDuration));
|
||||
}
|
||||
|
||||
private IEnumerator SpawnWebRoutine(Vector3 pos, float delay, float duration)
|
||||
{
|
||||
ActiveWebPositions.Add(pos);
|
||||
|
||||
GameObject marker = null;
|
||||
if (warningMarkerPrefab != null)
|
||||
{
|
||||
marker = Instantiate(warningMarkerPrefab, pos + new Vector3(0, 0.5f, 0), Quaternion.identity);
|
||||
}
|
||||
|
||||
yield return WaitForUnpausedSeconds(delay);
|
||||
|
||||
if (marker != null) Destroy(marker);
|
||||
|
||||
if (webPrefab != null)
|
||||
{
|
||||
Quaternion webRotation = Quaternion.Euler(270f, 0f, 0f);
|
||||
GameObject web = Instantiate(webPrefab, pos + new Vector3(0, 0.5f, 0), webRotation);
|
||||
|
||||
yield return WaitForUnpausedSeconds(duration);
|
||||
|
||||
if (web != null) Destroy(web);
|
||||
}
|
||||
else
|
||||
{
|
||||
yield return WaitForUnpausedSeconds(duration);
|
||||
}
|
||||
|
||||
ActiveWebPositions.Remove(pos);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user