示例#1
0
def createBox(n):
    boxpoints = []
    np1 = (-26, -26, 0)
    np2 = (-26, 26, 0)
    np3 = (26, 26, 0)
    np4 = (26, -26, 0)
    boxpoints.append(np1)
    boxpoints.append(np2)
    boxpoints.append(np3)
    boxpoints.append(np4)
    boxpoints.append(np1)
    boxsegs = LineSegs()
    boxsegs.setThickness(2.0)
    boxsegs.setColor(Vec4(0.002, 0.002, 0.002, 0.18))
    boxsegs.moveTo(boxpoints[0])
    for p in boxpoints[1:]:
        boxsegs.drawTo(p)
    gridPoints = []
    l = float(52 / n)
    i = 1
    while i < (n):
        np = (-26, (-26 + (l * i)), 0)
        np2 = (26, (-26 + (l * i)), 0)
        np3 = ((-26 + (l * i)), -26, 0)
        np4 = ((-26 + (l * i)), 26, 0)
        gridPoints.append((np, np2))
        gridPoints.append((np3, np4))
        i = i + 1
    for p in gridPoints:
        boxsegs.moveTo(p[0])
        boxsegs.drawTo(p[1])
    return boxsegs.create()
示例#2
0
def fill(filler, frame, BGColor, lineThick, bevel=None, arrowhead=None):
    h = frame[3] - frame[2]
    incr = 10 / float(base.win.getProperties().getYSize())
    bg = LineSegs()
    bg.setColor(BGColor)
    bg.setThickness(lineThick)
    for i in range(1, int(h * 33)):
        if bevel and arrowhead:
            filler(bg, [
                frame[0] + incr * i, frame[1] - incr * i, frame[2] + incr * i,
                frame[3] - incr * i
            ], bevel, arrowhead)
        elif bevel:
            filler(bg, [
                frame[0] + incr * i, frame[1] - incr * i, frame[2] + incr * i,
                frame[3] - incr * i
            ], bevel)
        elif arrowhead:
            filler(bg, [
                frame[0] + incr * i, frame[1] - incr * i, frame[2] + incr * i,
                frame[3] - incr * i
            ], arrowhead)
        else:
            filler(bg, [
                frame[0] + incr * i, frame[1] - incr * i, frame[2] + incr * i,
                frame[3] - incr * i
            ])
    fnp = NodePath(bg.create())
    fnp.setBin("fixed", 10)
    return fnp
示例#3
0
文件: GeomObjects.py 项目: crempp/psg
    def draw(self):
        # Draw attack radius
        attackRadLine = LineSegs()
        attackRadLine.setThickness(1)
        attackRadLine.setColor(self._color)
        attackRadLine.moveTo(self.attackRad, 0, 0)
        for i in range(self._EDGES + 1):
            newX = (self.attackRad * math.cos((2 * math.pi / self._EDGES) * i))
            newY = (self.attackRad * math.sin((2 * math.pi / self._EDGES) * i))
            attackRadLine.drawTo(newX, newY, 0)
        attackRadGeom = attackRadLine.create()
        self._attackRadCircleNP = NodePath(attackRadGeom)
        self._attackRadCircleNP.reparentTo(self._np)

        # Draw foot circle
        self._footCircle.setThickness(1)
        self._footCircle.setColor(self._color)
        self._footCircle.moveTo(self.footRad, 0, 0)
        for i in range(self._EDGES):
            newX = (self.footRad * math.cos((2 * math.pi / self._EDGES) * i))
            newY = (self.footRad * math.sin((2 * math.pi / self._EDGES) * i))
            self._footCircle.drawTo(newX, newY, 0)
        self._footCircle.drawTo(self.footRad, 0, 0)
        footCircleGeom = self._footCircle.create()
        self._footCircleNP = NodePath(footCircleGeom)
        self._footCircleNP.reparentTo(self._np)
示例#4
0
文件: GeomObjects.py 项目: crempp/psg
class AttackCursor(object):
    _EDGES = 40
    _color = Vec4(0.8, 0.3, 0.3, 1)

    def __init__(self, parent, entity, foot=1):
        self.entity = entity
        self.pos = entity.pos
        self.attackRad = entity.attackRad
        self.footRad = foot
        self._footCircle = LineSegs()
        self._footCircleNP = NodePath("Movement Foot Circle Node")
        self._attackRadCircle = LineSegs()
        self._attackRadCircleNP = NodePath("Attack Radius Node")
        self._np = NodePath("Movement Node")
        self.attackables = Entity.EntityManager().getEntitiesWithin(
            self.pos, self.attackRad)

        for e in self.attackables:
            if isinstance(
                    e, Entity.EntityShip
            ) and e != self.entity and e.owner != self.entity.owner:
                e.representation.setAttackable()

    def draw(self):
        # Draw attack radius
        attackRadLine = LineSegs()
        attackRadLine.setThickness(1)
        attackRadLine.setColor(self._color)
        attackRadLine.moveTo(self.attackRad, 0, 0)
        for i in range(self._EDGES + 1):
            newX = (self.attackRad * math.cos((2 * math.pi / self._EDGES) * i))
            newY = (self.attackRad * math.sin((2 * math.pi / self._EDGES) * i))
            attackRadLine.drawTo(newX, newY, 0)
        attackRadGeom = attackRadLine.create()
        self._attackRadCircleNP = NodePath(attackRadGeom)
        self._attackRadCircleNP.reparentTo(self._np)

        # Draw foot circle
        self._footCircle.setThickness(1)
        self._footCircle.setColor(self._color)
        self._footCircle.moveTo(self.footRad, 0, 0)
        for i in range(self._EDGES):
            newX = (self.footRad * math.cos((2 * math.pi / self._EDGES) * i))
            newY = (self.footRad * math.sin((2 * math.pi / self._EDGES) * i))
            self._footCircle.drawTo(newX, newY, 0)
        self._footCircle.drawTo(self.footRad, 0, 0)
        footCircleGeom = self._footCircle.create()
        self._footCircleNP = NodePath(footCircleGeom)
        self._footCircleNP.reparentTo(self._np)

    def removeNode(self):
        for e in self.attackables:
            if isinstance(e, Entity.EntityShip):
                e.representation.unsetAttackable()
        self._footCircleNP.removeNode()
        self._attackRadCircleNP.removeNode()
        self._np.removeNode()

    def __del__(self):
        self.removeNode()
示例#5
0
文件: GeomObjects.py 项目: crempp/psg
	def draw(self):
		# Draw attack radius
		attackRadLine = LineSegs()
		attackRadLine.setThickness(1)
		attackRadLine.setColor(self._color)
		attackRadLine.moveTo(self.attackRad, 0, 0)
		for i in range(self._EDGES + 1):
			newX = (self.attackRad * math.cos((2*math.pi/self._EDGES)*i))
			newY = (self.attackRad * math.sin((2*math.pi/self._EDGES)*i))
			attackRadLine.drawTo(newX, newY, 0)
		attackRadGeom = attackRadLine.create()
		self._attackRadCircleNP = NodePath(attackRadGeom)
		self._attackRadCircleNP.reparentTo(self._np)
		
		# Draw foot circle
		self._footCircle.setThickness(1)
		self._footCircle.setColor(self._color)
		self._footCircle.moveTo(self.footRad, 0, 0)
		for i in range(self._EDGES):
			newX = (self.footRad * math.cos((2*math.pi/self._EDGES)*i))
			newY = (self.footRad * math.sin((2*math.pi/self._EDGES)*i))
			self._footCircle.drawTo(newX, newY, 0)
		self._footCircle.drawTo(self.footRad, 0, 0)
		footCircleGeom = self._footCircle.create()
		self._footCircleNP = NodePath(footCircleGeom)
		self._footCircleNP.reparentTo(self._np)
示例#6
0
文件: geometry.py 项目: LBdN/labs
class SelectionBox(NodePath):
    def __init__(self, width=1, depth=1, height=1, thickness=1.0, origin=Point3(0, 0, 0)):
        def __Get3dPoint(pt, origin, axis):
            p = Point3(pt.x, pt.y, 0) - origin
            return RotatePoint3(p, Vec3(0, 0, 1), axis)

        # Create line segments
        self.ls = LineSegs()
        self.ls.setThickness(thickness)

        # axes = [Vec3(1, 0, 0), Vec3(0, 1, 0), Vec3(0, 0, 1), Vec3(1, 0, 0), Vec3(0, 1, 0), Vec3(0, 0, 1)]
        # origins = [origin, origin, origin, origin + Point3(0, 0, -1), origin + Point3(0, 0, -1), origin + Point3(0, 0, 1)]
        axes = [Vec3(1, 0, 0), Vec3(0, 1, 0), Vec3(-1, 0, 0), Vec3(0, -1, 0)]
        origins = [origin, origin, origin, origin]
        for m in range(len(axes)):

            # Get the points for square, append the first one to the end to
            # complete the square
            pts = GetPointsForSquare2(width, height)
            pts.append(pts[0])
            for i in range(len(pts) - 1):

                # Get the distance a third of the way along the edge
                dist = (pts[i + 1] - pts[i]) / 3

                # Draw one square
                self.ls.moveTo(__Get3dPoint(pts[i], origins[m], axes[m]))
                self.ls.drawTo(__Get3dPoint(pts[i] + dist, origins[m], axes[m]))
                self.ls.moveTo(__Get3dPoint(pts[i] + dist + dist, origins[m], axes[m]))
                self.ls.drawTo(__Get3dPoint(pts[i + 1], origins[m], axes[m]))

        # Init the node path, wrapping the lines
        node = self.ls.create()
        NodePath.__init__(self, node)
示例#7
0
    def __init__( self, *args, **kwargs ):
        colour = kwargs.pop( 'colour', (1, 1, 1, .2) )
        p3d.SingleTask.__init__( self, *args, **kwargs )

        # Create a card maker
        cm = CardMaker( self.name )
        cm.setFrame( 0, 1, 0, 1 )
        
        # Init the node path, wrapping the card maker to make a rectangle
        NodePath.__init__( self, cm.generate() )
        self.setColor( colour )
        self.setTransparency( 1 )
        self.reparentTo( self.root2d )
        self.hide()
        
        # Create the rectangle border
        ls = LineSegs()
        ls.moveTo( 0, 0, 0 )
        ls.drawTo( 1, 0, 0 )
        ls.drawTo( 1, 0, 1 )
        ls.drawTo( 0, 0, 1 )
        ls.drawTo( 0, 0, 0 )
        
        # Attach border to rectangle
        self.attachNewNode( ls.create() )
class RepairSawingLine:
    def __init__(self, parent, thickness, color, lineSpawnDist=0.01):
        self.points = []
        self.parent = parent
        self.thickness = thickness
        self.color = color
        self.lineNode = None
        self.lineDrawer = LineSegs()
        self.lineDrawer.setThickness(thickness)
        self.lineSpawnDist = lineSpawnDist
        self.currentPoint = None
        self.startPoint = None
        self.redraw()

    def redraw(self):
        self.clearLine()
        self.lineDrawer.reset()
        self.lineDrawer.setThickness(self.thickness)
        self.lineDrawer.setColor(self.color)
        if len(self.points) > 0:
            self.lineDrawer.moveTo(self.points[0])
            for i in range(1, len(self.points)):
                p = self.points[i]
                self.lineDrawer.drawTo(p)
                self.currentPoint = p

        self.lineNode = NodePath(self.lineDrawer.create())
        self.lineNode.reparentTo(self.parent)
        self.lineNode.setBin('fixed', 37)
        self.lineNode.setTransparency(True)

    def update(self, point):
        if self.currentPoint == None or (
                point - self.currentPoint).length() >= self.lineSpawnDist:
            self.addPoint(point)
            self.redraw()

    def addPoint(self, p):
        if len(self.points) == 0:
            self.startPoint = p

        self.points.append(p)

    def clearLine(self):
        if self.lineNode != None:
            self.lineNode.removeNode()

    def reset(self):
        self.clearLine()
        self.points = []
        self.redraw()
        self.currentPoint = None
        self.startPoint = None

    def show(self):
        self.lineNode.unstash()

    def hide(self):
        self.lineNode.stash()
示例#9
0
 def renderPath(self, path, color):
     segs = LineSegs()
     segs.setThickness(1.0)
     segs.setColor(color)
     segs.moveTo(Point3(path[0].getX(), path[0].getY(), 0))
     for i in range(1, len(path)):
         segs.drawTo(Point3(path[i].getX(), path[i].getY(), 0))
     return segs.create()
示例#10
0
 def add_line(self, rendering_node, color, thickness, start, end):
     linesegs = LineSegs()  
     linesegs.setColor(*color) 
     linesegs.setThickness(thickness)
     linesegs.drawTo((start[0], start[1], start[2])) 
     linesegs.drawTo((end[0], end[1], end[2]))    
     new_node = linesegs.create()
     rendering_node.attachNewNode(new_node)
示例#11
0
文件: Grid.py 项目: crempp/psg
	def drawLine(self, parent, source, target):
		line = LineSegs()
		line.setThickness(LINETHICKNESS)
		line.reset()
		line.setColor(*GRIDCOLOR)
		line.moveTo(source)
		line.drawTo(target)
		node = line.create()
		lineSegNP = NodePath(node).reparentTo(parent)
 def drawLineToNeighbors(self):
     ls = LineSegs()
     ls.setThickness(1.0)
     for neighbor in self.neighbors:
         ls.setColor(1, 1, 1, 1)
         ls.moveTo(self.getPos(render))
         ls.drawTo(neighbor.getPos(render))
     self.np = NodePath(ls.create("Neighbor Line Segment"))
     self.np.reparentTo(render)
示例#13
0
 def drawBorder(self, bounds, color):
     LS = LineSegs()
     LS.setColor(*color)
     LS.moveTo(bounds[0], 0, bounds[2])
     LS.drawTo(bounds[0], 0, bounds[3])
     LS.drawTo(bounds[1], 0, bounds[3])
     LS.drawTo(bounds[1], 0, bounds[2])
     LS.drawTo(bounds[0], 0, bounds[2])
     return LS.create()
示例#14
0
文件: GeomObjects.py 项目: crempp/psg
class AttackCursor(object):
	_EDGES = 40
	_color = Vec4(0.8, 0.3, 0.3, 1)
	
	def __init__(self, parent, entity, foot=1):
		self.entity = entity
		self.pos = entity.pos
		self.attackRad         = entity.attackRad
		self.footRad           = foot
		self._footCircle       = LineSegs()
		self._footCircleNP     = NodePath("Movement Foot Circle Node")
		self._attackRadCircle  = LineSegs()
		self._attackRadCircleNP= NodePath("Attack Radius Node")
		self._np               = NodePath("Movement Node")
		self.attackables       = Entity.EntityManager().getEntitiesWithin(self.pos, self.attackRad)
		
		for e in self.attackables:
			if isinstance(e, Entity.EntityShip) and e != self.entity and e.owner != self.entity.owner: 
				e.representation.setAttackable()
			
	def draw(self):
		# Draw attack radius
		attackRadLine = LineSegs()
		attackRadLine.setThickness(1)
		attackRadLine.setColor(self._color)
		attackRadLine.moveTo(self.attackRad, 0, 0)
		for i in range(self._EDGES + 1):
			newX = (self.attackRad * math.cos((2*math.pi/self._EDGES)*i))
			newY = (self.attackRad * math.sin((2*math.pi/self._EDGES)*i))
			attackRadLine.drawTo(newX, newY, 0)
		attackRadGeom = attackRadLine.create()
		self._attackRadCircleNP = NodePath(attackRadGeom)
		self._attackRadCircleNP.reparentTo(self._np)
		
		# Draw foot circle
		self._footCircle.setThickness(1)
		self._footCircle.setColor(self._color)
		self._footCircle.moveTo(self.footRad, 0, 0)
		for i in range(self._EDGES):
			newX = (self.footRad * math.cos((2*math.pi/self._EDGES)*i))
			newY = (self.footRad * math.sin((2*math.pi/self._EDGES)*i))
			self._footCircle.drawTo(newX, newY, 0)
		self._footCircle.drawTo(self.footRad, 0, 0)
		footCircleGeom = self._footCircle.create()
		self._footCircleNP = NodePath(footCircleGeom)
		self._footCircleNP.reparentTo(self._np)
		
	def removeNode(self):
		for e in self.attackables:
			if isinstance(e, Entity.EntityShip):
				e.representation.unsetAttackable()
		self._footCircleNP.removeNode()
		self._attackRadCircleNP.removeNode()
		self._np.removeNode()

	def __del__(self):
		self.removeNode()
示例#15
0
def createVisibleSegments(environment, color, segments):
    global extraSegmentsToDisplayNP

    if extraSegmentsToDisplayNP != None:
        extraSegmentsToDisplayNP.removeNode()

    visibleSegs = LineSegs()
    environment.produceRenderingOfLines(visibleSegs, color, segments)
    extraSegmentsToDisplayNP = render.attachNewNode(visibleSegs.create())
 def __createLine(self, length=1, color=(1,1,1,1), endColor=None):
   LS=LineSegs()
   LS.setColor(*color)
   LS.moveTo(0,0,0)
   LS.drawTo(length*1,0,0)
   node=LS.create()
   if endColor:
     LS.setVertexColor(1,*endColor)
   return node
 def drawLineToNeighbors(self):
     ls = LineSegs()
     ls.setThickness(1.0)
     for neighbor in self.neighbors:
         ls.setColor(1,1,1,1)
         ls.moveTo(self.getPos(render))
         ls.drawTo(neighbor.getPos(render))
     self.np = NodePath(ls.create("Neighbor Line Segment"))
     self.np.reparentTo(render)
示例#18
0
 def __createLine(self, length=1, color=(1, 1, 1, 1), endColor=None):
     LS = LineSegs()
     LS.setColor(*color)
     LS.moveTo(0, 0, 0)
     LS.drawTo(length * 1, 0, 0)
     node = LS.create()
     if endColor:
         LS.setVertexColor(1, *endColor)
     return node
示例#19
0
def sepLine(frame, styles):
	style = styles['menu separator']
	ls = LineSegs('sepLine')
	ls.setColor(style['color'])
	ls.setThickness(style['thick'])
	hpad = (frame[1]-frame[0])*.2
	hh = frame[3]+(frame[3]-frame[2])#/2
	ls.moveTo(frame[0]+hpad,0,hh)
	ls.drawTo(frame[1]-hpad,0,hh)
	return ls.create()
示例#20
0
 def drawBestPath(self):
     if self.bestPath != None:
         ls = LineSegs()
         ls.setThickness(10.0)
         for i in range(len(self.bestPath) - 1):
             ls.setColor(0, 0, 1, 1)
             ls.moveTo(self.bestPath[i].getPos())
             ls.drawTo(self.bestPath[i + 1].getPos())
             np = NodePath(ls.create("aoeu"))
             np.reparentTo(render)
示例#21
0
def xBox(frame, lineThick=2, color=(1,1,1,1), brdrColor=(1,1,1,1), BGColor = None):
	w = frame[1]-frame[0]
	h = frame[3]-frame[2]
	bx = LineSegs('xbox')
	rect(bx, (frame[1]-h/4,frame[1]-3*h/4,frame[2]+h/4,frame[3]-h/4))
	ex(bx, (frame[1]-h/4,frame[1]-3*h/4,frame[2]+h/4,frame[3]-h/4))
	box = bx.create()
	if BGColor:
		fill(rectangleLine, frame, BGColor, lineThick).reparentTo(NodePath(box))
	return box
 def drawBestPath(self):
     if self.bestPath != None:
         ls = LineSegs()
         ls.setThickness(10.0)
         for i in range(len(self.bestPath) - 1):
             ls.setColor(0, 0, 1, 1)
             ls.moveTo(self.bestPath[i].getPos())
             ls.drawTo(self.bestPath[i + 1].getPos())
             np = NodePath(ls.create("aoeu"))
             np.reparentTo(render)
示例#23
0
文件: geometry.py 项目: LBdN/labs
    def __init__(self, start, end, thickness=1.0):

        # Create line segments
        ls = LineSegs()
        ls.setThickness(thickness)
        ls.drawTo(Point3(start))
        ls.drawTo(Point3(end))

        # Init the node path, wrapping the lines
        NodePath.__init__(self, ls.create())
示例#24
0
文件: geometry.py 项目: LBdN/labs
    def __init__(self, name):
        GeomNode.__init__(self, name)

        ls = LineSegs()
        ls.setThickness(5)
        ls.drawTo(Point3(0, 0, 0))
        ls.drawTo(Point3(100, 100, 100))
        self.addGeomsFrom(ls.create())

        print ls
示例#25
0
def sepLine(frame, styles):
    style = styles['menu separator']
    ls = LineSegs('sepLine')
    ls.setColor(style['color'])
    ls.setThickness(style['thick'])
    hpad = (frame[1] - frame[0]) * .2
    hh = frame[3] + (frame[3] - frame[2])  #/2
    ls.moveTo(frame[0] + hpad, 0, hh)
    ls.drawTo(frame[1] - hpad, 0, hh)
    return ls.create()
示例#26
0
def bevelArrow(frame, bevel=.35, arrowhead=.4, lineThick=2, color=(1,1,1,1), brdrColor=(1,1,1,1), BGColor = None):
	ls = LineSegs()
	ls.setThickness(lineThick)
	if brdrColor != 'transparent':
		ls.setColor(brdrColor)
		bevelArrowLine(ls, frame, bevel, arrowhead)
	else:
		ls.setColor(color)
	a = ls.create()
	if BGColor:
		fill(bevelArrowLine, frame, BGColor, lineThick, bevel, arrowhead).reparentTo(NodePath(a))
	return a
示例#27
0
def rectangle(frame, lineThick=2, color=(1,1,1,1), brdrColor=(1,1,1,1), BGColor = None):
	ls = LineSegs()
	ls.setThickness(lineThick)
	if brdrColor != 'transparent':
		ls.setColor(brdrColor)
		rectangleLine(ls, frame)
	else:
		ls.setColor(color)
	a = ls.create()
	if BGColor:
		fill(rectangleLine, frame, BGColor, lineThick).reparentTo(NodePath(a))
	return a
示例#28
0
 def produceRending(self):
     segs = LineSegs()
     self.produceRenderingOfLines(segs, Vec4(1, 1, 1, 1),
                                  self.boundaryWalls)
     self.produceRenderingOfLines(segs, Vec4(1, 1, 1, 1),
                                  self.interiorWalls)
     self.produceRenderingOfLines(segs, Vec4(1, 1, 1, 1),
                                  self.obstaclesWalls)
     self.produceRenderingOfPosition(segs, Vec4(1, 0, 0, 1),
                                     self.shooterPos, 5)
     self.produceRenderingOfPosition(segs, Vec4(0, 1, 0, 1), self.end, 5)
     self.produceRenderingOfPosition(segs, Vec4(0, 0, 1, 1), self.start, 5)
     return segs.create()
示例#29
0
	def __init__(self, listConsideration=[]):
		
		z = -0.05
		self.plane = Plane(Vec3(0, 0, 1), Point3(0, 0, z)) 
		cm = CardMaker("blah") 
		cm.setFrame(-100, 100, -100, 100) 
		render.attachNewNode(cm.generate()).lookAt(0, 0, -1) 
		
		#Create a selection window using cardmaker 
		#We will use the setScale function to dynamically scale the quad to the appropriate size in UpdateSelRect 
		temp = CardMaker('') 
		temp.setFrame(0, 1, 0, 1) 
		#self.npSelRect is the actual selection rectangle that we dynamically hide/unhide and change size 
		self.npSelRect = render2d.attachNewNode(temp.generate()) 
		self.npSelRect.setColor(0.5,1,0,.3) 
		self.npSelRect.setTransparency(1) 
		self.npSelRect.hide() 
		LS = LineSegs() 
		LS.setColor(0.5,1,0,1)
		LS.moveTo(0,0,0) 
		LS.drawTo(1,0,0) 
		LS.drawTo(1,0,1) 
		LS.drawTo(0,0,1) 
		LS.drawTo(0,0,0) 
		self.npSelRect.attachNewNode(LS.create()) 
		self.listConsideration = listConsideration 
		self.listSelected = [] 
		self.listLastSelected = [] 
		 
		self.pt2InitialMousePos = (-12, -12) 
		self.pt2LastMousePos = (-12, -12) 
		 
		####----Used to differentiate between group selections and point selections 
		#self.booMouseMoved  = False 
		self.fFovh, self.fFovv = base.camLens.getFov() 
		 
		####--Used to control how frequently update_rect is updated; 
		self.fTimeLastUpdateSelRect = 0 
		self.fTimeLastUpdateSelected = 0 
		self.UpdateTimeSelRect = 0.015 
		self.UpdateTimeSelected = 0.015 
		 
		####------Register the left-mouse-button to start selecting 
		self.accept("mouse1", self.OnStartSelect) 
		self.accept("control-mouse1", self.OnStartSelect) 
		self.accept("mouse1-up", self.OnStopSelect) 
		self.taskUpdateSelRect = 0 
		
		####------otherThings
		self.booSelecting = False
示例#30
0
 def makeArc(angleDegrees=360, numSteps=16, color=Vec4(1, 1, 1, 1)):
     ls = LineSegs()
     angleRadians = deg2Rad(angleDegrees)
     for i in range(numSteps + 1):
         a = angleRadians * i / numSteps
         y = math.sin(a)
         x = math.cos(a)
         ls.drawTo(x, y, 0)
     node = ls.create()
     if color != Vec4(1, 1, 1, 1):
         for i in range(numSteps + 1):
             ls.setVertexColor(i, color)
         pass
     return NodePath(node)
示例#31
0
 def makeArc(angleDegrees=360, numSteps=16, color=Vec4(1, 1, 1, 1)):
     ls = LineSegs()
     angleRadians = deg2Rad(angleDegrees)
     for i in range(numSteps + 1):
         a = angleRadians * i / numSteps
         y = math.sin(a)
         x = math.cos(a)
         ls.drawTo(x, y, 0)
     node = ls.create()
     if color != Vec4(1, 1, 1, 1):
         for i in range(numSteps + 1):
             ls.setVertexColor(i, color)
         pass
     return NodePath(node)
示例#32
0
def makeArc(initial_x, initial_y, angleDegrees=360, numSteps=16):
    ls = LineSegs()

    angleRadians = deg2Rad(angleDegrees)

    for i in range(numSteps + 1):
        a = angleRadians * i / numSteps
        y = initial_y + 0.01 * math.sin(a)
        x = initial_x + 0.01 * math.cos(a)
        ls.setThickness(3)
        ls.setColor(0, 0, 0, 1)
        ls.drawTo(x, 0, y)

    node = ls.create()
    return NodePath(node)
def makeArc(initial_x, initial_y, angleDegrees = 360, numSteps = 16):
    ls = LineSegs()

    angleRadians = deg2Rad(angleDegrees)

    for i in range(numSteps + 1):
        a = angleRadians * i / numSteps
        y = initial_y + 0.01*math.sin(a)
        x = initial_x + 0.01*math.cos(a)
	ls.setThickness(3)
	ls.setColor(0, 0, 0, 1)
        ls.drawTo(x, 0, y)

    node = ls.create()
    return NodePath(node)	
示例#34
0
def makeArc(color, angle_degrees = 360, numsteps = 16, horizon_plane = 0,): 
    ls = LineSegs() 
    ls.setColor(color)
    angleRadians = deg2Rad(angle_degrees) 

    for i in xrange(numsteps + 1): 
        a = angleRadians * i / numsteps 
        y = math.sin(a) 
        x = math.cos(a) 

        ls.drawTo(x, y, horizon_plane)
        ls.setThickness(2.0)
        ls.setColor(color)
    node = ls.create() 
    return NodePath(node)
示例#35
0
def radioBTN(frame, bevel=.35, lineThick=2, color=(1,1,1,1), brdrColor=(1,1,1,1), BGColor = None):
	w = frame[1]-frame[0]
	h = frame[3]-frame[2]
	ls = LineSegs('off')
	ls.setThickness(lineThick)
	if brdrColor != 'transparent':
		ls.setColor(brdrColor)
		bevelBox(ls, frame, bevel)
	else:
		ls.setColor(color)
	diamond(ls, (frame[0]+h/4,frame[0]+3*h/4,frame[2]+h/4,frame[3]-h/4))
	a = ls.create()
	if BGColor:
		fill(bevelBox, frame, BGColor, lineThick, bevel).reparentTo(NodePath(a))
	return a
    def attach_to(self, render):
        '''creates Panda3D representation that can be attached to render
		this function is mainly used inside Render class and its derivatives and
		user not need to worry to call it'''
        new_line_seqs = LineSegs()
        new_line_seqs.setThickness(self.thickness)
        (r, g, b, a) = self.color
        new_line_seqs.setColor(Vec4(r, g, b, a))
        (x, y, z) = self.points[0]
        new_line_seqs.moveTo(Point3(x, y, z))
        for i in xrange(1, len(self.points)):
            (x, y, z) = self.points[i]
            new_line_seqs.drawTo(Point3(x, y, z))
        lines = NodePath(new_line_seqs.create())
        lines.reparentTo(render.render)
        return lines
示例#37
0
def bevelBG(frame, bevel=.35, lineThick=2, color=(1,1,1,1), BGColor = None):
	w = frame[1]-frame[0]
	h = frame[3]-frame[2]
	ls = LineSegs()
	ls.setThickness(lineThick)
	if color != 'transparent':
		ls.setColor(color)
		bevelBox(ls, frame, bevel)
	else:
		ls.setColor(1,1,1,1)
		# ls.moveTo(0,0,0)
		# ls.drawTo(0,0,1)
	a = ls.create()
	if BGColor:
		fill(bevelBox, frame, BGColor, lineThick, bevel).reparentTo(NodePath(a))
	return a
示例#38
0
def rectangle(frame,
              lineThick=2,
              color=(1, 1, 1, 1),
              brdrColor=(1, 1, 1, 1),
              BGColor=None):
    ls = LineSegs()
    ls.setThickness(lineThick)
    if brdrColor != 'transparent':
        ls.setColor(brdrColor)
        rectangleLine(ls, frame)
    else:
        ls.setColor(color)
    a = ls.create()
    if BGColor:
        fill(rectangleLine, frame, BGColor, lineThick).reparentTo(NodePath(a))
    return a
示例#39
0
def checkBox(frame, bevel=.35, lineThick=2, color=(1,1,1,1), brdrColor=(1,1,1,1), BGColor = None):
	w = frame[1]-frame[0]
	h = frame[3]-frame[2]
	ls = LineSegs('off')
	ls.setThickness(lineThick)
	if brdrColor != 'transparent':
		ls.setColor(brdrColor)
		bevelBox(ls, frame, bevel)
	else:
		ls.setColor(color)
	hoff = min(2*bevel, h/4)
	rect(ls, (frame[0]+hoff,frame[0]+hoff+h/2,frame[2]+h/4,frame[3]-h/4))
	a = ls.create()
	if BGColor:
		fill(bevelBox, frame, BGColor, lineThick, bevel).reparentTo(NodePath(a))
	return a
示例#40
0
def HCtest():
    #    bounds = [(-10, -16, 0), (-10, 11, 0), (17, 11, 0), (17, -16, 0)]
    bounds = [(0, -3, 0), (0, 16, 0), (19, 16, 0), (19, -3, 0)]
    finalHCPoints = createHilbertCurve(4, bounds)
    boxsegs = LineSegs()
    boxsegs.setThickness(2.0)
    boxsegs.setColor(Vec4(1, 1, 1, 1))
    boxsegs.moveTo(bounds[0])
    boxsegs.drawTo(bounds[1])
    boxsegs.drawTo(bounds[2])
    boxsegs.drawTo(bounds[3])
    boxsegs.drawTo(bounds[0])
    boxsegs.moveTo(finalHCPoints[0])
    for p in finalHCPoints[1:]:
        boxsegs.drawTo(p)
    return boxsegs.create()
示例#41
0
def xBox(frame,
         lineThick=2,
         color=(1, 1, 1, 1),
         brdrColor=(1, 1, 1, 1),
         BGColor=None):
    w = frame[1] - frame[0]
    h = frame[3] - frame[2]
    bx = LineSegs('xbox')
    rect(bx, (frame[1] - h / 4, frame[1] - 3 * h / 4, frame[2] + h / 4,
              frame[3] - h / 4))
    ex(bx, (frame[1] - h / 4, frame[1] - 3 * h / 4, frame[2] + h / 4,
            frame[3] - h / 4))
    box = bx.create()
    if BGColor:
        fill(rectangleLine, frame, BGColor,
             lineThick).reparentTo(NodePath(box))
    return box
示例#42
0
文件: camera.py 项目: LBdN/labs
 def __Create( self, thickness, length ):
     # Build line segments
     ls = LineSegs()
     ls.setThickness( thickness )
     # X Axis - Red
     ls.setColor( 1.0, 0.0, 0.0, 1.0 )
     ls.moveTo( 0.0, 0.0, 0.0 )
     ls.drawTo( length, 0.0, 0.0 )
     # Y Axis - Green
     ls.setColor( 0.0, 1.0, 0.0, 1.0 )
     ls.moveTo( 0.0,0.0,0.0 )
     ls.drawTo( 0.0, length, 0.0 )
     # Z Axis - Blue
     ls.setColor( 0.0, 0.0, 1.0, 1.0 )
     ls.moveTo( 0.0,0.0,0.0 )
     ls.drawTo( 0.0, 0.0, length )
     return ls.create()
示例#43
0
def bevelBG(frame, bevel=.35, lineThick=2, color=(1, 1, 1, 1), BGColor=None):
    w = frame[1] - frame[0]
    h = frame[3] - frame[2]
    ls = LineSegs()
    ls.setThickness(lineThick)
    if color != 'transparent':
        ls.setColor(color)
        bevelBox(ls, frame, bevel)
    else:
        ls.setColor(1, 1, 1, 1)
        # ls.moveTo(0,0,0)
        # ls.drawTo(0,0,1)
    a = ls.create()
    if BGColor:
        fill(bevelBox, frame, BGColor, lineThick,
             bevel).reparentTo(NodePath(a))
    return a
示例#44
0
def fill(filler, frame, BGColor, lineThick, bevel = None, arrowhead = None):
	h = frame[3]-frame[2]
	incr = 10/float(base.win.getProperties().getYSize())
	bg = LineSegs()
	bg.setColor(BGColor)
	bg.setThickness(lineThick)
	for i in range(1,int(h*33)):
		if bevel and arrowhead:
			filler(bg, [frame[0]+incr*i,frame[1]-incr*i,frame[2]+incr*i,frame[3]-incr*i], bevel, arrowhead)
		elif bevel:
			filler(bg, [frame[0]+incr*i,frame[1]-incr*i,frame[2]+incr*i,frame[3]-incr*i], bevel)
		elif arrowhead:
			filler(bg, [frame[0]+incr*i,frame[1]-incr*i,frame[2]+incr*i,frame[3]-incr*i], arrowhead)
		else:
			filler(bg, [frame[0]+incr*i,frame[1]-incr*i,frame[2]+incr*i,frame[3]-incr*i])
	fnp = NodePath(bg.create())
	fnp.setBin("fixed", 10) 
	return fnp
示例#45
0
def bevelArrow(frame,
               bevel=.35,
               arrowhead=.4,
               lineThick=2,
               color=(1, 1, 1, 1),
               brdrColor=(1, 1, 1, 1),
               BGColor=None):
    ls = LineSegs()
    ls.setThickness(lineThick)
    if brdrColor != 'transparent':
        ls.setColor(brdrColor)
        bevelArrowLine(ls, frame, bevel, arrowhead)
    else:
        ls.setColor(color)
    a = ls.create()
    if BGColor:
        fill(bevelArrowLine, frame, BGColor, lineThick, bevel,
             arrowhead).reparentTo(NodePath(a))
    return a
示例#46
0
 def createRainDrop(self, x=0, y=0, doubleDrop=False, tripleDrop=False):
     # Set up line geometry for rain.
     id = str(uuid.uuid4())
     dummy = NodePath('dummy' + id)
     lineSegs = LineSegs('line' + id)
     if self.tripleDrop:
         lineSegs.setThickness(3.0)
     elif self.doubleDrop:
         lineSegs.setThickness(2.0)
     else:
         lineSegs.setThickness(1.0)
     lineSegs.moveTo(0, 0, 0)
     lineSegs.drawTo(0, 0, self.deltaZ * .1)
     lineGeomNode = lineSegs.create()
     # True: gray; False: white and red.
     if True:
         lineSegs.setVertexColor(0, Vec4(1, 1, 1, .4))
         lineSegs.setVertexColor(1, Vec4(.3, .3, .3, 0))
         pass
     else:
         lineSegs.setVertexColor(0, Vec4(1, 1, 1, .4))
         lineSegs.setVertexColor(1, Vec4(1, 0, 0, 1))
     linePath = dummy.attachNewNode(lineGeomNode)
     linePath.setTransparency(True)
     linePath.reparentTo(render)
     # Add collision node with 'FROM' tag = 'rain'
     pickerNode = CollisionNode('linecnode' + id)
     pickerNode.setTag('FROM', 'rain')
     rayCollider = linePath.attachNewNode(pickerNode)
     # A small collision sphere is attached to the bottom of each rain drop.
     rayCollider.node().addSolid(CollisionSphere(0, 0, 0, .25))
     #base.cTrav.addCollider(rayCollider, collisionHandler)
     # Sequence rain
     Sequence(
         LerpPosInterval(linePath,
                         self.dropDuration,
                         Point3(x, y, self.pt1.z),
                         Point3(x, y, self.pt2.z),
                         blendType='easeIn',
                         fluid=1),
         Parallel(Func(dummy.removeNode),
                  Func(linePath.removeNode))).start()
    def _voro_draw(self):
        new_line_seqs = LineSegs()
        new_line_seqs.setThickness(2.0)  #TODO
        new_line_seqs.setColor(Vec4(1, 1, 0, 0.5))  #TODO
        n = 0
        for (points, faces) in self.input.current.voro:
            if self.selected_cells[n]:
                for (poly, poly_data) in faces:
                    (x, y, z, point_data) = points[poly[0][0]]
                    new_line_seqs.moveTo(Point3(x, y, z))
                    for i in xrange(1, len(poly)):
                        (x, y, z, point_data) = points[poly[i][0]]
                        new_line_seqs.drawTo(Point3(x, y, z))
                    (x, y, z, point_data) = points[poly[0][0]]
                    new_line_seqs.drawTo(Point3(x, y, z))
                if (self.grow_particles):
                    self.balls[n].setColor(1.0, 1.0, 1.0, 0.25)
                else:
                    self.balls[n].setColor(1.0, 1.0, 1.0, 1.0)
            else:
                if (self.grow_particles):
                    self.balls[n].setColor(1.0, 1.0, 1.0, 0.05)
                else:
                    self.balls[n].setColor(1.0, 1.0, 1.0, 0.5)
            n = n + 1

        if not (self.vertices is None):
            self.vertices.removeNode()
            self.vertices = None
        if not (self.sides is None):
            self.sides.removeNode()
            self.sides = None
        if not (self.lines_thin is None):
            self.lines_thin.removeNode()
            self.lines_thin = None
        if not (self.lines_thick is None):
            self.lines_thick.removeNode()
            self.lines_thick = None
        if not (self.lines is None):
            self.lines.removeNode()
        self.lines = NodePath(new_line_seqs.create())
        self.lines.reparentTo(self.render)
示例#48
0
    def __init__(self,pickableList = []):
        self.pickable = pickableList
        tempCard = CardMaker('')
        tempCard.setFrame(0,1,0,1)

        #Lets render our frame so we can hide / show /resize it as needed        
        self.selectFrame = render2d.attachNewNode(tempCard.generate())
        self.selectFrame.setColor(1,1,0,.2)
        self.selectFrame.setTransparency(1)
        self.selectFrame.hide()
        
        #Set up our line segmants for a border 
        ls = LineSegs()
        ls.moveTo(0,0,0)
        ls.drawTo(1,0,0)
        ls.drawTo(1,0,1)
        ls.drawTo(0,0,1)
        ls.drawTo(0,0,0)
        
        self.selectFrame.attachNewNode(ls.create())
        
        self.selected = []
        self.previousSelect = []
        self.selectable = []
        
        #Init our mouse locations
        self.pt2InitMousePos = (-1,-1)
        self.pt2LastMousePos = (-1,-1)
        self.fFovh , self.fFovv = base.camLens.getFov()
        
        self.fTimeLastUpdateRect = 0
        self.fTimeLastUpdateSelected = 0
        self.UpdateTimeRect = 0.015
        self.UpdateTimeSelected = 0.015
        
        print "Running Select Tools"
        
        self.accept("mouse1",self.OnStartSelect)
        self.accept("control-mouse1",self.OnStartSelect)
        self.accept("mouse1-up",self.OnMouseRelease)
        self.taskUpdateSelectRect = 0
示例#49
0
    def __init__(self, pickableList=[]):
        self.pickable = pickableList
        tempCard = CardMaker('')
        tempCard.setFrame(0, 1, 0, 1)

        #Lets render our frame so we can hide / show /resize it as needed
        self.selectFrame = render2d.attachNewNode(tempCard.generate())
        self.selectFrame.setColor(1, 1, 0, .2)
        self.selectFrame.setTransparency(1)
        self.selectFrame.hide()

        #Set up our line segmants for a border
        ls = LineSegs()
        ls.moveTo(0, 0, 0)
        ls.drawTo(1, 0, 0)
        ls.drawTo(1, 0, 1)
        ls.drawTo(0, 0, 1)
        ls.drawTo(0, 0, 0)

        self.selectFrame.attachNewNode(ls.create())

        self.selected = []
        self.previousSelect = []
        self.selectable = []

        #Init our mouse locations
        self.pt2InitMousePos = (-1, -1)
        self.pt2LastMousePos = (-1, -1)
        self.fFovh, self.fFovv = base.camLens.getFov()

        self.fTimeLastUpdateRect = 0
        self.fTimeLastUpdateSelected = 0
        self.UpdateTimeRect = 0.015
        self.UpdateTimeSelected = 0.015

        print "Running Select Tools"

        self.accept("mouse1", self.OnStartSelect)
        self.accept("control-mouse1", self.OnStartSelect)
        self.accept("mouse1-up", self.OnMouseRelease)
        self.taskUpdateSelectRect = 0
示例#50
0
文件: geometry.py 项目: LBdN/labs
class Arc(NodePath):

    """NodePath class representing a wire arc."""

    def __init__(self, radius=1.0, numSegs=16, degrees=360, axis=Vec3(1, 0, 0), thickness=1.0, origin=Point3(0, 0, 0)):

        # Create line segments
        self.ls = LineSegs()
        self.ls.setThickness(thickness)

        # Get the points for an arc
        for p in GetPointsForArc(degrees, numSegs):

            # Draw the point rotated around the desired axis
            p = Point3(p[0], p[1], 0) - origin
            p = RotatePoint3(p, Vec3(0, 0, 1), axis)
            self.ls.drawTo(p * radius)

        # Init the node path, wrapping the lines
        node = self.ls.create()
        NodePath.__init__(self, node)
示例#51
0
def radioBTN(frame,
             bevel=.35,
             lineThick=2,
             color=(1, 1, 1, 1),
             brdrColor=(1, 1, 1, 1),
             BGColor=None):
    w = frame[1] - frame[0]
    h = frame[3] - frame[2]
    ls = LineSegs('off')
    ls.setThickness(lineThick)
    if brdrColor != 'transparent':
        ls.setColor(brdrColor)
        bevelBox(ls, frame, bevel)
    else:
        ls.setColor(color)
    diamond(ls, (frame[0] + h / 4, frame[0] + 3 * h / 4, frame[2] + h / 4,
                 frame[3] - h / 4))
    a = ls.create()
    if BGColor:
        fill(bevelBox, frame, BGColor, lineThick,
             bevel).reparentTo(NodePath(a))
    return a
示例#52
0
 def __init__(self):
     points = []
     points.append(Point3(-0.001, -0.001, -0.001))
     points.append(Point3(-0.001, -0.001, 1.001))
     
     # Vert front right
     points.append(Point3(1.001, -0.001, -0.001))
     points.append(Point3(1.001, -0.001, 1.001))
     
     # Vert back right
     points.append(Point3(1.001, 1.001, -0.001))
     points.append(Point3(1.001, 1.001, 1.001))
     
     # Vert back left
     points.append(Point3(-0.001, 1.001, -0.001))
     points.append(Point3(-0.001, 1.001, 1.001))
     
     segs = LineSegs( ) 
     segs.setThickness( 5.0 ) 
     segs.setColor( Vec4(1,1,1,1) ) 
     
     self.DrawLine(segs, points, 0, 1)
     self.DrawLine(segs, points, 2, 3)
     self.DrawLine(segs, points, 4, 5)
     self.DrawLine(segs, points, 6, 7)
     
     self.DrawLine(segs, points, 0, 2)
     self.DrawLine(segs, points, 1, 3)
     self.DrawLine(segs, points, 4, 6)
     self.DrawLine(segs, points, 5, 7)
     
     self.DrawLine(segs, points, 0, 6)
     self.DrawLine(segs, points, 1, 7)
     self.DrawLine(segs, points, 2, 4)
     self.DrawLine(segs, points, 3, 5)
     
     self.selectionGeom = render.attachNewNode(segs.create())
     self.selectionGeom.setLightOff()
示例#53
0
文件: marquee.py 项目: LBdN/labs
    def __init__( self, name, colour=(1, 1, 1, .2) ):
        p3d.Object.__init__( self, name )

        # Create a card maker
        cm = CardMaker( self.name )
        cm.setFrame( 0, 1, 0, 1 )
        # Init the node path, wrapping the card maker to make a rectangle
        NodePath.__init__( self, cm.generate() )
        self.setColor( colour )
        self.setTransparency( 1 )
        self.reparentTo( render2d )
        self.hide()
        # Create the rectangle border
        ls = LineSegs()
        ls.moveTo( 0, 0, 0 )
        ls.drawTo( 1, 0, 0 )
        ls.drawTo( 1, 0, 1 )
        ls.drawTo( 0, 0, 1 )
        ls.drawTo( 0, 0, 0 )
        # Attach border to rectangle
        self.attachNewNode( ls.create() )
        #==
        self.started = False
示例#54
0
文件: geometry.py 项目: LBdN/labs
class Square(NodePath):

    """NodePath class representing a wire square."""

    def __init__(self, width=1, height=1, axis=Vec3(1, 0, 0), thickness=1.0, origin=Point3(0, 0, 0)):

        # Create line segments
        self.ls = LineSegs()
        self.ls.setThickness(thickness)

        # Get the points for an arc
        points = GetPointsForSquare(width, height)
        points.append(points[0])
        for p in points:

            # Draw the point rotated around the desired axis
            p = Point3(p[0], p[1], 0) - origin
            p = RotatePoint3(p, Vec3(0, 0, 1), axis)
            self.ls.drawTo(p)

        # Init the node path, wrapping the lines
        node = self.ls.create()
        NodePath.__init__(self, node)
示例#55
0
def checkBox(frame,
             bevel=.35,
             lineThick=2,
             color=(1, 1, 1, 1),
             brdrColor=(1, 1, 1, 1),
             BGColor=None):
    w = frame[1] - frame[0]
    h = frame[3] - frame[2]
    ls = LineSegs('off')
    ls.setThickness(lineThick)
    if brdrColor != 'transparent':
        ls.setColor(brdrColor)
        bevelBox(ls, frame, bevel)
    else:
        ls.setColor(color)
    hoff = min(2 * bevel, h / 4)
    rect(ls, (frame[0] + hoff, frame[0] + hoff + h / 2, frame[2] + h / 4,
              frame[3] - h / 4))
    a = ls.create()
    if BGColor:
        fill(bevelBox, frame, BGColor, lineThick,
             bevel).reparentTo(NodePath(a))
    return a
示例#56
0
 def createRainDrop(self, x=0, y=0, doubleDrop=False, tripleDrop=False):
     # Set up line geometry for rain.
     id = str(uuid.uuid4())
     dummy = NodePath('dummy'+id)
     lineSegs = LineSegs('line'+id)
     if self.tripleDrop:
         lineSegs.setThickness(3.0)
     elif self.doubleDrop:
         lineSegs.setThickness(2.0)
     else:
         lineSegs.setThickness(1.0)
     lineSegs.moveTo(0, 0, 0)
     lineSegs.drawTo(0, 0, self.deltaZ*.1)
     lineGeomNode = lineSegs.create()
     # True: gray; False: white and red.
     if True:
         lineSegs.setVertexColor(0, Vec4(1, 1, 1, .4))
         lineSegs.setVertexColor(1, Vec4(.3, .3, .3, 0))
         pass
     else:
         lineSegs.setVertexColor(0, Vec4(1, 1, 1, .4))
         lineSegs.setVertexColor(1, Vec4(1, 0, 0, 1))
     linePath = dummy.attachNewNode(lineGeomNode)
     linePath.setTransparency(True)
     linePath.reparentTo(render)
     # Add collision node with 'FROM' tag = 'rain'
     pickerNode = CollisionNode('linecnode'+id)
     pickerNode.setTag('FROM', 'rain')
     rayCollider = linePath.attachNewNode(pickerNode)
     # A small collision sphere is attached to the bottom of each rain drop.
     rayCollider.node().addSolid(CollisionSphere(0, 0, 0, .25))
     #base.cTrav.addCollider(rayCollider, collisionHandler)
     # Sequence rain
     Sequence(
         LerpPosInterval(linePath, self.dropDuration, Point3(x, y, self.pt1.z), Point3(x, y, self.pt2.z), blendType='easeIn', fluid=1),
         Parallel(Func(dummy.removeNode), Func(linePath.removeNode))
     ).start()
示例#57
0
    def initRaceMode(self):
        self.mapScene = base.a2dTopRight.attachNewNode('MapScene')
        self.mapScene.setPos(-0.2, 0, -0.2)
        self.mapScene.setScale(0.25, 0.001, 0.25)
        maxT = self.race.curve.getMaxT()
        pt = Vec3(0, 0, 0)
        ls = LineSegs('MapLines')
        ls.setColor(1, 1, 1, 1)
        ls.setThickness(2)
        for x in xrange(101):
            self.race.curve.getPoint(x / 100.0 * maxT, pt)
            if x == 0:
                ls.moveTo(pt[0], pt[1], pt[2])
            else:
                ls.drawTo(pt[0], pt[1], pt[2])

        self.mapLines = self.mapScene.attachNewNode(ls.create())
        self.mapLines.setScale(0.00025 * RaceGlobals.TrackDict[self.race.trackId][6])
        self.mapLines.setP(90)
        self.faceStartPos = Vec3(-0.8, 0, 0.93)
        self.faceEndPos = Vec3(0.8, 0, 0.93)
        self.placeLabelNum = DirectLabel(relief=None, pos=TTLocalizer.RGUIplaceLabelNumPos, text='1', text_scale=0.35, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont())
        self.placeLabelNum.reparentTo(base.a2dBottomLeft)
        self.directObjList.append(self.placeLabelNum)
        self.placeLabelStr = DirectLabel(relief=None, pos=TTLocalizer.RGUIplaceLabelStrPos, text=TTLocalizer.KartRace_FirstSuffix, text_scale=0.1, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont())
        self.placeLabelStr.reparentTo(base.a2dBottomLeft)
        self.directObjList.append(self.placeLabelStr)
        self.lapLabel = DirectLabel(relief=None, pos=(-0.22, 0, -0.5), text='1/' + str(self.race.lapCount), text_scale=0.1, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont())
        self.lapLabel.reparentTo(base.a2dTopRight)
        self.directObjList.append(self.lapLabel)
        self.photoFinishLabel = DirectLabel(relief=None, pos=(0, 0, -0.1), text=TTLocalizer.KartRace_PhotoFinish, text_scale=TTLocalizer.RGUIphotoFinish, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont())
        self.photoFinishLabel.hide()
        self.directObjList.append(self.photoFinishLabel)
        self.wrongWayLabel = DirectLabel(relief=None, pos=(-0.22, 0, -0.2), text=TTLocalizer.KartRace_WrongWay, text_scale=0.1, text_fg=(0.95, 0, 0, 1), text_font=ToontownGlobals.getSignFont())
        self.wrongWayLabel.reparentTo(base.a2dTopRight)
        self.directObjList.append(self.wrongWayLabel)
        self.wrongWayLabel.setColorScale(Vec4(1, 1, 1, 0))
        self.wrongWaySeq = Sequence(self.wrongWayLabel.colorScaleInterval(0.25, colorScale=Vec4(1, 1, 1, 1), startColorScale=Vec4(1, 1, 1, 0)), self.wrongWayLabel.colorScaleInterval(0.25, colorScale=Vec4(1, 1, 1, 0), startColorScale=Vec4(1, 1, 1, 1)))
        interpolateFacePos = lambda x: self.faceStartPos * (1.0 - x) + self.faceEndPos * x
        self.timeLabels = []
        for x in xrange(self.race.lapCount):
            minLabel = DirectLabel(relief=None, pos=(interpolateFacePos((2.0 * x + 1) / (self.race.lapCount * 2))[0] - 0.06, 0, 0.84), text="0'", text_scale=0.06, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ARight)
            minLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(minLabel)
            secLabel = DirectLabel(relief=None, pos=(interpolateFacePos((2.0 * x + 1) / (self.race.lapCount * 2))[0] + 0.06, 0, 0.84), text="00''", text_scale=0.06, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ARight)
            secLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(secLabel)
            fractionLabel = DirectLabel(relief=None, pos=(interpolateFacePos((2.0 * x + 1) / (self.race.lapCount * 2))[0] + 0.14, 0, 0.84), text='00', text_scale=0.06, text_fg=(0.95, 0.95, 0, 1), text_font=ToontownGlobals.getSignFont(), text_align=TextNode.ARight)
            fractionLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(fractionLabel)
            self.timeLabels.append((minLabel, secLabel, fractionLabel))

        self.cardMaker.reset()
        self.cardMaker.setName('GagIndicator')
        self.cardMaker.setFrame(-0.5, 0.5, -0.5, 0.5)
        self.cardMaker.setColor(1, 1, 1, 1)
        self.gagPanel = DirectFrame(parent=base.a2dBottomLeft, relief=None, image=loader.loadModel('phase_6/models/karting/gag_panel'), image_scale=0.25, pos=(0.2, 0, 0.55))
        self.directObjList.append(self.gagPanel)
        self.gag = self.gagPanel.attachNewNode('gag')
        self.gag.setScale(0.2)
        for gag in self.gagTextures:
            gag.reparentTo(self.gag)
            gag.hide()

        self.cardMaker.reset()
        self.cardMaker.setName('RaceProgressLine')
        self.cardMaker.setFrame(-0.5, 0.5, -0.5, 0.5)
        line = self.raceModeRoot.attachNewNode(self.cardMaker.generate())
        line.setScale(self.faceEndPos[0] - self.faceStartPos[0], 1, 0.01)
        line.setPos(0, 0, self.faceStartPos[2])
        self.cardMaker.setName('RaceProgressLineHash')
        for n in xrange(self.race.lapCount + 1):
            hash = self.raceModeRoot.attachNewNode(self.cardMaker.generate())
            hash.setScale(line.getScale()[2], 1, line.getScale()[2] * 5)
            t = float(n) / self.race.lapCount
            hash.setPos(self.faceStartPos[0] * (1 - t) + self.faceEndPos[0] * t, self.faceStartPos[1], self.faceStartPos[2])

        self.raceModeReady = True
        self.disable()
        return
class GolfScoreBoard:
    notify = directNotify.newCategory('GolfScoreBoard')

    def __init__(self, golfCourse):
        self.golfCourse = golfCourse
        self.numPlayas = len(golfCourse.avIdList)
        self.avIdList = golfCourse.avIdList
        self.playaTags = []
        self.scoreTags = []
        self.totalTags = []
        self.scoreLabels = []
        self.holeLabels = []
        self.parLabels = []
        self.numExited = 0
        self.setup()

    def setup(self):
        self.scoreboard = DirectFrame(
            parent=aspect2d,
            relief=None,
            geom=DGG.getDefaultDialogGeom(),
            geom_color=ToontownGlobals.GlobalDialogColor,
            geom_scale=(1.9, 1, 1.05),
            pos=(0, 0, 0.375))
        self.lines = LineSegs()
        self.lines.setColor(0, 0, 0, 1)
        self.lines.setThickness(2)
        guiModel = loader.loadModel('phase_6/models/golf/golf_gui')
        highlight = loader.loadModel('phase_6/models/golf/headPanel')
        self.maximizeB = DirectButton(
            parent=base.a2dBottomRight,
            pos=(-0.15, 0, 0.15),
            relief=None,
            state=DGG.NORMAL,
            image=(guiModel.find('**/score_card_icon'),
                   guiModel.find('**/score_card_icon_rollover'),
                   guiModel.find('**/score_card_icon_rollover')),
            image_scale=(0.2, 1, 0.2),
            command=self.showBoard)
        self.vertOffset = 0.13
        self.playaTop = 0.12
        horzOffset = 0.12
        holeTop = 0.3
        self.vCenter = 0.025
        totScore = 0
        totPar = 0
        self.lineVStart = -0.465
        self.lineHStart = 0.17
        self.lineHorOffset = 0.13
        self.lineVertOffset = 0.125
        self.lineVCenter = 0.025
        buttons = loader.loadModel('phase_3/models/gui/dialog_box_buttons_gui')
        self.minimizeB = DirectButton(
            parent=self.scoreboard,
            pos=(0, 0, self.lineHStart - 0.59),
            relief=None,
            state=DGG.NORMAL,
            image=(buttons.find('**/CloseBtn_UP'),
                   buttons.find('**/CloseBtn_DN'),
                   buttons.find('**/CloseBtn_Rllvr')),
            image_scale=(1, 1, 1),
            command=self.hideBoard,
            extraArgs=[None])
        self.exitCourseB = DirectButton(
            parent=self.scoreboard,
            pos=(0, 0, self.lineHStart - 0.59),
            relief=None,
            state=DGG.NORMAL,
            image=(buttons.find('**/CloseBtn_UP'),
                   buttons.find('**/CloseBtn_DN'),
                   buttons.find('**/CloseBtn_Rllvr')),
            image_scale=(1, 1, 1),
            text=TTLocalizer.GolfExitCourse,
            text_scale=0.04,
            text_pos=TTLocalizer.GSBexitCourseBPos,
            command=self.exitCourse)
        self.exitCourseB.hide()
        self.highlightCur = DirectLabel(parent=self.scoreboard,
                                        relief=None,
                                        pos=(-0.003, 0, 0.038),
                                        image=highlight,
                                        image_scale=(1.82, 1, 0.135))
        self.titleBar = DirectLabel(parent=self.scoreboard,
                                    relief=None,
                                    pos=(-0.003, 0, 0.166),
                                    color=(0.7, 0.7, 0.7, 0.3),
                                    image=highlight,
                                    image_scale=(1.82, 1, 0.195))
        self.titleBar.show()
        self.highlightCur.show()
        buttons.removeNode()
        guiModel.removeNode()
        title = GolfGlobals.getCourseName(
            self.golfCourse.courseId) + ' - ' + GolfGlobals.getHoleName(
                self.golfCourse.holeIds[self.golfCourse.curHoleIndex])
        self.titleLabel = DirectLabel(parent=self.scoreboard,
                                      relief=None,
                                      pos=(0, 0, holeTop + 0.1),
                                      text_align=TextNode.ACenter,
                                      text=title,
                                      text_scale=TTLocalizer.GSBtitleLabel,
                                      text_font=ToontownGlobals.getSignFont(),
                                      text_fg=(0, 0.5, 0.125, 1))
        self.playaLabel = DirectLabel(
            parent=self.scoreboard,
            relief=None,
            pos=(self.lineVStart - 0.23, 0, holeTop),
            text_align=TextNode.ACenter,
            text=TTLocalizer.GolfHole,
            text_font=ToontownGlobals.getMinnieFont(),
            text_scale=0.05)
        for holeLIndex in xrange(self.golfCourse.numHoles):
            holeLabel = DirectLabel(parent=self.scoreboard,
                                    relief=None,
                                    pos=(self.lineVStart + 0.055 +
                                         horzOffset * holeLIndex, 0, holeTop),
                                    text_align=TextNode.ACenter,
                                    text='%s' % (holeLIndex + 1),
                                    text_scale=0.05)
            self.holeLabels.append(holeLabel)

        self.totalLabel = DirectLabel(
            parent=self.scoreboard,
            relief=None,
            pos=(self.lineVStart + 0.1 + horzOffset * 9.5, 0, holeTop),
            text_align=TextNode.ACenter,
            text=TTLocalizer.GolfTotal,
            text_font=ToontownGlobals.getMinnieFont(),
            text_scale=0.05)
        self.parTitleLabel = DirectLabel(
            parent=self.scoreboard,
            relief=None,
            pos=(self.lineVStart - 0.23, 0, holeTop - 0.1),
            text_align=TextNode.ACenter,
            text=TTLocalizer.GolfPar,
            text_font=ToontownGlobals.getMinnieFont(),
            text_scale=0.05)
        for parHoleIndex in xrange(self.golfCourse.numHoles):
            parLabel = DirectLabel(
                parent=self.scoreboard,
                relief=None,
                pos=(self.lineVStart + 0.055 + horzOffset * parHoleIndex, 0,
                     holeTop - 0.1),
                text_align=TextNode.ACenter,
                text='%s' % GolfGlobals.HoleInfo[
                    self.golfCourse.holeIds[parHoleIndex]]['par'],
                text_scale=0.05,
                text_wordwrap=10)
            totPar = totPar + GolfGlobals.HoleInfo[
                self.golfCourse.holeIds[parHoleIndex]]['par']
            self.parLabels.append(parLabel)

        parLabel = DirectLabel(parent=self.scoreboard,
                               relief=None,
                               pos=(self.lineVStart + 0.1 + horzOffset * 9.5,
                                    0, holeTop - 0.1),
                               text_align=TextNode.ACenter,
                               text='%s' % totPar,
                               text_scale=0.05,
                               text_wordwrap=10)
        self.parLabels.append(parLabel)
        vert = 0.0
        self.numPlayas = len(self.golfCourse.avIdList)
        for playaIndex in xrange(self.numPlayas):
            name = TTLocalizer.GolfUnknownPlayer
            av = base.cr.doId2do.get(self.golfCourse.avIdList[playaIndex])
            if av:
                name = av.getName()
            playaLabel = DirectLabel(parent=self.scoreboard,
                                     relief=None,
                                     text_align=TextNode.ACenter,
                                     text=name,
                                     text_scale=0.05,
                                     text_wordwrap=9)
            self.playaTags.append(playaLabel)
            textN = playaLabel.component(playaLabel.components()[0])
            if type(textN) == OnscreenText:
                try:
                    if textN.textNode.getWordwrappedWtext() != name:
                        vert = self.playaTop - self.vertOffset * playaIndex
                    else:
                        vert = self.playaTop - self.vertOffset * playaIndex - self.vCenter
                except:
                    vert = self.playaTop - self.vertOffset * playaIndex

            self.playaTags[playaIndex].setPos(self.lineVStart - 0.23, 0, vert)
            self.notify.debug('self.text height = %f' %
                              self.playaTags[playaIndex].getHeight())
            holeIndex = 0
            for holeIndex in xrange(self.golfCourse.numHoles):
                holeLabel = DirectLabel(
                    parent=self.scoreboard,
                    relief=None,
                    pos=(self.lineVStart + 0.055 + horzOffset * holeIndex, 0,
                         self.playaTop - self.vertOffset * playaIndex -
                         self.vCenter),
                    text_align=TextNode.ACenter,
                    text='-',
                    text_scale=0.05,
                    text_wordwrap=10)
                self.scoreTags.append(holeLabel)

            holeLabel = DirectLabel(
                parent=self.scoreboard,
                relief=None,
                pos=(self.lineVStart + 0.1 + horzOffset * 9.5, 0,
                     self.playaTop - self.vertOffset * playaIndex -
                     self.vCenter),
                text_align=TextNode.ACenter,
                text='-',
                text_scale=0.05,
                text_wordwrap=10)
            self.totalTags.append(holeLabel)

        self.lines.moveTo(self.lineVStart - 0.45, 0, self.lineHStart + 0.19)
        self.lines.drawTo(self.lineVStart + 11 * self.lineVertOffset, 0,
                          self.lineHStart + 0.19)
        self.lines.moveTo(self.lineVStart - 0.45, 0, self.lineHStart + 0.09)
        self.lines.drawTo(self.lineVStart + 11 * self.lineVertOffset, 0,
                          self.lineHStart + 0.09)
        self.lines.moveTo(self.lineVStart - 0.45, 0, self.lineHStart)
        self.lines.drawTo(self.lineVStart + 11 * self.lineVertOffset, 0,
                          self.lineHStart)
        self.lines.moveTo(self.lineVStart - 0.45, 0, self.lineHStart + 0.19)
        self.lines.drawTo(self.lineVStart - 0.45, 0,
                          self.lineHStart - 4 * 0.13)
        self.lines.moveTo(self.lineVStart, 0, self.lineHStart + 0.19)
        self.lines.drawTo(self.lineVStart, 0, self.lineHStart - 4 * 0.13)
        for x in xrange(4):
            self.lines.moveTo(self.lineVStart - 0.45, 0,
                              self.lineHStart - (x + 1) * self.lineHorOffset)
            self.lines.drawTo(
                self.lineVStart + 11 * self.lineVertOffset + 0.005, 0,
                self.lineHStart - (x + 1) * self.lineHorOffset)

        for y in xrange(10):
            self.lines.moveTo(self.lineVStart + y * self.lineVertOffset, 0,
                              self.lineHStart + 0.19)
            self.lines.drawTo(self.lineVStart + y * self.lineVertOffset, 0,
                              self.lineHStart - 4 * 0.13)

        self.lines.moveTo(self.lineVStart + 11 * self.lineVertOffset, 0,
                          self.lineHStart + 0.19)
        self.lines.drawTo(self.lineVStart + 11 * self.lineVertOffset, 0,
                          self.lineHStart - 4 * 0.13)
        self.scoreboard.attachNewNode(self.lines.create())
        self.hide()
        return

    def getScoreLabel(self, avIdorIndex, holeNum):
        index = None
        if avIdorIndex < 100:
            index = avIdorIndex
        else:
            for playaIndex in xrange(self.numPlayas):
                if self.golfCourse.avIdList[playaIndex] == avIdorIndex:
                    index = playaIndex

        return self.scoreTags[index * self.golfCourse.numHoles + holeNum]

    def update(self):
        self.showBoard()
        taskMgr.doMethodLater(AUTO_HIDE_TIMEOUT, self.hideBoard,
                              'hide score board')

    def hideBoard(self, task):
        self.hide()

    def hide(self):
        self.scoreboard.hide()
        self.maximizeB.show()

    def showBoardFinal(self, task=None):
        self.exitCourseB.show()
        self.minimizeB.hide()
        self.showBoard()

    def showBoard(self, task=None):
        scoreDict = self.golfCourse.scores
        x = 0
        currentGolfer = self.golfCourse.getCurGolfer()
        for playaIndex in xrange(self.numPlayas):
            if self.golfCourse.isGameDone():
                self.playaTags[playaIndex].setColor(0, 0, 0, 1)
            elif currentGolfer == self.golfCourse.avIdList[playaIndex]:
                self.highlightCur.setColor(
                    *GolfGlobals.PlayerColors[playaIndex])
                self.highlightCur.setAlphaScale(0.4)
                self.highlightCur.setPos(
                    -0.003, 0,
                    0.038 - playaIndex * (self.lineVertOffset + 0.005))
                self.highlightCur.show()
            else:
                self.playaTags[playaIndex].setColor(0, 0, 0, 1)

        for avId in self.avIdList:
            holeIndex = 0
            totScore = 0
            playerExited = False
            for y in xrange(len(self.golfCourse.exitedAvIdList)):
                if self.golfCourse.exitedAvIdList[y] == avId:
                    self.playaTags[x].setColor(0.7, 0.7, 0.7, 1)
                    holeIndex = 0
                    for holeIndex in xrange(self.golfCourse.numHoles):
                        self.getScoreLabel(self.avIdList[x],
                                           holeIndex).setColor(
                                               0.7, 0.7, 0.7, 1)

                    self.totalTags[x].setColor(0.7, 0.7, 0.7, 1)
                    playerExited = True

            if playerExited == False:
                for holeIndex in xrange(self.golfCourse.numHoles):
                    if holeIndex <= self.golfCourse.curHoleIndex:
                        self.getScoreLabel(
                            avId, holeIndex
                        )['text'] = '%s' % scoreDict[avId][holeIndex]
                        totScore = totScore + scoreDict[avId][holeIndex]
                        if self.golfCourse.isGameDone() == False:
                            if holeIndex == self.golfCourse.curHoleIndex:
                                self.getScoreLabel(avId, holeIndex).setColor(
                                    1, 0, 0, 1)
                                self.holeLabels[holeIndex].setColor(1, 0, 0, 1)
                                self.parLabels[holeIndex].setColor(1, 0, 0, 1)
                                title = GolfGlobals.getCourseName(
                                    self.golfCourse.courseId
                                ) + ' - ' + GolfGlobals.getHoleName(
                                    self.golfCourse.holeIds[
                                        self.golfCourse.curHoleIndex])
                                self.titleLabel['text'] = title
                            else:
                                self.getScoreLabel(avId, holeIndex).setColor(
                                    0, 0, 0, 1)
                                self.holeLabels[holeIndex].setColor(0, 0, 0, 1)
                                self.parLabels[holeIndex].setColor(0, 0, 0, 1)

                self.totalTags[x]['text'] = '%s' % totScore
            if self.golfCourse.isGameDone():
                self.getScoreLabel(avId,
                                   self.golfCourse.numHoles - 1).setColor(
                                       0, 0, 0, 1)
                self.totalTags[x].setColor(1, 0, 0, 1)
            x = x + 1

        y = 0
        if self.golfCourse.isGameDone():
            self.parLabels[self.golfCourse.numHoles - 1].setColor(0, 0, 0, 1)
            self.holeLabels[self.golfCourse.numHoles - 1].setColor(0, 0, 0, 1)
            self.parLabels[self.golfCourse.numHoles].setColor(1, 0, 0, 1)
            self.totalLabel.setColor(1, 0, 0, 1)
        self.scoreboard.show()
        self.maximizeB.hide()

    def exitCourse(self):
        course = self.golfCourse
        self.delete()
        course.exitEarly()

    def delete(self):
        if self.maximizeB:
            self.maximizeB.destroy()
        self.maximizeB = None
        if self.scoreboard:
            self.scoreboard.destroy()
        self.scoreboard = None
        self.golfCourse = None
        taskMgr.remove('hide score board')
        return
    def initRaceMode(self):
        self.mapScene = self.raceModeRoot.attachNewNode('MapScene')
        self.mapScene.setPos(1.1, 0, 0.75)
        self.mapScene.setScale(0.25, 0.001, 0.25)
        maxT = self.race.curve.getMaxT()
        pt = Vec3(0, 0, 0)
        ls = LineSegs('MapLines')
        ls.setColor(1, 1, 1, 1)
        ls.setThickness(2)
        for x in range(101):
            self.race.curve.getPoint(x / 100.0 * maxT, pt)
            if x == 0:
                ls.moveTo(pt[0], pt[1], pt[2])
            else:
                ls.drawTo(pt[0], pt[1], pt[2])

        self.mapLines = self.mapScene.attachNewNode(ls.create())
        self.mapLines.setScale(0.00025 *
                               RaceGlobals.TrackDict[self.race.trackId][6])
        self.mapLines.setP(90)
        self.faceStartPos = Vec3(-0.8, 0, 0.93)
        self.faceEndPos = Vec3(0.8, 0, 0.93)
        self.placeLabelNum = DirectLabel(
            relief=None,
            pos=TTLocalizer.RGUIplaceLabelNumPos,
            text='1',
            text_scale=0.35,
            text_fg=(0.95, 0.95, 0, 1),
            text_font=ToontownGlobals.getSignFont())
        self.placeLabelNum.reparentTo(self.raceModeRoot)
        self.directObjList.append(self.placeLabelNum)
        self.placeLabelStr = DirectLabel(
            relief=None,
            pos=TTLocalizer.RGUIplaceLabelStrPos,
            text=TTLocalizer.KartRace_FirstSuffix,
            text_scale=0.1,
            text_fg=(0.95, 0.95, 0, 1),
            text_font=ToontownGlobals.getSignFont())
        self.placeLabelStr.reparentTo(self.raceModeRoot)
        self.directObjList.append(self.placeLabelStr)
        self.lapLabel = DirectLabel(relief=None,
                                    pos=(1.1, 0, 0.45),
                                    text='1/' + str(self.race.lapCount),
                                    text_scale=0.1,
                                    text_fg=(0.95, 0.95, 0, 1),
                                    text_font=ToontownGlobals.getSignFont())
        self.lapLabel.reparentTo(self.raceModeRoot)
        self.directObjList.append(self.lapLabel)
        self.photoFinishLabel = DirectLabel(
            relief=None,
            pos=(0, 0, -0.1),
            text=TTLocalizer.KartRace_PhotoFinish,
            text_scale=TTLocalizer.RGUIphotoFinish,
            text_fg=(0.95, 0.95, 0, 1),
            text_font=ToontownGlobals.getSignFont())
        self.photoFinishLabel.hide()
        self.directObjList.append(self.photoFinishLabel)
        self.wrongWayLabel = DirectLabel(
            relief=None,
            pos=(1.1, 0, 0.85),
            text=TTLocalizer.KartRace_WrongWay,
            text_scale=0.1,
            text_fg=(0.95, 0, 0, 1),
            text_font=ToontownGlobals.getSignFont())
        self.wrongWayLabel.reparentTo(self.raceModeRoot)
        self.directObjList.append(self.wrongWayLabel)
        self.wrongWayLabel.setColorScale(Vec4(1, 1, 1, 0))
        self.wrongWaySeq = Sequence(
            self.wrongWayLabel.colorScaleInterval(0.25,
                                                  colorScale=Vec4(1, 1, 1, 1),
                                                  startColorScale=Vec4(
                                                      1, 1, 1, 0)),
            self.wrongWayLabel.colorScaleInterval(0.25,
                                                  colorScale=Vec4(1, 1, 1, 0),
                                                  startColorScale=Vec4(
                                                      1, 1, 1, 1)))
        interpolateFacePos = lambda x: self.faceStartPos * (
            1.0 - x) + self.faceEndPos * x
        self.timeLabels = []
        for x in range(self.race.lapCount):
            minLabel = DirectLabel(
                relief=None,
                pos=(interpolateFacePos(
                    (2.0 * x + 1) / (self.race.lapCount * 2))[0] - 0.06, 0,
                     0.84),
                text="0'",
                text_scale=0.06,
                text_fg=(0.95, 0.95, 0, 1),
                text_font=ToontownGlobals.getSignFont(),
                text_align=TextNode.ARight)
            minLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(minLabel)
            secLabel = DirectLabel(
                relief=None,
                pos=(interpolateFacePos(
                    (2.0 * x + 1) / (self.race.lapCount * 2))[0] + 0.06, 0,
                     0.84),
                text="00''",
                text_scale=0.06,
                text_fg=(0.95, 0.95, 0, 1),
                text_font=ToontownGlobals.getSignFont(),
                text_align=TextNode.ARight)
            secLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(secLabel)
            fractionLabel = DirectLabel(
                relief=None,
                pos=(interpolateFacePos(
                    (2.0 * x + 1) / (self.race.lapCount * 2))[0] + 0.14, 0,
                     0.84),
                text='00',
                text_scale=0.06,
                text_fg=(0.95, 0.95, 0, 1),
                text_font=ToontownGlobals.getSignFont(),
                text_align=TextNode.ARight)
            fractionLabel.reparentTo(self.raceModeRoot)
            self.directObjList.append(fractionLabel)
            self.timeLabels.append((minLabel, secLabel, fractionLabel))

        self.cardMaker.reset()
        self.cardMaker.setName('GagIndicator')
        self.cardMaker.setFrame(-0.5, 0.5, -0.5, 0.5)
        self.cardMaker.setColor(1, 1, 1, 1)
        self.gagPanel = DirectFrame(
            parent=self.raceModeRoot,
            relief=None,
            image=loader.loadModel('phase_6/models/karting/gag_panel'),
            image_scale=0.25,
            pos=(-1.13, 0, -0.5))
        self.directObjList.append(self.gagPanel)
        self.gag = self.gagPanel.attachNewNode('gag')
        self.gag.setScale(0.2)
        for gag in self.gagTextures:
            gag.reparentTo(self.gag)
            gag.hide()

        self.cardMaker.reset()
        self.cardMaker.setName('RaceProgressLine')
        self.cardMaker.setFrame(-0.5, 0.5, -0.5, 0.5)
        line = self.raceModeRoot.attachNewNode(self.cardMaker.generate())
        line.setScale(self.faceEndPos[0] - self.faceStartPos[0], 1, 0.01)
        line.setPos(0, 0, self.faceStartPos[2])
        self.cardMaker.setName('RaceProgressLineHash')
        for n in range(self.race.lapCount + 1):
            hash = self.raceModeRoot.attachNewNode(self.cardMaker.generate())
            hash.setScale(line.getScale()[2], 1, line.getScale()[2] * 5)
            t = float(n) / self.race.lapCount
            hash.setPos(
                self.faceStartPos[0] * (1 - t) + self.faceEndPos[0] * t,
                self.faceStartPos[1], self.faceStartPos[2])

        self.raceModeReady = True
        self.disable()
        return