// ================================================================
        //  Doers: Room Tiles
        // ================================================================
        private void SelectTile(RoomTile tile)
        {
            if (tile.IsSelected)
            {
                return;
            }                            // Safety check.

            /*
             * // First, check if we're trying to set ANOTHER, different roomTile as roomTileDragging.
             * if (roomTileDragging != null && thisRoomTile != null && roomTileDragging != thisRoomTile) {
             *      Debug.LogWarning("Hey, whoa! We're trying to set roomTileDragging to a RoomTile, but it's not already null!");
             *      return;
             * }
             * // Was dragging a RoomTile? Update its visuals!
             * if (roomTileDragging != null) {
             *      roomTileDragging.UpdateBorderLine();
             * }
             * // Set it!
             * roomTileDragging = thisRoomTile;
             * // Update its visuals!
             * if (roomTileDragging != null) {
             *      roomTileDragging.UpdateBorderLine();
             * }
             * // We DID specifiy a roomTile?
             * if (roomTileDragging != null) {
             *      SetMouseClickOffset(roomTileDragging.transform.localPosition);
             * //			SetMouseClickOffset(roomTileDragging.Pos);//new PVector(roomTileDragging.pos.x+roomTileDragging.w*0.5, roomTileDragging.pos.y+roomTileDragging.h*0.5));
             * }
             */
            // Add it to my list!
            tilesSelected.Add(tile);
            // Tell it what's up!
            tile.OnSelected(MousePosWorld);
        }
        private void OnClickRoomTile(RoomTile tile)
        {
            //// Conditions are right for selecting the tile!
            //if (CanSelectARoomTile()) {
            // Determine which tiles are affected.
            List <RoomTile> tiles    = GetTilesInClick(tile);
            bool            doSelect = !tile.IsSelected;

            // MULTI-SELECT key is down??...
            if (isKeyMultiSelection)
            {
                if (doSelect)
                {
                    SelectTiles(tiles);
                }
                else
                {
                    DeselectTiles(tiles);
                }
            }
            // MULTI-SELECT key ISN'T down...!
            else
            {
                // This tile's NOT already selected. Deselect all tiles first.
                if (!tile.IsSelected)
                {
                    DeselectTilesSelected();
                }
                // Select the affected tiles!
                SelectTiles(tiles);
            }
            //}
        }
        private void OnMouseDown()
        {
            int mouseButton = InputController.GetMouseButtonDown();

            // LEFT click?
            if (mouseButton == 0)
            {
                // Tell ALL selected tiles to update their click offset!
                foreach (RoomTile roomTile in tilesSelected)
                {
                    roomTile.SetMouseClickOffset(MousePosWorld);
                }
                RoomTile tileOver = GetVisibleTileAtPoint(MousePosWorld);
                // YES over a tile??...
                if (tileOver != null)
                {
                    OnClickRoomTile(tileOver);
                }
                else // Not over ANY tile?? Deselect Tiles and activate selectionRect!
                {
                    DeselectTilesSelected();
                    selectionRect.Activate();
                }
            }
            // RIGHT click?
            else if (mouseButton == 1)
            {
                Debug.Log("mousePosWorld: " + MousePosWorld);
            }
            // Update on-mouse-down vectors!
            MousePosScreenOnDown = MousePosScreen;
        }
 private void SelectTiles(List <string> roomKeys)
 {
     foreach (string roomKey in roomKeys)
     {
         RoomTile tile = GetRoomTileByKey(roomKey);
         SelectTile(tile);
     }
 }
        // ================================================================
        //  Initialize
        // ================================================================
        public void Initialize(RoomTile _roomTile)
        {
            myRoomTile = _roomTile;
            myRD       = myRoomTile.MyRoomData;
            t_roomName.GetComponent <Renderer>().sortingOrder = 110; // render roomName over its contents.

            designerFlag.UpdateDesignerFlagButtonVisuals();
        }
 private void DeselectTile(RoomTile tile)
 {
     if (!tile.IsSelected)
     {
         return;
     }                             // Safety check.
     tile.OnDeselected();
     tilesSelected.Remove(tile);
 }
        private void OnMouseDoubleClicked()
        {
            // Am I over any room?? Load it!!
            RoomTile tileOver = GetVisibleTileAtPoint(MousePosWorld);

            if (tileOver != null && tileOver.IsMouseOverBodyColl) // also check our mouse is directly over this tile's body collider.
            {
                SceneHelper.OpenGameplayScene(tileOver.WorldIndex, tileOver.RoomKey);
            }
        }
        /// Returns all RoomTiles that're connected to this one (including this one).
        private List <RoomTile> GetConnectedTiles(RoomTile firstTile)
        {
            RoomData        firstRD   = firstTile.MyRoomData;
            List <RoomData> roomDatas = RoomUtils.GetRoomsConnectedToRoom(firstRD);
            List <RoomTile> tiles     = new List <RoomTile>();

            foreach (RoomData rd in roomDatas)
            {
                tiles.Add(GetRoomTileByKey(rd.RoomKey));
            }
            return(tiles);
        }
 private List <RoomTile> GetTilesInClick(RoomTile sourceTile)
 {
     // SHIFT = Consider ALL CONNECTED tiles!
     if (InputController.IsKey_shift)
     {
         return(GetConnectedTiles(sourceTile));
     }
     // Otherwise, just return the ONE Tile.
     return(new List <RoomTile> {
         sourceTile
     });
 }
 private RoomTile GetVisibleTileAtPoint(Vector2 point)
 {
     if (CurrWorldRoomTiles == null)
     {
         return(null);
     }                                                       // Safety check for runtime compile.
     for (int i = CurrWorldRoomTiles.Count - 1; i >= 0; --i) // loop thru backwards so we click NEWER tiles before older ones.
     {
         RoomTile tile = CurrWorldRoomTiles[i];
         if (!tile.IsFullyVisible)
         {
             continue;
         }                                   // Tile's not available?? Skip it!
         if (tile.BoundsGlobalBL.Contains(point))
         {
             return(tile);
         }
     }
     return(null);
 }
        private void LoadAllRoomTiles()
        {
            // Destroy 'em first!
            DestroyAllRoomTiles();
            // Make 'em hot & fresh!
            allRoomTiles = new List <List <RoomTile> >();
            GameObject prefab = ResourcesHandler.Instance.MapEditor_RoomTile;

            // For every world...
            for (int worldIndex = 0; worldIndex < dataManager.NumWorldDatas; worldIndex++)
            {
                allRoomTiles.Add(new List <RoomTile>());
                // For every room in this world...
                WorldData wd     = dataManager.GetWorldData(worldIndex);
                Transform parent = worldLayerGOs[worldIndex].transform;
                foreach (RoomData roomData in wd.RoomDatas.Values)
                {
                    RoomTile newRoomTile = Instantiate(prefab).GetComponent <RoomTile>();
                    newRoomTile.Initialize(this, roomData, parent);
                    allRoomTiles[worldIndex].Add(newRoomTile);
                }
            }
            //currWorldIndex = -1; // reset this! 'cause there's no world selected right now.
        }