private void Start()
    {
        GameObject beamObject = Instantiate(beamPrefab, Vector3.zero, Quaternion.identity);

        _bolt = beamObject.GetComponent <CombatProjectileLaserBolt>();
        //beam.Initialise(transform);

        readyToFire = false;
    }
    private IEnumerator FireLasersAtTargetCoroutine(Entity sourceEntity, Entity targetEntity, Vector3 targetPosition)
    {
        if (FiringTimeStart > 0)
        {
            yield return(new WaitForSeconds(FiringTimeStart * TurnController.TURN_DURATION));
        }

        float firingDuration = (FiringTimeEnd - FiringTimeStart) * TurnController.TURN_DURATION;
        float burstDuration  = firingDuration / (BurstsPerAction * 2 - 1);
        float fireInterval   = burstDuration / ShotsPerBurst;

        WaitForSeconds burstDurationYield = new WaitForSeconds(burstDuration);
        WaitForSeconds fireIntervalYield  = new WaitForSeconds(fireInterval);

        for (int burstCount = 0; burstCount < BurstsPerAction; burstCount++)
        {
            for (int shotCount = 0; shotCount < ShotsPerBurst; shotCount++)
            {
                GameObject laserObject = Instantiate(LaserPrefab, sourceEntity.transform.position, Quaternion.identity);
                CombatProjectileLaserBolt combatProjectileLaserBolt = laserObject.GetComponent <CombatProjectileLaserBolt>();

                Vector3 origin    = sourceEntity.transform.position;
                Vector3 direction = (targetEntity == null ? targetPosition : targetEntity.transform.position) - origin;

                float arcTheta = Random.Range(-ArcSpread, ArcSpread);
                direction = Quaternion.Euler(0f, arcTheta, 0f) * direction;

                combatProjectileLaserBolt.Initialise(origin, direction, LaserSpeed, sourceEntity.id);

                yield return(fireIntervalYield);
            }

            if (burstCount < BurstsPerAction - 1)
            {
                yield return(burstDurationYield);
            }
        }
    }