MCPcopy Create free account
hub / github.com/DescentDevelopers/Descent3 / SetEditorViewer

Function SetEditorViewer

editor/HView.cpp:409–458  ·  view source on GitHub ↗

Sets the viewer object for the editor, creating if not already in mine Keeps seperate viewer objects for mine & terrain views

Source from the content-addressed store, hash-verified

407// Sets the viewer object for the editor, creating if not already in mine
408// Keeps seperate viewer objects for mine & terrain views
409void 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
461void ResetRoomViewer() {

Callers 4

CreateNewMineFunction · 0.85
EditorLoadLevelFunction · 0.85
SetViewModeFunction · 0.85
GameToEditorFunction · 0.85

Calls 7

FindViewerObjectFunction · 0.85
FindNextViewerObjectFunction · 0.85
ComputeRoomCenterFunction · 0.85
vm_MakeZeroFunction · 0.85
CreateViewerObjectFunction · 0.85
ObjSetPosFunction · 0.85
SetViewerFunction · 0.85

Tested by

no test coverage detected