mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Watchtowers near gate entrance.
This commit is contained in:
parent
09ce889bfc
commit
9dcfb43fe6
@ -23,6 +23,7 @@ enum GnarlingStructure {
|
|||||||
Hut,
|
Hut,
|
||||||
Totem,
|
Totem,
|
||||||
ChieftainHut,
|
ChieftainHut,
|
||||||
|
WatchTower,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl GnarlingStructure {
|
impl GnarlingStructure {
|
||||||
@ -31,8 +32,9 @@ impl GnarlingStructure {
|
|||||||
(Self::Hut, Self::Hut) => 15,
|
(Self::Hut, Self::Hut) => 15,
|
||||||
(Self::Hut, Self::Totem) | (Self::Totem, Self::Hut) => 20,
|
(Self::Hut, Self::Totem) | (Self::Totem, Self::Hut) => 20,
|
||||||
(Self::Totem, Self::Totem) => 50,
|
(Self::Totem, Self::Totem) => 50,
|
||||||
// Chieftain hut generated in separate pass without distance check
|
// Chieftain hut and watch tower generated in separate pass without distance check
|
||||||
(Self::ChieftainHut, _) | (_, Self::ChieftainHut) => 0,
|
(Self::ChieftainHut | Self::WatchTower, _)
|
||||||
|
| (_, Self::ChieftainHut | Self::WatchTower) => 0,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -203,6 +205,20 @@ impl GnarlingFortification {
|
|||||||
chieftain_hut_ori,
|
chieftain_hut_ori,
|
||||||
));
|
));
|
||||||
|
|
||||||
|
let watchtower_locs = {
|
||||||
|
let (corner_1, corner_2) = (
|
||||||
|
outer_wall_corners[gate_index],
|
||||||
|
outer_wall_corners[(gate_index + 1) % outer_wall_corners.len()],
|
||||||
|
);
|
||||||
|
[
|
||||||
|
corner_1 / 5 + corner_2 * 4 / 5,
|
||||||
|
corner_1 * 4 / 5 + corner_2 / 5,
|
||||||
|
]
|
||||||
|
};
|
||||||
|
watchtower_locs.iter().for_each(|loc| {
|
||||||
|
structure_locations.push((GnarlingStructure::WatchTower, *loc, Ori::North));
|
||||||
|
});
|
||||||
|
|
||||||
let wall_towers = outer_wall_corners
|
let wall_towers = outer_wall_corners
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.chain(inner_tower_locs.iter().copied())
|
.chain(inner_tower_locs.iter().copied())
|
||||||
@ -597,6 +613,214 @@ impl Structure for GnarlingFortification {
|
|||||||
roof_overhang,
|
roof_overhang,
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
GnarlingStructure::WatchTower => {
|
||||||
|
let platform_1_height = 14;
|
||||||
|
let platform_2_height = 20;
|
||||||
|
let platform_3_height = 26;
|
||||||
|
let roof_height = 30;
|
||||||
|
|
||||||
|
let platform_1 = painter.aabb(Aabb {
|
||||||
|
min: (wpos + 1).with_z(alt + platform_1_height),
|
||||||
|
max: (wpos + 10).with_z(alt + platform_1_height + 1),
|
||||||
|
});
|
||||||
|
|
||||||
|
let platform_2 = painter.aabb(Aabb {
|
||||||
|
min: (wpos + 1).with_z(alt + platform_2_height),
|
||||||
|
max: (wpos + 10).with_z(alt + platform_2_height + 1),
|
||||||
|
});
|
||||||
|
|
||||||
|
let platform_3 = painter.aabb(Aabb {
|
||||||
|
min: (wpos + 2).with_z(alt + platform_3_height),
|
||||||
|
max: (wpos + 9).with_z(alt + platform_3_height + 1),
|
||||||
|
});
|
||||||
|
|
||||||
|
let support_1 = painter.line(
|
||||||
|
wpos.with_z(alt),
|
||||||
|
(wpos + 2).with_z(alt + platform_1_height),
|
||||||
|
0.9,
|
||||||
|
);
|
||||||
|
let support_2 = support_1
|
||||||
|
.rotate(Mat3::new(1, 0, 0, 0, -1, 0, 0, 0, 1))
|
||||||
|
.translate(Vec3::new(0, 11, 0));
|
||||||
|
let support_3 = support_1
|
||||||
|
.rotate(Mat3::new(-1, 0, 0, 0, 1, 0, 0, 0, 1))
|
||||||
|
.translate(Vec3::new(11, 0, 0));
|
||||||
|
let support_4 = support_1
|
||||||
|
.rotate(Mat3::new(-1, 0, 0, 0, -1, 0, 0, 0, 1))
|
||||||
|
.translate(Vec3::new(11, 11, 0));
|
||||||
|
|
||||||
|
let supports = support_1.union(support_2).union(support_3).union(support_4);
|
||||||
|
|
||||||
|
let platform_1_supports = painter
|
||||||
|
.plane(
|
||||||
|
Aabr {
|
||||||
|
min: (wpos + 2),
|
||||||
|
max: (wpos + 9),
|
||||||
|
},
|
||||||
|
(wpos + 3).with_z(alt + platform_1_height + 1),
|
||||||
|
Vec2::new(0.0, 1.0),
|
||||||
|
)
|
||||||
|
.union(painter.plane(
|
||||||
|
Aabr {
|
||||||
|
min: (wpos + 2),
|
||||||
|
max: (wpos + 9),
|
||||||
|
},
|
||||||
|
(wpos + 3).with_z(alt + platform_2_height),
|
||||||
|
Vec2::new(0.0, -1.0),
|
||||||
|
))
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 2)
|
||||||
|
.with_z(alt + platform_1_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 9)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 2, wpos.y + 2)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
max: Vec2::new(wpos.x + 9, wpos.y + 9)
|
||||||
|
.with_z(alt + platform_2_height + 2),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.union(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 2, wpos.y + 2)
|
||||||
|
.with_z(alt + platform_1_height),
|
||||||
|
max: Vec2::new(wpos.x + 9, wpos.y + 9)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 2)
|
||||||
|
.with_z(alt + platform_1_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 9)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 2, wpos.y + 3)
|
||||||
|
.with_z(alt + platform_1_height),
|
||||||
|
max: Vec2::new(wpos.x + 9, wpos.y + 8)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
let platform_2_supports = painter
|
||||||
|
.plane(
|
||||||
|
Aabr {
|
||||||
|
min: (wpos + 3),
|
||||||
|
max: (wpos + 8),
|
||||||
|
},
|
||||||
|
(wpos + 3).with_z(alt + platform_2_height + 1),
|
||||||
|
Vec2::new(1.0, 0.0),
|
||||||
|
)
|
||||||
|
.union(painter.plane(
|
||||||
|
Aabr {
|
||||||
|
min: (wpos + 3),
|
||||||
|
max: (wpos + 8),
|
||||||
|
},
|
||||||
|
(wpos + 3).with_z(alt + platform_3_height),
|
||||||
|
Vec2::new(-1.0, 0.0),
|
||||||
|
))
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 4)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 7)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.union(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 3)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 8)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 4, wpos.y + 3)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
max: Vec2::new(wpos.x + 7, wpos.y + 8)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 4)
|
||||||
|
.with_z(alt + platform_2_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 7)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
let roof = painter
|
||||||
|
.gable(
|
||||||
|
Aabb {
|
||||||
|
min: (wpos + 2).with_z(alt + roof_height),
|
||||||
|
max: (wpos + 9).with_z(alt + roof_height + 4),
|
||||||
|
},
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.gable(
|
||||||
|
Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 2)
|
||||||
|
.with_z(alt + roof_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 9)
|
||||||
|
.with_z(alt + roof_height + 3),
|
||||||
|
},
|
||||||
|
1,
|
||||||
|
true,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
let roof_pillars = painter
|
||||||
|
.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 3)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 8)
|
||||||
|
.with_z(alt + roof_height + 1),
|
||||||
|
})
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 4, wpos.y + 3)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
max: Vec2::new(wpos.x + 7, wpos.y + 8)
|
||||||
|
.with_z(alt + roof_height),
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
.without(
|
||||||
|
painter.aabb(Aabb {
|
||||||
|
min: Vec2::new(wpos.x + 3, wpos.y + 4)
|
||||||
|
.with_z(alt + platform_3_height),
|
||||||
|
max: Vec2::new(wpos.x + 8, wpos.y + 7)
|
||||||
|
.with_z(alt + roof_height),
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
|
||||||
|
let tower = platform_1
|
||||||
|
.union(platform_2)
|
||||||
|
.union(platform_3)
|
||||||
|
.union(supports)
|
||||||
|
.union(platform_1_supports)
|
||||||
|
// .union(platform_1_pillars)
|
||||||
|
.union(platform_2_supports)
|
||||||
|
// .union(platform_2_pillars)
|
||||||
|
.union(roof)
|
||||||
|
.union(roof_pillars);
|
||||||
|
|
||||||
|
painter.fill(
|
||||||
|
tower,
|
||||||
|
Fill::Block(Block::new(BlockKind::Wood, Rgb::new(55, 25, 8))),
|
||||||
|
);
|
||||||
|
},
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user