public static void Place(Block block, Vector3Int baseCoordinate)//, Orientation) { if (CanPlace(block, baseCoordinate) != BlockPlacementPermission.Valid) { return; } Stub[] stubs = block.GetStubs(); for (int i = 0; i < stubs.Length; i++) { Vector3Int localCoordinate = stubs[i].GetLocalBlockCoordinate(); Vector3Int worldCoordinate = baseCoordinate + BlockOrientationHelper.TransformCoordinate(localCoordinate, block.BlockOrientation); SetCoordinate(worldCoordinate, true); stubs[i].name = worldCoordinate.ToString(); stubs[i].BlockCoordinate = worldCoordinate; } block.transform.position = CoordinateToWorldPosition(baseCoordinate); }
public static BlockPlacementPermission CanPlace(Block block, Vector3Int baseCoordinate) { Stub[] stubs = block.GetStubs(); for (int i = 0; i < stubs.Length; i++) { Vector3Int localCoordinate = stubs[i].GetLocalBlockCoordinate(); Vector3Int worldCoordinate = baseCoordinate + BlockOrientationHelper.TransformCoordinate(localCoordinate, block.BlockOrientation); if (!IsValidCoordinate(worldCoordinate)) { //Debug.LogError($"Out of range: At {baseCoordinate}, cannot place local: ({localCoordinate} | {stubs[i].name}) {i} at {worldCoordinate}"); return(BlockPlacementPermission.OutOfRange); } if (IsOccupied(worldCoordinate)) { //Debug.LogError($"Occupied: At {baseCoordinate}, cannot place local:{localCoordinate} {i} at {worldCoordinate}"); return(BlockPlacementPermission.Occupied); } } return(BlockPlacementPermission.Valid); }