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); } } }