Makes weapons use GridCoordinates and default to MapCoordinates if grid is invalid

This commit is contained in:
Víctor Aguilera Puerto
2020-07-10 01:53:36 +02:00
parent e54e708cf2
commit 8785371563
7 changed files with 17 additions and 15 deletions

View File

@@ -104,7 +104,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition
}
}
public IEntity TakeBullet(MapCoordinates spawnAt)
public IEntity TakeBullet(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
if (_ammoIsProjectile)
{
@@ -122,7 +122,8 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Ammunition
appearanceComponent.SetData(AmmoVisuals.Spent, true);
}
var entity = Owner.EntityManager.SpawnEntity(_projectileId, spawnAt);
var entity = spawnAtGrid.GridID != GridId.Invalid ? Owner.EntityManager.SpawnEntity(_projectileId, spawnAtGrid) : Owner.EntityManager.SpawnEntity(_projectileId, spawnAtMap);
DebugTools.AssertNotNull(entity);
return entity;
}

View File

@@ -164,14 +164,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
return _chamberContainer.ContainedEntity;
}
public override IEntity TakeProjectile(MapCoordinates spawnAt)
public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
var chamberEntity = _chamberContainer.ContainedEntity;
if (_autoCycle)
{
Cycle();
}
return chamberEntity?.GetComponent<AmmoComponent>().TakeBullet(spawnAt);
return chamberEntity?.GetComponent<AmmoComponent>().TakeBullet(spawnAtGrid, spawnAtMap);
}
protected override bool WeaponCanFire()

View File

@@ -124,14 +124,14 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
return _chamberContainer.ContainedEntity;
}
public override IEntity TakeProjectile(MapCoordinates spawnAt)
public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
var chamberEntity = _chamberContainer.ContainedEntity;
if (!_manualCycle)
{
Cycle();
}
return chamberEntity?.GetComponent<AmmoComponent>().TakeBullet(spawnAt);
return chamberEntity?.GetComponent<AmmoComponent>().TakeBullet(spawnAtGrid, spawnAtMap);
}
private void Cycle(bool manual = false)

View File

@@ -172,17 +172,16 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
/// Takes a projectile out if possible
/// IEnumerable just to make supporting shotguns saner
/// </summary>
/// <param name="spawnAt"></param>
/// <returns></returns>
/// <exception cref="NotImplementedException"></exception>
public override IEntity TakeProjectile(MapCoordinates spawnAt)
public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
var ammo = _ammoSlots[_currentSlot];
IEntity bullet = null;
if (ammo != null)
{
var ammoComponent = ammo.GetComponent<AmmoComponent>();
bullet = ammoComponent.TakeBullet(spawnAt);
bullet = ammoComponent.TakeBullet(spawnAtGrid, spawnAtMap);
if (ammoComponent.Caseless)
{
_ammoSlots[_currentSlot] = null;

View File

@@ -137,7 +137,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
return ammo;
}
public override IEntity TakeProjectile(MapCoordinates spawnAt)
public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
var powerCellEntity = _powerCellContainer.ContainedEntity;
@@ -166,7 +166,9 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
}
else
{
entity = Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.GridPosition);
entity = Owner.Transform.GridID != GridId.Invalid ?
Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.GridPosition)
: Owner.EntityManager.SpawnEntity(_ammoPrototype, Owner.Transform.MapPosition);
}
if (entity.TryGetComponent(out ProjectileComponent projectileComponent))

View File

@@ -184,7 +184,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
return BoltOpen ? null : _chamberContainer.ContainedEntity;
}
public override IEntity TakeProjectile(MapCoordinates spawnAt)
public override IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap)
{
if (BoltOpen)
{
@@ -193,7 +193,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
var entity = _chamberContainer.ContainedEntity;
Cycle();
return entity?.GetComponent<AmmoComponent>().TakeBullet(spawnAt);
return entity?.GetComponent<AmmoComponent>().TakeBullet(spawnAtGrid, spawnAtMap);
}
private void Cycle(bool manual = false)

View File

@@ -52,7 +52,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
private TimeSpan _lastFire;
public abstract IEntity PeekAmmo();
public abstract IEntity TakeProjectile(MapCoordinates spawnAt);
public abstract IEntity TakeProjectile(GridCoordinates spawnAtGrid, MapCoordinates spawnAtMap);
// Recoil / spray control
private Angle _minAngle;
@@ -189,7 +189,7 @@ namespace Content.Server.GameObjects.Components.Weapon.Ranged.Barrels
}
var ammo = PeekAmmo();
var projectile = TakeProjectile(shooter.Transform.MapPosition);
var projectile = TakeProjectile(shooter.Transform.GridPosition, shooter.Transform.MapPosition);
if (projectile == null)
{
soundSystem.PlayAtCoords(_soundEmpty, Owner.Transform.GridPosition);