private Slider GetSliderOnTile(Tile tile, SideName side) { if (tile != null) { if (tile.GetType() == typeof(Slider)) { Slider slider = (Slider)tile; //slider moves left/right if left side is not attachable, so it moves on this rail if (!RobuzzleUtilities.IsTileAttachableOnSide(slider, side)) { return(slider); } } else if (tile.GetType() == typeof(SliderRail)) { SliderRail rail = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail, side)) { return(GetSliderOnTile( grid.GetTileAtPosition(tile.Position + RobuzzleUtilities.GetSideVector(side)), side)); } } } return(null); }
public void CreateSliderBF(Vector3Int position) { if (grid.PositionIsFilled(position)) { return; } Tile sliderBF = tileTypes.GetPrefab(TileInteger.BFSlider); MovableTile movableTile = (MovableTile)CreateTile(sliderBF, position); JoinNeighbors(movableTile); grid.SubscribeTileMovement(movableTile); Slider slider = (Slider)movableTile; slider.MinBound = slider.Position; slider.MaxBound = slider.Position; SliderRail rail = CreateRailBF(position); //ignore collision between the rail and slider Physics.IgnoreCollision(movableTile.transform.GetChild(0).GetComponent <Collider>(), rail.transform.GetChild(0).GetComponent <Collider>(), true); slider.OnInitialize += SetSliderBounds; }
public SliderRail CreateRailUD(Vector3Int position) { Tile railDU = tileTypes.GetPrefab(TileInteger.DURail); MovableTile movableTile = (MovableTile)CreateTile(railDU, position); JoinNeighbors(movableTile); grid.SubscribeTileMovement(movableTile); SliderRail rail = (SliderRail)movableTile; rail.Position = position; return((SliderRail)movableTile); }
private void SetSliderBound(Slider slider, Tile tile, SideName side) { if (tile != null && tile.GetType() == typeof(SliderRail)) { SliderRail rail = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail, side)) { if (RobuzzleUtilities.IsPositiveSide(side)) { slider.MaxBound = GetExtremeBoundNIgnoreCollision(slider, rail, side); } else { slider.MinBound = GetExtremeBoundNIgnoreCollision(slider, rail, side); } } } }
private Vector3Int GetExtremeBoundNIgnoreCollision(Slider slider, SliderRail rail, SideName side) { Physics.IgnoreCollision(slider.transform.GetChild(0).GetComponent <Collider>(), rail.transform.GetChild(0).GetComponent <Collider>(), true); grid.RemoveTile(rail); if (RobuzzleUtilities.IsTileAttachableOnSide(rail, side)) { Tile tile = grid.GetTileAtPosition(rail.Position + RobuzzleUtilities.GetSideVector(side)); if (tile != null && tile.GetType() == typeof(SliderRail)) { SliderRail rail2 = (SliderRail)tile; if (RobuzzleUtilities.IsTileAttachableOnOppositeSide(rail2, side)) { return(GetExtremeBoundNIgnoreCollision(slider, rail2, side)); } } return(rail.Position); } return(Vector3Int.zero); }
private Slider GetSliderOnAxis(SliderRail rail) { Slider retSlider = null; Tile tile = grid.GetTileAtPosition(rail.Position); bool tileExists = tile != null; Debug.Log("Tile pos " + rail.Position + " is " + tileExists); if (tile.GetType() == typeof(Slider)) { return((Slider)tile); } if (rail.AttachableSides.left) //if the rail is Left Right oriented { Tile leftTile = grid.GetTileAtPosition(rail.Position + Vector3Int.left); retSlider = GetSliderOnTile(leftTile, SideName.left); if (retSlider != null) { return(retSlider); } Tile rightTile = grid.GetTileAtPosition(rail.Position + Vector3Int.right); retSlider = GetSliderOnTile(rightTile, SideName.right); return(retSlider); } else if (rail.AttachableSides.back) // if the rail is back front oriented { Tile backTile = grid.GetTileAtPosition(rail.Position + new Vector3Int(0, 0, -1)); retSlider = GetSliderOnTile(backTile, SideName.back); if (retSlider != null) { return(retSlider); } Tile frontTile = grid.GetTileAtPosition(rail.Position + new Vector3Int(0, 0, 1)); retSlider = GetSliderOnTile(frontTile, SideName.front); return(retSlider); } else if (rail.AttachableSides.down) // if the rail is up down oriented { Tile downTile = grid.GetTileAtPosition(rail.Position + Vector3Int.down); retSlider = GetSliderOnTile(downTile, SideName.down); if (retSlider != null) { return(retSlider); } Tile upTile = grid.GetTileAtPosition(rail.Position + Vector3Int.up); retSlider = GetSliderOnTile(upTile, SideName.up); return(retSlider); } return(null); }