private SolverNode Assemble( SolverNode parent, StagingSolverNode flat, ImmutableDictionary <int, StagingSolverNode> all, ImmutableDictionary <int, ImmutableArray <StagingSolverNode> > parents) { var n = new SolverNode(parent, new VectorInt2(flat.PlayerBeforeX, flat.PlayerBeforeY), new VectorInt2(flat.PushX, flat.PushY), flat.CrateMap, flat.MoveMap, flat.SolverNodeId ); n.Status = (SolverNodeStatus)flat.Status; if (parents.TryGetValue(flat.SolverNodeId, out var kids)) { foreach (var kid in kids) { n.Add(Assemble(n, kid, all, parents)); } } return(n); }
public StagingSolverNode Read(BinaryReader sr) { var temp = new StagingSolverNode { SolverNodeId = sr.ReadInt32(), ParentId = sr.ReadInt32(), PlayerBeforeX = sr.ReadInt32(), PlayerBeforeY = sr.ReadInt32(), PushX = sr.ReadInt32(), PushY = sr.ReadInt32(), Status = sr.ReadByte(), HashCode = sr.ReadInt32(), }; var l = sr.ReadInt32(); temp.Crate = sr.ReadBytes(l); l = sr.ReadInt32(); temp.Move = sr.ReadBytes(l); return(temp); }