Disable collision for things inside EntityStorageComponents + enable putting mobs in lockers

This commit is contained in:
PrPleGoo
2020-04-17 15:40:17 +02:00
parent 27771a31f0
commit 7d6e6edcd1

View File

@@ -150,8 +150,8 @@ namespace Content.Server.GameObjects.Components
if(!entity.Transform.IsMapTransform) if(!entity.Transform.IsMapTransform)
continue; continue;
// only items that can be stored in an inventory, or a player, can be eaten by a locker // only items that can be stored in an inventory, or a mob, can be eaten by a locker
if(!entity.HasComponent<StoreableComponent>() && !entity.HasComponent<IActorComponent>()) if (!entity.HasComponent<StoreableComponent>() && !entity.HasComponent<SpeciesComponent>())
continue; continue;
if (!AddToContents(entity)) if (!AddToContents(entity))
@@ -207,7 +207,8 @@ namespace Content.Server.GameObjects.Components
private bool AddToContents(IEntity entity) private bool AddToContents(IEntity entity)
{ {
var collidableComponent = Owner.GetComponent<ICollidableComponent>(); var collidableComponent = Owner.GetComponent<ICollidableComponent>();
if(entity.TryGetComponent<ICollidableComponent>(out var entityCollidableComponent)) ICollidableComponent entityCollidableComponent;
if (entity.TryGetComponent(out entityCollidableComponent))
{ {
if(MaxSize < entityCollidableComponent.WorldAABB.Size.X if(MaxSize < entityCollidableComponent.WorldAABB.Size.X
|| MaxSize < entityCollidableComponent.WorldAABB.Size.Y) || MaxSize < entityCollidableComponent.WorldAABB.Size.Y)
@@ -247,6 +248,10 @@ namespace Content.Server.GameObjects.Components
} }
Contents.Insert(entity); Contents.Insert(entity);
entity.Transform.WorldPosition = worldPos; entity.Transform.WorldPosition = worldPos;
if (entityCollidableComponent != null)
{
entityCollidableComponent.CollisionEnabled = false;
}
return true; return true;
} }
return false; return false;
@@ -256,7 +261,13 @@ namespace Content.Server.GameObjects.Components
{ {
foreach (var contained in Contents.ContainedEntities.ToArray()) foreach (var contained in Contents.ContainedEntities.ToArray())
{ {
Contents.Remove(contained); if(Contents.Remove(contained))
{
if (contained.TryGetComponent<ICollidableComponent>(out var entityCollidableComponent))
{
entityCollidableComponent.CollisionEnabled = true;
}
}
} }
} }