private bool FireBullet(GameStatus gameStatus) { if (bulletTarget.Length > 0) { double v0 = bulletSpeed; double g = 9.8; double sin = Math.Sin(firingAngle), cos = Math.Cos(firingAngle); DebugWindow.Update("12:FANG", (firingAngle * 180 / Math.PI).ToString("F02")); bullet = new Bullet(); bullet.Horizontal.Acceleration = 0; bullet.Horizontal.Velocity = cos * v0; bullet.Horizontal.Position = 0.05; bullet.Vertical.Acceleration = -g; bullet.Vertical.Velocity = sin * v0; bullet.Vertical.Position = 0; /* Console.WriteLine(string.Format("bullet allocated, Vertical a={0:F2} v={1:F2} p={2:F2}", bullet.Vertical.Acceleration, bullet.Vertical.Velocity, bullet.Vertical.Position)); * */ bulletAzimuth = bulletTarget.Azimuth; //Console.WriteLine(string.Format("{0:F2},{1:F2}", angles[0] * 180 / Math.PI, angles[1] * 180 / Math.PI)); DX.StopSoundMem(turretMoveSound); DX.PlaySoundMem(fireSound, DX.DX_PLAYTYPE_BACK); } return true; }
private void DrawBullet(bool hit) { if (bullet != null && bullet.Horizontal.Position > 0) { float focalLength = Sensor.KinectSensor.DepthStream.NominalFocalLengthInPixels; //double projYPos = bullet.Vertical.Position / bullet.Horizontal.Position * focalLength; //double projXPos = Math.Tan(bulletAzimuth) * sensor.KinectSensor.DepthStream.NominalFocalLengthInPixels; double rHorizon = bullet.Horizontal.Position; double projYPos = focalLength * Math.Tan(Math.Atan2(bullet.Vertical.Position, bullet.Horizontal.Position) - Sensor.KinectSensor.ElevationAngle / 180.0 * Math.PI); double projXPos = rHorizon * Math.Sin(bulletAzimuth) * focalLength / (rHorizon * Math.Cos(bulletAzimuth) + 0.05); DebugWindow.Update("13:PROJX", projXPos.ToString("F2")); double r = Math.Sqrt(Math.Pow(bullet.Vertical.Position, 2) + Math.Pow(bullet.Horizontal.Position, 2)); int drawYPos = (int)(GameSettings.WindowHeight / 2 - projYPos); int drawXPos = (int)(GameSettings.WindowWidth / 2 + projXPos); //Console.WriteLine(string.Format("projXPos={0:F2}, projYPos={1:F2}", projXPos, projYPos)); double drawScale = focalLength / bullet.Horizontal.Position; if (hit) { int width2 = (int)(0.1 * drawScale / 2); dokuroX = drawXPos; dokuroY = drawYPos; dokuroWidth2 = width2; bullet = null; bulletHit = false; } else { DX.DrawCircle(drawXPos, drawYPos, (int)(0.02 * drawScale), DX.GetColor(255, 0, 0), DX.TRUE); } } }