[ create a new paste ] login | about

Link: http://codepad.org/WF4mrXxr    [ raw code | fork ]

Python, pasted on Aug 30:
class HUD:
    def __init__(self,cockpitno):
        self.open_scans =[list(),list(),list()]
        self.radiotexts = []
        
        parser = importer.DesReader("VFX/COCKPIT/" + cockpitno + ".DES")
        
        bar1,hor1 = self.parser_horizon_point_list(parser,"UP")
        bar2,hor2 = self.parser_horizon_point_list(parser,"DN")
        self.horizon    = (aspect2d.attachNewNode(hor1),aspect2d.attachNewNode(hor2))
        self.pitchbar   = (aspect2d.attachNewNode(bar1),aspect2d.attachNewNode(bar2))

        self.horizon[0].hide()
        self.horizon[1].hide()
        self.pitchbar[0].hide()
        self.pitchbar[1].hide()
        
        pal = importer.importPalette("GFX/PAL/GUI/BORDER.PAL")
        self.bg = addEmpty(color=(0,0,0,0))
        addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDTARG.IMG", pal), 320, 240, "MidCenter")
        
        x1      = parser.getint("HUDHeading","X1")
        y1      = parser.getint("HUDHeading","Y1")
        width   = parser.getint("HUDHeading","Width")
        height  = parser.getint("HUDHeading","Height")
        headimg = importer.importTexture("GFX/IMG/COCKPIT/HUDHEAD.IMG", pal)

        pnm1 = PNMImage()
        pnm2 = PNMImage(int(headimg.getXSize() * (360 / 420.0)+0.5),headimg.getYSize())#
        headimg.store(pnm1)
        pnm2.addAlpha()
        pnm2.copySubImage(pnm1,0,0,int(headimg.getXSize() * (60 / 420.0)+0.5))
        headimg.load(pnm2)
        
        addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDPOI4.IMG", pal), x1+width/2, y1+height, "TopCenter")
        self.heading    = addImage(self.bg, headimg, x1, y1, "TopLeft",width)#,height ignoring cus of scaling probs
        self.scan       = (addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDSCNAG.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDSCNAB.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDSCNAR.IMG", pal), 0, 0, "MidCenter"))
        self.targeting  = (addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDLOCAG.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDLOCAA.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDLOCAR.IMG", pal), 0, 0, "MidCenter"))
        self.targetarrow= (addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDARRU.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDARRR.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDARRD.IMG", pal), 0, 0, "MidCenter"),
                           addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDARRL.IMG", pal), 0, 0, "MidCenter"))
        self.targethp   = [addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDINTE%d.IMG"%x, pal), 0, 0, "MidCenter") for x in range(10)]
        self.targetep   = [addImage(self.bg, importer.importTexture("GFX/IMG/COCKPIT/HUDEEMP%d.IMG"%x, pal), 0, 0, "MidCenter") for x in range(10)]

        
        for x in self.scan:
            x.hide()
        
    def promp_radio_message(self,message):
        font = importer.Font("GFX/FNT/DPSMAMON.FNT")
        
        if message[0][0] == '#':
            text    = message[0][1:]
            color   = 0xFFFF0000
        else:
            text    = message[0]
            color   = 0xFF00FF00
        img1    = font.renderText(text,color=color)
        element = addImage(self.bg, img1, 320, 350 + len(self.radiotexts) * 15, "TopCenter")
        self.radiotexts.append(element)
        taskMgr.doMethodLater(5,self._remove_radio_text,"radio text destroyer",[])
        print "radio message: ",message[0]
     
    def _remove_radio_text(self):
        self.radiotexts[0].destroy()
        self.radiotexts.remove(self.radiotexts[0])
        for e in self.radiotexts:
            x,y,z = e.getPos()
            e.setPos(x,y,z+15/240.0)
            
    def parser_horizon_point_list(self,parser,prefix):
        lines   = LineSegs()
        bar     = LineSegs()
        num_points = parser.getint("HUDSyntheticHorizon",prefix + "_NumOfPoints")
        bar.setColor((0,1,0,1))
        bar.setThickness(1)
        #hack cus i dont know how to parse the colors correctly
        color   = parser.getint("HUDSyntheticHorizon",prefix + "_Color0")
        r       = ((color & 0xFF0000) >> 16) / 255.0
        g       = ((color & 0x00FF00) >> 8) / 255.0
        b       = (color & 0x0000FF) / 255.0
        lines.setColor((r,b,g,1))
        
        for dir in (-1,1):
            x       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointX0")/320
            y       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointY0")/240
            bar.moveTo(dir*x,0,y)
            x       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointX1")/320
            y       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointY1")/240
            lines.moveTo(dir*x,0,y)
            bar.drawTo(dir*x,0,y)
            
            for no in range(2,num_points):
                no      = str(no)
                x       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointX"+no)/320
                y       = parser.getfloat("HUDSyntheticHorizon",prefix + "_PointY"+no)/240
                lines.drawTo(dir*x,0,y)
        
        return bar.create(),lines.create()
    
    def update(self,player,projections,attitudes):
        if player:
            h,p,r = player.props.main.getHpr()
            
            active      = p<=0
            deactive    = p>0
            
            self.pitchbar[deactive].hide()
            self.horizon[deactive].hide()
            
            self.pitchbar[active].show()
            self.pitchbar[active].setZ(p/1000.0)
            self.pitchbar[active].setR(r)
            self.horizon[active].show()
            self.horizon[active].setR(r)
            
            self.heading.setTexOffset(self.heading.findAllTextureStages()[0], -h/360.0, 0)
            
            for x in self.targeting:    x.hide()
            for x in self.targetep:     x.hide()
            for x in self.targethp:     x.hide()
            for x in self.targetarrow:  x.hide()
            #update the target symbol
            lock = player.get_target()
            if lock in projections:
                rel_hp,rel_ep = lock.getCurrentState()
                pos2d   = projections[lock]
                team    = lock.props.team
                group   = 2 if team != -1 and attitudes[8][team] == 2 else 0
                size    = self.targeting[group]["frameSize"]
                pos     = Vec3((pos2d[0]+1)*4/3+(size[0]-size[1])/2,0,pos2d[1]-1+(size[2]-size[3])/2)
                
                self.targeting[group].setPos(pos)
                self.targeting[group].show()
                pos[0] -= (size[0]-size[1])
                pos[0] += 0.02 #move the bars a bit lower to make it more suitable
                if rel_ep:
                    index = int((1.0-rel_ep)*9)
                    self.targetep[index].setPos(pos)
                    self.targetep[index].show()
                    size = self.targetep[index]["frameSize"]
                    pos[0] -= size[0]-size[1] + 0.02#some spaceing
                if rel_hp:
                    index = int((1.0-rel_hp)*9)
                    self.targethp[index].setPos(pos)
                    self.targethp[index].show()
                
            elif lock != None:
                vec = base.cam.getPos(lock.body)
                vec.normalize()
                #print vec
                
            #update scans symbols
            counts  = [0,0,0]
            sizes   = [x["frameSize"] for x in self.scan]
            for obj,pos2d in projections.items():
                if obj == lock:
                    continue
                team    = obj.props.team
                group   = 2 if team and attitudes[8][team] == 2 else 0
                index   = counts[group]
                size    = sizes[group]
                imgages = self.open_scans[group]
                if index == len(imgages):
                    self.open_scans[group].append(self.scan[group].copyTo(self.bg))
                imgages[index].setPos(Vec3((pos2d[0]+1)*4/3+(size[0]-size[1])/2,0,pos2d[1]-1+(size[2]-size[3])/2))
                imgages[index].show()
                counts[group] += 1
            #delete the unused scan symbols
            for i in range(len(counts)):
                con     = self.open_scans[i]
                index   = counts[i]
                if index != len(con):
                    for obj in con[index:]:
                        obj.remove()
                    self.open_scans[i] = self.open_scans[i][:index]


Create a new paste based on this one


Comments: