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