public static IEnumerable <ElevatorExit> EnumerateExits(ElevatorStack Stack) { foreach (var segment in Stack.Pieces) { foreach (var neighborVoxel in VoxelHelpers.EnumerateManhattanNeighbors2D_Y(segment.GetContainingVoxel().Coordinate)) { var neighborHandle = new VoxelHandle(segment.Manager.World.ChunkManager, neighborVoxel); if (neighborHandle.IsValid && neighborHandle.IsEmpty) { var below = neighborVoxel + new GlobalVoxelOffset(0, -1, 0); var belowHandle = new VoxelHandle(segment.Manager.World.ChunkManager, below); if (belowHandle.IsValid && !belowHandle.IsEmpty) { yield return new ElevatorExit { OntoVoxel = neighborHandle, ShaftSegment = segment } } ; } } } } }
public static ElevatorStack Create(IEnumerable <ElevatorShaft> Pieces) { var r = new ElevatorStack(); r.Pieces.AddRange(Pieces); r.UpdateBoundingBox(); r.Invalid = false; return(r); }
private void RemoveShaft(ElevatorStack Shaft) { if (Shaft.Platform != null) { Shaft.Platform.Delete(); Shaft.Platform = null; Shaft.Destroy(); } Shafts.Remove(Shaft); }
private void CreateNewShaft(IEnumerable <ElevatorShaft> segments) { var newShaft = ElevatorStack.Create(segments); Shafts.Add(newShaft); newShaft.Platform = new ElevatorPlatform(segments.First().Manager, segments.First().Position); foreach (var segment in segments) { RemoveShaft(segment.Shaft); segment.Shaft = newShaft; segment.NeedsShaftUpdate = false; } }