public override void Update(Timestep timestep, EntityUniverseFacade entityUniverseFacade)
        {
            var state = entityUniverseFacade.FetchTileStateEntityLogic(Location, TileAccessFlags.SynchronousWait, out var tile) as SwitchTileStateEntityLogic;

            entityUniverseFacade.ForAllEntitiesInRange(Location.ToTileCenterVector3D(), 2, entity => {
                if (entity.Logic is InnerCableTileEntityLogic logic)
                {
                    logic.PowerState(state.On == tile.Configuration);
                }
            });
        }
        public List <Power> GetAdjacentTiles(bool ignoreFull = false)
        {
            var surrounding = new List <Vector3I> {
                new Vector3I(Location.X + 1, Location.Y, Location.Z),
                new Vector3I(Location.X - 1, Location.Y, Location.Z),
                new Vector3I(Location.X, Location.Y + 1, Location.Z),
                new Vector3I(Location.X, Location.Y - 1, Location.Z),
                new Vector3I(Location.X, Location.Y, Location.Z + 1),
                new Vector3I(Location.X, Location.Y, Location.Z - 1)
            };

            var output = new List <Power>();

            foreach (var location in surrounding.ToArray())
            {
                if (_universe.ReadTile(location, TileAccessFlags.SynchronousWait, out var tile))
                {
                    if (tile.Configuration.Code == "staxel.tile.Sky")
                    {
                        continue;
                    }

                    var logic = _universe.FetchTileStateEntityLogic(location, TileAccessFlags.SynchronousWait).GetPowerForTile(_universe);
                    if (logic != null)
                    {
                        if (ignoreFull)
                        {
                            if (logic.GetPower() != logic.TilePower?.MaxCharge && logic.InputFromTiles)
                            {
                                output.Add(logic.TilePower);
                            }

                            continue;
                        }

                        if (logic.InputFromTiles)
                        {
                            output.Add(logic.TilePower);
                        }
                        continue;
                    }
                }
            }

            return(output);
        }