private int GetFallDistance() { var fallDistance = 100; var objectsProfile = Room.Instance.ObjectsVolume.GetHighProfile(); var furnitureLowProfile = _target.Volume.GetLowProfile(); foreach (var kvp in furnitureLowProfile) { var voxelFurniture = new Vector3Int(kvp.Key.x, kvp.Value, kvp.Key.y); var voxelWorldFuniture = VoxelSpace.GetWorldVoxelFromLocalVoxel(_target.transform.position, voxelFurniture - _target.Volume.Pivot); var voxelLocalRoom = VoxelSpace.GetLocalVoxelFromWorldVoxel(Room.Instance.transform.position, voxelWorldFuniture + Room.Instance.ObjectsVolume.Pivot); var roomXz = new Vector2Int(voxelLocalRoom.x, voxelLocalRoom.z); if (objectsProfile.ContainsKey(roomXz)) { Debug.DrawRay(VoxelSpace.GetWorldPositionCenter(voxelWorldFuniture), Vector3.up, Color.red, 1f); var localH = objectsProfile[roomXz]; var voxelWorldRoom = VoxelSpace.GetWorldVoxelFromLocalVoxel(Room.Instance.transform.position, new Vector3Int(roomXz.x, localH, roomXz.y) - Room.Instance.ObjectsVolume.Pivot); fallDistance = Mathf.Min(Mathf.Abs(voxelWorldRoom.y - voxelWorldFuniture.y) - 1, fallDistance); fallDistance = Mathf.Max(fallDistance, 0); } fallDistance = Mathf.Min(voxelWorldFuniture.y, fallDistance); } if (fallDistance == 100) { return(0); } return(fallDistance); }
public void PlaceFurniture(VoxelFurniture furniture) { //furniture.FinishMovement(); foreach (var kvp in furniture.Volume.Data) { var worldVoxel = VoxelSpace.GetWorldVoxelFromLocalVoxel(furniture.transform.position, kvp.Key - furniture.Volume.Pivot); var localVoxel = VoxelSpace.GetLocalVoxelFromWorldVoxel(transform.position, worldVoxel + ObjectsVolume.Pivot); ObjectsVolume.SetAt(localVoxel, kvp.Value); } _placedFurniture.Add(furniture); }