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); }