private void SetQuestionTile(CrosswordPosition questionPos, CrosswordPositionAndOrientation answerStartTile, Tuple <int, int> answerLessOrEqual)
        {
            var intersections     = GetIntersections(answerStartTile);
            var crossDatabaseItem = mDatabase.GetRandomItem(answerLessOrEqual.value1, answerLessOrEqual.value2, GetIntersectionTuples(intersections));

            if (crossDatabaseItem == null)
            {
                Debug.LogWarning(
                    string.Format("Impossible to find word with less than: {0} or equal: {1} characters, and with intersections: {2}",
                                  answerLessOrEqual.value1,
                                  answerLessOrEqual.value2,
                                  IntersectionToString(intersections)
                                  )
                    );
                return;
            }

            var crossItem = new CrosswordTileQuestionItem();

            crossItem.orientation = answerStartTile.orientation;
            crossItem.element     = crossDatabaseItem.question;
            crossItem.startPositionAndOrientation = answerStartTile;

            mCrossword.SetTile(questionPos, crossItem);
            SetAnswerTiles(crossItem, crossDatabaseItem, answerStartTile);
        }
        private void FillLine(CrosswordPosition questionPos, CrosswordOrientation orientation, CrosswordPositionAndOrientation?answerStartPos = null)
        {
            if (!InBounds(questionPos))
            {
                return;
            }

            var answerTile = answerStartPos.HasValue ? answerStartPos.Value : new CrosswordPositionAndOrientation(GetForwardTilePosition(questionPos, orientation), orientation);

            if (!mCrossword.GetTile(questionPos).hasValue)
            {
                var tile = mCrossword.GetTile(answerTile.position);
                if (tile is CrosswordTileAnswerItem && !answerStartPos.HasValue)
                {
                    answerTile.orientation = ((CrosswordTileAnswerItem)tile).oppositeDirection;
                }

                SetQuestionTile(questionPos, answerTile, GetMinMaxAnswerLength(answerTile));
            }

            FillLine(answerTile.position, orientation);
        }
 public CrosswordPositionAndOrientation(CrosswordPosition position, CrosswordOrientation orientation)
 {
     this.position    = position;
     this.orientation = orientation;
 }
 private bool InBounds(CrosswordPosition pos)
 {
     return(pos.row >= 0 && pos.row < mSizeHeight && pos.column >= 0 && pos.column < mSizeWidth);
 }
 private bool TileAvailable(CrosswordPosition pos)
 {
     return(InBounds(pos) && !(mCrossword.GetTile(pos) is CrosswordTileQuestionItem));
 }
 private CrosswordPosition GetForwardTilePosition(CrosswordPosition pos, CrosswordOrientation orientation, int tileDistance = 1)
 {
     pos.row    = orientation == CrosswordOrientation.VERTICAL ? pos.row + tileDistance : pos.row;
     pos.column = orientation == CrosswordOrientation.HORIZONTAL ? pos.column + tileDistance : pos.column;
     return(pos);
 }
Exemple #7
0
 public CrosswordTileItem GetTile(CrosswordPosition pos)
 {
     return(tiles[pos.row, pos.column]);
 }
Exemple #8
0
 public void SetTile(CrosswordPosition pos, CrosswordTileItem tileItem)
 {
     tileItem.row               = pos.row;
     tileItem.column            = pos.column;
     tiles[pos.row, pos.column] = tileItem;
 }