Example #1
0
        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();
        }