public override FireState Fire() { if (currentAmmo <= 0) { return(FireState.OutOfAmmo); } if (Time.time > fireTimer) { float yOffsetDelay = Mathf.Clamp(1 / (30 / Mathf.Abs(owner.position.y)), 0f, 1f); Transform bombClone = Poolable.Get <GuidedGlideBomb>(() => Poolable.CreateObj <GuidedGlideBomb>(projectilePrefab.gameObject), spawnLocation.position, owner.rotation).transform; Rigidbody2D bombRb = bombClone.GetComponent <Rigidbody2D>(); GuidedGlideBomb bomb = bombClone.GetComponent <GuidedGlideBomb>(); int layerValue = whatAreOurProjectiles.layermask_to_layer(); TrailRenderer projTrail = bombClone.GetComponent <TrailRenderer>(); projTrail.material = layerValue == 8 ? t1Mat : t2Mat; bombClone.gameObject.layer = layerValue; bomb.target = target; bomb.timeBeforeBoosters = Mathf.Clamp(bomb.timeBeforeBoosters - yOffsetDelay, 0.6f, 2f); bomb.whatIsTarget = whatIsTarget; bombRb.velocity = ownerRb.velocity; fireTimer = delayBetweenFire + Time.time; fireSound.Play(); return(FireState.Fired); } else if (Time.time <= fireTimer) { return(FireState.OnDelay); } return(FireState.Failed); }
public void DropBomb(Transform target) { float yOffsetDelay = Mathf.Clamp(1 / (30 / Mathf.Abs(owner.position.y)), 0f, 1f); Transform bombClone = Poolable.Get <GuidedGlideBomb>(() => Poolable.CreateObj <GuidedGlideBomb>(bombPrefab.gameObject), bombBay.position, owner.rotation).transform; Rigidbody2D bombRb = bombClone.GetComponent <Rigidbody2D>(); GuidedGlideBomb bomb = bombClone.GetComponent <GuidedGlideBomb>(); int layerValue = whatAreOurProjectiles.layermask_to_layer(); bombClone.gameObject.layer = layerValue; bomb.target = target; bomb.timeBeforeBoosters = Mathf.Clamp(bomb.timeBeforeBoosters - yOffsetDelay, 0.6f, 2f); Debug.Log(bomb.timeBeforeBoosters + " | " + yOffsetDelay); bomb.whatIsTarget = whatIsTarget; bombRb.velocity = thisRb.velocity; dropTimer = dropDelay + Time.time; }