Ranged weapon firing does not depend on DefaultGrid anymore.

This commit is contained in:
Acruid
2020-08-11 16:44:15 -07:00
parent 32e4c24342
commit cdc6ec3bfc
5 changed files with 78 additions and 23 deletions

View File

@@ -159,10 +159,10 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
public override void OnAdd()
{
base.OnAdd();
var rangedWeapon = Owner.GetComponent<ServerRangedWeaponComponent>();
rangedWeapon.Barrel = this;
rangedWeapon.FireHandler += Fire;
rangedWeapon.WeaponCanFireHandler += WeaponCanFire;
var rangedWeaponComponent = Owner.GetComponent<ServerRangedWeaponComponent>();
rangedWeaponComponent.Barrel = this;
rangedWeaponComponent.FireHandler += Fire;
rangedWeaponComponent.WeaponCanFireHandler += WeaponCanFire;
}
public override void OnRemove()
@@ -208,7 +208,12 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
return true;
}
private void Fire(IEntity shooter, GridCoordinates target)
/// <summary>
/// Fires a round of ammo out of the weapon.
/// </summary>
/// <param name="shooter">Entity that is operating the weapon, usually the player.</param>
/// <param name="targetPos">Target position on the map to shoot at.</param>
private void Fire(IEntity shooter, Vector2 targetPos)
{
var soundSystem = EntitySystem.Get<AudioSystem>();
if (ShotsLeft == 0)
@@ -229,8 +234,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
}
// At this point firing is confirmed
var worldPosition = IoCManager.Resolve<IMapManager>().GetGrid(target.GridID).LocalToWorld(target).Position;
var direction = (worldPosition - shooter.Transform.WorldPosition).ToAngle();
var direction = (targetPos - shooter.Transform.WorldPosition).ToAngle();
var angle = GetRecoilAngle(direction);
// This should really be client-side but for now we'll just leave it here
if (shooter.TryGetComponent(out CameraRecoilComponent recoilComponent))