Browse Source

*** empty log message ***

Joe Shochet 24 years ago
parent
commit
d80d57919a
1 changed files with 58 additions and 15 deletions
  1. 58 15
      direct/src/leveleditor/LevelEditor.py

+ 58 - 15
direct/src/leveleditor/LevelEditor.py

@@ -237,6 +237,7 @@ except NameError:
 # Precompute class types for type comparisons
 # Precompute class types for type comparisons
 DNA_CORNICE = DNACornice.getClassType()
 DNA_CORNICE = DNACornice.getClassType()
 DNA_DOOR = DNADoor.getClassType()
 DNA_DOOR = DNADoor.getClassType()
+DNA_FLAT_DOOR = DNAFlatDoor.getClassType()
 DNA_FLAT_BUILDING = DNAFlatBuilding.getClassType()
 DNA_FLAT_BUILDING = DNAFlatBuilding.getClassType()
 DNA_NODE = DNANode.getClassType()
 DNA_NODE = DNANode.getClassType()
 DNA_GROUP = DNAGroup.getClassType()
 DNA_GROUP = DNAGroup.getClassType()
@@ -1460,7 +1461,7 @@ class LevelEditor(NodePath, PandaObject):
         newDNALandmarkBuilding.setCode(landmarkType)
         newDNALandmarkBuilding.setCode(landmarkType)
         newDNALandmarkBuilding.setPos(VBase3(0))
         newDNALandmarkBuilding.setPos(VBase3(0))
         newDNALandmarkBuilding.setHpr(VBase3(0))
         newDNALandmarkBuilding.setHpr(VBase3(0))
-        newDNADoor = self.createDoor()
+        newDNADoor = self.createDoor('landmark_door')
         newDNALandmarkBuilding.add(newDNADoor)
         newDNALandmarkBuilding.add(newDNADoor)
         # Now place new landmark building in the world
         # Now place new landmark building in the world
         self.initDNANode(newDNALandmarkBuilding)
         self.initDNANode(newDNALandmarkBuilding)
@@ -1498,12 +1499,15 @@ class LevelEditor(NodePath, PandaObject):
         newDNACornice.setColor(self.getCurrent('cornice_color'))
         newDNACornice.setColor(self.getCurrent('cornice_color'))
         return newDNACornice
         return newDNACornice
 
 
-    def createDoor(self):
+    def createDoor(self, type):
         if not (self.getCurrent('door_texture')):
         if not (self.getCurrent('door_texture')):
             doorStyles = self.styleManager.attributeDictionary['door_texture'].getList()[:-1]
             doorStyles = self.styleManager.attributeDictionary['door_texture'].getList()[:-1]
             defaultDoorStyle = doorStyles[randint(0, len(doorStyles) - 1)]
             defaultDoorStyle = doorStyles[randint(0, len(doorStyles) - 1)]
             self.setCurrent('door_texture', defaultDoorStyle)
             self.setCurrent('door_texture', defaultDoorStyle)
-        newDNADoor = DNADoor('door')
+        if (type == 'landmark_door'):
+            newDNADoor = DNADoor('door')
+        elif (type == 'door'):
+            newDNADoor = DNAFlatDoor('door')
         newDNADoor.setCode(self.getCurrent('door_texture'))
         newDNADoor.setCode(self.getCurrent('door_texture'))
         newDNADoor.setColor(self.getCurrent('door_color'))
         newDNADoor.setColor(self.getCurrent('door_color'))
         return newDNADoor
         return newDNADoor
@@ -1562,7 +1566,7 @@ class LevelEditor(NodePath, PandaObject):
 
 
     def removeDoor(self, door, parent):
     def removeDoor(self, door, parent):
         self.setCurrent('door_color', door.getColor())
         self.setCurrent('door_color', door.getColor())
-        DNARemoveChildOfClass(parent, DNA_DOOR)
+        DNARemoveChildOfClass(parent, DNA_FLAT_DOOR)
 
 
     def removeWindows(self, windows, parent):
     def removeWindows(self, windows, parent):
         # And record number of windows
         # And record number of windows
@@ -1601,7 +1605,7 @@ class LevelEditor(NodePath, PandaObject):
                 self.DNATarget = wall
                 self.DNATarget = wall
                 self.DNATargetParent = dnaObject
                 self.DNATargetParent = dnaObject
             elif string.find(menuMode,'door') >= 0:
             elif string.find(menuMode,'door') >= 0:
-                self.DNATarget = DNAGetChildOfClass(wall, DNA_DOOR)
+                self.DNATarget = DNAGetChildOfClass(wall, DNA_FLAT_DOOR)
                 self.DNATargetParent = wall
                 self.DNATargetParent = wall
             elif string.find(menuMode, 'window') >= 0:
             elif string.find(menuMode, 'window') >= 0:
                 self.DNATarget = DNAGetChildOfClass(wall, DNA_WINDOWS)
                 self.DNATarget = DNAGetChildOfClass(wall, DNA_WINDOWS)
@@ -1753,8 +1757,6 @@ class LevelEditor(NodePath, PandaObject):
                     menuMode = 'door_orientation'
                     menuMode = 'door_orientation'
                 else:
                 else:
                     menuMode = 'door_texture'
                     menuMode = 'door_texture'
-                # MRM: Temp for now
-                menuMode = 'window_texture'
             else:
             else:
                 # Do window operations
                 # Do window operations
                 if direct.fControl:
                 if direct.fControl:
@@ -1776,6 +1778,7 @@ class LevelEditor(NodePath, PandaObject):
             if ((objClass.eq(DNA_WALL)) or
             if ((objClass.eq(DNA_WALL)) or
                 (objClass.eq(DNA_WINDOWS)) or
                 (objClass.eq(DNA_WINDOWS)) or
                 (objClass.eq(DNA_DOOR)) or
                 (objClass.eq(DNA_DOOR)) or
+                (objClass.eq(DNA_FLAT_DOOR)) or
                 (objClass.eq(DNA_CORNICE)) or
                 (objClass.eq(DNA_CORNICE)) or
                 (objClass.eq(DNA_PROP))
                 (objClass.eq(DNA_PROP))
                 ):
                 ):
@@ -1813,9 +1816,9 @@ class LevelEditor(NodePath, PandaObject):
             elif (type == 'sign'):
             elif (type == 'sign'):
                 self.DNATarget = self.createSign()
                 self.DNATarget = self.createSign()
             elif (type == 'landmark_door'):
             elif (type == 'landmark_door'):
-                self.DNATarget = self.createDoor()
+                self.DNATarget = self.createDoor('landmark_door')
             elif (type == 'door'):
             elif (type == 'door'):
-                self.DNATarget = self.createDoor()
+                self.DNATarget = self.createDoor('door')
             elif (type == 'windows'):
             elif (type == 'windows'):
                 # Make sure window_count n.e. 0
                 # Make sure window_count n.e. 0
                 if self.getCurrent('window_count') == 0:
                 if self.getCurrent('window_count') == 0:
@@ -1881,6 +1884,7 @@ class LevelEditor(NodePath, PandaObject):
             if ((objClass.eq(DNA_WALL)) or
             if ((objClass.eq(DNA_WALL)) or
                 (objClass.eq(DNA_WINDOWS)) or
                 (objClass.eq(DNA_WINDOWS)) or
                 (objClass.eq(DNA_DOOR)) or
                 (objClass.eq(DNA_DOOR)) or
+                (objClass.eq(DNA_FLAT_DOOR)) or
                 (objClass.eq(DNA_CORNICE)) or
                 (objClass.eq(DNA_CORNICE)) or
                 (objClass.eq(DNA_PROP)) or
                 (objClass.eq(DNA_PROP)) or
                 (objClass.eq(DNA_SIGN)) or
                 (objClass.eq(DNA_SIGN)) or
@@ -2458,6 +2462,8 @@ class LevelEditor(NodePath, PandaObject):
                 tag = 'window_color:'
                 tag = 'window_color:'
             elif classType.eq(DNA_DOOR):
             elif classType.eq(DNA_DOOR):
                 tag = 'door_color:'
                 tag = 'door_color:'
+            elif classType.eq(DNA_FLAT_DOOR):
+                tag = 'door_color:'
             elif classType.eq(DNA_CORNICE):
             elif classType.eq(DNA_CORNICE):
                 tag = 'cornice_color:'
                 tag = 'cornice_color:'
             elif classType.eq(DNA_PROP):
             elif classType.eq(DNA_PROP):
@@ -2718,7 +2724,7 @@ class LevelEditor(NodePath, PandaObject):
             marker.setColor(0,0,1)
             marker.setColor(0,0,1)
             marker.setScale(0.5)
             marker.setScale(0.5)
         elif (type == DNASuitPoint.SIDEDOORPOINT):
         elif (type == DNASuitPoint.SIDEDOORPOINT):
-            marker.setColor(0,0.2,0.4)
+            marker.setColor(0,0.6,0.2)
             marker.setScale(0.5)
             marker.setScale(0.5)
         # Highlight if necessary
         # Highlight if necessary
         if suitPoint in self.visitedPoints:
         if suitPoint in self.visitedPoints:
@@ -2747,6 +2753,7 @@ class LevelEditor(NodePath, PandaObject):
             # Make a new dna edge
             # Make a new dna edge
             if DNAClassEqual(self.DNAParent, DNA_VIS_GROUP):
             if DNAClassEqual(self.DNAParent, DNA_VIS_GROUP):
                 zoneId = self.DNAParent.getName()
                 zoneId = self.DNAParent.getName()
+
                 suitEdge = DNASuitEdge(
                 suitEdge = DNASuitEdge(
                     self.startSuitPoint, self.endSuitPoint, zoneId)
                     self.startSuitPoint, self.endSuitPoint, zoneId)
                 DNASTORE.storeSuitEdge(suitEdge)
                 DNASTORE.storeSuitEdge(suitEdge)
@@ -2763,7 +2770,28 @@ class LevelEditor(NodePath, PandaObject):
                         self.point2edgeDict[point].append(suitEdge)
                         self.point2edgeDict[point].append(suitEdge)
                     else:
                     else:
                         self.point2edgeDict[point] = [suitEdge]
                         self.point2edgeDict[point] = [suitEdge]
-                
+
+                # If this is a building point, you need edges in both directions
+                # so just make the other edge automatically
+                if ((self.startSuitPoint.getPointType() == DNASuitPoint.FRONTDOORPOINT)
+                    or (self.startSuitPoint.getPointType() == DNASuitPoint.SIDEDOORPOINT)):
+                    
+                    suitEdge = DNASuitEdge(
+                        self.endSuitPoint, self.startSuitPoint, zoneId)
+                    DNASTORE.storeSuitEdge(suitEdge)
+                    # Add edge to the current vis group so it can be written out
+                    self.DNAParent.addSuitEdge(suitEdge)
+                    # Draw a line to represent the edge
+                    edgeLine = self.drawSuitEdge(suitEdge, self.NPParent)
+                    # Store the line in a dict so we can hide/show them
+                    self.edgeDict[suitEdge] = edgeLine
+                    
+                    for point in [self.startSuitPoint, self.endSuitPoint]:
+                        if self.point2edgeDict.has_key(point):
+                            self.point2edgeDict[point].append(suitEdge)
+                        else:
+                            self.point2edgeDict[point] = [suitEdge]
+
                 print 'Added dnaSuitEdge to zone: ' + zoneId
                 print 'Added dnaSuitEdge to zone: ' + zoneId
             else:
             else:
                 print 'Error: DNAParent is not a dnaVisGroup. Did not add edge'
                 print 'Error: DNAParent is not a dnaVisGroup. Did not add edge'
@@ -2822,7 +2850,7 @@ class LevelEditor(NodePath, PandaObject):
             elif (type == DNASuitPoint.FRONTDOORPOINT):
             elif (type == DNASuitPoint.FRONTDOORPOINT):
                 marker.setColor(0,0,1)
                 marker.setColor(0,0,1)
             elif (type == DNASuitPoint.SIDEDOORPOINT):
             elif (type == DNASuitPoint.SIDEDOORPOINT):
-                marker.setColor(0,0.2,0.4)
+                marker.setColor(0,0.6,0.2)
         for edge in self.edgeDict.values():
         for edge in self.edgeDict.values():
             edge.clearColor()
             edge.clearColor()
         self.visitedPoints = []
         self.visitedPoints = []
@@ -3014,6 +3042,9 @@ class LevelEditor(NodePath, PandaObject):
             block=block[2:block.find(':')]
             block=block[2:block.find(':')]
             print ("associate point with building: " + str(block))
             print ("associate point with building: " + str(block))
             self.selectedSuitPoint.setLandmarkBuildingIndex(int(block))
             self.selectedSuitPoint.setLandmarkBuildingIndex(int(block))
+            marker = self.pointDict[self.selectedSuitPoint]
+            marker.setColor(1,0,0,1)
+            marker.setScale(1.0)
 
 
     def findHighestLandmarkBlock(self, dnaRoot, npRoot):
     def findHighestLandmarkBlock(self, dnaRoot, npRoot):
         npc=npRoot.findAllMatches("**/*:toon_landmark_*")
         npc=npRoot.findAllMatches("**/*:toon_landmark_*")
@@ -3111,7 +3142,8 @@ class LevelEditor(NodePath, PandaObject):
 
 
                 # Get the suit point for this lb
                 # Get the suit point for this lb
                 for point, marker in self.pointDict.items():
                 for point, marker in self.pointDict.items():
-                    if (point.getPointType() == DNASuitPoint.FRONTDOORPOINT):
+                    if ((point.getPointType() == DNASuitPoint.FRONTDOORPOINT)
+                        or (point.getPointType() == DNASuitPoint.SIDEDOORPOINT)):
                         lbIndex = point.getLandmarkBuildingIndex()
                         lbIndex = point.getLandmarkBuildingIndex()
                         if (lbIndex == int(block)):
                         if (lbIndex == int(block)):
                             marker.setColor(1,0,0,1)
                             marker.setColor(1,0,0,1)
@@ -3129,6 +3161,9 @@ class LevelEditor(NodePath, PandaObject):
                     if (point.getPointType() == DNASuitPoint.FRONTDOORPOINT):
                     if (point.getPointType() == DNASuitPoint.FRONTDOORPOINT):
                         marker.setColor(0,0,1,1)
                         marker.setColor(0,0,1,1)
                         marker.setScale(0.5)
                         marker.setScale(0.5)
+                    elif (point.getPointType() == DNASuitPoint.SIDEDOORPOINT):
+                        marker.setColor(0,0.6,0.2,1)
+                        marker.setScale(0.5)
                 self.showLandmarkBlockToggleGroup=None
                 self.showLandmarkBlockToggleGroup=None
     
     
     def pdbBreak(self):
     def pdbBreak(self):
@@ -3670,7 +3705,7 @@ class LevelStyleManager:
                 windows.add(awning)
                 windows.add(awning)
         # Add a door if necessary
         # Add a door if necessary
         if style['door_texture']:
         if style['door_texture']:
-            door = DNADoor()
+            door = DNAFlatDoor()
             # Set the door's attributes
             # Set the door's attributes
             door.setCode(style['door_texture'])
             door.setCode(style['door_texture'])
             door.setColor(style['door_color'])
             door.setColor(style['door_color'])
@@ -3715,7 +3750,11 @@ class LevelStyleManager:
                 color = child.getColor()
                 color = child.getColor()
                 print ('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' %
                 print ('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' %
                        (color[0], color[1], color[2]))
                        (color[0], color[1], color[2]))
-                # MRM: Check for awnings here
+            elif DNAClassEqual(child, DNA_FLAT_DOOR):
+                print 'door_texture: ' + child.getCode()
+                color = child.getColor()
+                print ('door_color: Vec4(%.3f, %.3f, %.3f, 1.0)' %
+                       (color[0], color[1], color[2]))
             elif DNAClassEqual(child, DNA_CORNICE):
             elif DNAClassEqual(child, DNA_CORNICE):
                 print 'cornice_texture: ' + child.getCode()
                 print 'cornice_texture: ' + child.getCode()
                 color = child.getColor()
                 color = child.getColor()
@@ -4325,6 +4364,9 @@ class DNAWallStyle:
             elif DNAClassEqual(child, DNA_DOOR):
             elif DNAClassEqual(child, DNA_DOOR):
                 self.door_texture = child.getCode()
                 self.door_texture = child.getCode()
                 self.door_color = child.getColor()
                 self.door_color = child.getColor()
+            elif DNAClassEqual(child, DNA_FLAT_DOOR):
+                self.door_texture = child.getCode()
+                self.door_color = child.getColor()
                 # MRM: Check for awnings here
                 # MRM: Check for awnings here
             elif DNAClassEqual(child, DNA_CORNICE):
             elif DNAClassEqual(child, DNA_CORNICE):
                 self.cornice_texture = child.getCode()
                 self.cornice_texture = child.getCode()
@@ -5454,6 +5496,7 @@ class LevelEditorPanel(Pmw.MegaToplevel):
                 if ((objClass.eq(DNA_WALL)) or
                 if ((objClass.eq(DNA_WALL)) or
                     (objClass.eq(DNA_WINDOWS)) or
                     (objClass.eq(DNA_WINDOWS)) or
                     (objClass.eq(DNA_DOOR)) or
                     (objClass.eq(DNA_DOOR)) or
+                    (objClass.eq(DNA_FLAT_DOOR)) or
                     (objClass.eq(DNA_CORNICE)) or
                     (objClass.eq(DNA_CORNICE)) or
                     (objClass.eq(DNA_PROP)) or
                     (objClass.eq(DNA_PROP)) or
                     (objClass.eq(DNA_SIGN)) or
                     (objClass.eq(DNA_SIGN)) or