mirror of
https://github.com/kevinbentley/Descent3.git
synced 2025-01-22 19:55:23 +00:00
a4ab78192c
Join the license header with historical comments using a separator so IDEs can correctly parse the initial header. Also use .gitattributes to ensure all files are LF.
223 lines
5.5 KiB
C++
223 lines
5.5 KiB
C++
/*
|
|
* Descent 3
|
|
* Copyright (C) 2024 Parallax Software
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
--- HISTORICAL COMMENTS FOLLOW ---
|
|
|
|
* $Logfile: /DescentIII/Main/editor/selectedroom.cpp $
|
|
* $Revision: 1.1.1.1 $
|
|
* $Date: 2003-08-26 03:57:39 $
|
|
* $Author: kevinb $
|
|
*
|
|
* Functions for dealing with selected list
|
|
*
|
|
* $Log: not supported by cvs2svn $
|
|
*
|
|
* 10 4/16/99 5:18p Matt
|
|
* Don't free selected list memory if none was allocated.
|
|
*
|
|
* 9 4/11/99 2:41a Jeff
|
|
* had to include stdafx.h for neweditor
|
|
*
|
|
* 8 4/07/99 7:07p Gwar
|
|
* added #define NEWEDITOR checks
|
|
*
|
|
* 7 1/21/99 11:15p Jeff
|
|
* pulled out some structs and defines from header files and moved them
|
|
* into seperate header files so that multiplayer dlls don't require major
|
|
* game headers, just those new headers. Side effect is a shorter build
|
|
* time. Also cleaned up some header file #includes that weren't needed.
|
|
* This affected polymodel.h, object.h, player.h, vecmat.h, room.h,
|
|
* manage.h and multi.h
|
|
*
|
|
* 6 10/08/98 4:24p Kevin
|
|
* Changed code to comply with memory library usage. Always use mem_malloc
|
|
* , mem_free and mem_strdup
|
|
*
|
|
* 5 12/23/97 1:33p Samir
|
|
* Added pserror.h
|
|
*
|
|
* 4 9/04/97 4:39p Matt
|
|
* Added includes needed as a result of removing includes from d3edit.h
|
|
*
|
|
* 3 8/29/97 5:26p Matt
|
|
* Fixed name of ClearRoomSelectedList()
|
|
*
|
|
* 2 7/31/97 3:31p Jason
|
|
* added functions to rotate portal rooms
|
|
*
|
|
* 1 7/31/97 10:35a Jason
|
|
*
|
|
* $NoKeywords: $
|
|
*/
|
|
|
|
#include "selectedroom.h"
|
|
|
|
#ifdef NEWEDITOR
|
|
#include "../neweditor/stdafx.h"
|
|
#include "../neweditor/globals.h"
|
|
#else
|
|
#include "d3edit.h"
|
|
#endif
|
|
|
|
#include "room.h"
|
|
#include "pserror.h"
|
|
#include "mem.h"
|
|
|
|
//Returns true if a room is in the selected list
|
|
int IsRoomSelected(int roomnum)
|
|
{
|
|
int i;
|
|
|
|
for (i=0;i<N_selected_rooms;i++)
|
|
if (Selected_rooms[i] == roomnum)
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
//Adds a room to the selected list, if it's not already there
|
|
void AddRoomToSelectedList(int roomnum)
|
|
{
|
|
if (! IsRoomSelected(roomnum)) {
|
|
Selected_rooms[N_selected_rooms++] = roomnum;
|
|
State_changed = 1;
|
|
}
|
|
}
|
|
|
|
//Removes a room from the selected list, if it's there
|
|
void RemoveRoomFromSelectedList(int roomnum)
|
|
{
|
|
int i;
|
|
|
|
for (i=0;i<N_selected_rooms;i++)
|
|
if (Selected_rooms[i] == roomnum) {
|
|
int j;
|
|
for (j=i;j<N_selected_rooms-1;j++)
|
|
Selected_rooms[j] = Selected_rooms[j+1];
|
|
N_selected_rooms--;
|
|
State_changed = 1;
|
|
return;
|
|
}
|
|
}
|
|
|
|
//Empties the selected list
|
|
void ClearRoomSelectedList()
|
|
{
|
|
N_selected_rooms = 0;
|
|
State_changed = 1;
|
|
}
|
|
|
|
//Adds to selected list if not already in there, else removes from list
|
|
//Returns: 1 if room was selected, 0 if un-selected
|
|
int ToggleRoomSelectedState(int roomnum)
|
|
{
|
|
int i;
|
|
|
|
State_changed = 1;
|
|
|
|
for (i=0;i<N_selected_rooms;i++)
|
|
if (Selected_rooms[i] == roomnum) {
|
|
int j;
|
|
for (j=i;j<N_selected_rooms-1;j++)
|
|
Selected_rooms[j] = Selected_rooms[j+1];
|
|
N_selected_rooms--;
|
|
return 0; //room was un-selected
|
|
}
|
|
|
|
//not found, so add to list
|
|
Selected_rooms[N_selected_rooms++] = roomnum;
|
|
|
|
return 1; //room was selected
|
|
}
|
|
|
|
//Add all the connected room to the selected list
|
|
//Parameters: room - the starting room
|
|
//Returns: the number of rooms added to the list
|
|
int SelectConnectedRooms(int roomnum)
|
|
{
|
|
int count;
|
|
int s;
|
|
|
|
if (IsRoomSelected(roomnum)) //this room already selected?
|
|
return 0;
|
|
|
|
//Add this rooom to selected list
|
|
Selected_rooms[N_selected_rooms++] = roomnum;
|
|
count = 1;
|
|
|
|
State_changed = 1;
|
|
|
|
//Now add this room's children
|
|
for (s=0;s<Rooms[roomnum].num_portals;s++)
|
|
{
|
|
if (Rooms[roomnum].portals[s].croom!=-1)
|
|
count += SelectConnectedRooms(Rooms[roomnum].portals[s].croom);
|
|
}
|
|
|
|
return count;
|
|
}
|
|
|
|
static int *Save_selected_rooms;
|
|
static int N_save_selected_rooms=-1; //-1 means empty list
|
|
|
|
//Save the (user's) selected list so that an internal function can use it
|
|
//You must call RestoreSelectedList() when you're done with the selected list
|
|
void SaveRoomSelectedList()
|
|
{
|
|
int i;
|
|
|
|
if (N_save_selected_rooms != -1) { //already have saved list?
|
|
Int3(); //..yes, error
|
|
return;
|
|
}
|
|
|
|
N_save_selected_rooms = N_selected_rooms;
|
|
|
|
if (! N_save_selected_rooms) //are there any rooms in the list?
|
|
return; //..no, so don't bother to save them
|
|
|
|
Save_selected_rooms = (int *) mem_malloc(N_save_selected_rooms * sizeof(*Save_selected_rooms));
|
|
|
|
ASSERT(Save_selected_rooms != NULL);
|
|
|
|
for (i=0;i<N_selected_rooms;i++)
|
|
Save_selected_rooms[i] = Selected_rooms[i];
|
|
}
|
|
|
|
//Restore a previously-saved selected list. You must have previously called SaveSelectedList()
|
|
void RestoreRoomSelectedList()
|
|
{
|
|
int i;
|
|
|
|
if (N_save_selected_rooms == -1) { //no save list?
|
|
Int3(); //..then generate error
|
|
return;
|
|
}
|
|
|
|
N_selected_rooms = N_save_selected_rooms;
|
|
|
|
N_save_selected_rooms = -1; //say no saved list
|
|
|
|
if (! N_selected_rooms) //are there any rooms in the list?
|
|
return; //..no, so don't restore them
|
|
|
|
for (i=0;i<N_selected_rooms;i++)
|
|
Selected_rooms[i] = Save_selected_rooms[i];
|
|
|
|
mem_free(Save_selected_rooms); //free up memory
|
|
}
|