private async Task OnNextStep( string roomId, int currentRoundNumber, string currentHiddenWord, GameDto gameDto, GameEntity gameEntity) { if (currentRoundNumber < gameEntity.RoundNumber) { await SendNotificationAfterEndOfRound(roomId, currentHiddenWord, currentRoundNumber + 1); } if (gameEntity.GameState == GameState.Finished) { var pointsWinner = gameEntity.Players.Max(p => p.Score); var winner = gameEntity.Players.First(p => p.Score == pointsWinner); userRepository.IncreaseWinsCount(winner); foreach (var player in gameEntity.Players) { userRepository.UpdateStatistics(player); } gameEntity.Start(); gameDto = mapper.Map <GameDto>(gameEntity); roomRepository.UpdateGame(int.Parse(roomId), gameDto); var victoryNotification = MessageFactory.CreateVictoryNotification(winner.Name); await Clients.Group(roomId).SendAsync(RoomHubEvents.GameOver, victoryNotification); } else { await Clients.Group(roomId).SendAsync(RoomHubEvents.RoundInfo, gameEntity.ExplainingPlayerName, gameEntity.GetSecondsLeft()); } }
public GameEntity Spawn(World world, Vector3 pos) { Utils.Log("Spawning template: " + tagsAsText); GameEntity result = Activator.CreateInstance(entityToSpawn) as GameEntity; PhysicalEntity physEnt = result as PhysicalEntity; if (physEnt != null) { world.AddEntity(physEnt); physEnt.PlaceNear(pos); } ApplyValues(result); foreach (Property subComp in subComponents) { int qtdToSpawn = subComp.CalcQtyToSpawn(); for (int i = 0; i < qtdToSpawn; i++) { SpawnSubComponent(world, pos, result, subComp); } } result.Start(); return(result); }
private static GameEntity CreateGame(IEnumerable <DominoTileEntity> firstPlayedTiles, IEnumerable <DominoTileEntity> secondPlayedTiles) { var gameId = Guid.NewGuid(); var mexicanTrain = MexicanTrain.Create(); var engine = new DominoTileEntity(12, 12, true); var firstPlayer = PlayerEntity.Create(gameId, Guid.NewGuid(), engine, firstPlayedTiles.ToHashSet(), "playerOne"); var secondPlayer = PlayerEntity.Create(gameId, Guid.NewGuid(), engine, secondPlayedTiles.ToHashSet(), "playerTwo"); firstPlayer.GiveTurn(); var sut = new GameEntity( gameId, new[] { firstPlayer, secondPlayer }, mexicanTrain, engine, new Stack <DominoTileEntity>(new[] { new DominoTileEntity(9, 8), new DominoTileEntity(9, 9) })); Games.Add(sut.Id, sut); sut.Start(); return(sut); }
private void PlaceEntity(int index, GameEntity entity) { EntityPlacement info = _info.Entities[index]; // can't respawn until the spawn point goes off screen _spawnable[index] = false; _respawnTracker.Track(info, entity); entity.Direction = info.direction; entity.Start(_stage); entity.GetComponent<PositionComponent>().SetPosition(new PointF(info.screenX, info.screenY)); if (info.state != "Start") { StateMessage msg = new StateMessage(null, info.state); entity.SendMessage(msg); } _entities[index] = entity; Action remove = () => { }; remove += () => { _entities[index] = null; entity.Removed -= remove; }; entity.Removed += remove; }
public override void Start(ScreenHandler screen) { base.Start(screen); doorOne = _entityPool.CreateEntity(JoinInfo.bossEntityName); doorTwo = _entityPool.CreateEntity(JoinInfo.bossEntityName); doorOne.GetComponent<PositionComponent>().SetPosition(new PointF(doorOneX, doorOneY)); doorTwo.GetComponent<PositionComponent>().SetPosition(new PointF(doorTwoX, doorTwoY)); doorOne.Start(container); doorTwo.Start(container); doorOne.GetComponent<StateComponent>().StateChanged += s => { if (s == "Open") open = true; }; }