From 9f3b752bec2e46b5d293da4021a13287f1a6688a Mon Sep 17 00:00:00 2001 From: Eric Wasylishen Date: Tue, 26 Apr 2022 23:16:43 -0600 Subject: [PATCH] testqbsp: add origin brush test --- qbsp/test_qbsp.cc | 28 +++++++++++++++++ testmaps/qbsp_origin.map | 66 ++++++++++++---------------------------- 2 files changed, 47 insertions(+), 47 deletions(-) diff --git a/qbsp/test_qbsp.cc b/qbsp/test_qbsp.cc index 55d34efb..60b37a72 100644 --- a/qbsp/test_qbsp.cc +++ b/qbsp/test_qbsp.cc @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -484,3 +485,30 @@ TEST(testmaps_q1, brush_clipping_order) ASSERT_NE(nullptr, func_wall_button_face); ASSERT_STREQ("sbutt2", Face_TextureName(&bsp, func_wall_button_face)); } + +/** + * Box room with a rotating fan (just a cube). Works in a mod with hiprotate - AD, Quoth, etc. + */ +TEST(testmaps_q1, origin) +{ + const mbsp_t bsp = LoadTestmap("qbsp_origin.map"); + + ASSERT_FALSE(map.leakfile); + + // 0 = world, 1 = rotate_object + ASSERT_EQ(2, bsp.dmodels.size()); + + // check that the origin brush didn't clip away any solid faces, or generate faces + ASSERT_EQ(6, bsp.dmodels[1].numfaces); + + // FIXME: should the origin brush update the dmodel's origin too? + ASSERT_EQ(qvec3f(0, 0, 0), bsp.dmodels[1].origin); + + // check that the origin brush updated the entity lump + auto ents = EntData_Parse(bsp.dentdata); + auto it = std::find_if(ents.begin(), ents.end(), + [](const entdict_t &dict) -> bool { return dict.get("classname") == "rotate_object"; }); + + ASSERT_NE(it, ents.end()); + ASSERT_EQ("216 -216 340", it->get("origin")); +} diff --git a/testmaps/qbsp_origin.map b/testmaps/qbsp_origin.map index 17fa7963..4c2cbfea 100644 --- a/testmaps/qbsp_origin.map +++ b/testmaps/qbsp_origin.map @@ -79,56 +79,28 @@ "targetname" "fan" // brush 0 { -( 208 -208 352 ) ( 208 -224 352 ) ( 208 -224 336 ) origin [ 0 -0.5 0 24 ] [ 0 0 -0.5 8 ] 0 1 1 -( 208 -224 352 ) ( 224 -224 352 ) ( 224 -224 336 ) origin [ 0.5 0 0 -52 ] [ 0 0 -0.5 8 ] 0 1 1 -( 224 -224 336 ) ( 224 -208 336 ) ( 208 -208 336 ) origin [ -0.5 0 0 52 ] [ 0 -0.5 0 24 ] 0 1 1 -( 208 -208 352 ) ( 224 -208 352 ) ( 224 -224 352 ) origin [ 0.5 0 0 -52 ] [ 0 -0.5 0 24 ] 0 1 1 -( 224 -208 336 ) ( 224 -208 352 ) ( 208 -208 352 ) origin [ -0.5 0 0 52 ] [ 0 0 -0.5 8 ] 0 1 1 -( 224 -224 352 ) ( 224 -208 352 ) ( 224 -208 336 ) origin [ 0 0.5 0 -24 ] [ 0 0 -0.5 8 ] 0 1 1 +( 208 -208 344 ) ( 208 -224 344 ) ( 208 -224 328 ) origin [ 0 -0.5 0 24 ] [ 0 0 -0.5 8 ] 0 1 1 +( 208 -224 344 ) ( 224 -224 344 ) ( 224 -224 328 ) origin [ 0.5 0 0 -52 ] [ 0 0 -0.5 8 ] 0 1 1 +( 224 -224 332 ) ( 224 -208 332 ) ( 208 -208 332 ) origin [ -0.5 0 0 52 ] [ 0 -0.5 0 24 ] 0 1 1 +( 208 -208 348 ) ( 224 -208 348 ) ( 224 -224 348 ) origin [ 0.5 0 0 -52 ] [ 0 -0.5 0 24 ] 0 1 1 +( 224 -208 328 ) ( 224 -208 344 ) ( 208 -208 344 ) origin [ -0.5 0 0 52 ] [ 0 0 -0.5 8 ] 0 1 1 +( 224 -224 344 ) ( 224 -208 344 ) ( 224 -208 328 ) origin [ 0 0.5 0 -24 ] [ 0 0 -0.5 8 ] 0 1 1 } // brush 1 { -( 212 -220 348 ) ( 204 -272 348 ) ( 204 -272 340 ) bolt14 [ -6.123233995736766e-17 -1 0 16 ] [ 0 0 -1 -12 ] 0 1 1 -( 204 -272 348 ) ( 228 -272 348 ) ( 228 -272 340 ) bolt14 [ 1 -6.123233995736766e-17 0 -20 ] [ 0 0 -1 -12 ] 0 1 1 -( 204 -272 340 ) ( 228 -272 340 ) ( 220 -220 340 ) bolt14 [ -6.123233995736766e-17 -1 0 16 ] [ 1 -6.123233995736766e-17 0 -20 ] 90 1 1 -( 220 -220 348 ) ( 228 -272 348 ) ( 204 -272 348 ) bolt14 [ 6.123233995736766e-17 1 0 -16 ] [ 1 -6.123233995736766e-17 0 -20 ] 270 1 1 -( 220 -220 340 ) ( 220 -220 348 ) ( 212 -220 348 ) bolt14 [ -1 6.123233995736766e-17 0 20 ] [ 0 0 -1 -12 ] 0 1 1 -( 228 -272 340 ) ( 228 -272 348 ) ( 220 -220 348 ) bolt14 [ 6.123233995736766e-17 1 0 -16 ] [ 0 0 -1 -12 ] 0 1 1 +( 168 -192 344 ) ( 168 -240 344 ) ( 168 -240 336 ) bolt14 [ -0.7071067811865477 0.7071067811865477 0 0 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 +( 168 -240 344 ) ( 264 -240 344 ) ( 264 -240 336 ) bolt14 [ 1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 264 -240 336 ) ( 264 -192 336 ) ( 168 -192 336 ) bolt14 [ -1 0 0 24 ] [ 0 -1 0 20 ] 0 1 1 +( 168 -192 344 ) ( 264 -192 344 ) ( 264 -240 344 ) bolt14 [ 1 0 0 -24 ] [ 0 -1 0 20 ] 0 1 1 +( 264 -192 336 ) ( 264 -192 344 ) ( 168 -192 344 ) bolt14 [ -1 0 0 0 ] [ 0 0 -1 0 ] 0 1 1 +( 264 -240 344 ) ( 264 -192 344 ) ( 264 -192 336 ) bolt14 [ 0.7071067811865477 -0.7071067811865477 0 0 ] [ 0 0 -1.0000000000000002 0 ] 0 1 1 } -// brush 2 +} +// entity 4 { -( 160 -204 348 ) ( 160 -228 348 ) ( 160 -228 340 ) bolt14 [ 0 -1 0 44 ] [ 0 0 -1 -12 ] 0 1 1 -( 212 -220 340 ) ( 212 -212 340 ) ( 160 -204 340 ) bolt14 [ -1 0 0 0 ] [ 0 -1 0 44 ] 0 1 1 -( 160 -204 348 ) ( 212 -212 348 ) ( 212 -220 348 ) bolt14 [ 1 0 0 0 ] [ 0 -1 0 44 ] 0 1 1 -( 160 -228 348 ) ( 212 -220 348 ) ( 212 -220 340 ) bolt14 [ 1 0 0 0 ] [ 0 0 -1 -12 ] 0 1 1 -( 212 -212 340 ) ( 212 -212 348 ) ( 160 -204 348 ) bolt14 [ -1 0 0 0 ] [ 0 0 -1 -12 ] 0 1 1 -( 212 -220 348 ) ( 212 -212 348 ) ( 212 -212 340 ) bolt14 [ 0 1 0 -44 ] [ 0 0 -1 -12 ] 0 1 1 -} -// brush 3 -{ -( 212 -212 340 ) ( 204 -160 340 ) ( 204 -160 348 ) bolt14 [ -6.123233995736766e-17 -1 0 16 ] [ 0 0 -1 -12 ] 0 1 1 -( 212 -212 348 ) ( 220 -212 348 ) ( 220 -212 340 ) bolt14 [ 1 -6.123233995736766e-17 0 -20 ] [ 0 0 -1 -12 ] 0 1 1 -( 220 -212 340 ) ( 228 -160 340 ) ( 204 -160 340 ) bolt14 [ -6.123233995736766e-17 -1 0 16 ] [ 1 -6.123233995736766e-17 0 -20 ] 90 1 1 -( 204 -160 348 ) ( 228 -160 348 ) ( 220 -212 348 ) bolt14 [ 6.123233995736766e-17 1 0 -16 ] [ 1 -6.123233995736766e-17 0 -20 ] 270 1 1 -( 228 -160 340 ) ( 228 -160 348 ) ( 204 -160 348 ) bolt14 [ -1 6.123233995736766e-17 0 20 ] [ 0 0 -1 -12 ] 0 1 1 -( 220 -212 348 ) ( 228 -160 348 ) ( 228 -160 340 ) bolt14 [ 6.123233995736766e-17 1 0 -16 ] [ 0 0 -1 -12 ] 0 1 1 -} -// brush 4 -{ -( 220 -212 348 ) ( 220 -220 348 ) ( 220 -220 340 ) bolt14 [ 0 -1 0 44 ] [ 0 0 -1 -12 ] 0 1 1 -( 220 -220 348 ) ( 272 -228 348 ) ( 272 -228 340 ) bolt14 [ 1 0 0 0 ] [ 0 0 -1 -12 ] 0 1 1 -( 272 -204 340 ) ( 272 -204 348 ) ( 220 -212 348 ) bolt14 [ -1 0 0 0 ] [ 0 0 -1 -12 ] 0 1 1 -( 272 -228 340 ) ( 272 -204 340 ) ( 220 -212 340 ) bolt14 [ -1 0 0 0 ] [ 0 -1 0 44 ] 0 1 1 -( 220 -212 348 ) ( 272 -204 348 ) ( 272 -228 348 ) bolt14 [ 1 0 0 0 ] [ 0 -1 0 44 ] 0 1 1 -( 272 -228 348 ) ( 272 -204 348 ) ( 272 -204 340 ) bolt14 [ 0 1 0 -44 ] [ 0 0 -1 -12 ] 0 1 1 -} -// brush 5 -{ -( 212 -220 348 ) ( 212 -212 340 ) ( 212 -212 348 ) bolt14 [ 0 -1 0 20 ] [ 0 0 -1 20 ] 0 1 1 -( 220 -220 348 ) ( 212 -220 340 ) ( 212 -220 348 ) bolt14 [ 1 0 0 -24 ] [ 0 0 -1 20 ] 0 1 1 -( 220 -212 340 ) ( 212 -220 340 ) ( 220 -220 340 ) bolt14 [ -1 0 0 24 ] [ 0 -1 0 20 ] 0 1 1 -( 220 -212 348 ) ( 212 -220 348 ) ( 212 -212 348 ) bolt14 [ 1 0 0 -24 ] [ 0 -1 0 20 ] 0 1 1 -( 220 -212 348 ) ( 212 -212 340 ) ( 220 -212 340 ) bolt14 [ -1 0 0 24 ] [ 0 0 -1 20 ] 0 1 1 -( 220 -212 348 ) ( 220 -220 340 ) ( 220 -220 348 ) bolt14 [ 0 1 0 -20 ] [ 0 0 -1 20 ] 0 1 1 -} +"classname" "func_rotate_entity" +"origin" "216 -216 340" +"target" "fan" +"rotate" "0 -90 0" +"spawnflags" "2" }