* moved zeroradiant (1.6) into trunk
[xonotic/netradiant.git] / radiant / targetname.cpp
1 /*
2 Copyright (C) 1999-2007 id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5 This file is part of GtkRadiant.
6
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
11
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20 */
21
22 #include "stdafx.h"
23
24 /*!
25 connects two entities creating a unique target/targetname value 
26 */
27 void Entity_Connect(entity_t *e1, entity_t *e2)
28 {
29   const char *maptarget;
30   char newtarget[16];
31   int maxtarget=0;  // highest t# value in the map
32   entity_t *e;      // map entities
33
34   if (e1 == e2)
35         {
36 #ifdef _DEBUG    
37                 Sys_Status ("Entity_Connect: Brushes are from same entity.", 0);
38 #endif
39                 return;
40         }
41
42   for (e=entities.next ; e != &entities ; e=e->next)
43   {
44     maptarget = ValueForKey (e, "target");
45     if (maptarget && maptarget[0])
46     {
47       int targetnum = atoi(maptarget+1);
48       if (targetnum > maxtarget)
49         maxtarget = targetnum;
50     }
51   }
52   sprintf (newtarget, "t%i", maxtarget+1);
53   
54 #ifdef _DEBUG
55   Sys_Printf("Connecting entities with new target/targetname: %s\n", newtarget);
56 #endif  
57   
58         SetKeyValue (e1, "target", newtarget);
59         SetKeyValue (e2, "targetname", newtarget);
60 }
61
62 int GetUniqueTargetId(int iHint)
63 {
64         int iMin, iMax, i;
65         bool fFound;
66         entity_t *pe;
67         
68         fFound = FALSE;
69         pe = entities.next;
70         iMin = 0; 
71         iMax = 0;
72         
73         for (; pe != NULL && pe != &entities ; pe = pe->next)
74         {
75                 i = IntForKey(pe, "target");
76                 if (i)
77                 {
78                         iMin = MIN(i, iMin);
79                         iMax = MAX(i, iMax);
80                         if (i == iHint)
81                                 fFound = TRUE;
82                 }
83         }
84
85         if (fFound)
86                 return iMax + 1;
87         else
88                 return iHint;
89 }
90