UPF/Assets/Game/Scripts/Minigame/Solo/MinigameManagerSolo.cs
2023-02-24 22:14:55 +05:30

88 lines
3.1 KiB
C#
Executable File

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MinigameManagerSolo : MonoBehaviour
{
public static MinigameManagerSolo instance{get; private set;}
[SerializeField]private int MaxMoons;
[SerializeField]private int MaxStars;
[field:SerializeField]public float mapRadius {get; private set;}
private List<PickupItemSolo> m_activeMoons = new List<PickupItemSolo>();
private List<PickupItemSolo> m_pooledMoons = new List<PickupItemSolo>();
private List<PickupItemSolo> m_activeStars = new List<PickupItemSolo>();
private List<PickupItemSolo> m_pooledStars = new List<PickupItemSolo>();
[SerializeField]private PickupItemSolo MoonPrefab,StarPrefab;
[SerializeField]private Transform PickupsParent;
void Awake(){
instance=this;
}
// Update is called once per frame
void Update()
{
if(m_activeMoons.Count < MaxMoons){
SpawnMoons(MaxMoons - m_activeMoons.Count);
}
if(m_activeStars.Count < MaxStars){
SpawnStars(MaxStars - m_activeStars.Count);
}
if(Vector2.Distance(Vector2.zero, SpaceshipControllerSolo.player.transform.position) > mapRadius ){
SpaceshipControllerSolo.player.Die();
}
}
void SpawnMoons(int count){
int newCount = count - m_pooledMoons.Count;
if(newCount >0){
for(int i =0; i < newCount; i++){
PickupItemSolo newItem = Instantiate(MoonPrefab, PickupsParent).Reposition(MinigameManager.getRandomPointInCirlce(Vector3.zero, mapRadius));
m_activeMoons.Add(newItem);
}
}
for(int i=0; i < count - newCount; i++){
PickupItemSolo pooledMoon = m_pooledMoons[0];
pooledMoon.Reposition(MinigameManager.getRandomPointInCirlce(Vector3.zero, mapRadius));
m_activeMoons.Add(pooledMoon);
m_pooledMoons.RemoveAt(0);
}
}
void SpawnStars(int count){
int newCount = count - m_pooledStars.Count;
if(newCount >0){
for(int i =0; i < newCount; i++){
PickupItemSolo newItem = Instantiate(StarPrefab, PickupsParent).Reposition(MinigameManager.getRandomPointInCirlce(Vector3.zero, mapRadius));
m_activeStars.Add(newItem);
}
}
for(int i=0; i < count - newCount; i++){
PickupItemSolo pooledStar = m_pooledStars[0];
pooledStar.Reposition(MinigameManager.getRandomPointInCirlce(Vector3.zero, mapRadius));
m_activeStars.Add(pooledStar);
m_pooledStars.RemoveAt(0);
}
}
public static void DeactivatePickup(PickupItemSolo item){
switch(item.type){
case PickupItemSolo.PickupType.Moon:
instance.m_activeMoons.Remove(item);
instance.m_pooledMoons.Add(item);
break;
case PickupItemSolo.PickupType.Star:
instance.m_activeStars.Remove(item);
instance.m_pooledStars.Add(item);
break;
}
}
}