Example #1
0
 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);
 }
Example #2
0
        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;
        }
Example #3
0
        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);
        }
Example #4
0
 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);
             }
         }
     }
 }
Example #5
0
        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);
        }
Example #6
0
        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);
        }