コード例 #1
0
        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);
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        public void SaveToFile(SavedInfo objectToSerialize)
        {
            Stream          stream     = File.Open(path, FileMode.Create);
            BinaryFormatter bFormatter = new BinaryFormatter();

            bFormatter.Serialize(stream, objectToSerialize);
            stream.Close();
        }
コード例 #4
0
    // 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();
    }
コード例 #5
0
        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);
        }