/// <summary> /// Perform generation of new BonusLife. /// </summary> protected virtual void Generate() { GeneratedLife = new BonusLife(TimeSpan.FromSeconds(10)); var pos = _coinsPositions[_random.Next(0, _coinsPositions.Count)]; GeneratedLife.X = pos.Item1; GeneratedLife.Y = pos.Item2; Generated?.Invoke(this, EventArgs.Empty); }
private IList <GameElement> GenerateElements(IEnumerable <GameElementInfo> info) { IList <GameElement> elements = new List <GameElement>(); foreach (var gameElementInfo in info) { GameElement element; switch (gameElementInfo.Type) { case GameElementType.Block: element = new Block(); break; case GameElementType.Coin: element = new Coin(); break; case GameElementType.Portal: element = new Portal() { PortalId = gameElementInfo.Id }; break; case GameElementType.BonusLife: element = new BonusLife(); break; case GameElementType.Player: element = new Player(); break; case GameElementType.Enemy: element = new Enemy(); break; default: throw new InvalidEnumArgumentException(); } element.X = gameElementInfo.X; element.Y = gameElementInfo.Y; elements.Add(element); } return(elements); }
private void ConfigureLifesGeneratior() { _lifesGenerator = new AdditionalLifeGenerator(_coinsPosition, _provider.AdditionalLifeGenerationInterval); _lifesGenerator.Generated += (sender, args) => { BonusLife life = _lifesGenerator.GeneratedLife; if (life == null) { return; } life.Collected += (o, eventArgs) => { _gameBoard.Children.Remove(o as Coin); Lifes++; Points += (o as BonusLife)?.PointReward ?? 0; }; life.Disappeared += (o, eventArgs) => _gameBoard.Children.Remove(o as BonusLife); _gameBoard.Children.Add(life); life.Appear(); }; _lifesGenerator.Start(); }
/// <summary> /// Reads the information about the elements on GameBoard from file. /// </summary> /// <returns>The list of elements on the board.</returns> private IList <GameElement> ReadFile() { IList <GameElement> elements = new List <GameElement>(); Stream stream = Application.GetResourceStream(new Uri(_path, UriKind.Relative))?.Stream; if (stream == null) { throw new InvalidOperationException("Cannot load gameboard"); } using (var sr = new StreamReader(stream)) { string line; Portal previousPortal = null; while ((line = sr.ReadLine()) != null) { string[] split = line.Split(' '); GameElement element; switch (split[0]) { case "B": element = new Block(); break; case "C": element = new Coin(); break; case "P": element = new Player(); break; case "E": element = new Enemy(); break; case "BL": element = new BonusLife(); break; case "PO": element = new Portal(previousPortal); if (previousPortal == null) { previousPortal = (Portal)element; } else { previousPortal = null; } break; default: throw new NotSupportedException(); } element.X = double.Parse(split[1]); element.Y = double.Parse(split[2]); elements.Add(element); } } return(elements); }