Skip to main content

PlanBox

Struct PlanBox 

Source
pub struct PlanBox {
    pub node: NodeId,
    pub min: Option<[i64; 2]>,
    pub extent: [NonZeroU32; 2],
    pub floor: Floor,
    pub ceiling: Ceiling,
    pub base: Base,
    pub atmosphere: Option<AtmosphereId>,
    pub roof: Option<Roof>,
}
Expand description

One place, embedded: a cuboid of the world.

A box is a 3D region. Its min/extent are the two horizontal axes; its vertical extent is three declared planes — PlanBox::floor, the one authority for the walk plane; PlanBox::ceiling, the headroom over it (a lid, or exactly n courses of sky); and PlanBox::base, what it stands on (the site’s ground, or n underside courses hung in the air). Two places conflict only where their cuboids overlap (DW0827); a cell no place claims is the whole’s — on an open site, walkable ground and sky.

A box is the PLAY SPACE, and connected boxes are separated by exactly one cell. extent is the interior a body can stand in; the shell the blockout derivation builds is not inside it. That shell stands in the one-cell gap between two neighbours, and on the course under the floor and over the ceiling. So two places that connect are placed one cell apart on the face they share — that cell is the wall they have in common, written once — and two boxes placed flush have no wall for a seam to be cut through, which DW0828 refuses. Worked: a box at min: [4, 4] with extent: [4, 4] occupies x 4..7, so its eastern neighbour’s min x is 9, never 8.

The consequence is what makes the checks say what they look like they say: extent is the play space the author declared, and a plan never states a wall’s thickness anywhere, because the gap is where the wall is.

Fields§

§node: NodeId

The graph node this box embeds.

The ordering tooth, at the type level: there is no way to write a box that does not name a place, so a site plan cannot describe a space the layout graph has not declared (spec-0049 §7.1).

§min: Option<[i64; 2]>

A pin: the low corner [x, z] in world coordinates, when the author chooses where this box stands. Optional (spec-0059 §2): a box with no pin stands where the packing puts it — one cell beyond the face of the box its first seam in document order hangs it off. At least one box of every connected component of the seam graph is pinned, or nothing places the component (DW0883); a pinned box the packing also reaches at a different corner is refused naming both (DW0883). Two horizontal numbers, never three — the vertical position is floor.

§extent: [NonZeroU32; 2]

Interior footprint [dx, dz], in blocks — any whole number on either axis. Two horizontal numbers, never three — the vertical size is ceiling.

This is play space, not the building. The box covers min to min + extent - 1 inclusive, and the walls stand outside it, in the one-cell gap that separates connected places (DW0828).

§floor: Floor

The walk plane.

§ceiling: Ceiling

What closes it overhead.

§base: Base

What it stands on: "ground" (the default) or {"aloft": n}.

§atmosphere: Option<AtmosphereId>

The sky this place stands under from the first tick (spec-0080 §3.2): one of world.atmospheres[], painted at world setup over the box’s play space grown as far as the client’s biome blend reads — the same capability areas[].atmosphere is, on the other class of place with a world box. Absent: the horizon’s biome.

§roof: Option<Roof>

The roof the whole reserves over this place (spec-0098 §3): how many courses it rises above the ceiling course and how far it overhangs the shell on each horizontal side. Massed solid at stage 5 so a walker sees the volume the building will take; drawn by the place’s own piece once detailed. Absent: a flat lid one course thick, which the piece owns too. Refused on a sky-open box, and where its courses rise into another place (DW0988); its eaves stop at a neighbour’s wall.

Trait Implementations§

Source§

impl Clone for PlanBox

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PlanBox

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for PlanBox

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl JsonSchema for PlanBox

Source§

fn schema_name() -> Cow<'static, str>

The name of the generated JSON Schema. Read more
Source§

fn schema_id() -> Cow<'static, str>

Returns a string that uniquely identifies the schema produced by this type. Read more
Source§

fn json_schema(generator: &mut SchemaGenerator) -> Schema

Generates a JSON Schema for this type. Read more
Source§

fn inline_schema() -> bool

Whether JSON Schemas generated for this type should be included directly in parent schemas, rather than being re-used where possible using the $ref keyword. Read more
Source§

impl PartialEq for PlanBox

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Serialize for PlanBox

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for PlanBox

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.