laser mine and source

Created Diff never expires
11 removals
72 lines
33 additions
92 lines
using System.Collections;
using System.Collections;
using System.Collections.Generic;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine;


public class Shooter : MonoBehaviour
public class ShooterCOPY : MonoBehaviour
{
{
Coroutine firingCoroutine;
AudioPlayer audioPlayer;

[Header("General")]
[Header("General")]
[SerializeField] GameObject projectilePrefab;
[SerializeField] GameObject projectilePrefab;
[SerializeField] float projectileSpeed = 10f;
[SerializeField] float projectileSpeed = 10f;
[SerializeField] float projectileLifetime = 5f;
[SerializeField] float projectileLifetime = 5f;
[SerializeField] float baseFiringRate = 0.2f;
[SerializeField] float baseFiringRate = 0.2f;


[Header("AI")]
[Header("AI")]
[SerializeField] bool useAI;
[SerializeField] bool useAI;
/* [SerializeField] float aiShootSpeedLow = 1f;
[SerializeField] float aiShootSpeedHigh = 4f; */
[SerializeField] float firingRateVariance = 0f;
[SerializeField] float firingRateVariance = 0f;
[SerializeField] float minimumFiringRate = 0.1f;
[SerializeField] float minimumFiringRate = 0.1f;


[HideInInspector] public bool isFiring;
[HideInInspector] public bool isFiring;


Coroutine firingCoroutine;
void Awake()
{
audioPlayer = FindObjectOfType<AudioPlayer>();
}



void Start()
void Start()
{
{
if (useAI)
if (useAI)
{
{
isFiring = true;
isFiring = true;
}
}
}
}


void Update()
void Update()
{
{
Fire();
Fire();
}
}


void Fire()
void Fire()
{
{
if (isFiring && firingCoroutine == null)
if (isFiring && firingCoroutine == null)
{
{
firingCoroutine = StartCoroutine(FireContinuously());
Debug.Log("starting our coroutine");
firingCoroutine = StartCoroutine(FireContinously());
}
}
else if (!isFiring && firingCoroutine != null)
else if (!isFiring && firingCoroutine != null)
{
{
Debug.Log("stopping our corouting");
StopCoroutine(firingCoroutine);
StopCoroutine(firingCoroutine);
firingCoroutine = null;
firingCoroutine = null;
}
}
}
}


IEnumerator FireContinuously()
IEnumerator FireContinously()
{
{
while (true)
while (true)
{
{
GameObject instance = Instantiate(projectilePrefab,
GameObject instance = Instantiate(projectilePrefab, transform.position, Quaternion.identity);
transform.position,
Quaternion.identity);


Rigidbody2D rb = instance.GetComponent<Rigidbody2D>();
Rigidbody2D rb = instance.GetComponent<Rigidbody2D>();

if (rb != null)
if (rb != null)
{
{
rb.velocity = transform.up * projectileSpeed;
rb.velocity = transform.up * projectileSpeed;
}
}


Destroy(instance, projectileLifetime);
Destroy(instance, projectileLifetime);


float timeToNextProjectile = Random.Range(baseFiringRate - firingRateVariance,
/* if (useAI)
baseFiringRate + firingRateVariance);
{ */
//firingRate = Random.Range(1, 4);

float timeToNextProjectile = Random.Range(baseFiringRate - firingRateVariance, baseFiringRate + firingRateVariance);
timeToNextProjectile = Mathf.Clamp(timeToNextProjectile, minimumFiringRate, float.MaxValue);
timeToNextProjectile = Mathf.Clamp(timeToNextProjectile, minimumFiringRate, float.MaxValue);


if (transform.position.x > -5 && transform.position.x < 5)
{
audioPlayer.PlayClip(soundTypes.shooting);
}
//}

Debug.Log($"Time to next projectile is {timeToNextProjectile}");
yield return new WaitForSeconds(timeToNextProjectile);
yield return new WaitForSeconds(timeToNextProjectile);
}
}
}
}
}
}