protected override void ThrowUndoInternal(GameSnapshot gameSnapshot)
        {
            scoreBoard.SetPointsTo(Game.PlayerOnThrow, Game.PlayerOnThrow.GameData.LegPoints);

            scoreBoard.SetThrowNumber(Game.PlayerOnThrow.GameData.ThrowNumber);
            scoreBoard.CheckPointsHintFor(Game.PlayerOnThrow);
        }
Exemple #2
0
        public void Restore(ISnapshot s)
        {
            GameSnapshot snapshot = (GameSnapshot)s;

            this._currentMove = snapshot.CurrentMove;
            this._gameBoard.Restore(snapshot.BoardSnapshot);
        }
 // Save and store a snapshot of a game state
 public void SaveSnapShot(GameSnapshot snapshot)
 {
     snapshots.AddFirst(snapshot);
     player.TravelTowardGoal();
     gamemap.RandomizeMap();
     //Debug.Log("Snapshot Saved!");
 }
        /// <summary>
        /// Displays on console information about the game.
        /// </summary>
        /// <param name="snapshot">Game information that has to be shown on screen.</param>
        public void Print(GameSnapshot snapshot)
        {
            Console.Clear();

            var left     = 0;
            var top      = 0;
            int count    = 0;
            int maxCount = Console.BufferWidth / Shift;

            foreach (var number in snapshot.DisplayWorlds)
            {
                var world = snapshot.Worlds[number - 1];
                Print(number, world, new Point(left, top));
                left += Shift;
                count++;

                if (count == maxCount)
                {
                    left  = 0;
                    top  += Shift;
                    count = 0;
                }
            }

            Console.SetCursorPosition(0, top + Shift);
            PrintLine($"Total Worlds: {snapshot.TotalWorlds,4} Alive Worlds: {snapshot.TotalAliveWorlds,4} Lifes: {snapshot.TotalLifes,3}", ConsoleColor.White);
            PrintLine($"You can pause the game by pressing Ctrl+C.");
        }
Exemple #5
0
        public void AddAndUpdateEntity()
        {
            GameSnapshot   snapshot  = (GameSnapshot)LevelManager.CreateSnapshot();
            ITemplateGroup templates = LevelManager.CreateTemplateGroup();

            snapshot.Systems.Add(new SystemEventLogger(new Type[] { }));

            IEntity entity = snapshot.CreateEntity(GameSnapshot.EntityAddTarget.Added);

            IGameEngine engine = GameEngineFactory.CreateEngine(snapshot, templates).Value;

            engine.Update().Wait();
            engine.SynchronizeState().Wait();

            List <TriggerEvent> events = new List <TriggerEvent>();

            events.Add(TriggerEvent.OnAdded);
            events.Add(TriggerEvent.OnGlobalPreUpdate);
            events.Add(TriggerEvent.OnUpdate);
            events.Add(TriggerEvent.OnGlobalPostUpdate);
            Assert.Equal(events, engine.GetSystem <SystemEventLogger>().Events);

            for (int i = 0; i < 20; ++i)
            {
                engine.Update().Wait();
                engine.SynchronizeState().Wait();

                events.Add(TriggerEvent.OnGlobalPreUpdate);
                events.Add(TriggerEvent.OnUpdate);
                events.Add(TriggerEvent.OnGlobalPostUpdate);
                Assert.Equal(events, engine.GetSystem <SystemEventLogger>().Events);
            }
        }
Exemple #6
0
        public static void StoreGame(GameSnapshot snapshot, DateTime startTime)
        {
            using (var db = new HanksiteEntities())
            {
                Game game = new Game
                {
                    Name      = snapshot.Name,
                    StartTime = startTime,
                    EndTime   = DateTime.Now
                };

                foreach (var player in snapshot.Players)
                {
                    GameUser gameUser = new GameUser
                    {
                        Game     = game,
                        UserID   = player.User.ID,
                        Position = player.Position
                    };
                    db.GameUsers.Add(gameUser);
                }

                db.SaveChanges();
            }
        }
Exemple #7
0
        /// <summary>
        /// Saves the game snapshot to file.
        /// </summary>
        /// <param name="gameInfo">Information about the game that has to be saved.</param>
        public void Save(GameSnapshot snapshot)
        {
            EnsureDirectory();
            string json = JsonConvert.SerializeObject(snapshot, Formatting.Indented);

            File.WriteAllText(fileName, json);
        }
 // Checks the snapshot timer and takes a snapshot if needed
 void checkSnapshotTimer()
 {
     timer += Time.deltaTime;
     if (timer >= snapshotPeriod)
     {
         GameSnapshot state = TakeSnapshot();
         SaveSnapShot(state);
         timer = 0;
     }
 }
        public ClientGameSnapshot CreateClientGameSnapshot(Client client, GameSnapshot gameSnapshot)
        {
            GameSnapshot gameSnapshotCopy = new GameSnapshot(gameSnapshot);

            gameSnapshotCopy.playersInfo = AddUnseenInformationToGameSnapshot(gameSnapshotCopy, client.playerId);
            int remoteControllableLastProcessedInputId  = client.serverPlayer.remoteControllable.lastProcessedInputId;
            Dictionary <int, int> adminPanelInformation = IsAdminPanelInformationNeeded(client.playerId) ? playGamePhase.serverSkeld.adminPanel.GeneratePlayersData(client.playerId) : new Dictionary <int, int>();

            return(new ClientGameSnapshot(gameSnapshotCopy, remoteControllableLastProcessedInputId, adminPanelInformation));
        }
        protected override void ThrowUndoInternal(GameSnapshot gameSnapshot)
        {
            scoreBoard.OnThrowPointerSetOn(Game.PlayerOnThrow);

            foreach (var player in Game.Players)
            {
                scoreBoard.SetPointsTo(player, player.GameData.LegPoints);
            }

            scoreBoard.SetThrowNumber(Game.PlayerOnThrow.GameData.ThrowNumber);
        }
Exemple #11
0
        private void ProcessSnapshot()
        {
            GameSnapshot lastGameSnapshot = CaptureSnapshot();

            SaveSnapshot(lastGameSnapshot);

            if (playersManager.clients.Count != 0)
            {
                packetsSender.SendGameSnapshotPackets(lastGameSnapshot);
            }
        }
Exemple #12
0
        private static void SaveSnapshot(GameSnapshot gameSnapshot)
        {
            gameSnapshots.Add(gameSnapshot.id, gameSnapshot);

            if (gameSnapshots.Count > 1000)
            {
                gameSnapshots.Remove(gameSnapshots.Keys.Min());
            }

            Logger.LogEvent(LoggerSection.GameSnapshots, $"Game snapshot captured {gameSnapshot}");
        }
        public void SendGameSnapshot(GameSnapshot snapshot)
        {
            lock (syncObject)
            {
                if (game != null)
                {
                    var viewModel = snapshot.ToViewModel();

                    Application.Current.Dispatcher.InvokeAsync(() => game.SendGameSnapshot(viewModel));
                }
            }
        }
 public void SendGameSnapshot(GameSnapshot snapshot)
 {
     try
     {
         log("is sent a game snapshot");
         callback.SendGameSnapshot(snapshot);
     }
     catch (Exception ex)
     {
         logError("sending game snapshot", ex);
     }
 }
        public SnapshotViewModel(GameSnapshot snapshot, IPlayerImageProvider imageProvider)
        {
            this._snapshot      = snapshot;
            this._imageProvider = imageProvider;
            var playerNumbers = this._snapshot.PlayerNumbers.Select(v => v).Take(5).ToList();

            playerNumbers.AddRange(Enumerable.Repeat(-1, 5 - playerNumbers.Count));
            this._players = playerNumbers
                            .Select(n => new { Number = n, Image = this._imageProvider.GetPlayerImage(n) })
                            .OrderBy(an => an.Number)
                            .Select(an => this.GetPlayerImage(an.Image, an.Number))
                            .ToList();
        }
        public void SendGameOver(GameSnapshot snapshot)
        {
            try
            {
                log("is sent game over message");
                callback.SendGameOver(snapshot);
            }
            catch (Exception ex)
            {
                logError("sending game over message", ex);
            }

            RealPlayer = null;
        }
        public void SendGameSnapshotPackets(GameSnapshot gameSnapshot)
        {
            const ServerPacketType packetType = ServerPacketType.GameSnapshot;

            foreach (Client client in playersManager.clients.Values.ToList())
            {
                if (!client.IsFullyInitialized())
                {
                    continue;
                }

                ClientGameSnapshot clientGameSnapshot = clientGameSnapshotsManager.CreateClientGameSnapshot(client, gameSnapshot);

                Packet packet = new Packet((int)packetType);
                packet.Write(clientGameSnapshot);

                SendUdpPacket(client.playerId, packetType, packet);
            }
        }
Exemple #18
0
    public static void Record(Square square, Direction moveDirection, Direction faceDirection)
    {
        if (!instance)
        {
            instance = FindObjectOfType <GameManager>();
        }

        //if a square isnt already recorded, then add a new item to the history
        GameSnapshot snapshot = new GameSnapshot
        {
            square        = square,
            turn          = instance.turn,
            moveDirection = moveDirection,
            faceDirection = faceDirection
        };

        //add this information
        instance.snapshots.Add(snapshot);
    }
Exemple #19
0
        public ActionResult Show(Guid gameId)
        {
            var game = _repository.GetGame(gameId);

            var snapshot = _repository.GetGameSnapshot(game);

            var playerRole = game.GetPlayerRole(_player);

            ViewBag.PlayerRole = playerRole;

            if (game.Player2 == null)
            {
                if (playerRole == PlayerRole.Spectator)
                {
                    ViewBag.PlayerRole = playerRole = PlayerRole.Player2;

                    game.Lock(_player); // player1 chosen as first

                    var playerName = string.Format("Player {0}", _player.Id);

                    var message = _messageFactory.CreateJoinedMessage(gameId, playerName, game.CurrentState);
                    _repository.AddMessage(message);

                    snapshot = new GameSnapshot(game, message);
                    _repository.AddGameSnapshot(snapshot);

                    _repository.Save();

                    // allow player2 to receive the message too
                    return(View(new GameSnapshot(game)));
                }

                return(View(snapshot));
            }

            if (_player.Id != game.Player1.Id && _player.Id != game.Player2.Id)
            {
                return(View("AlreadyFull", gameId));
            }

            return(View(snapshot));
        }
 protected override void AppendEvent(GameLogEvent gameLogEvent, GameSnapshot gameSnapshot)
 {
     base.AppendEvent(gameLogEvent, gameSnapshot);
     using var context = new DosDbContext();
     context.ReplayMove.Add(new ReplayMove
     {
         TargetPlayer = gameLogEvent.TargetPlayer,
         SourcePlayer = gameLogEvent.SourcePlayer,
         Cards        = gameLogEvent.Cards,
         EventType    = gameLogEvent.EventType,
         ReplayId     = replayId
     });
     context.ReplaySnapshot.Add(new ReplaySnapshot
     {
         CenterRow       = gameSnapshot.CenterRow,
         PlayerHands     = gameSnapshot.PlayerHands,
         ReplayId        = replayId,
         CurrentPlayerId = gameSnapshot.CurrentPlayerId,
     });
     context.SaveChanges();
 }
Exemple #21
0
        /// <summary>
        /// Loads and continues saved game.
        /// </summary>
        private void ContinueSavedGame()
        {
            GameSnapshot snapshot = gameSaver.Load();

            if (snapshot == null)
            {
                gamePresenter.PrintNoSavedGame();
                CreateGame();
            }
            else
            {
                worlds = snapshot.Worlds.Select(memento =>
                {
                    var world = new World(new WorldGenerator());
                    world.RestoreState(memento);
                    return(world);
                }).ToList(); //Restore worlds from saved mementos
                displayWorlds = snapshot.DisplayWorlds;

                ContinueGame();
            }
        }
Exemple #22
0
        public void CorrectUpdateCount()
        {
            GameSnapshot   snapshot  = (GameSnapshot)LevelManager.CreateSnapshot();
            ITemplateGroup templates = LevelManager.CreateTemplateGroup();

            for (int i = 0; i < 10; ++i)
            {
                IEntity entity = snapshot.CreateEntity(GameSnapshot.EntityAddTarget.Active);
                entity.AddData <DataEmpty>();
            }

            snapshot.Systems.Add(new SystemCounter()
            {
                Filter = new[] { typeof(DataEmpty) }
            });

            IGameEngine engine = GameEngineFactory.CreateEngine(snapshot, templates).Value;

            engine.Update().Wait();
            engine.SynchronizeState().Wait();

            Assert.Equal(snapshot.ActiveEntities.Count(), engine.GetSystem <SystemCounter>().UpdateCount);
        }
Exemple #23
0
        public void RemoveEntityAndModifyInRemoveNotification()
        {
            GameSnapshot   snapshot  = (GameSnapshot)LevelManager.CreateSnapshot();
            ITemplateGroup templates = LevelManager.CreateTemplateGroup();

            snapshot.Systems.Add(new SystemEventLogger(new Type[] { }));
            snapshot.Systems.Add(new ModifyOnRemovedTrigger());

            {
                IEntity e = snapshot.CreateEntity(GameSnapshot.EntityAddTarget.Removed);
                e.AddData <DataEmpty>();
            }

            IGameEngine engine = GameEngineFactory.CreateEngine(snapshot, templates).Value;

            engine.Update().Wait();
            engine.SynchronizeState().Wait();

            List <TriggerEvent> events = new List <TriggerEvent>();

            events.Add(
                TriggerEvent.OnRemoved,
                TriggerEvent.OnGlobalPreUpdate,
                TriggerEvent.OnGlobalPostUpdate);
            Assert.Equal(events, engine.GetSystem <SystemEventLogger>().Events);

            for (int i = 0; i < 20; ++i)
            {
                engine.Update().Wait();
                engine.SynchronizeState().Wait();

                events.Add(
                    TriggerEvent.OnGlobalPreUpdate,
                    TriggerEvent.OnGlobalPostUpdate);
                Assert.Equal(events, engine.GetSystem <SystemEventLogger>().Events);
            }
        }
Exemple #24
0
        private GameSnapshot GetRawSnapshot()
        {
            if (_nextState != GameEngineNextState.Update)
            {
                throw new InvalidOperationException("You can only get a snapshot after synchronizing state");
            }

            GameSnapshot snapshot = new GameSnapshot();

            snapshot.EntityIdGenerator = EntityIdGenerator;
            snapshot.GlobalEntity      = _globalEntity;

            foreach (var adding in _notifiedAddingEntities.ToList())
            {
                snapshot.AddedEntities.Add(adding);
            }

            List <RuntimeEntity> removing = _notifiedRemovedEntities.ToList();

            foreach (var entity in _entities)
            {
                bool isRemoving = removing.Contains(entity);

                if (isRemoving)
                {
                    snapshot.RemovedEntities.Add(entity);
                }
                else
                {
                    snapshot.ActiveEntities.Add(entity);
                }
            }

            snapshot.Systems = _systems;

            return(snapshot);
        }
Exemple #25
0
 public void AddGameSnapshot(GameSnapshot gameSnapshot)
 {
     _dbContext.GameSnapshots.Add(gameSnapshot);
 }
Exemple #26
0
        public GameEngine(string snapshotJson, string templateJson)
        {
            _templateJson = templateJson;

            // Create our own little island of references with its own set of templates
            GameSnapshotRestorer restorer = GameSnapshotRestorer.Restore(
                snapshotJson, templateJson, Maybe.Just(this));
            GameSnapshot snapshot = restorer.GameSnapshot;

            EntityIdGenerator = snapshot.EntityIdGenerator;

            _systems     = snapshot.Systems;
            _entityIndex = new EntityIndex();

            // TODO: ensure that when correctly restore UpdateNumber
            //UpdateNumber = updateNumber;

            _globalEntity = (RuntimeEntity)snapshot.GlobalEntity;

            EventNotifier.Submit(EntityAddedEvent.Create(_globalEntity));

            foreach (var entity in snapshot.AddedEntities)
            {
                AddEntity((RuntimeEntity)entity);
            }

            foreach (var entity in snapshot.ActiveEntities)
            {
                RuntimeEntity runtimeEntity = (RuntimeEntity)entity;

                // add the entity
                InternalAddEntity(runtimeEntity);

                // TODO: verify that if the modification notifier is already triggered, we can
                // ignore this
                //if (((ContentEntity)entity).HasModification) {
                //    runtimeEntity.ModificationNotifier.Notify();
                //}

                // done via InternalAddEntity
                //if (deserializedEntity.HasStateChange) {
                //    deserializedEntity.Entity.DataStateChangeNotifier.Notify();
                //}
            }

            foreach (var entity in snapshot.RemovedEntities)
            {
                RuntimeEntity runtimeEntity = (RuntimeEntity)entity;

                // add the entity
                InternalAddEntity(runtimeEntity);

                // TODO: verify that if the modification notifier is already triggered, we can
                // ignore this
                //if (((ContentEntity)entity).HasModification) {
                //    runtimeEntity.ModificationNotifier.Notify();
                //}

                // done via InternalAddEntity
                //if (deserializedEntity.HasStateChange) {
                //    deserializedEntity.Entity.DataStateChangeNotifier.Notify();
                //}

                RemoveEntity(runtimeEntity);
            }

            TemplateIndex templateIndex = new TemplateIndex(restorer.Templates.Templates);

            _executionGroups = new List <ExecutionGroup>();
            var executionGroups = SystemExecutionGroup.GetExecutionGroups(snapshot.Systems);

            foreach (var executionGroup in executionGroups)
            {
                List <MultithreadedSystem> multithreadedSystems = new List <MultithreadedSystem>();
                foreach (var system in executionGroup.Systems)
                {
                    MultithreadedSystem multithreaded = CreateMultithreadedSystem(system, templateIndex);
                    multithreadedSystems.Add(multithreaded);
                }
                _executionGroups.Add(new ExecutionGroup(multithreadedSystems));
            }

            _nextState = GameEngineNextState.SynchronizeState;
            SynchronizeState().Wait();

            // call of the engine loaded systems
            foreach (var group in _executionGroups)
            {
                foreach (var system in group.Systems)
                {
                    var onLoaded = system.System as Trigger.OnEngineLoaded;
                    if (onLoaded != null)
                    {
                        onLoaded.OnEngineLoaded(EventNotifier);

                        // TODO: verify that OnEngineLoaded didn't change any state (via hashing)
                    }
                }
            }
        }
Exemple #27
0
        private static List<GameSnapshot> GetGameSnapShots(string csvText)
        {
            var snapShots = new List<GameSnapshot>();

            var lines = csvText.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
            if (lines.Length < 2)
                return snapShots;

            var header = lines.FirstOrDefault();
            var hData = header.Split(',').ToList();
            Func<string, string[], string> getData =
                (headerText, dataLine) =>
                {
                    var idx = hData.IndexOf(headerText);
                    var val = idx >= 0 && dataLine.Length > hData.IndexOf(headerText) ?
                    dataLine[idx] : "";
                    return val;
                };

            var data = lines.Skip(1).ToArray();

            foreach (var l in data)
            {
                var arr = l.Split(',');
                if (l.Length < 5)
                {
                    continue;
                }
                var p1 = getData(CsvHandler.H_P1, arr);
                var p2 = getData(CsvHandler.H_P2, arr);
                var p3 = getData(CsvHandler.H_P3, arr);
                var p4 = getData(CsvHandler.H_P4, arr);
                var p5 = getData(CsvHandler.H_P5, arr);

                var playerNumbersStr = new List<string> { p1, p2, p3, p4, p5 };
                var playerNumbers = new List<int>();
                foreach (var nStr in playerNumbersStr)
                {
                    int num;
                    if (int.TryParse(nStr, out num))
                        playerNumbers.Add(num);

                }

                var scoreStr = getData(CsvHandler.H_TEAM_SCORE, arr);
                var op_scoreStr = getData(CsvHandler.H_OPONENT_SCORE, arr);
                var quarterStr = getData(CsvHandler.H_QUARTER, arr);
                var timeLeftInQuarterStr = getData(CsvHandler.H_TIME_LEFT, arr);

                int score = -1;
                int.TryParse(scoreStr, out score);
                int op_score = -1;
                int.TryParse(op_scoreStr, out op_score);
                int quarter = -1;
                int.TryParse(quarterStr, out quarter);
                TimeSpan timeLeftInQuarter = TimeSpan.FromSeconds(0);
                TimeSpan.TryParseExact(timeLeftInQuarterStr, "mmss", null,out timeLeftInQuarter);
                DateTime dt;
                if (DateTime.TryParseExact(timeLeftInQuarterStr, "mm:ss", null, System.Globalization.DateTimeStyles.None, out dt))
                {
                    timeLeftInQuarter = dt - dt.Date;
                }
                var snapshot = new GameSnapshot(playerNumbers, quarter, timeLeftInQuarter, score, op_score);
                snapShots.Add(snapshot);

            }
            snapShots = snapShots.OrderBy(snp => snp.Quarter).ThenByDescending(snp => snp.TimeLeft).ToList();
            return snapShots;
        }
Exemple #28
0
 public void GetStateSnapshot(ref GameSnapshot snapshot)
 {
     // TODO: Not currently used.
 }
 // Loads a snapshot of a previous game state
 public void LoadSnapshot(GameSnapshot snapshot)
 {
     //Debug.Log("snapshot loaded");
     gamemap.LoadSnapshot(snapshot.mapState);
     player.LoadSnapshot(snapshot.playerState);
 }
        private Dictionary <int, SnapshotPlayerInfo> AddUnseenInformationToGameSnapshot(GameSnapshot gameSnapshot, int currentPlayerId)
        {
            // Everyone sees everyone in the lobby
            if (scenesManager.GetActiveScene() == Scene.Lobby)
            {
                return(gameSnapshot.playersInfo);
            }

            foreach (SnapshotPlayerInfo snapshotPlayerInfo in gameSnapshot.playersInfo.Values)
            {
                bool          isSelfInformation         = snapshotPlayerInfo.id == currentPlayerId;
                bool          isTooFarAway              = (gameSnapshot.playersInfo[currentPlayerId].position - snapshotPlayerInfo.position).magnitude > 8;
                SecurityPanel securityPanel             = playGamePhase.serverSkeld.securityPanel;
                bool          isSeenFromSecurityCameras = securityPanel.IsPlayerLooking(currentPlayerId) && securityPanel.IsSeenFromSecurityCameras(snapshotPlayerInfo.id);

                if (isTooFarAway && !isSelfInformation && !isSeenFromSecurityCameras)
                {
                    snapshotPlayerInfo.unseen = true;
                }
            }

            return(gameSnapshot.playersInfo);
        }
Exemple #31
0
 protected abstract void ThrowUndoInternal(GameSnapshot gameSnapshot);