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); }
public CrosswordTileItem GetTile(CrosswordPosition pos) { return(tiles[pos.row, pos.column]); }
public void SetTile(CrosswordPosition pos, CrosswordTileItem tileItem) { tileItem.row = pos.row; tileItem.column = pos.column; tiles[pos.row, pos.column] = tileItem; }