void PaintTile(Vector2Int position, TileColor color, bool saveAction)
        {
            TileColor tileColor = Client.Instance.Labyrinth.Value.GetTileColor(position);

            if (color != tileColor)
            {
                GameObject tile = Client.Instance.Labyrinth.Value.GetTile(position);

                if (tile)
                {
                    Algorithms.FloorPainter floorPainter = tile.GetComponentInChildren <Algorithms.FloorPainter>();

                    if (floorPainter != null)
                    {
                        floorPainter.PaintFloorWithColor(color);

                        var prvtile = controls.PlayerPaintTile.Value;

                        // TODO fix this crap
                        controls.PlayerPaintTile.Value = new Tile
                        {
                            Position      = position,
                            color         = color,
                            previousColor = tileColor
                        };

                        if (saveAction)
                        {
                            if (color == TileColor.Grey)
                            {
                                gameAction.SetAction(GameAction.UnpaintFloor);
                            }
                            else if (color == TileColor.Yellow)
                            {
                                gameAction.SetAction(GameAction.PaintFloorYellow);
                            }
                            else if (color == TileColor.Red)
                            {
                                gameAction.SetAction(GameAction.PaintFloorRed);
                            }
                        }
                    }
                }
            }
        }
        void PaintTile(Vector2Int position, TileColor color)
        {
            if (Client.Instance.Labyrinth.Value == null)
            {
                return;
            }

            GameObject tile = Client.Instance.Labyrinth.Value.GetTile(position);

            if (tile != null)
            {
                Algorithms.FloorPainter floorPainter = tile.GetComponentInChildren <Algorithms.FloorPainter>();

                if (floorPainter != null)
                {
                    floorPainter.PaintFloorWithColor(color);
                }
            }
        }
        public override void DoScan(HeadsetToolManagerAsset tools, RaycastHit[] hits)
        {
            IEnumerable <RaycastHit> floors = hits.Where(x => x.collider.GetComponentInChildren <Algorithms.FloorPainter>() != null);

            if (floors.Count() != 0)
            {
                RaycastHit hit = floors.OrderBy(x => x.distance).First();

                if (hit.distance < ScannerUtils.MaxTileDistance)
                {
                    // TODO: This is a quick solution (looking for floor in asset name)
                    // Bad practice remove
                    // Unity dosent allow for multitag..
                    var piece = hit.collider.GetComponentInParent <Labyrinths.Piece>();

                    if (piece != null &&
                        (piece.gameObject.name.Contains("Floor") ||
                         piece.gameObject.name.Contains("Start") ||
                         piece.gameObject.name.Contains("End")))
                    {
                        Algorithms.FloorPainter newfloor = hit.collider.GetComponentInChildren <Algorithms.FloorPainter>();

                        if (newfloor != null &&
                            newfloor != floor)
                        {
                            floor = newfloor;

                            float dist =
                                (Client.Instance.Labyrinth.Value.GetLabyrithEndPosition() -
                                 Client.Instance.Labyrinth.Value.GetWorldPositionInLabyrinthPosition(hit.point.x, hit.point.z)).magnitude;

                            floor.Highlight();
                            tools.ScannedDistance.Value = ((int)dist) / Labyrinths.Utils.TileSize;
                            return;
                        }
                    }
                }
            }

            //controller.FlightDistance.Value = -1;
            //Algorithms.FloorPainter.RemoveHighlight();
        }
Example #4
0
        void GenerateVisualForAlgorithm(Algorithms.Id algorithm)
        {
            algorithmStepsPosition = Client.Instance.Algorithm.Value.GetAlgorithmSteps(Client.Instance.LabyrinthData.Value);

            Debug.Log("algorithmStepsPosition Count : " + algorithmStepsPosition.Count);

            for (int i = 0; i < algorithmStepsPosition.Count; i++)
            {
                Debug.Log("algorithmStepsPosition #" + i + " : " + algorithmStepsPosition[i].x + " , " + algorithmStepsPosition[i].y + " , " + algorithmStepsPosition[i].Color);

                GameObject obj = Instantiate(sphere, GetWorldPosition(algorithmStepsPosition[i].x, algorithmStepsPosition[i].y), Quaternion.identity, gameObject.transform);
                Algorithms.FloorPainter floorPainter = Client.Instance.Labyrinth.Value.GetTile(algorithmStepsPosition[i].x, algorithmStepsPosition[i].y).GetComponentInChildren <Algorithms.FloorPainter>();

                if (floorPainter != null)
                {
                    floorPainter.PaintFloorWithColor(algorithmStepsPosition[i].Color);
                }

                objectList.Add(obj);
            }
        }