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); }