private IEnumerator Fire(float multiplier) { // create charge charge = Prefabs.Pop(chargePrefab).transform; charge.parent = myTransform; charge.SetPosRot(myTransform.position + myTransform.TransformDirection(attackOffset), myTransform.rotation); charge.localScale = Vector3.one; // increase charge float timer = chargeTime; while (timer > 0f) { timer -= deltaTime; charge.localScale += Vector3.one * chargeSpeed * deltaTime; yield return null; } charge.GetComponent<PoolObject>().Disable(); // fire laser = Prefabs.Pop(laserPrefab).transform; laser.parent = myTransform; laser.SetPosRot(myTransform.position + myTransform.TransformDirection(attackOffset), myTransform.rotation); laser.GetComponent<Hitbox>().Initialize(myShip, damage * multiplier); while (power > 0f) { power -= FullPower / attackTime * deltaTime; float size = maxSize * power / FullPower; if (Physics.Raycast(laser.position, myTransform.forward, out rayInfo, maxRange) && rayInfo.collider.GetComponent<Health>() != null) { laser.localScale = new Vector3(size, size, rayInfo.distance); } else { laser.localScale = new Vector3(size, size, maxRange); } yield return null; } power = 0f; EndAttack(); }