예제 #1
0
        public bool LoadGrid(int ID, out IEnumerable <MyObjectBuilder_CubeGrid> Grids, out GridStamp Stamp)
        {
            Grids = null;
            Stamp = null;
            if (ID - 1 >= SelectedPlayerFile.Grids.Count || ID < 1)
            {
                Chat?.Respond("Invalid Index! Grid doent exsist in that slot!");
                return(false);
            }


            Stamp = SelectedPlayerFile.GetGrid(ID);
            string GridPath = Path.Combine(PlayersFolderPath, Stamp.GridName + ".sbc");

            Log.Warn("Attempting to load grid @" + GridPath);
            if (!GridSerializer.LoadGrid(GridPath, out Grids))
            {
                return(false);
            }

            PluginDependencies.BackupGrid(Grids.ToList(), IdentityID);
            GridSerializer.TransferGridOwnership(Grids, IdentityID);

            return(true);
        }
예제 #2
0
    public void Initialize(Grid <Tile> grid = null)
    {
        if (grid == null && string.IsNullOrEmpty(GridData))
        {
            return;
        }

        if (grid == null)
        {
            _grid = GridSerializer.Deserialize(GridData);
            if (_grid == null)
            {
                Debug.LogError("There was an error deserializing the grid data.");
            }
        }
        else
        {
            _grid    = grid;
            GridData = GridSerializer.Serialize(_grid);
        }

        GridWidth    = _grid.GetGrid().GetLength(0);
        GridHeight   = _grid.GetGrid().GetLength(1);
        GridCellSize = _grid.GetCellSize();
        GridOrigin   = _grid.GetOrigin();

        if (Instance != null && Instance != this)
        {
            Destroy(gameObject);
        }
        else
        {
            Instance = this;
        }
    }
예제 #3
0
        private static void Main(string[] args)
        {
            args    = new string[2];
            args[0] = @"C:\Source\CC\input.txt";
            args[1] = "42";

            var   importer = new InputImporter();
            Input input    = importer.Import(args[0]);

            input.StartIndex = int.Parse(args[1]);

            Grid bestSolution = null;

            for (int i = 0; i < 10000; i++)
            {
                var  puzzle   = new TetrisPuzzle();
                Grid solution = puzzle.Solve(input);
                if (bestSolution == null || solution.NumEmpty < bestSolution.NumEmpty)
                {
                    bestSolution = solution;
                }
            }

            var    serializer = new GridSerializer();
            string output     = serializer.Execute(bestSolution);

            Console.WriteLine(output);
            File.WriteAllText("output.txt", output);
            Console.ReadKey();
        }
예제 #4
0
        public bool TryGetGrids(string PlayersFolderPath, out IEnumerable <MyObjectBuilder_CubeGrid> Grids)
        {
            Grids = null;
            string GridPath = Path.Combine(PlayersFolderPath, GridName + ".sbc");

            if (!GridSerializer.LoadGrid(GridPath, out Grids))
            {
                return(false);
            }

            return(true);
        }
예제 #5
0
        public bool LoadGrid(GridStamp Stamp, out IEnumerable <MyObjectBuilder_CubeGrid> Grids)
        {
            Grids = null;


            if (!Stamp.TryGetGrids(PlayersFolderPath, out Grids))
            {
                return(false);
            }


            PluginDependencies.BackupGrid(Grids.ToList(), Identity.IdentityId);
            GridSerializer.TransferGridOwnership(Grids, Identity.IdentityId, Stamp.TransferOwnerShipOnLoad);

            return(true);
        }
예제 #6
0
        public void GraphIsEqualAfterSerializeAndDeSerialize()
        {
            var grid = Grid.CreateGridWithLateralConnections(new GridSize(2, 4),
                                                             new Size(Distance.FromMeters(2.0f), Distance.FromMeters(1.0f)), Velocity.FromKilometersPerHour(3));

            var stringGrid       = GridSerializer.SerializeGrid(grid);
            var deserializedGrid = GridSerializer.DeSerializeGrid(stringGrid);

            Assert.AreEqual(grid.Rows, deserializedGrid.Rows);
            Assert.AreEqual(grid.Columns, deserializedGrid.Columns);
            for (int i = 0; i < grid.Columns; i++)
            {
                for (int j = 0; j < grid.Rows; j++)
                {
                    var gridPosition     = new GridPosition(i, j);
                    var originalNode     = grid.GetNode(gridPosition);
                    var deserializedNode = grid.GetNode(gridPosition);
                    Assert.AreEqual(originalNode.Position, deserializedNode.Position);
                    Assert.AreEqual(originalNode.Outgoing.Count, deserializedNode.Outgoing.Count);
                    Assert.AreEqual(originalNode.Incoming.Count, deserializedNode.Incoming.Count);
                    foreach (var edge in originalNode.Outgoing)
                    {
                        var matchingEdge = deserializedNode.Outgoing.Single(o =>
                                                                            o.Start.Position.Equals(edge.Start.Position) && o.End.Position.Equals(edge.End.Position));
                        Assert.AreEqual(edge.Distance, matchingEdge.Distance);
                        Assert.AreEqual(edge.TraversalDuration, matchingEdge.TraversalDuration);
                        Assert.AreEqual(edge.TraversalVelocity, matchingEdge.TraversalVelocity);
                    }

                    foreach (var edge in originalNode.Incoming)
                    {
                        var matchingEdge = deserializedNode.Incoming.Single(o =>
                                                                            o.Start.Position.Equals(edge.Start.Position) && o.End.Position.Equals(edge.End.Position));
                        Assert.AreEqual(edge.Distance, matchingEdge.Distance);
                        Assert.AreEqual(edge.TraversalDuration, matchingEdge.TraversalDuration);
                        Assert.AreEqual(edge.TraversalVelocity, matchingEdge.TraversalVelocity);
                    }
                }
            }
        }
예제 #7
0
        public static void SetGridPreview(long EntityID, ulong Owner, string GridName)
        {
            if (!ValidGrid(Owner, GridName, out MarketListing Offer, out string GridPath))
            {
                return;
            }


            if (Offer.NumberofBlocks > 100000)
            {
                Log.Warn("MarketPreview Blocked. Grid is greater than 100000 blocks");
                return;
            }


            //Need async

            Log.Warn("Loading Grid");
            if (!GridSerializer.LoadGrid(GridPath, out IEnumerable <MyObjectBuilder_CubeGrid> GridBuilders))
            {
                RemoveMarketListing(Owner, GridName);
                return;
            }


            //Now attempt to load grid
            if (MyEntities.TryGetEntityById(EntityID, out MyEntity entity))
            {
                MyProjectorBase proj = entity as MyProjectorBase;
                if (proj != null)
                {
                    proj.SendRemoveProjection();
                    var Grids = GridBuilders.ToList();
                    Log.Warn("Setting projection!");
                    SendNewProjection.Invoke(proj, new object[] { Grids });
                }
            }
        }
예제 #8
0
 public async Task <bool> SaveGridsToFile(GridResult Grids, string FileName)
 {
     return(await GridSerializer.SaveGridsAndClose(Grids.Grids, PlayersFolderPath, FileName, Identity.IdentityId));
 }
예제 #9
0
 public bool SaveGridsToFile(GridResult Grids, string FileName)
 {
     return(GridSerializer.SaveGridsAndClose(Grids.Grids, PlayersFolderPath, FileName, IdentityID));
 }