mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Rename 'and' to 'intersect' and 'or' to 'union'
This commit is contained in:
parent
2d89e298df
commit
07da6a9271
@ -47,9 +47,8 @@ pub enum Primitive {
|
||||
Prefab(Box<PrefabStructure>),
|
||||
|
||||
// Combinators
|
||||
And(Id<Primitive>, Id<Primitive>),
|
||||
Or(Id<Primitive>, Id<Primitive>),
|
||||
Xor(Id<Primitive>, Id<Primitive>),
|
||||
Intersect(Id<Primitive>, Id<Primitive>),
|
||||
Union(Id<Primitive>, Id<Primitive>),
|
||||
// Not commutative
|
||||
Diff(Id<Primitive>, Id<Primitive>),
|
||||
// Operators
|
||||
@ -59,16 +58,12 @@ pub enum Primitive {
|
||||
}
|
||||
|
||||
impl Primitive {
|
||||
pub fn and(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
Self::And(a.into(), b.into())
|
||||
pub fn intersect(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
Self::Intersect(a.into(), b.into())
|
||||
}
|
||||
|
||||
pub fn or(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
Self::Or(a.into(), b.into())
|
||||
}
|
||||
|
||||
pub fn xor(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
Self::Xor(a.into(), b.into())
|
||||
pub fn union(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
Self::Union(a.into(), b.into())
|
||||
}
|
||||
|
||||
pub fn diff(a: impl Into<Id<Primitive>>, b: impl Into<Id<Primitive>>) -> Self {
|
||||
@ -224,15 +219,12 @@ impl Fill {
|
||||
},
|
||||
Primitive::Sampling(a, f) => self.contains_at(tree, *a, pos) && f(pos),
|
||||
Primitive::Prefab(p) => !matches!(p.get(pos), Err(_) | Ok(StructureBlock::None)),
|
||||
Primitive::And(a, b) => {
|
||||
Primitive::Intersect(a, b) => {
|
||||
self.contains_at(tree, *a, pos) && self.contains_at(tree, *b, pos)
|
||||
},
|
||||
Primitive::Or(a, b) => {
|
||||
Primitive::Union(a, b) => {
|
||||
self.contains_at(tree, *a, pos) || self.contains_at(tree, *b, pos)
|
||||
},
|
||||
Primitive::Xor(a, b) => {
|
||||
self.contains_at(tree, *a, pos) ^ self.contains_at(tree, *b, pos)
|
||||
},
|
||||
Primitive::Diff(a, b) => {
|
||||
self.contains_at(tree, *a, pos) && !self.contains_at(tree, *b, pos)
|
||||
},
|
||||
@ -338,12 +330,12 @@ impl Fill {
|
||||
},
|
||||
Primitive::Sampling(a, _) => self.get_bounds_inner(tree, *a)?,
|
||||
Primitive::Prefab(p) => p.get_bounds(),
|
||||
Primitive::And(a, b) => or_zip_with(
|
||||
Primitive::Intersect(a, b) => or_zip_with(
|
||||
self.get_bounds_inner(tree, *a),
|
||||
self.get_bounds_inner(tree, *b),
|
||||
|a, b| a.intersection(b),
|
||||
)?,
|
||||
Primitive::Or(a, b) | Primitive::Xor(a, b) => or_zip_with(
|
||||
Primitive::Union(a, b) => or_zip_with(
|
||||
self.get_bounds_inner(tree, *a),
|
||||
self.get_bounds_inner(tree, *b),
|
||||
|a, b| a.union(b),
|
||||
@ -453,7 +445,15 @@ impl<'a> From<PrimitiveRef<'a>> for Id<Primitive> {
|
||||
|
||||
impl<'a> PrimitiveRef<'a> {
|
||||
pub fn union(self, other: impl Into<Id<Primitive>>) -> PrimitiveRef<'a> {
|
||||
self.painter.prim(Primitive::and(self, other))
|
||||
self.painter.prim(Primitive::union(self, other))
|
||||
}
|
||||
|
||||
pub fn intersect(self, other: impl Into<Id<Primitive>>) -> PrimitiveRef<'a> {
|
||||
self.painter.prim(Primitive::intersect(self, other))
|
||||
}
|
||||
|
||||
pub fn and_not(self, other: impl Into<Id<Primitive>>) -> PrimitiveRef<'a> {
|
||||
self.painter.prim(Primitive::diff(self, other))
|
||||
}
|
||||
|
||||
pub fn fill(self, fill: Fill) { self.painter.fill(self, fill); }
|
||||
|
@ -103,7 +103,7 @@ impl Structure for Castle {
|
||||
}));
|
||||
|
||||
painter.fill(wall, Fill::Brick(BlockKind::Rock, wall_rgb, 12));
|
||||
let sides = painter.prim(Primitive::or(parapet, parapet2));
|
||||
let sides = painter.prim(Primitive::union(parapet, parapet2));
|
||||
painter.fill(sides, Fill::Brick(BlockKind::Rock, wall_rgb, 12));
|
||||
if (x + y).is_odd() {
|
||||
painter.fill(
|
||||
@ -163,7 +163,7 @@ impl Structure for Castle {
|
||||
}));
|
||||
|
||||
painter.fill(
|
||||
painter.prim(Primitive::or(tower_upper, tower_upper2)),
|
||||
painter.prim(Primitive::union(tower_upper, tower_upper2)),
|
||||
Fill::Brick(BlockKind::Rock, wall_rgb, 12),
|
||||
);
|
||||
|
||||
@ -198,10 +198,10 @@ impl Structure for Castle {
|
||||
.with_z(tower_total_height + parapet_height),
|
||||
}));
|
||||
|
||||
painter.fill(
|
||||
painter.prim(Primitive::xor(tower_top_outer, tower_top_inner)),
|
||||
Fill::Brick(BlockKind::Rock, wall_rgb, 12),
|
||||
);
|
||||
tower_top_outer
|
||||
.union(tower_top_inner)
|
||||
.and_not(tower_top_outer.intersect(tower_top_inner))
|
||||
.fill(Fill::Brick(BlockKind::Rock, wall_rgb, 12));
|
||||
|
||||
for x in (wpos.x..wpos.x + ts).step_by(2 * parapet_gap as usize) {
|
||||
painter.fill(
|
||||
|
@ -1137,7 +1137,7 @@ impl Floor {
|
||||
min: floor_aabb.min.with_x(j - 1),
|
||||
max: floor_aabb.max.with_x(j),
|
||||
}));
|
||||
lighting_mask_x = painter.prim(Primitive::or(plane, lighting_mask_x));
|
||||
lighting_mask_x = painter.prim(Primitive::union(plane, lighting_mask_x));
|
||||
}
|
||||
let mut lighting_mask_y = painter.prim(Primitive::Empty);
|
||||
let floor_h = floor_aabb.max.y - floor_aabb.min.y;
|
||||
@ -1147,9 +1147,11 @@ impl Floor {
|
||||
min: floor_aabb.min.with_y(j - 1),
|
||||
max: floor_aabb.max.with_y(j),
|
||||
}));
|
||||
lighting_mask_y = painter.prim(Primitive::or(plane, lighting_mask_y));
|
||||
lighting_mask_y = painter.prim(Primitive::union(plane, lighting_mask_y));
|
||||
}
|
||||
painter.prim(Primitive::xor(lighting_mask_x, lighting_mask_y))
|
||||
lighting_mask_x
|
||||
.union(lighting_mask_y)
|
||||
.and_not(lighting_mask_x.intersect(lighting_mask_y))
|
||||
};
|
||||
|
||||
// Declare collections of various disjoint primitives that need postprocessing
|
||||
@ -1189,7 +1191,7 @@ impl Floor {
|
||||
tile_aabr,
|
||||
floor_z + 1..floor_z + 2,
|
||||
)));
|
||||
let lighting_plane = painter.prim(Primitive::and(lighting_plane, lighting_mask));
|
||||
let lighting_plane = painter.prim(Primitive::intersect(lighting_plane, lighting_mask));
|
||||
|
||||
let mut chests = None;
|
||||
|
||||
@ -1225,10 +1227,10 @@ impl Floor {
|
||||
}));
|
||||
|
||||
light = painter.prim(Primitive::diff(light, inner));
|
||||
lights = painter.prim(Primitive::or(light, lights));
|
||||
lights = painter.prim(Primitive::union(light, lights));
|
||||
}
|
||||
}
|
||||
lights = painter.prim(Primitive::and(lights, lighting_mask));
|
||||
lights = painter.prim(Primitive::intersect(lights, lighting_mask));
|
||||
stairs_bb.push(bb);
|
||||
stairs.push((stair, lights));
|
||||
}
|
||||
@ -1323,12 +1325,12 @@ impl Floor {
|
||||
let scale = (pillar_thickness + 2) as f32 / pillar_thickness as f32;
|
||||
let mut lights = painter
|
||||
.prim(Primitive::scale(pillar, Vec2::broadcast(scale).with_z(1.0)));
|
||||
lights = painter.prim(Primitive::and(lighting_plane, lights));
|
||||
lights = painter.prim(Primitive::intersect(lighting_plane, lights));
|
||||
// Only add the base (and shift the lights up)
|
||||
// for boss-rooms pillars
|
||||
if room.kind == RoomKind::Boss {
|
||||
lights = painter.prim(Primitive::translate(lights, 3 * Vec3::unit_z()));
|
||||
pillar = painter.prim(Primitive::or(pillar, base));
|
||||
pillar = painter.prim(Primitive::union(pillar, base));
|
||||
}
|
||||
pillars.push((tile_center, pillar, lights));
|
||||
}
|
||||
@ -1350,8 +1352,9 @@ impl Floor {
|
||||
painter.fill(tile_air, Fill::Block(vacant));
|
||||
|
||||
// Place torches on the walls with the aforementioned spacing
|
||||
let sconces_layer = painter.prim(Primitive::and(tile_air, lighting_plane));
|
||||
let sconces_layer = painter.prim(Primitive::and(sconces_layer, wall_contour_surface));
|
||||
let sconces_layer = painter.prim(Primitive::intersect(tile_air, lighting_plane));
|
||||
let sconces_layer =
|
||||
painter.prim(Primitive::intersect(sconces_layer, wall_contour_surface));
|
||||
painter.fill(sconces_layer, sconces_wall.clone());
|
||||
|
||||
// Defer chest/floor sprite placement
|
||||
@ -1360,7 +1363,7 @@ impl Floor {
|
||||
sprites.push((chest_sprite, chest_sprite_fill));
|
||||
}
|
||||
|
||||
let floor_sprite = painter.prim(Primitive::and(sprite_layer, floor_sprite));
|
||||
let floor_sprite = painter.prim(Primitive::intersect(sprite_layer, floor_sprite));
|
||||
sprites.push((floor_sprite, floor_sprite_fill.clone()));
|
||||
}
|
||||
|
||||
|
@ -320,14 +320,14 @@ impl Structure for House {
|
||||
})),
|
||||
),
|
||||
};
|
||||
let roof_front = painter.prim(Primitive::and(roof_empty, roof_front_wall));
|
||||
let roof_rear = painter.prim(Primitive::and(roof_empty, roof_rear_wall));
|
||||
let roof_front = painter.prim(Primitive::intersect(roof_empty, roof_front_wall));
|
||||
let roof_rear = painter.prim(Primitive::intersect(roof_empty, roof_rear_wall));
|
||||
painter.fill(
|
||||
roof_primitive,
|
||||
Fill::Block(Block::new(BlockKind::Wood, self.roof_color)),
|
||||
);
|
||||
painter.fill(roof_empty, Fill::Block(Block::empty()));
|
||||
let roof_walls = painter.prim(Primitive::or(roof_front, roof_rear));
|
||||
let roof_walls = painter.prim(Primitive::union(roof_front, roof_rear));
|
||||
painter.fill(
|
||||
roof_walls,
|
||||
Fill::Brick(BlockKind::Wood, Rgb::new(200, 180, 150), 24),
|
||||
@ -474,19 +474,19 @@ impl Structure for House {
|
||||
Vec2::new(0.0, 1.0),
|
||||
))
|
||||
};
|
||||
let rafters1 = painter.prim(Primitive::or(left_rafter, right_rafter));
|
||||
let rafters2 = painter.prim(Primitive::or(rafters1, top_rafter));
|
||||
let rafters1 = painter.prim(Primitive::union(left_rafter, right_rafter));
|
||||
let rafters2 = painter.prim(Primitive::union(rafters1, top_rafter));
|
||||
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(roof_beam, roof_walls)),
|
||||
painter.prim(Primitive::intersect(roof_beam, roof_walls)),
|
||||
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||
);
|
||||
painter.fill(
|
||||
painter.prim(Primitive::or(roof_beam_left, roof_beam_right)),
|
||||
painter.prim(Primitive::union(roof_beam_left, roof_beam_right)),
|
||||
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||
);
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(rafters2, roof_walls)),
|
||||
painter.prim(Primitive::intersect(rafters2, roof_walls)),
|
||||
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||
);
|
||||
|
||||
@ -598,7 +598,9 @@ impl Structure for House {
|
||||
painter.fill(outer_level, wall_block_fill);
|
||||
painter.fill(inner_level, Fill::Block(Block::empty()));
|
||||
|
||||
let walls = painter.prim(Primitive::xor(outer_level, inner_level));
|
||||
let walls = outer_level
|
||||
.union(inner_level)
|
||||
.and_not(outer_level.intersect(inner_level));
|
||||
|
||||
// Wall Pillars
|
||||
// Only upper non-stone floors have wooden beams in the walls
|
||||
@ -643,7 +645,7 @@ impl Structure for House {
|
||||
};
|
||||
if temp.x <= self.bounds.max.x && temp.x >= self.bounds.min.x {
|
||||
overhang_supports =
|
||||
painter.prim(Primitive::or(overhang_supports, support));
|
||||
painter.prim(Primitive::union(overhang_supports, support));
|
||||
}
|
||||
}
|
||||
let pillar = painter.prim(Primitive::Aabb(Aabb {
|
||||
@ -654,7 +656,7 @@ impl Structure for House {
|
||||
+ Vec2::unit_x())
|
||||
.with_z(alt + height),
|
||||
}));
|
||||
pillars_y = painter.prim(Primitive::or(pillars_y, pillar));
|
||||
pillars_y = painter.prim(Primitive::union(pillars_y, pillar));
|
||||
}
|
||||
let mut pillars_x = painter.prim(Primitive::Empty);
|
||||
for y in self.tile_aabr.min.y - 2..self.tile_aabr.max.y + 2 {
|
||||
@ -701,7 +703,7 @@ impl Structure for House {
|
||||
};
|
||||
if temp.y <= self.bounds.max.y && temp.y >= self.bounds.min.y {
|
||||
overhang_supports =
|
||||
painter.prim(Primitive::or(overhang_supports, support));
|
||||
painter.prim(Primitive::union(overhang_supports, support));
|
||||
}
|
||||
}
|
||||
let pillar = painter.prim(Primitive::Aabb(Aabb {
|
||||
@ -712,7 +714,7 @@ impl Structure for House {
|
||||
+ Vec2::unit_y())
|
||||
.with_z(alt + height),
|
||||
}));
|
||||
pillars_x = painter.prim(Primitive::or(pillars_x, pillar));
|
||||
pillars_x = painter.prim(Primitive::union(pillars_x, pillar));
|
||||
}
|
||||
let front_wall = if self.overhang < -4 && i > 1 {
|
||||
painter.prim(Primitive::Empty)
|
||||
@ -769,12 +771,12 @@ impl Structure for House {
|
||||
}
|
||||
};
|
||||
let pillars1 = if self.front % 2 == 0 {
|
||||
painter.prim(Primitive::and(pillars_y, front_wall))
|
||||
painter.prim(Primitive::intersect(pillars_y, front_wall))
|
||||
} else {
|
||||
painter.prim(Primitive::and(pillars_x, front_wall))
|
||||
painter.prim(Primitive::intersect(pillars_x, front_wall))
|
||||
};
|
||||
let pillars2 = painter.prim(Primitive::and(pillars_x, pillars_y));
|
||||
let pillars3 = painter.prim(Primitive::or(pillars1, pillars2));
|
||||
let pillars2 = painter.prim(Primitive::intersect(pillars_x, pillars_y));
|
||||
let pillars3 = painter.prim(Primitive::union(pillars1, pillars2));
|
||||
let pillars4 = match self.front {
|
||||
0 => painter.prim(Primitive::Aabb(Aabb {
|
||||
min: Vec2::new(self.bounds.min.x - 1, self.bounds.min.y - 1)
|
||||
@ -813,9 +815,9 @@ impl Structure for House {
|
||||
.with_z(alt + previous_height + 1),
|
||||
})),
|
||||
};
|
||||
let pillars = painter.prim(Primitive::or(pillars3, pillars4));
|
||||
let pillars = painter.prim(Primitive::union(pillars3, pillars4));
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(walls, pillars)),
|
||||
painter.prim(Primitive::intersect(walls, pillars)),
|
||||
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||
);
|
||||
|
||||
@ -847,11 +849,11 @@ impl Structure for House {
|
||||
_ => max.y < self.bounds.max.y && min.y > self.bounds.min.y,
|
||||
};
|
||||
if add_windows {
|
||||
windows = painter.prim(Primitive::or(windows, window));
|
||||
windows = painter.prim(Primitive::union(windows, window));
|
||||
}
|
||||
}
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(walls, windows)),
|
||||
painter.prim(Primitive::intersect(walls, windows)),
|
||||
Fill::Block(Block::air(SpriteKind::Window1).with_ori(2).unwrap()),
|
||||
);
|
||||
}
|
||||
@ -877,11 +879,11 @@ impl Structure for House {
|
||||
},
|
||||
};
|
||||
if add_windows {
|
||||
windows = painter.prim(Primitive::or(windows, window));
|
||||
windows = painter.prim(Primitive::union(windows, window));
|
||||
};
|
||||
}
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(walls, windows)),
|
||||
painter.prim(Primitive::intersect(walls, windows)),
|
||||
Fill::Block(Block::air(SpriteKind::Window1).with_ori(0).unwrap()),
|
||||
);
|
||||
}
|
||||
@ -1157,13 +1159,13 @@ impl Structure for House {
|
||||
.with_z(alt + previous_height + 1),
|
||||
})),
|
||||
};
|
||||
let shed_walls = painter.prim(Primitive::or(shed_left_wall, shed_right_wall));
|
||||
let shed_walls = painter.prim(Primitive::union(shed_left_wall, shed_right_wall));
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(shed_walls, shed_empty)),
|
||||
painter.prim(Primitive::intersect(shed_walls, shed_empty)),
|
||||
Fill::Brick(BlockKind::Wood, Rgb::new(200, 180, 150), 24),
|
||||
);
|
||||
painter.fill(
|
||||
painter.prim(Primitive::and(shed_wall_beams, shed_walls)),
|
||||
painter.prim(Primitive::intersect(shed_wall_beams, shed_walls)),
|
||||
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||
);
|
||||
|
||||
@ -1561,7 +1563,7 @@ impl Structure for House {
|
||||
// 1), }))
|
||||
//},
|
||||
};
|
||||
painter.prim(Primitive::or(ramp, support))
|
||||
painter.prim(Primitive::union(ramp, support))
|
||||
} else {
|
||||
let ramp = /*match self.front */{
|
||||
//0 => {
|
||||
@ -1641,7 +1643,7 @@ impl Structure for House {
|
||||
// previous_height + 1), }))
|
||||
//},
|
||||
};
|
||||
painter.prim(Primitive::or(ramp, support))
|
||||
painter.prim(Primitive::union(ramp, support))
|
||||
};
|
||||
let stairwell = if i < 2 {
|
||||
painter.prim(Primitive::Empty)
|
||||
|
Loading…
Reference in New Issue
Block a user