Пример #1
0
    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);
    }
Пример #2
0
 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);
 }