protected virtual IEnumerator Strafe(Projectile.ProjectData projectData, int strafeMode) { if (strafeMode == 0) { while (m_ShootStrafeTimer < shootStrafeDuration) { m_ProjectilePool[strafeMode].Pop(projectData); m_ShootStrafeTimer += shootStrafeDuration / shootStrafeTimes; yield return(new WaitForSeconds(shootStrafeDuration / shootStrafeTimes)); } m_ShootStrafeTimer = 0.0f; yield break; } else { while (m_LaunchStrafeTimer < launchStrafeDuration) { launchAudio.PlayRandomSound(); m_ProjectilePool[strafeMode].Pop(projectData); m_LaunchStrafeTimer += launchStrafeDuration / launchStrafeTimes; yield return(new WaitForSeconds(launchStrafeDuration / launchStrafeTimes)); } m_LaunchStrafeTimer = 0.0f; yield break; } }
public virtual void DoShoot() { Vector2 shootPosition = shootingOrigin.transform.localPosition; RaycastHit2D[] m_HitBuffer = new RaycastHit2D[1]; Projectile.ProjectData projectData = new Projectile.ProjectData() { direction = m_SpriteForward, gravity = Vector2.zero, shootOrigin = shootingOrigin.position, shootSpeed = launchSpeed, destroyWhenOutOfView = destroyWhenOutOfView }; if (track) { projectData.Track = true; projectData.direction = new Vector2(m_SpriteForward.x * Mathf.Cos(Mathf.Deg2Rad * shootAngle), Mathf.Sin(Mathf.Deg2Rad * shootAngle)); projectData.Target = m_Target; projectData.trackSensitivity = trackSensitivity; projectData.timeBeforeAutodestruct = trackTime; } else { projectData.Track = false; projectData.Target = null; if (locate) { projectData.direction = (Target.transform.position - shootingOrigin.position).normalized; } } ProjectileObject obj = m_ProjectilePool.Pop(projectData); shootingAudio.PlayRandomSound(); }
public virtual void DoShoot() { Vector2 shootPosition = shootingOrigin.transform.localPosition; RaycastHit2D[] m_HitBuffer = new RaycastHit2D[1]; Projectile.ProjectData projectData = new Projectile.ProjectData() { direction = m_SpriteForward, gravity = Vector2.zero, shootOrigin = shootingOrigin.position, shootSpeed = launchSpeed, destroyWhenOutOfView = destroyWhenOutOfView, //----------// timeBeforeAutodestruct = 4f }; //if (track) //{ // projectData.Track = true; // projectData.direction = new Vector2(m_SpriteForward.x * Mathf.Cos(Mathf.Deg2Rad * shootAngle), Mathf.Sin(Mathf.Deg2Rad * shootAngle)); // projectData.Target = target; // projectData.trackSensitivity = trackSensitivity; // projectData.timeBeforeAutodestruct = trackTime; //} //else //{ projectData.Track = false; projectData.Target = null; if (locate) { projectData.direction = (target.transform.position - shootingOrigin.position).normalized; } //} if (!shootStrafe) { m_ProjectilePool[0].Pop(projectData); } else { StartCoroutine(Strafe(projectData, 0)); } strafeAudio.PlayRandomSound(); }
public void Launch() { //Vector2 force = m_SpriteForward.x > 0 ? Vector2.right.Rotate(shootAngle) : Vector2.left.Rotate(-shootAngle); //force *= shootForce; Vector2 shootPosition = shootingOrigin.transform.localPosition; //if we are flipped compared to normal, we need to localy flip the shootposition too //if ((spriteFaceLeft && m_SpriteForward.x > 0) || (!spriteFaceLeft && m_SpriteForward.x > 0)) // shootPosition.x *= -1; //BulletObject obj = m_BulletPool.Pop(transform.TransformPoint(shootPosition)); RaycastHit2D[] m_HitBuffer = new RaycastHit2D[1]; Projectile.ProjectData projectData = new Projectile.ProjectData() { direction = m_SpriteForward, gravity = Vector2.zero, shootOrigin = shootingOrigin.position, shootSpeed = launchSpeed }; if ((Physics2D.Raycast(shootingOrigin.position, m_SpriteForward, m_ContactFilter, m_HitBuffer, viewDistance) > 0 || m_Target == null) && LaunchTracked == false) { projectData.Track = false; projectData.Target = null; } else { projectData.Track = true; projectData.direction = new Vector2(m_SpriteForward.x * Mathf.Cos(Mathf.Deg2Rad * launchAngle), Mathf.Sin(Mathf.Deg2Rad * launchAngle)); projectData.Target = m_Target; projectData.trackSensitivity = trackSensitivity; } ProjectileObject obj = m_ProjectilePool.Pop(projectData); LaunchAudio.PlayRandomSound(); //obj.rigidbody2D.velocity = (GetProjectilVelocity(m_TargetShootPosition, shootingOrigin.transform.position)); }
public override void DoShoot() { Vector2 shootPosition = shootingOrigin.transform.localPosition; RaycastHit2D[] m_HitBuffer = new RaycastHit2D[1]; Projectile.ProjectData[] projectData = new Projectile.ProjectData[bulletNum]; Vector2 vector = m_SpriteForward; for (int i = 0; i < projectData.Length; i++) { projectData[i] = new Projectile.ProjectData { direction = projectData.Length > 1 ? vector.Rotate(RangeAngle * 0.5f).Rotate(-i * RangeAngle / (bulletNum - 1)) : m_SpriteForward, gravity = Vector2.zero, shootOrigin = shootingOrigin.transform.position, shootSpeed = launchSpeed }; if (track) { projectData[i].Track = true; projectData[i].Target = m_Target; projectData[i].trackSensitivity = trackSensitivity; } else { projectData[i].Track = false; projectData[i].Target = null; if (locate) { projectData[i].direction = (Target.transform.position - shootingOrigin.position).normalized; } } ProjectileObject obj = m_ProjectilePool.Pop(projectData[i]); } shootingAudio.PlayRandomSound(); }