Sets the viewer object for the editor, creating if not already in mine Keeps seperate viewer objects for mine & terrain views
| 407 | // Sets the viewer object for the editor, creating if not already in mine |
| 408 | // Keeps seperate viewer objects for mine & terrain views |
| 409 | void SetEditorViewer() { |
| 410 | int objnum, roomnum; |
| 411 | |
| 412 | // First, see if a camera object already exists in the level |
| 413 | if (Editor_view_mode == VM_ROOM) |
| 414 | objnum = FindViewerObject(ROOM_VIEWER_ID); |
| 415 | else |
| 416 | objnum = FindNextViewerObject(Editor_viewer_id, Editor_view_mode); |
| 417 | |
| 418 | // If no viewer object, create one |
| 419 | if (objnum == -1) { |
| 420 | vector pos; |
| 421 | |
| 422 | // get position for viewer |
| 423 | if (Editor_view_mode == VM_TERRAIN) { // if terrain, put viewer at center of world |
| 424 | pos.x = TERRAIN_SIZE * TERRAIN_WIDTH / 2; |
| 425 | pos.y = Terrain_seg[0].y + 30; |
| 426 | pos.z = TERRAIN_SIZE * TERRAIN_DEPTH / 2; |
| 427 | roomnum = MAKE_ROOMNUM(0); // any value ok, so long as it has terrain flag |
| 428 | } else if (Editor_view_mode == VM_MINE) { // if mine, put in center of any room |
| 429 | for (roomnum = 0; roomnum <= Highest_room_index; roomnum++) |
| 430 | if (Rooms[roomnum].used && !(Rooms[roomnum].flags & RF_EXTERNAL)) { |
| 431 | ComputeRoomCenter(&pos, &Rooms[roomnum]); |
| 432 | break; |
| 433 | } |
| 434 | ASSERT(roomnum <= Highest_room_index); |
| 435 | } else if (Editor_view_mode == VM_ROOM) { // if room, put at 0,0,0 |
| 436 | vm_MakeZero(&pos); |
| 437 | roomnum = MAKE_ROOMNUM(0); |
| 438 | } else |
| 439 | Int3(); // unknown view mode |
| 440 | |
| 441 | objnum = CreateViewerObject(Editor_view_mode, &pos, roomnum); |
| 442 | |
| 443 | // If no free viewer slots, grab any viewer and move it |
| 444 | if (objnum == -1) { |
| 445 | ASSERT(Viewer_object != NULL); |
| 446 | if (Viewer_object->type == OBJ_VIEWER) |
| 447 | objnum = OBJNUM(Viewer_object); |
| 448 | else { |
| 449 | objnum = FindNextViewerObject(Editor_viewer_id, -1); |
| 450 | ASSERT(objnum != -1); |
| 451 | } |
| 452 | ObjSetPos(&Objects[objnum], &pos, roomnum, NULL, true); |
| 453 | } |
| 454 | } |
| 455 | |
| 456 | ASSERT(objnum != -1); |
| 457 | SetViewer(objnum); |
| 458 | } |
| 459 | |
| 460 | // Moves the room viewer to the origin, if there is a room viewer |
| 461 | void ResetRoomViewer() { |
no test coverage detected