예제 #1
0
    def __init__(self):
        ShowBase.__init__(self)

        properties = WindowProperties()
        properties.setSize(1000, 750)
        self.win.requestProperties(properties)
        base.setBackgroundColor(0.5,1,0.5)
        self.textObject = OnscreenText(text ='shape-boi', pos = (0.925,0.925), scale = 0.075)

        #self.thread = threading.Thread(target=self.udpConnect)
        #self.thread2 = threading.Thread(target=self.runColorTrack)
        #self.connectButton = DirectButton(text=('Open Connection'),pos=(-0.3,0,-0.98), scale=0.090, command=self.openConnection, frameColor=(255,255,255,0.15))
        #self.trackButton = DirectButton(text=('Color Track'),pos=(-1,0,-0.98), scale=0.090, command=self.thread2.start,frameColor=(255,255,255,0.15),state=0)
        self.scoreUI = OnscreenText(text = "0",
                                    pos = (-1.3, 0.825),
                                    mayChange = True,
                                    align = TextNode.ALeft)


        #loader.loadModel("Models/Misc/environment")
        self.environment = loader.loadModel("MorgansModels/terst")
        self.environment.setPos(0,54,-3)
        self.environment.setH(90)
        self.environment.setP(0)
        nodePath = NodePath(self.environment)
        nodePath.setTransparency(TransparencyAttrib.MAlpha)
        nodePath.reparentTo(render)
        #render.setShaderAuto()

        ambientLight = AmbientLight("ambient light")
        ambientLight.setColor(Vec4(0.2, 0.2, 0.2, 1))
        self.ambientLightNodePath = render.attachNewNode(ambientLight)
        render.setLight(self.ambientLightNodePath)

        # In the body of your code
        mainLight = DirectionalLight("main light")
        self.mainLightNodePath = render.attachNewNode(mainLight)
        # Turn it around by 45 degrees, and tilt it down by 45 degrees
        self.mainLightNodePath.setHpr(45, -45, 0)
        render.setLight(self.mainLightNodePath)
예제 #2
0
 def handleInCollisions(self, entry):
     cogCollNames = ['coll_body', 'coll_crit']
     intoNode = entry.getIntoNodePath()
     fromNode = entry.getFromNodePath()
     if (self.called):
         return
     self.called = True
     splatColor = Vec4(0.7, 0.7, 0.8, 1.0)
     splatScale = 0.7
     if (intoNode.getName() in cogCollNames):
         cog = intoNode.getParent().getPythonTag('Cog')
         gag = fromNode.getParent().getPythonTag('Stats')
         splatColor = gag.getSplatColor()
         splatScale = gag.getSplatScale()
         if not cog.wasHit():
             cog.setHit(True)
             if (cog.getLevel() > 1):
                 exp = int(
                     math.ceil(float(cog.getLevel()) / 2.0) *
                     gag.getLevel())
             else:
                 exp = int(gag.getLevel())
             render.getPythonTag("LevelManager").addEXP(exp)
             dmg = gag.getDamageCurve()[0]
             if (intoNode.getName() == cogCollNames[1]):
                 dmg = (dmg * 2) * 0.4
             cog.setHealth(cog.getHealth() - int(dmg))
             if (cog.getHealth() <= 0):
                 maxHp = float((cog.getLevel() + 1) * (cog.getLevel() + 2))
                 if (cog.getHealth() <= (-1 * (maxHp * 0.2))):
                     h = cog.getCog().getHpr(fromNode.getParent()).getX()
                     if (h > 0 and h < 90 or h < 270 and h > 0):
                         cog.getCog().play('slip-backward')
                     else:
                         cog.getCog().play('slip-forward')
                 else:
                     cog.getCog().play('pie-small')
     SoundBank.getSound('pie_coll').play()
     Splat(fromNode.getParent().getPos(), splatColor, splatScale).generate()
     fromNode.getParent().removeNode()
    def _create_components(self):
        """ Internal method to init the widgets components """

        self._node.hide()

        # Create the texture where the gui component is rendered inside
        self._storage_tex = Image.create_2d("ExposureDisplay", 140, 20,
                                            "RGBA8")
        self._storage_tex.set_clear_color(Vec4(0.2, 0.6, 1.0, 1.0))
        self._storage_tex.clear_image()

        self._bg_frame = DirectFrame(parent=self._node,
                                     frameColor=(0.1, 0.1, 0.1, 1.0),
                                     frameSize=(200, 0, -10, -85),
                                     pos=(0, 0, 0))

        self._display_img = Sprite(image=self._storage_tex,
                                   parent=self._node,
                                   w=140,
                                   h=20,
                                   x=20,
                                   y=50)

        self._display_txt = Text(text="Current Exposure".upper(),
                                 parent=self._node,
                                 x=160,
                                 y=40,
                                 size=13,
                                 color=Vec3(0.8),
                                 align="right")

        # Create the shader which generates the visualization texture
        self._cshader_node = ComputeNode("ExposureWidget")
        self._cshader_node.add_dispatch(140 // 10, 20 // 4, 1)

        self._cshader_np = self._node.attach_new_node(self._cshader_node)

        # Defer the further loading
        Globals.base.taskMgr.doMethodLater(1.0, self._late_init,
                                           "ExposureLateInit")
예제 #4
0
 def startCredits(self):
     self.creditsSequence = Sequence(
         LerpColorScaleInterval(self.screenCover,
                                1,
                                Vec4(1, 1, 1, 1),
                                startColorScale=Vec4(1, 1, 1, 0)),
         LerpColorScaleInterval(self.text,
                                1,
                                Vec4(1, 1, 1, 1),
                                startColorScale=Vec4(1, 1, 1, 0)), Wait(1),
         self.text.posInterval(35, Point3(0, 0, 6)), Wait(1),
         LerpColorScaleInterval(self.screenCover,
                                1,
                                Vec4(1, 1, 1, 0),
                                startColorScale=Vec4(1, 1, 1, 1)),
         Func(self.removeCredits)).start()
예제 #5
0
    def getDropIval(self):
        shadow = self.shadow
        drop = self.drop
        id = self.id
        hangTime = Globals.ShadowTime
        dropTime = Globals.DropTime
        dropHeight = Globals.DropHeight
        targetShadowScale = 0.5
        targetShadowAlpha = 0.4
        shadowScaleIval = LerpScaleInterval(shadow, dropTime, targetShadowScale, startScale=0)
        shadowAlphaIval = LerpColorScaleInterval(shadow, hangTime, Point4(1, 1, 1, targetShadowAlpha), startColorScale=Point4(1, 1, 1, 0))
        shadowIval = Parallel(shadowScaleIval, shadowAlphaIval)
        startPos = Point3(0, 0, dropHeight)
        drop.setPos(startPos)
        dropIval = LerpPosInterval(drop, dropTime, Point3(0, 0, 0), startPos=startPos, blendType='easeIn')
        dropSoundIval = self._dropSfx
        dropSoundIval.node = self
        self.drop.setTransparency(1)

        def _setRandScale(t):
            self.drop.setScale(self, 1 - random.random() / 16, 1 - random.random() / 16, 1 - random.random() / 4)

        scaleChange = 0.4 + random.random() / 4
        dropShakeSeq = Sequence(
            LerpScaleInterval(self.drop, 0.25, Vec3(1.0 + scaleChange, 1.0 + scaleChange / 2, 1.0 - scaleChange), blendType='easeInOut'),
            LerpScaleInterval(self.drop, 0.25, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'), Func(self.disableCollisionDamage),
            LerpScaleInterval(self.drop, 0.2, Vec3(1.0 + scaleChange / 8, 1.0 + scaleChange / 8, 1.0 - scaleChange / 8), blendType='easeInOut'),
            LerpScaleInterval(self.drop, 0.2, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'),
            LerpScaleInterval(self.drop, 0.15, Vec3(1.0 + scaleChange / 16, 1.0 + scaleChange / 16, 1.0 - scaleChange / 16), blendType='easeInOut'),
            LerpScaleInterval(self.drop, 0.15, Vec3(1.0, 1.0, 1.0), blendType='easeInOut'),
            LerpScaleInterval(self.drop, 0.1, Vec3(1.0 + scaleChange / 16, 1.0 + scaleChange / 8, 1.0 - scaleChange / 16), blendType='easeInOut'),
            LerpColorScaleInterval(self.drop, Globals.DropFadeTime, Vec4(1.0, 1.0, 1.0, 0.0)))
        ival = Sequence(
            Func(self.reparentTo, render),
            Parallel(Sequence(WaitInterval(hangTime), dropIval), shadowIval),
            Parallel(Func(self.game.dropHit, self, id), dropSoundIval, dropShakeSeq),
            Func(self.game.cleanupDrop, id), name='drop%s' % id)
        self.ival = ival
        return ival
예제 #6
0
파일: geometry.py 프로젝트: tcdude/thirty
def cuboid(origin, bounds, direction, color=Vec4(1), normal_as_color=NAC):
    """
    Return GeomNode of the cuboid,

    Args:
        origin: center of the cuboid
        bounds: 3-Tuple of length, width and height
        direction: normal vector of the up face
        color: Vec4
        normal_as_color: whether to use vertex normal as color
    """
    dfl = Vec3(-bounds[0], -bounds[1], -bounds[2])
    dfr = Vec3(bounds[0], -bounds[1], -bounds[2])
    dbr = Vec3(bounds[0], bounds[1], -bounds[2])
    dbl = Vec3(-bounds[0], bounds[1], -bounds[2])
    ufl = Vec3(-bounds[0], -bounds[1], bounds[2])
    ufr = Vec3(bounds[0], -bounds[1], bounds[2])
    ubr = Vec3(bounds[0], bounds[1], bounds[2])
    ubl = Vec3(-bounds[0], bounds[1], bounds[2])

    faces = [
        (ufl, ufr, ubr, ubl),  # Up
        (dfl, dbl, dbr, dfr),  # Down
        (dfr, dbr, ubr, ufr),  # Right
        (dfl, ufl, ubl, dbl),  # Left
        (dfl, dfr, ufr, ufl),  # Front
        (dbl, ubl, ubr, dbr),  # Back
    ]

    D.setup(origin, direction)
    m = mesh.Mesh('cuboid')
    for f in faces:
        pts = []
        for p in f:
            D.set_pos_hp_d(p.x, p.y, p.z, 0, 0, 0)
            pts.append(m.add_vertex(D.pos, color))
        m.add_triangle(*reversed(pts[:3]))
        m.add_triangle(pts[0], *reversed(pts[2:]))
    return m.export(normal_as_color=normal_as_color)
예제 #7
0
파일: treegen.py 프로젝트: viatoriche/suber
def draw_leaf(nodePath,
              vdata,
              pos=Vec3(0, 0, 0),
              vecList=[Vec3(0, 0, 1),
                       Vec3(1, 0, 0),
                       Vec3(0, -1, 0)],
              scale=0.125):

    #use the vectors that describe the direction the branch grows to make the right
    #rotation matrix
    newCs = Mat4(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
    newCs.setRow(0, vecList[2])  #right
    newCs.setRow(1, vecList[1])  #up
    newCs.setRow(2, vecList[0])  #forward
    newCs.setRow(3, Vec3(0, 0, 0))
    newCs.setCol(3, Vec4(0, 0, 0, 1))

    try:
        axisAdj = Mat4.scaleMat(scale) * newCs * Mat4.translateMat(pos)
    except TypeError, e:
        print e
        print scale, pos
예제 #8
0
    def __init__(self, isServer, name, ip, port, log):
        self.log = log
        self.config = Config()

        #set up world
        base.win.setClearColor(Vec4(0, 0, 0, 1))
        self.environ = loader.loadModel('resources/models/world')
        self.environ.reparentTo(render)
        self.environ.setPos(0, 0, 0)
        Character.startPosition = self.environ.find('**/start_point').getPos()

        #set up collisions
        Character.collisionTraverser = CollisionTraverser()
        if SHOW_COLLISIONS:
            Character.collisionTraverser.showCollisions(render)

        #set up networking
        mode = network.MODE_SERVER if isServer else network.MODE_CLIENT
        self.connection = network.Connection(mode,
                                             name,
                                             ip,
                                             port,
                                             log=self.log)
        self.sendDeltaT = 0

        #set up local client
        self.control = Controller(self.connection.localUser.char,
                                  self.config.controlDict)
        taskMgr.add(self.step, 'world-step')

        #set up characters
        if network.mode == network.MODE_SERVER:
            self.ai = []
            for i in range(1):
                c = Character(name='Zombie')
                self.ai.append(AIController(c))
            print 'INITIALIZING SERVER WITH', len(self.ai), 'ZOMBIES'
        else:
            self.controlList = []
예제 #9
0
    def __init__(self, ship, bulletPos, bulletVelocityVec, collisionHandler):
        self.model = game.loader.loadModel("Models/bullet.egg.pz")
        self.model.setPos(bulletPos)
        self.model.setScale(BULLET_SIZE)
        self.model.reparentTo(render)
        self.model.setPythonTag("owner", self)
        self.ship = ship
        finalPosition = bulletPos + (bulletVelocityVec * BULLET_TRAVEL_TIME)
        self.trajectory = self.model.posInterval(BULLET_TRAVEL_TIME,
                                                 finalPosition).start()

        self.collisionNode = self.model.attachNewNode(CollisionNode("bullet"))
        self.collisionNode.node().addSolid(CollisionSphere(0, 0, 0, 1))
        base.cTrav.addCollider(self.collisionNode, collisionHandler)

        # Add Point Light to the bullet
        self.plight = PointLight('plight' + str(random()))
        self.plight.setColor(Vec4(1, 1, 1, 1))
        self.plight.setAttenuation(Vec3(0.7, 0.05, 0))
        self.plnp = self.model.attachNewNode(self.plight)
        render.setLight(self.plnp)
        render.setShaderInput("light", self.plnp)
예제 #10
0
 def __makeGagButton(self, gagName, trackName):
     gui = loader.loadModel('phase_3.5/models/gui/inventory_gui.bam')
     icons = loader.loadModel('phase_3.5/models/gui/inventory_icons.bam')
     icon = icons.find(GagGlobals.InventoryIconByName[gagName])
     index = GagGlobals.TrackGagNamesByTrackName[trackName].index(gagName)
     xValue = GagButtonXValues[index]
     button = DirectButton(
         relief=None,
         image=(gui.find('**/InventoryButtonUp'),
                gui.find('**/InventoryButtonDown'),
                gui.find('**/InventoryButtonRollover'),
                gui.find('**/InventoryButtonFlat')),
         geom=icon,
         geom_scale=0.6,
         parent=self.trackByName[trackName],
         text=str(base.localAvatar.getBackpack().getSupply(gagName)),
         text_align=TextNode.ARight,
         text_scale=0.04,
         text_fg=Vec4(1, 1, 1, 1),
         text_pos=(0.07, -0.04))
     button.setX(xValue)
     self.gagButtonByName[gagName] = button
    def doAttack(self, ts):
        texturesList = [
         'jargon-brow',
         'jargon-deep',
         'jargon-hoop',
         'jargon-ipo']
        reds = [1, 0, 1, 0]
        particleList = []
        for i in xrange(0, 4):
            particleList.append('phase_5/etc/jargonSpray.ptf')

        ParticleAttack.doAttack(self, particleList, 'doJargon', 'jargonSphere', 'speak', 1.5, 1.5, None, None, False, ts)
        for i in xrange(0, 4):
            effect = self.particles[i]
            setEffectTexture(effect, texturesList[i], Vec4(reds[i], 0, 0, 1))

        for particle in self.particles:
            particle.setZ(self.suit.find('**/joint_head').getZ(render))

        self.suitTrack.append(Wait(self.afterIvalDur))
        self.suitTrack.start(ts)
        return
예제 #12
0
    def __init__(self, world, app):
        self.world = world
        self.app = app
        self.picker = app.loader.loadModel('media/models/picked.egg')
        self.picker.reparentTo(app.render)

        shader = Shader.load(Shader.SLGLSL, 'media/shaders/vertex.glsl',
                             'media/shaders/flat.glsl')
        self.picker.setShader(shader)
        self.picker.setShaderInput('color', Vec4(0.3, 0.3, 1.0, 0.5))

        self.picking_planes = [
            Plane(Vec3(0, 0, 1), Point3(0, 0, z + 1))
            for z in self.world.zlevels()
        ]
        self.picked = None
        self.mouse = app.mouseWatcherNode
        self.constraint = BlockPicker.SURFACE
        self.slice = None

        self.addTask(self.pick_block, "Pick block")
        self.accept('slice-changed', self.slice_changed)
예제 #13
0
 def add_points(self, player):
     """
         updating score after game end
     """
     if player == 2:
         self.blueScore += 1
         Sequence(
             LerpColorScaleInterval(self.text_blue_np,
                                    0.4,
                                    Vec4(0, 0, 1, 0),
                                    Vec4(1),
                                    blendType="easeInOut"),
             Func(lambda *args: self.text_blue.set_text("BLUE: " + str(
                 self.blueScore))),
             LerpColorScaleInterval(self.text_blue_np,
                                    0.4,
                                    Vec4(1),
                                    Vec4(0, 0, 1, 0),
                                    blendType="easeInOut"),
         ).start()
     elif player == 1:
         self.redScore += 1
         Sequence(
             LerpColorScaleInterval(self.text_red_np,
                                    0.4,
                                    Vec4(1, 0, 0, 0),
                                    Vec4(1),
                                    blendType="easeInOut"),
             Func(lambda *args: self.text_red.set_text("RED: " + str(
                 self.redScore))),
             LerpColorScaleInterval(self.text_red_np,
                                    0.4,
                                    Vec4(1),
                                    Vec4(1, 0, 0, 0),
                                    blendType="easeInOut"),
         ).start()
예제 #14
0
    def create(self):
        self.target = RenderTarget("ApplyLights")
        self.target.addColorTexture()
        self.target.setColorBits(16)
        self.target.prepareOffscreenBuffer()
        self.target.setClearColor(True)

        self.target.getQuad().removeNode()
        self.target.getNode().setAttrib(
            TransparencyAttrib.make(TransparencyAttrib.MNone), 1000)
        self.target.getNode().setAttrib(
            ColorBlendAttrib.make(ColorBlendAttrib.MAdd), 1000)

        self.quads = {}

        numInstances = self.tileCount.x * self.tileCount.y

        for lightType in ["DirectionalLightShadow"]:
            cm = CardMaker("BufferQuad-" + lightType)
            cm.setFrameFullscreenQuad()
            quad = NodePath(cm.generate())
            quad.setDepthTest(0)
            quad.setDepthWrite(0)
            quad.setAttrib(TransparencyAttrib.make(TransparencyAttrib.MNone),
                           1000)
            quad.setColor(Vec4(1, 0.5, 0.5, 1))

            # Disable culling
            quad.node().setFinal(True)
            quad.node().setBounds(OmniBoundingVolume())
            quad.setBin("unsorted", 10)
            quad.setInstanceCount(numInstances)

            quad.reparentTo(self.target.getNode())

            self.quads[lightType] = quad

        self.target.getNode().setShaderInput("tileCount", self.tileCount)
예제 #15
0
    def __init__(self, game: Game, path) -> None:
        super().__init__()
        self.render = game.render
        self.origin = Vec4()
        self.basis = Mat4()

        self.actions = {}

        shader = Shader.load(
            Shader.SL_GLSL,
            vertex=path / "slicer.vert",
            geometry=path / "slicer.geom",
            fragment=path / "slicer.frag",
        )

        game.render.set_shader(shader)
        game.render.set_two_sided(True)
        game.render.set_shader_input("plane_origin", self.origin)
        game.render.set_shader_input("plane_basis", self.basis)

        for action in "turn-ana", "turn-kata":
            self.accept(action, self.actions.update, [{action: True}])
            self.accept(action + "-up", self.actions.update, [{action: False}])
예제 #16
0
 def __init__(self, tabType=2, parent=None, **kw):
     loadModels()
     if parent is None:
         parent = aspect2d
     if tabType == 1:
         image = Preloaded['tab1']
     elif tabType == 2:
         image = Preloaded['tab2']
     else:
         image = None
     optiondefs = (('relief', None, None), ('text_align', TextNode.ALeft,
                                            None),
                   ('text_fg', Vec4(0.2, 0.1, 0,
                                    1), None), ('image', image, None),
                   ('image_color', normalColor,
                    None), ('image1_color', clickColor,
                            None), ('image2_color', rolloverColor, None),
                   ('image3_color', diabledColor,
                    None), ('image_scale', (0.033, 0.033, 0.035),
                            None), ('image_hpr', (0, 0, -90), None))
     self.defineoptions(kw, optiondefs)
     DirectButton.__init__(self, parent)
     self.initialiseoptions(OptionTab)
    def enterExitDialog(self,
                        text,
                        exitButtonCommand=None,
                        exitButtonExtraArgs=[]):
        self.label.setText(text)

        sy = self.label.getScale()[1]
        bottom = self.label.textNode.getBottom() * sy
        lineHeight = self.label.textNode.getLineHeight() * sy
        self.exitButton.setPos(0, 0, bottom - (lineHeight * 2))
        self.exitButton['command'] = exitButtonCommand
        self.exitButton['extraArgs'] = exitButtonExtraArgs

        labelY = self.calcLabelY()

        self.label.setPos(0, labelY)

        self.exitButton.setZ(self.exitButton, labelY)

        self.exitButton.reparentTo(aspect2d)
        self.label.reparentTo(aspect2d)

        self.label.setColorScale(Vec4(1, 1, 1, 1))
예제 #18
0
 def makePickableQuests(self, list):
     quests = []
     for questId in list:
         quests.append(Quests.Quest(questId, 0, 0, list.index(questId)))
     positions = [(0, 0, 0.6), (0, 0, 0), (0, 0, -0.6)]
     self.questNotes = base.localAvatar.questManager.makeQuestNotes(quests = quests)
     self.questFrame = DirectFrame(parent = base.a2dLeftCenter, relief = None, pos = (0.5, 0, 0),
         geom = DGG.getDefaultDialogGeom(), geom_color=Vec4(0.8, 0.6, 0.4, 1),
         geom_scale=(1.85, 1, 0.9), geom_hpr=(0, 0, -90))
     self.questBtns = []
     for i in xrange(len(self.questNotes)):
         note = self.questNotes[i]
         note.setPos(0, 0, 0)
         if quests[i].currentObjective.type in Quests.DefeatObjectives:
             note.progressText.hide()
         btn = DirectButton(geom = note, parent = self.questFrame,
             pos = positions[i], command = self.d_pickedQuest, extraArgs = [quests[i]], relief = None)
         btn.setScale(1.15)
         note.reparentTo(btn.stateNodePath[0], 20)
         note.instanceTo(btn.stateNodePath[1], 20)
         note.instanceTo(btn.stateNodePath[2], 20)
         note.show()
         self.questBtns.append(btn)
예제 #19
0
def createColoredParametricCurveGeomNode(
        func=(lambda t: np.array([t, t, t])),
        param_interv=np.array([0, 1]),
        thickness=5., color=Vec4(1., 1., 1., 1.),
        howmany_points=50):

    ls = LineSegs()
    ls.setThickness(thickness)
    ls.setColor(color)

    t = np.linspace(param_interv[0], param_interv[1], num=howmany_points, endpoint=True)

    for i, c_t in enumerate(t):
        xyz_arr = func(c_t)
        if i > 0:
            ls.drawTo(*tuple(xyz_arr))

        ls.moveTo(*tuple(xyz_arr))

    geomnode = ls.create()
    # nodepath = NodePath(geomnode)

    return geomnode
예제 #20
0
    def __init__(self, phone, doneEvent=None):
        NodePath.__init__(self, aspect2d.attachNewNode('CatalogGUI'))
        DirectObject.__init__(self)

        CatalogGlobals.CatalogNodePath.find('**/CATALOG_GUI_BKGD').copyTo(self)
        self.setScale(CatalogGlobals.CatalogBKGDScale)

        self.phone = phone
        self.doneEvent = doneEvent

        self.arrowButtons = {}
        self.createArrowButtons()

        self.currentTab = None
        self.tabButtons = {}
        self.createTabButtons()

        self.radioButtons = []
        # self.createRadioButtons()

        self.activePage = 0
        self.gifting = -1

        guiItems = loader.loadModel('phase_5.5/models/gui/catalog_gui')
        hangupGui = guiItems.find('**/hangup')
        hangupRolloverGui = guiItems.find('**/hangup_rollover')
        self.hangup = DirectButton(
            self,
            relief=None,
            pos=(2.28, 0, -1.3),
            image=[hangupGui, hangupRolloverGui, hangupRolloverGui, hangupGui],
            text=['', TTLocalizer.CatalogHangUp, TTLocalizer.CatalogHangUp],
            text_fg=Vec4(1),
            text_scale=0.07,
            text_pos=(0.0, 0.14),
            command=self.hangUp)
        guiItems.removeNode()
예제 #21
0
    def __init__(self):
        ShowBase.__init__(self)

        self.win.setClearColor(Vec4(0.2, 0.2, 0.2, 1))

        self.disableMouse()

        self.render.setShaderAuto()

        dlight = DirectionalLight('dlight')
        alight = AmbientLight('alight')
        dlnp = self.render.attachNewNode(dlight)
        alnp = self.render.attachNewNode(alight)
        dlight.setColor((0.8, 0.8, 0.5, 1))
        alight.setColor((0.2, 0.2, 0.2, 1))
        dlnp.setHpr(0, -60, 0)
        self.render.setLight(dlnp)
        self.render.setLight(alnp)

        # Put lighting on the main scene
        plight = PointLight('plight')
        plnp = self.render.attachNewNode(plight)
        plnp.setPos(0, 0, 10)
        self.render.setLight(plnp)
        self.render.setLight(alnp)

        self.loadRocketFonts()

        self.loadingTask = None

        #self.startModelLoadingAsync()
        self.startModelLoading()

        self.inputHandler = RocketInputHandler()
        self.mouseWatcher.attachNewNode(self.inputHandler)

        self.openLoadingDialog()
예제 #22
0
    def _setup_camera_rig(self):
        """ Setups the cameras to render a cubemap """
        directions = (Vec3(1, 0, 0), Vec3(-1, 0, 0), Vec3(0, 1, 0),
                      Vec3(0, -1, 0), Vec3(0, 0, 1), Vec3(0, 0, -1))

        # Prepare the display regions
        for i in range(6):
            region = self.target.internal_buffer.make_display_region(
                i / 6, i / 6 + 1 / 6, 0, 1)
            region.set_sort(25 + i)
            region.set_active(True)
            region.disable_clears()

            # Set the correct clears
            region.set_clear_depth_active(True)
            region.set_clear_depth(1.0)
            region.set_clear_color_active(True)
            region.set_clear_color(Vec4(0))

            lens = PerspectiveLens()
            lens.set_fov(90)
            lens.set_near_far(0.001, 1.0)
            camera = Camera("EnvmapCam-" + str(i), lens)
            camera_np = self.rig_node.attach_new_node(camera)
            camera_np.look_at(camera_np, directions[i])
            region.set_camera(camera_np)
            self.regions.append(region)
            self.cameras.append(camera_np)

        self.cameras[0].set_r(90)
        self.cameras[1].set_r(-90)
        self.cameras[3].set_r(180)
        self.cameras[5].set_r(180)

        # Register cameras
        for camera_np in self.cameras:
            self._pipeline.tag_mgr.register_camera("envmap", camera_np.node())
예제 #23
0
    def __init__(self):
        ShowBase.__init__(self)

        self.cc = CentralController()

        self.gameTask = taskMgr.add(self.flyCircles, "circles")

        base.disableMouse()

        base.camera.setPos(-50, 00, 200)
        base.camera.lookAt(0, 0, -10)

        slight = Spotlight('slight')
        slight.setColor(VBase4(1, 1, 1, 1))
        lens = PerspectiveLens()
        slight.setLens(lens)

        self.shipList = [Xwing("xwing1")]

        lightColors = [Vec4(0.9, 0.9, 0.9, 1)]

        for i, ship in enumerate(self.shipList):
            ship.reparentTo(render)
            ship.setScale(2)
            ship.setPos(Point3(i * 10, 0, 0))

            directionalLight = DirectionalLight('directionalLight')
            directionalLight.setColor(lightColors[i])
            directionalLightNP = render.attachNewNode(directionalLight)

            directionalLightNP.setHpr(180, -20, 0)
            ship.setLight(directionalLightNP)

            self.cc.addObject(ship)

        self.count = 0
예제 #24
0
파일: geometry.py 프로젝트: tcdude/thirty
def dome(origin,
         direction,
         polygon,
         radius,
         color=Vec4(1),
         normal_as_color=NAC):
    """
    Return a Node of a dome/half-sphere.

    Args:
        origin: Vec3
        direction: Vec3
        polygon: number of vertices
        radius: float
        color: Vec4
        normal_as_color: whether to use the vertex normal as color
    """
    return sphere(origin,
                  direction,
                  polygon,
                  radius,
                  p_from_deg=0,
                  color=color,
                  normal_as_color=normal_as_color)
예제 #25
0
def createColoredSegmentedSmooth2dLineGeomNode(
        coords,
        thickness=5.,
        color=Vec4(1., 1., 1., 1.)):
    """ Plot a series of solid lines, connected to each other.
    Args:
        coords: list of 3d np.array """

    # thickness = 100.
    ls = LineSegs()
    ls.setThickness(thickness)
    ls.setColor(color)

    # import ipdb; ipdb.set_trace()  # noqa BREAKPOINT
    ls.moveTo(*tuple(coords[0]))

    for i, coord in enumerate(coords):
        ls.drawTo(*tuple(coord))
        ls.moveTo(*tuple(coord))

    geomnode = ls.create()
    # nodepath = NodePath(geomnode)

    return geomnode
예제 #26
0
    def setup_glow_shader(self):
        glow_shader = self.base.loader.loadShader("shader/glowShader.cg")
        glow_buffer = self.base.win.makeTextureBuffer("Glow scene", 512, 512)
        glow_buffer.setSort(-3)
        glow_buffer.setClearColor(Vec4(0, 0, 0, 1))
        self.glowcam = self.base.makeCamera(
            glow_buffer, lens=self.base.cam.node().getLens())
        tempnode = NodePath(PandaNode("temp node"))
        tempnode.setShader(glow_shader)
        self.glowcam.node().setInitialState(tempnode.getState())
        self.glowcam.reparentTo(self.base.camera)
        blurXBuffer = self.makeFilterBuffer(glow_buffer, "Blur X", -2,
                                            "shader/XBlurShader.cg")
        blurYBuffer = self.makeFilterBuffer(blurXBuffer, "Blur Y", -1,
                                            "shader/YBlurShader.cg")
        self.finalcard = blurYBuffer.getTextureCard()
        self.finalcard.reparentTo(self.base.render2d)
        self.finalcard.setAttrib(ColorBlendAttrib.make(ColorBlendAttrib.MAdd))

        self.base.accept("v", self.base.bufferViewer.toggleEnable)
        self.base.accept("V", self.base.bufferViewer.toggleEnable)
        self.base.bufferViewer.setPosition("llcorner")
        self.base.bufferViewer.setLayout("hline")
        self.base.bufferViewer.setCardSize(0.652, 0)
예제 #27
0
    def __init__(self, x_lowerleft, y_lowerleft, box_height=1.0, box_width=2.0, **kwargs):
        if 'color' in kwargs:
            self.color = kwargs.get('color')
        else:
            self.color = Vec4(.5, .5, .5, 1)

        self.x_lowerleft = x_lowerleft
        self.y_lowerleft = y_lowerleft

        self.box_height = box_height
        self.box_width = box_width

        self.scale = 1.

        # draw the box
        for cur_x, cur_y, cur_z in zip(self.x_lowerleft, self.y_lowerleft, self.z):
            cur_point = PointPrimitive()
            cur_point.setPos(cur_x, 0, cur_y)
            cur_point.setColor(*self.color)
            self.set_bbox.append(cur_point)

        self.group_node = GroupNode()
        self.group_node.addChildNodePaths(
            [point.nodepath for point in self.set_bbox])
예제 #28
0
 def announceGenerate(self):
     self.plotType = GardenGlobals.whatCanBePlanted(self.ownerIndex, self.plot)
     self.stickUp = 0.0
     if self.getOwnerId() != localAvatar.doId:
         self.defaultModel = None
     elif self.plotType == GardenGlobals.FLOWER_TYPE:
         self.collSphereRadius = 2.0
         self.collSphereOffset = 0.0
         self.plotScale = 0.7
         self.stickUp = 1.1
     elif self.plotType == GardenGlobals.GAG_TREE_TYPE:
         self.collSphereRadius = 3.0
         self.plotScale = 1.5
         self.colorScaler = Vec4(1.0, 1.0, 1.0, 1)
     elif self.plotType == GardenGlobals.STATUARY_TYPE:
         self.collSphereRadius = 3.0
         self.plotScale = 0.075
         self.stickUp = -0.0
         self.defaultModel = 'phase_5.5/models/estate/garden_slab'
     else:
         self.collSphereOffset = 0.0
     self.notify.debug('announceGenerate')
     DistributedLawnDecor.DistributedLawnDecor.announceGenerate(self)
     return
예제 #29
0
    def stop(self):
        self.ignore('mouse1')

        if self.labelPosTrack is not None:
            self.labelPosTrack.finish()
            self.labelPosTrack = None

        if self.labelColorScaleTrack is not None:
            self.labelColorScaleTrack.finish()
            self.labelColorScaleTrack = None

        if self.logoPosTrack is not None:
            self.logoPosTrack.finish()
            self.logoPosTrack = None

        if self.logoScaleTrack is not None:
            self.logoScaleTrack.finish()
            self.logoScaleTrack = None

        if self.fadeTrack is not None:
            self.fadeTrack.finish()
            self.fadeTrack = None

        self.setColorScale(Vec4(0, 0, 0, 0))
    def create(self):
        # Construct the voxel texture
        self._cloud_voxels = Image.create_3d("CloudVoxels", self._voxel_res_xy,
                                             self._voxel_res_xy,
                                             self._voxel_res_z, "RGBA8")
        self._cloud_voxels.set_wrap_u(SamplerState.WM_repeat)
        self._cloud_voxels.set_wrap_v(SamplerState.WM_repeat)
        self._cloud_voxels.set_wrap_w(SamplerState.WM_border_color)
        self._cloud_voxels.set_border_color(Vec4(0, 0, 0, 0))

        # Construct the target which populates the voxel texture
        self._grid_target = self.create_target("CreateVoxels")
        self._grid_target.size = self._voxel_res_xy, self._voxel_res_xy
        self._grid_target.prepare_buffer()
        self._grid_target.quad.set_instance_count(self._voxel_res_z)
        self._grid_target.set_shader_input("CloudVoxels", self._cloud_voxels)

        # Construct the target which shades the voxels
        self._shade_target = self.create_target("ShadeVoxels")
        self._shade_target.size = self._voxel_res_xy, self._voxel_res_xy
        self._shade_target.prepare_buffer()
        self._shade_target.quad.set_instance_count(self._voxel_res_z)
        self._shade_target.set_shader_inputs(
            CloudVoxels=self._cloud_voxels, CloudVoxelsDest=self._cloud_voxels)