Messing with meshes and object spawning

This commit is contained in:
Daniel Tyomin
2024-08-18 23:36:45 +02:00
parent 8e357f12d6
commit a90c2400eb
19 changed files with 3720 additions and 651 deletions

View File

@@ -1,88 +1,19 @@
using System;
using System.Collections.Generic;
using UnityEngine;
public class ProductSpawner : MonoBehaviour, IResetable
public class ProductSpawner: MonoBehaviour
{
public enum ProductionPhaseType
{
Pause = 0,
Production = 1,
}
public List<Transform> PossibleOrientations;
public Vector2 yRotation;
[Serializable]
public struct ProductionPhase
public void SpawnProduct(ProductType type)
{
public ProductionPhaseType Type;
public ProductType ProductType;
[Min(1f)]
public float Duration;
[Min(1f)]
public float TotalSpawnCount;
var randomIndex = Random.Range(0, PossibleOrientations.Count);
var randomOrientation = PossibleOrientations[randomIndex];
public float SpawnInterval => Duration / TotalSpawnCount;
var rotation = Quaternion.AngleAxis(Random.Range(yRotation.x, yRotation.y), Vector3.up) *
randomOrientation.rotation;
ProductType.SpawnProduct(type, transform, randomOrientation.position, rotation);
}
public List<ProductionPhase> ProductionPhases;
private List<ProductionPhase> RuntimeProductionPhases;
public float _remainingDuration;
public float _spawnTimer;
public void Start()
{
ResetMachine();
}
public void ResetMachine()
{
enabled = true;
_remainingDuration = 0f;
_spawnTimer = 0f;
RuntimeProductionPhases = new(ProductionPhases);
}
private void Update()
{
if (RuntimeProductionPhases.Count == 0)
{
enabled = false;
return;
}
var currentPhase = RuntimeProductionPhases[0];
if (_remainingDuration <= 0)
{
_remainingDuration = currentPhase.Duration;
_spawnTimer = 0f;
}
_remainingDuration -= Time.deltaTime;
if (currentPhase.Type != ProductionPhaseType.Pause)
{
_spawnTimer -= Time.deltaTime;
if (_spawnTimer >= 0f)
{
if (_remainingDuration <= 0)
{
RuntimeProductionPhases.RemoveAt(0);
}
return;
}
_spawnTimer = currentPhase.SpawnInterval;
ProductType.SpawnProduct(currentPhase.ProductType, transform);
}
if (_remainingDuration <= 0)
{
RuntimeProductionPhases.RemoveAt(0);
}
}
}
}