Пример #1
0
        private FlashGlanceItem InitItem(FlashGlanceRoundItemVO item)
        {
            FlashGlanceItem newItem;

            if (!_cachedField.TryGetValue(item.GridPosition, out newItem))
            {
                newItem      = Instantiate(itemPrefab, transform);
                newItem.X    = (item.GridPosition.X - _fieldWidth / 2f + 0.5f) * _gap;
                newItem.Y    = (item.GridPosition.Y - _fieldHeight / 2f + 0.5f) * _gap;
                newItem.Size = _itemSize;
                newItem.Hide();
                _cachedField.Add(item.GridPosition, newItem);
                newItem.Button.onClick.AddListener(() => OnItemSelected(_cachedItems[item.GridPosition]));
            }
            _cachedItems[item.GridPosition] = item;
            newItem.gameObject.SetActive(true);
            newItem.SetLabel(item.Cypher.ToString());
            newItem.Scale = item.Scale;

            if (newItem.Rotation != item.Rotation)
            {
                newItem.Rotation = item.Rotation;
            }
            return(newItem);
        }
        /* gets an random item from the map that is not busy */
        private FlashGlanceRoundItemVO GetQuiteItem(FlashGlanceRoundItemVO exceptionItem = null)
        {
            var shuffledItems = _allItems.OrderBy(a => _random.Next());

            foreach (var item in shuffledItems)
            {
                if (!item.IsBusy && item != _solutionChain[_currentSolutionIndex] && item != exceptionItem)
                {
                    return(item);
                }
            }

            return(null);
        }
        /* adds a single new item on the map. if  */
        private FlashGlanceRoundItemVO AddItem()
        {
            if (_allItems.Count >= MaxItems)
            {
                return(null);                             //map is full
            }
            SafeHashCodePoint      emptyPosition = GetEmptyPosition();
            FlashGlanceRoundItemVO item          = null;

            if (emptyPosition != null)
            {
                _freePositions.Remove(emptyPosition);
                int   rotation = (_random.NextDouble() <= _castedConfig.GetRotationProbabilityByLevel(CurrentDifficulty)) ? Rotation2D.GetRandom(false) : Rotation2D.DEGREE_0;
                float scale    = (float)((_random.NextDouble() <= _castedConfig.GetScalingProbabilityByLevel(CurrentDifficulty)) ? _random.NextDouble() * 0.3f + 0.7f : 1f);
                item = new FlashGlanceRoundItemVO(_lastItemId, _lastCypher, emptyPosition, rotation, scale, _colors[_colorIndex]);
                _allItems.Add(item);
                _solutionChain.Add(item);
                item.IsBusy = true;

                _lastItemId++;

                //generate next cypher
                string     formula = _castedConfig.GetNextItemFormulaByLevel(CurrentDifficulty);
                Expression exp     = _expressionParser.EvaluateExpression(formula);
                if (exp.Parameters.ContainsKey("x"))
                {
                    exp.Parameters["x"].Value = _lastCypher; // set the named parameter "x"
                }
                else
                {
                    exp.Parameters.Add("x", new Parameter("x")
                    {
                        Value = _lastCypher
                    });
                }
                int formulaResult = (int)exp.Value;
                _lastCypher = (formulaResult > 0) ? formulaResult : _lastCypher + 1;
            }

            //_logger.LogMessage(LogLevel.Informational, "New item created: " + item.ToString());

            return(item);
        }