diff --git a/server/gameserver/mapcollider.cc b/server/gameserver/mapcollider.cc index 00ce619b..dd33e0e7 100644 --- a/server/gameserver/mapcollider.cc +++ b/server/gameserver/mapcollider.cc @@ -126,6 +126,7 @@ namespace mc { node->name }); + childs[node->name] = node; #else A8_ABORT(); #endif diff --git a/server/gameserver/mapinstance.cc b/server/gameserver/mapinstance.cc index 3c6acfa1..09d8588a 100644 --- a/server/gameserver/mapinstance.cc +++ b/server/gameserver/mapinstance.cc @@ -870,19 +870,46 @@ void MapInstance::LoadHouse() map_service_->AddTriangle(&tri); }//end for i } else if (c->type == mc::kBoxCollider) { - mc::BoxCollider* box_collider = (mc::BoxCollider*)c; - std::vector new_points; - mc::RotateBounds(box_collider->center, - box_collider->size, - node->transform.local_rotation, - new_points - ); - box_collider->triangles.reserve(2 * 8); + mc::BoxCollider* box_collider = (mc::BoxCollider*)c; + if (node->name == "") { + printf("node->name %f,%f,%f %f,%f,%f\n", + node->name.c_str(), + box_collider->center.x, + box_collider->center.y, + box_collider->center.z, + box_collider->size.x, + box_collider->size.y + box_collider->size.z); + } + std::vector new_points; + mc::RotateBounds(box_collider->center, + box_collider->size, + node->transform.local_rotation, + new_points + ); + box_collider->triangles.reserve(2 * 6); + for (int i = 0; i < 12; ++i) { auto& tri = a8::FastAppend(box_collider->triangles); tri.node = node; + tri.vert0 = new_points[box_tri_arr[i][0]]; + tri.vert1 = new_points[box_tri_arr[i][1]]; + tri.vert2 = new_points[box_tri_arr[i][2]]; + tri.min_y = tri.vert0.y; + tri.max_y = tri.vert0.y; + for (int ii = 1; ii < 3; ++ii) { + float y = new_points[box_tri_arr[i][ii]].y; + if (y < tri.min_y) { + tri.min_y = y; + } + if (y > tri.max_y) { + } + } //endif ii + tri.min_y -= 1.0f; + tri.max_y += 1.0f; map_service_->AddTriangle(&tri); - }//endif - }//end forc + }//endif + }//end forc + } things_.push_back(node); } };