📄 shots.cs
字号:
using System;
using System.Drawing;
using Microsoft.DirectX;
using Microsoft.DirectX.Direct3D;
using Direct3D = Microsoft.DirectX.Direct3D;
/// <summary>
/// Handles the collision detection and returns the array of shots for sending to other players
/// </summary>
[Serializable]
public class Shots
{
Photon[] shots;
[NonSerialized]
float timeSinceShot = 0;
[NonSerialized]
Rectangle screenBounds;
public Shots(Device device)
{
shots = new Photon[Constants.NumShots];
for (int count = 0; count < Constants.NumShots; count++)
{
shots[count] = new Photon(device);
}
}
public Rectangle ScreenBounds
{
get
{
return screenBounds;
}
set
{
screenBounds = value;
}
}
public Photon[] GetShotArray()
{
lock(this)
{
return shots;
}
}
public void SetShotArray(Photon[] shotArray)
{
lock(this)
{
this.shots = shotArray;
}
}
public bool Shoot(Vector3 position, Vector3 launchVector)
{
if (timeSinceShot < Constants.ShotDeltaTime)
return false;
timeSinceShot = 0;
foreach (Photon shot in shots)
{
if (!shot.Alive)
{
shot.SetShot(position, launchVector);
return true;
}
}
return false;
}
public void UpdatePosition(float elapsedTime)
{
timeSinceShot += elapsedTime;
foreach (Photon shot in shots)
{
shot.UpdatePosition(elapsedTime);
}
}
public void Clear()
{
foreach (Photon shot in shots)
{
shot.Alive = false;
}
}
public bool TestShots(Ship ship)
{
foreach (Photon shot in shots)
{
if (shot.Alive)
{
float distance = Vector3.Length(shot.Location - ship.Position.Location);
if (distance < Constants.ShotCollisionLimit)
{
shot.Alive = false;
return true;
}
}
}
return false;
}
public void Render()
{
foreach (Photon shot in shots)
{
shot.Render();
}
}
public void RestoreDeviceObjects()
{
foreach (Photon shot in shots)
{
shot.RestoreDeviceObjects();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -