public IBlockingEntity FindBlockingEntityAt(IEntityController entityController, Vector2Int coords) { var entities = entityController.GetEntitiesAt(coords); var blocking = CollectionUtils.GetImplementors <BaseEntity, IBlockingEntity>(entities); return(blocking.Count > 0 ? blocking[0] : null); }
public void CheckEntitiesExited() { var entitiesAt = _entityController.GetEntitiesAt(_owner.Coords); entitiesAt.RemoveAll(FilterEntityAtTrigger); var remove = new List <BaseEntity>(); foreach (var toRemove in _entitiesAtTrigger) { if (!entitiesAt.Contains(toRemove)) { remove.Add(toRemove); _owner.OnEntityLeft(toRemove); } } foreach (var purged in remove) { _entitiesAtTrigger.Remove(purged); } }
protected override bool HandleAdditionalMoveInteractions(PlayerActionStateContext contextData, Vector2Int newPlayerCoords, ref int nextPlayState, ref bool canMove) { // TODO: Automatic absorption attempt IEntityController entities = contextData.EntityController; KrbPlayer player = (KrbPlayer)entities.Player; if (!player.AbsorberTrait.Data.AutoAbsorb) { return(false); } var targetCandidates = entities.GetEntitiesAt(newPlayerCoords); foreach (var c in targetCandidates) { if (c is IAbsorbableEntity test && player.AbsorberTrait.TryAbsorb(test)) { canMove = true; return(true); } } return(false); }