Files
blackhole-escape/Assets/Scripts/Scripts/BlackHoleManager.cs
iDunnoDev fb3415c7b2 Added new sounds needed for game
Added blackhole swirl texture and materials
Added Magnet, Hunter and Drop core powerups and script overhaul for powerups in general
Added Scenes and Cinematic changes for the game, win and death screens
Added a score
Changed the way enemy spawns work
Removed unused scripts
2022-07-14 17:31:10 +01:00

157 lines
4.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/// <summary>
/// Class for dealing with the blackhole
/// </summary>
public class BlackHoleManager : MonoBehaviour
{
// List of blackhole force scripts currently in play
public static List<BlackHoleForce> blackHoleForceObjects = new List<BlackHoleForce>();
// the GO of the blackhole
public GameObject blackHoleModel;
// Bools to lock the size and to time grow it
public bool sizeLocked;
public bool timedGrow;
// Vars for the blackhole size
public float initialBlackHoleRadius;
public float blackHoleSizeIncrement;
public float blackHoleSizeTime;
public float gravityPullForce;
public float currentBlackHoleRadius;
private float _currentBlackHoleTimePassed;
// Vars for dealing with the blackhole SFX
private AudioSource _currentAudioSource;
public AudioClip blackHoleAmbiantSFX;
public int maxAudioSize = 5;
public bool playBlackHoleAmbiantNoise;
/// <summary>
/// Method to get the current size of the blackhole
/// </summary>
/// <returns>Size of the blackhole</returns>
public float GetCurrentBlackHoleSize()
{
return currentBlackHoleRadius;
}
// Start is called before the first frame update
void Awake()
{
// set the initial blackhole vars and size
_currentBlackHoleTimePassed = 0.0f;
blackHoleModel.transform.localScale = Vector3.one * initialBlackHoleRadius;
currentBlackHoleRadius = initialBlackHoleRadius;
// Set the audio source and SFX
_currentAudioSource = gameObject.GetComponent<AudioSource>();
if (_currentAudioSource)
{
if (playBlackHoleAmbiantNoise)
{
_currentAudioSource.clip = blackHoleAmbiantSFX;
_currentAudioSource.loop = true;
_currentAudioSource.Play();
}
else
{
_currentAudioSource.clip = null;
_currentAudioSource.Stop();
}
}
}
private void Update()
{
// fort nite
BlackHoleAudio();
if (timedGrow)
{
if (!GameEngine.isPaused)
{
TimedGrow();
}
}
}
/// <summary>
/// Method for dealing with increasing the sound catchment area when the blackhole grows
/// </summary>
public void BlackHoleAudio()
{
GetComponent<AudioSource>().maxDistance = currentBlackHoleRadius + maxAudioSize;
}
/// <summary>
/// Method for dealing with a timed blackhole grow, if the size is not locked and the timed option is checked, a given amount of mass is given to the blackhole every X seconds
/// </summary>
private void TimedGrow()
{
if (!sizeLocked)
{
if (_currentBlackHoleTimePassed >= blackHoleSizeTime)
{
blackHoleModel.transform.localScale += Vector3.one * blackHoleSizeIncrement;
currentBlackHoleRadius += blackHoleSizeIncrement;
_currentBlackHoleTimePassed = 0.0f;
}
else
{
_currentBlackHoleTimePassed += Time.deltaTime;
}
}
}
private void OnCollisionEnter(Collision collision)
{
// If we collide with an object trigger is blackhole hit method
BlackHoleForce bhfHit = collision.gameObject.GetComponent<BlackHoleForce>();
if (bhfHit)
{
bhfHit.HitBlackHole();
}
}
private void FixedUpdate()
{
if (!GameEngine.isPaused)
{
// Apply force to every blackhole force object in the list
foreach (BlackHoleForce bhfObject in blackHoleForceObjects)
{
bhfObject.ApplyBlackHoleForce(gravityPullForce * Time.fixedDeltaTime);
}
}
}
/// <summary>
/// Method for dealing with asteroids growing the blackhole since they increase it every X hits
/// </summary>
public void AsteroidGrow()
{
return;
}
/// <summary>
/// Method for growing the blackhole if the size has not been locked
/// </summary>
public void Grow()
{
if (!sizeLocked)
{
blackHoleModel.transform.localScale += Vector3.one * blackHoleSizeIncrement;
currentBlackHoleRadius += blackHoleSizeIncrement;
}
}
}