Files
Vampire-Survivor/Assets/Weapons/Halo/Halo.cs
T
2023-10-22 15:08:39 +02:00

98 lines
2.8 KiB
C#

using System.Collections.Generic;
using UnityEngine;
public class Halo : MonoBehaviour
{
[SerializeField]
private GameObject _sword;
private PlayerManager _manager;
private List<GameObject> swords = new();
private float _oldRadius;
private int _oldSwordsCount;
private void Start()
{
_manager = GameObject.FindGameObjectWithTag("Player").GetComponent<PlayerManager>();
_oldRadius = _manager.SwordsHaloRadius;
_oldSwordsCount = (int)_manager.SwordsQuantity;
float angle = Mathf.PI*2f / _manager.SwordsQuantity;
for(int i = 0; i < _manager.SwordsQuantity; i++)
{
GameObject sword = Instantiate(
_sword,
transform.position + new Vector3(Mathf.Cos(i * angle) * _manager.SwordsHaloRadius, Mathf.Sin(i * angle) * _manager.SwordsHaloRadius, 0),
Quaternion.identity,
transform
);
swords.Add(sword);
}
}
private void Update()
{
if (_oldRadius != _manager.SwordsHaloRadius)
{
_oldRadius = _manager.SwordsHaloRadius;
ResizeHalo();
}
if (_oldSwordsCount != _manager.SwordsQuantity)
{
AddSword();
_oldSwordsCount = (int)_manager.SwordsQuantity;
}
transform.Rotate(Vector3.forward, 200f * Time.deltaTime, Space.Self);
}
private void OnDrawGizmos()
{
Gizmos.DrawWireSphere(transform.position, _manager ? _manager.SwordsHaloRadius : 1f);
}
private void AddSword()
{
for (int i = 0; i < _oldSwordsCount; i++)
{
Destroy(swords[i]);
}
swords.Clear();
float angle = Mathf.PI * 2f / _manager.SwordsQuantity;
for (int i = 0; i < _manager.SwordsQuantity; i++)
{
GameObject sword = Instantiate(
_sword,
transform.position + new Vector3(Mathf.Cos(i * angle) * _manager.SwordsHaloRadius, Mathf.Sin(i * angle) * _manager.SwordsHaloRadius, 0),
Quaternion.identity,
transform
);
swords.Add(sword);
}
}
private void ResizeHalo()
{
for (int i = 0; i < _manager.SwordsQuantity; i++)
{
DestroyImmediate(swords[i]);
}
swords.Clear();
float angle = Mathf.PI * 2f / _manager.SwordsQuantity;
for (int i = 0; i < _manager.SwordsQuantity; i++)
{
GameObject sword = Instantiate(
_sword,
transform.position + new Vector3(Mathf.Cos(i * angle) * _manager.SwordsHaloRadius, Mathf.Sin(i * angle) * _manager.SwordsHaloRadius, 0),
Quaternion.identity,
transform
);
swords.Add(sword);
}
}
}