|
@@ -363,7 +363,7 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
if fDeleteToplevel:
|
|
if fDeleteToplevel:
|
|
|
# First destroy existing scene-graph/DNA hierarchy
|
|
# First destroy existing scene-graph/DNA hierarchy
|
|
|
self.deleteToplevel()
|
|
self.deleteToplevel()
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
# Clear DNASTORE
|
|
# Clear DNASTORE
|
|
|
DNASTORE.resetDNAGroups()
|
|
DNASTORE.resetDNAGroups()
|
|
|
# Reset DNA VIS Groups
|
|
# Reset DNA VIS Groups
|
|
@@ -394,6 +394,8 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
self.lastBuilding = None
|
|
self.lastBuilding = None
|
|
|
# Code of last selected object (for autopositionGrid)
|
|
# Code of last selected object (for autopositionGrid)
|
|
|
self.snapList = []
|
|
self.snapList = []
|
|
|
|
|
+ # Last menu used
|
|
|
|
|
+ self.activeMenu = None
|
|
|
|
|
|
|
|
def deleteToplevel(self):
|
|
def deleteToplevel(self):
|
|
|
# Destory old toplevel node path and DNA
|
|
# Destory old toplevel node path and DNA
|
|
@@ -708,6 +710,10 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
# self.panel.sceneGraphExplorer.update()
|
|
# self.panel.sceneGraphExplorer.update()
|
|
|
|
|
|
|
|
# Position it
|
|
# Position it
|
|
|
|
|
+ # First kill autoposition task so grid can jump to its final
|
|
|
|
|
+ # destination (part of cleanup
|
|
|
|
|
+ taskMgr.removeTasksNamed('autoPositionGrid')
|
|
|
|
|
+ # Now find where to put node path
|
|
|
if (hotKey is not None) & nodeClass.eq(DNA_PROP):
|
|
if (hotKey is not None) & nodeClass.eq(DNA_PROP):
|
|
|
# If its a prop and a copy, place it based upon current
|
|
# If its a prop and a copy, place it based upon current
|
|
|
# mouse position
|
|
# mouse position
|
|
@@ -946,7 +952,7 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
|
|
|
|
|
def getFlatBuildingMode(self, dnaObject):
|
|
def getFlatBuildingMode(self, dnaObject):
|
|
|
# Where are we hitting the building?
|
|
# Where are we hitting the building?
|
|
|
- hitPt = self.getWallIntersectionPoint()
|
|
|
|
|
|
|
+ hitPt = self.getWallIntersectionPoint(self.selectedNPRoot)
|
|
|
wallNum = self.computeWallNum(dnaObject, hitPt)
|
|
wallNum = self.computeWallNum(dnaObject, hitPt)
|
|
|
if wallNum < 0:
|
|
if wallNum < 0:
|
|
|
# Do building related operations
|
|
# Do building related operations
|
|
@@ -1145,13 +1151,15 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
direct.deselect(nodePath)
|
|
direct.deselect(nodePath)
|
|
|
# And select parent
|
|
# And select parent
|
|
|
direct.select(dnaParent, direct.fShift)
|
|
direct.select(dnaParent, direct.fShift)
|
|
|
- else:
|
|
|
|
|
|
|
+ elif dnaNode:
|
|
|
# We got a valid node path/DNA object, continue
|
|
# We got a valid node path/DNA object, continue
|
|
|
self.selectedNPRoot = nodePath
|
|
self.selectedNPRoot = nodePath
|
|
|
self.selectedDNARoot = dnaNode
|
|
self.selectedDNARoot = dnaNode
|
|
|
# Reset last Code (for autoPositionGrid)
|
|
# Reset last Code (for autoPositionGrid)
|
|
|
if DNAClassEqual(dnaNode, DNA_STREET):
|
|
if DNAClassEqual(dnaNode, DNA_STREET):
|
|
|
self.snapList = OBJECT_SNAP_POINTS[dnaNode.getCode()]
|
|
self.snapList = OBJECT_SNAP_POINTS[dnaNode.getCode()]
|
|
|
|
|
+ else:
|
|
|
|
|
+ pass
|
|
|
|
|
|
|
|
def deselectedNodePathHook(self, nodePath):
|
|
def deselectedNodePathHook(self, nodePath):
|
|
|
# Clear out old root variables
|
|
# Clear out old root variables
|
|
@@ -1366,6 +1374,7 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
return 1
|
|
return 1
|
|
|
|
|
|
|
|
def autoPositionGrid(self):
|
|
def autoPositionGrid(self):
|
|
|
|
|
+ taskMgr.removeTasksNamed('autoPositionGrid')
|
|
|
# Move grid to prepare for placement of next object
|
|
# Move grid to prepare for placement of next object
|
|
|
selectedNode = direct.selected.last
|
|
selectedNode = direct.selected.last
|
|
|
if selectedNode:
|
|
if selectedNode:
|
|
@@ -1393,7 +1402,6 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
|
|
|
|
|
# Position grid for placing next object
|
|
# Position grid for placing next object
|
|
|
# Eventually we need to setHpr too
|
|
# Eventually we need to setHpr too
|
|
|
- taskMgr.removeTasksNamed('autoPositionGrid')
|
|
|
|
|
t = direct.grid.lerpPosHpr(
|
|
t = direct.grid.lerpPosHpr(
|
|
|
deltaPos, deltaHpr, 0.25,
|
|
deltaPos, deltaHpr, 0.25,
|
|
|
other = selectedNode,
|
|
other = selectedNode,
|
|
@@ -1430,14 +1438,11 @@ class LevelEditor(NodePath, PandaObject):
|
|
|
else:
|
|
else:
|
|
|
return (ZERO_VEC, ZERO_VEC)
|
|
return (ZERO_VEC, ZERO_VEC)
|
|
|
|
|
|
|
|
- def getWallIntersectionPoint(self):
|
|
|
|
|
|
|
+ def getWallIntersectionPoint(self, selectedNode):
|
|
|
"""
|
|
"""
|
|
|
Return point of intersection between building's wall and line from cam
|
|
Return point of intersection between building's wall and line from cam
|
|
|
- through mouse. Return false, if nothing selected
|
|
|
|
|
|
|
+ through mouse.
|
|
|
"""
|
|
"""
|
|
|
- selectedNode = direct.selected.last
|
|
|
|
|
- if not selectedNode:
|
|
|
|
|
- return 0
|
|
|
|
|
# Find mouse point on near plane
|
|
# Find mouse point on near plane
|
|
|
mouseX = direct.dr.mouseX
|
|
mouseX = direct.dr.mouseX
|
|
|
mouseY = direct.dr.mouseY
|
|
mouseY = direct.dr.mouseY
|