public override GGPOErrorCode AdvanceFrame() { sync.IncrementFrame(); currentInput.Erase(); Log($"End of frame({sync.FrameCount})..."); if (isRollingBack) { return(GGPOErrorCode.OK); } int frame = sync.FrameCount; // Hold onto the current frame in our queue of saved states. We'll need // the checksum later to verify that our replay of the same frame got the // same results. var info = new SavedInfo { frame = frame, input = lastInput, buffer = sync.GetLastSavedFrame().buffer, checksum = sync.GetLastSavedFrame().checksum, }; savedFrames.Push(info); if (frame - lastVerified == checkDistance) { // We've gone far enough ahead and should now start replaying frames. // Load the last verified frame and set the rollback flag to true. sync.LoadFrame(lastVerified); isRollingBack = true; while (!savedFrames.IsEmpty) { callbacks.AdvanceFrame(); // Verify that the checksumn of this frame is the same as the one in our // list. info = savedFrames.Front(); savedFrames.Pop(); if (info.frame != sync.FrameCount) { RaiseSyncError($"Frame number {info.frame} does not match saved frame number {frame}"); } int checksum = sync.GetLastSavedFrame().checksum; if (info.checksum != checksum) { LogSaveStates(info); RaiseSyncError($"Checksum for frame {frame} does not match saved ({checksum} != {info.checksum})"); } Log($"Checksum {checksum:D8} for frame {info.frame} matches."); } lastVerified = frame; isRollingBack = false; } return(GGPOErrorCode.OK); }
public App() { InitializeComponent(); //Test List <Employee> eList = new List <Employee>(); eList.Add(new Employee("aaa")); eList.Add(new Employee("bbb")); List <Supervisor> sList = new List <Supervisor>(); sList.Add(new Supervisor("ccc")); sList.Add(new Supervisor("ddd")); SavedInfo savedInfo = new SavedInfo(); savedInfo.employeeList = eList; savedInfo.supervisorList = sList; SaveToFile(savedInfo); //Save to file SavedInfo newSaveGame = LoadFromFile(); //Load from file foreach (var e in newSaveGame.employeeList) { Console.WriteLine("Employee: " + e.name); } foreach (var e in newSaveGame.supervisorList) { Console.WriteLine("Supervisor: " + e.name); } }
public void SaveToFile(SavedInfo objectToSerialize) { Stream stream = File.Open(path, FileMode.Create); BinaryFormatter bFormatter = new BinaryFormatter(); bFormatter.Serialize(stream, objectToSerialize); stream.Close(); }
// Start is called before the first frame update void Start() { SavedInfo info = GameObject.FindGameObjectWithTag("Info").GetComponent<SavedInfo>(); mapData = info.pickedMap; grid = mapData.grid; units = new GameObject[mapData.enemies.Length]; for (int i = 0; i< mapData.len; i++) { for (int j = 0; j < mapData.wid; j++) { string tile = grid[(i*mapData.len)+j]; string[] specs = tile.Split('/'); int height = int.Parse(specs[1]); switch (specs[0]) { case "dirt": GameObject dirtCube = Instantiate(dirt, new Vector3(i, height, j), dirt.transform.rotation, mapObj.transform); dirtCube.name = "x" + i + "y" + j; break; case "forest": GameObject forestCube = Instantiate(forest, new Vector3(i, height, j), forest.transform.rotation, mapObj.transform); forestCube.name = "x" + i + "y" + j; break; case "stone": GameObject stoneCube = Instantiate(stone, new Vector3(i, height, j), stone.transform.rotation, mapObj.transform); stoneCube.name = "x" + i + "y" + j; break; case "sand": GameObject sandCube = Instantiate(sand, new Vector3(i, height, j), sand.transform.rotation, mapObj.transform); sandCube.name = "x" + i + "y" + j; break; case "water": GameObject waterCube = Instantiate(water, new Vector3(i, height, j), water.transform.rotation, mapObj.transform); waterCube.name = "x" + i + "y" + j; break; default: break; } } } for (int i = 0; i < mapData.enemies.Length; i++) { int x = mapData.enemyLocations[i] / mapData.len; int height = 0; int z = mapData.enemyLocations[i] % mapData.len; RaycastHit hit; if(Physics.Raycast(new Vector3((float)(x), 10, (float)(z)), new Vector3(0, -1, 0), out hit)) { height = (int) (10.0 - hit.distance); } GameObject unit = Instantiate(mapData.enemies[i], new Vector3(x, height+1, z), Quaternion.identity, mapObj.transform); unit.transform.Find("Pointer").gameObject.SetActive(false); this.gameObject.GetComponent<TurnOrder>().currentOrder.Add(unit); units[i] = unit; UnitInfo unIn = unit.GetComponent<UnitInfo>(); unIn.currentTile = hit.transform.gameObject; unIn.faction = "enemy"; unIn.name = mapData.enemyNames[i]; TileTextInfo occTile = hit.transform.gameObject.GetComponent<TileTextInfo>(); occTile.currOcc = unIn; } for (int i = 0; i<mapData.player.Length; i++) { int x = mapData.playerLocations[i] / mapData.len; int height = 0; int z = mapData.playerLocations[i] % mapData.len; RaycastHit hit; if (Physics.Raycast(new Vector3((float)(x), 10, (float)(z)), new Vector3(0, -1, 0), out hit)) { height = (int)(10.0 - hit.distance); } GameObject unit = Instantiate(mapData.player[i], new Vector3(x, height + 1, z), Quaternion.identity, mapObj.transform); unit.transform.Find("Pointer").gameObject.SetActive(false); this.gameObject.GetComponent<TurnOrder>().currentOrder.Add(unit); units[i] = unit; UnitInfo unIn = unit.GetComponent<UnitInfo>(); unIn.currentTile = hit.transform.gameObject; unIn.faction = "player"; unIn.name = mapData.playerNames[i]; TileTextInfo occTile = hit.transform.gameObject.GetComponent<TileTextInfo>(); occTile.currOcc = unIn; } mainCam.transform.position = new Vector3(mapData.wid*1.4f, (mapData.len + mapData.wid)*.5f , mapData.len*1.4f); turnOrder.ShowOrder(); }
protected override void OnStartup(object sender, System.Windows.StartupEventArgs e) { var viewModel = IoC.Get <PokemonChessViewModel>(); IWindowManager windowManager; try { windowManager = IoC.Get <IWindowManager>(); } catch { windowManager = new WindowManager(); } savedInfo = new SavedInfo(); savedInfo.BoardPieceStrings = new BindableCollection <string>() { }; savedInfo.SavedFaintedBlack = new BindableCollection <string>() { }; savedInfo.SavedFaintedWhite = new BindableCollection <string>() { }; savedInfo.LoadSettings(GetSettingsPath()); if (savedInfo.BoardPieceStrings.Count != 0) { viewModel.CurrentGame = new Game(); viewModel.CurrentGame.BlackTeam = new Team(Entities.SharedEnums.Enums.BlackOrWhite.Black, savedInfo.SavedBlackTeamType); viewModel.CurrentGame.BlackTeam.CanCastleLeft = savedInfo.CanBlackCastleLeft; viewModel.CurrentGame.BlackTeam.CanCastleRight = savedInfo.CanBlackCastleRight; viewModel.CurrentGame.WhiteTeam = new Team(Entities.SharedEnums.Enums.BlackOrWhite.White, savedInfo.SavedWhiteTeamType); viewModel.CurrentGame.WhiteTeam.CanCastleLeft = savedInfo.CanWhiteCastleLeft; viewModel.CurrentGame.WhiteTeam.CanCastleRight = savedInfo.CanWhiteCastleRight; viewModel.CurrentGame.GameBoard = new Board(savedInfo.BoardPieceStrings, savedInfo.SavedBlackTeamType, savedInfo.SavedWhiteTeamType); viewModel.CurrentGame.TurnCount = savedInfo.SavedTurnCount; viewModel.CurrentGame.CurrentTurn = savedInfo.SavedCurrentTurn; viewModel.PieceDataScreen.GameText = savedInfo.GameString; foreach (String blackey in savedInfo.SavedFaintedBlack) { viewModel.CurrentGame.FaintedBlackPokes.AddFaintedPokemon (General.GetPieceInstanceFromString(blackey, 0, savedInfo.SavedBlackTeamType, savedInfo.SavedWhiteTeamType)); } foreach (String whitey in savedInfo.SavedFaintedWhite) { viewModel.CurrentGame.FaintedWhitePokes.AddFaintedPokemon (General.GetPieceInstanceFromString(whitey, 0, savedInfo.SavedBlackTeamType, savedInfo.SavedWhiteTeamType)); } } viewModel.WhiteTeamType = savedInfo.WhiteDefaultTeam; viewModel.BlackTeamType = savedInfo.BlackDefaultTeam; dynamic settings = new System.Dynamic.ExpandoObject(); settings.Title = "Pokemon Chess"; settings.SizeToContent = System.Windows.SizeToContent.Manual; Uri iconUri = new Uri("pack://application:,,,/Images/FirePokemon/Charizard.ico", UriKind.Absolute); settings.Icon = BitmapFrame.Create(iconUri); settings.WindowStyle = WindowStyle.None; settings.WindowState = WindowState.Maximized; settings.ResizeMode = ResizeMode.NoResize; windowManager.ShowWindow(viewModel, null, settings); }