| 754 | } |
| 755 | |
| 756 | void SizeFaceEdge(room *rp, int facenum, int edge, float scale_factor) { |
| 757 | vector line_center; |
| 758 | vector vec; |
| 759 | int portal_list[MAX_VERTS_PER_ROOM]; |
| 760 | int face_list[MAX_FACES_PER_ROOM]; |
| 761 | int i, t, ok_to_scale; |
| 762 | int num_portal_verts; |
| 763 | int facecount = 0; |
| 764 | face *fp = &rp->faces[facenum]; |
| 765 | int nextedge, vert, nextvert; |
| 766 | |
| 767 | nextedge = (edge + 1) % fp->num_verts; |
| 768 | vert = fp->face_verts[edge]; |
| 769 | nextvert = fp->face_verts[nextedge]; |
| 770 | |
| 771 | ASSERT(rp->used > 0); |
| 772 | |
| 773 | num_portal_verts = BuildListOfPortalVerts(rp, portal_list); |
| 774 | |
| 775 | line_center = ((rp->verts[nextvert] - rp->verts[vert]) / 2) + rp->verts[vert]; |
| 776 | |
| 777 | for (ok_to_scale = 1, t = 0; t < num_portal_verts; t++) |
| 778 | if (portal_list[t] == vert) |
| 779 | ok_to_scale = 0; |
| 780 | |
| 781 | if (ok_to_scale) { |
| 782 | vec = rp->verts[vert] - line_center; |
| 783 | vec *= scale_factor; |
| 784 | rp->verts[vert] = vec + line_center; |
| 785 | } |
| 786 | |
| 787 | for (ok_to_scale = 1, t = 0; t < num_portal_verts; t++) |
| 788 | if (portal_list[t] == nextvert) |
| 789 | ok_to_scale = 0; |
| 790 | |
| 791 | if (ok_to_scale) { |
| 792 | vec = rp->verts[nextvert] - line_center; |
| 793 | vec *= scale_factor; |
| 794 | rp->verts[nextvert] = vec + line_center; |
| 795 | } |
| 796 | |
| 797 | // Build a list of faces that share vertices with this edge |
| 798 | for (i = 0; i < rp->num_faces; i++) { |
| 799 | for (t = 0; t < rp->faces[i].num_verts; t++) { |
| 800 | if (rp->faces[i].face_verts[t] == vert || rp->faces[i].face_verts[t] == nextvert) { |
| 801 | face_list[facecount] = i; |
| 802 | facecount++; |
| 803 | } |
| 804 | } |
| 805 | } |
| 806 | |
| 807 | // Now fixup any concave/nonplanar faces |
| 808 | FixConcaveFaces(rp, face_list, facecount); |
| 809 | } |
| 810 | |
| 811 | // moves a face of a room by a delta amount |
| 812 | void MoveRoomFace(room *rp, int facenum, float dx, float dy, float dz) { |
no test coverage detected