示例#1
0
    def __init__(self):
        p3d.lens.set_far(FAR)

        self.focus = NodePath(PandaNode('focus'))
        self.focus.set_compass()
        self.focus.reparent_to(p3d.render)
        self.focus.set_pos(0.0, 0.0, FOCUS_HEIGHT)
        self.rotator = NodePath(PandaNode('rotator'))
        self.rotator.reparent_to(self.focus)
        self.rotator.set_pos(0.0, 0.0, 0.0)
        self.following = None
        p3d.camera.set_pos(0.0, 0.0, DEFAULT_HEIGHT)
        p3d.camera.look_at(self.rotator)
        p3d.camera.reparent_to(self.rotator)
        self.focus.set_h(DEFAULT_ROTATION)
        self.rotator.set_p(DEFAULT_PITCH)

        self.speed = [0.0, 0.0]
        self.rot_speed = [0.0, 0.0]
        self.zoom_speed = 0.0
        self._cinematic = None
        self.set_cinematic_mode(False)

        def _toggle_cinematic():
            self.set_cinematic_mode(not self._cinematic)

        def _zoom(amount):
            self.zoom_speed += amount * self._zoom_accel

        p3d.base.accept('f8', _toggle_cinematic)
        p3d.base.accept('wheel_up', partial(_zoom, -10.0))
        p3d.base.accept('wheel_down', partial(_zoom, 10.0))
示例#2
0
def test_particle_burst_emission():
    effect = ParticleEffect()
    system = Particles("testSystem", 10)
    effect.add_particles(system)

    # Setup some dummy nodes, since it seems to want them
    # We might normally call "start", but that calls "enable", which
    # seems to assume that "base" exists and has physics and particle managers...
    system.setRenderParent(NodePath(PandaNode("test")))
    system.setSpawnRenderNodePath(NodePath(PandaNode("test")))
    # However, we don't want normal emission, so we now soft-stop it immediately,
    # before the system has a chance to update and emit.
    effect.softStop()

    # Now, a sanity-check: assert that we have no particles,
    # Then update the system, and assert again that we
    # have no particles. If so, then we're (hopefully)
    # not emitting normally!

    assert system.getLivingParticles() == 0
    system.update(1)
    assert system.getLivingParticles() == 0

    # Now, the real test: emit a particle-burst!
    effect.birthLitter()

    # And assert that a particle has, in fact, been emitted.
    assert system.getLivingParticles() == 1

    # Check the snake-case version, too.
    effect.birth_litter()

    assert system.getLivingParticles() == 2
示例#3
0
    def __init__(self, pos, modelName, modelAnims, maxHealth, maxSpeed,
                 colliderName, weaponIntoMask, size):
        self.root = Common.framework.showBase.render.attachNewNode(
            PandaNode("obj"))

        self.colliderName = colliderName

        self.modelName = modelName

        if modelName is None:
            self.actor = NodePath(PandaNode("actor"))
        elif modelAnims is None:
            self.actor = Common.framework.showBase.loader.loadModel(modelName)
        else:
            self.actor = Actor(modelName, modelAnims)
        self.actor.reparentTo(self.root)

        if pos is not None:
            self.root.setPos(pos)

        self.maxHealth = maxHealth
        self.health = maxHealth
        self.healthRechargeRate = 2.0

        self.healthRechargeSuppressionTimer = 0
        self.healthRechargeSuppressionDuration = 0.5

        self.maxSpeed = maxSpeed

        self.terminalVelocity = 50

        self.flinchCounter = 0

        self.velocity = Vec3(0, 0, 0)
        self.acceleration = 300.0

        self.inControl = True
        self.outOfControlTimer = 0

        self.walking = False

        self.size = size

        if colliderName is not None:
            colliderNode = CollisionNode(colliderName)
            colliderNode.addSolid(CollisionSphere(0, 0, 0, size))
            self.colliderNP = self.root.attachNewNode(colliderNode)
            self.colliderNP.setPythonTag(TAG_OWNER, self)
            colliderNode.setFromCollideMask(0)
            colliderNode.setIntoCollideMask(weaponIntoMask)
            #self.colliderNP.show()
        else:
            self.colliderNP = self.root.attachNewNode(PandaNode("stand-in"))

        self.deathSound = None
示例#4
0
文件: shader.py 项目: PlumpMath/yyagl
    def apply(self):
        winprops = WindowProperties.size(2048, 2048)
        props = FrameBufferProperties()
        props.setRgbColor(1)
        props.setAlphaBits(1)
        props.setDepthBits(1)
        lbuffer = base.graphicsEngine.makeOutput(base.pipe, 'offscreen buffer',
                                                 -2, props, winprops,
                                                 GraphicsPipe.BFRefuseWindow,
                                                 base.win.getGsg(), base.win)
        self.buffer = lbuffer
        ldepthmap = Texture()
        lbuffer.addRenderTexture(ldepthmap, GraphicsOutput.RTMBindOrCopy,
                                 GraphicsOutput.RTPDepthStencil)
        ldepthmap.setMinfilter(Texture.FTShadow)
        ldepthmap.setMagfilter(Texture.FTShadow)

        base.camLens.setNearFar(1.0, 10000)
        base.camLens.setFov(75)

        self.lcam = base.makeCamera(lbuffer)
        self.lcam.node().setScene(render)
        self.lcam.node().getLens().setFov(45)
        self.lcam.node().getLens().setNearFar(1, 100)

        render.setShaderInput('light', self.lcam)
        render.setShaderInput('depthmap', ldepthmap)
        render.setShaderInput('ambient', .15, .15, .15, 1.0)

        lci = NodePath(PandaNode('light camera initializer'))
        with open('yyagl/assets/shaders/caster.vert') as f:
            vert = f.read()
        with open('yyagl/assets/shaders/caster.frag') as f:
            frag = f.read()
        lci.setShader(Shader.make(Shader.SLGLSL, vert, frag))
        self.lcam.node().setInitialState(lci.getState())

        mci = NodePath(PandaNode('main camera initializer'))
        with open('yyagl/assets/shaders/main.vert') as f:
            vert = f.read()
        with open('yyagl/assets/shaders/main.frag') as f:
            frag = f.read()
        frag = frag.replace('<LIGHTS>', str(len(self.lights)))
        # use PTALVecBaseX instead
        # setShaderInput('vec3argname', PTALVecBase3(((0, 0, 0), (1, 1, 1))))
        render.setShader(Shader.make(Shader.SLGLSL, vert, frag))
        render.setShaderInput('num_lights', len(self.lights))
        map(lambda lgt: self.set_lgt_args(*lgt), enumerate(self.lights))
        mci.setShader(Shader.make(Shader.SLGLSL, vert, frag))
        base.cam.node().setInitialState(mci.getState())

        self.lcam.setPos(15, 30, 45)
        self.lcam.lookAt(0, 15, 0)
        self.lcam.node().getLens().setNearFar(1, 100)
示例#5
0
    def __init__(self, pos, modelName, modelAnims, maxHealth, maxSpeed,
                 colliderName, height, weaponIntoMask):
        self.root = render.attachNewNode(PandaNode("obj"))

        self.colliderName = colliderName

        self.modelName = modelName

        if modelName is None:
            self.actor = NodePath(PandaNode("actor"))
        elif modelAnims is None:
            self.actor = loader.loadModel(modelName)
        else:
            self.actor = Actor(modelName, modelAnims)
        self.actor.reparentTo(self.root)

        if pos is not None:
            self.root.setPos(pos)

        self.height = height

        self.maxHealth = maxHealth
        self.health = maxHealth

        self.maxSpeed = maxSpeed

        self.terminalVelocity = 15

        self.flinchCounter = 0

        self.velocity = Vec3(0, 0, 0)
        self.acceleration = 300.0

        self.inControl = True

        self.walking = False

        self.noZVelocity = True

        if colliderName is not None:
            colliderNode = CollisionNode(colliderName)
            colliderNode.addSolid(CollisionCapsule(0, 0, 0, 0, 0, height, 0.3))
            self.weaponCollider = self.root.attachNewNode(colliderNode)
            self.weaponCollider.setPythonTag(TAG_OWNER, self)
            colliderNode.setFromCollideMask(0)
            colliderNode.setIntoCollideMask(weaponIntoMask)
            #self.weaponCollider.show()
        else:
            self.weaponCollider = self.root.attachNewNode(
                PandaNode("stand-in"))

        self.deathSound = None

        self.currentWeapon = None
示例#6
0
def test_nodepath_flatten_tags_same_value():
    from panda3d.core import NodePath, PandaNode

    # Don't flatten nodes with different tag values
    node1 = PandaNode("node1")
    node1.set_tag("key", "value1")
    node2 = PandaNode("node2")
    node2.set_tag("key", "value2")

    path = NodePath("parent")
    path.node().add_child(node1)
    path.node().add_child(node2)

    path.flatten_strong()
    assert len(path.children) == 2
示例#7
0
def test_nodepath_flatten_tags_identical():
    from panda3d.core import NodePath, PandaNode

    # Do flatten nodes with same tags
    node1 = PandaNode("node1")
    node1.set_tag("key", "value")
    node2 = PandaNode("node2")
    node2.set_tag("key", "value")

    path = NodePath("parent")
    path.node().add_child(node1)
    path.node().add_child(node2)

    path.flatten_strong()
    assert len(path.children) == 1
示例#8
0
def test_nodepath_transform_composition():
    """Tests that NodePath composes transform states according to the path it holds."""
    from panda3d.core import PandaNode, NodePath, LPoint3, LVector3

    # Create 3 PandaNodes, and give each some interesting transform state:
    node1 = PandaNode('node1')
    node2 = PandaNode('node2')
    node3 = PandaNode('node3')

    node1.set_transform(node1.get_transform().set_pos(LPoint3(
        0, 0, 1)).set_hpr(LVector3(90, 0, -90)))
    node2.set_transform(node2.get_transform().set_pos(LPoint3(
        0, 1, 0)).set_hpr(LVector3(180, 180, 0)))
    node3.set_transform(node3.get_transform().set_pos(LPoint3(
        1, 0, 0)).set_hpr(LVector3(270, 0, 270)))

    # node3 is going to be attached under both node1 and node2 and we will
    # hold a path both ways:
    node1.add_child(node3)
    node2.add_child(node3)

    assert len(node1.children) == 1
    assert len(node2.children) == 1
    assert len(node3.children) == 0
    assert len(node1.parents) == 0
    assert len(node2.parents) == 0
    assert len(node3.parents) == 2

    # np1 is the path to node3 via node1:
    np1 = NodePath(node1).children[0]
    # np2 is the path to node3 via node2:
    np2 = NodePath(node2).children[0]

    # Both should point to node3:
    assert np1.node() == node3
    assert np2.node() == node3

    # However if we ask for the net transform to node3, it should compose:
    assert np1.get_transform(NodePath()) == node1.get_transform().compose(
        node3.get_transform())
    assert np2.get_transform(NodePath()) == node2.get_transform().compose(
        node3.get_transform())

    # If we ask for np1 RELATIVE to np2, it should compose like so:
    leg1 = node2.get_transform().compose(node3.get_transform())
    leg2 = node1.get_transform().compose(node3.get_transform())
    relative_transform = leg1.get_inverse().compose(leg2)
    assert np1.get_transform(np2) == relative_transform
示例#9
0
def launch_panda_window(panda_widget, size):
    """
    Configure and create Panda window
    Connect to the gtk widget resize event
    Load a panda
    """
    props = WindowProperties().getDefault()
    props.setOrigin(0, 0)
    props.setSize(*size)
    props.setParentWindow(panda_widget.window.xid)
    base.openDefaultWindow(props=props)
    # ==
    panda_widget.connect("size_allocate", resize_panda_window)
    # ==
    panda = loader.loadModel("panda")
    panda.reparentTo(render)
    panda.setPos(0, 40, -5)

    pl = render.attachNewNode(PointLight("redPointLight"))
    pl.node().setColor(Vec4(.9, .8, .8, 1))
    render.setLight(pl)
    pl.node().setAttenuation(Vec3(0, 0, 0.05))

    slight = Spotlight('slight')
    slight.setColor(VBase4(1, 1, 1, 1))
    lens = PerspectiveLens()
    slight.setLens(lens)
    slnp = render.attachNewNode(slight)
    slnp.setPos(2, 20, 0)
    mid = PandaNode('mid')
    panda.attachNewNode(mid)
    #    slnp.lookAt(mid)
    render.setLight(slnp)
示例#10
0
    def __init__(self, parent=None, pitch=None, id=None):
        NetEnt.__init__(self, id)
        self.node = NetNodePath(PandaNode('projectile'))
        if parent:
            self.parent = parent
            self.node.setPos(parent.node.getPos() + (0, 0, 1))
            self.node.setHpr(parent.node.getHpr())
            self.node.setP(pitch)
        self.node.reparentTo(render)
        ProjectilePool.add(self)
        #print 'there are',len(ProjectilePool.values()),'projectiles'
        self.flyTime = 0

        self.sprite = Sprite2d('resources/missile.png',
                               rows=3,
                               cols=1,
                               rowPerFace=(0, 1, 2, 1),
                               anchorY=Sprite2d.ALIGN_CENTER)
        self.sprite.node.reparentTo(self.node)

        # set up 'from' collisions - for detecting projectile hitting things
        self.collisionHandler = CollisionHandlerQueue()
        self.fromCollider = self.node.attachNewNode(
            CollisionNode('fromCollider'))
        self.fromCollider.node().addSolid(CollisionRay(0, 0, 0, 0, 1, 0))
        self.fromCollider.node().setIntoCollideMask(BITMASK_EMPTY)
        self.fromCollider.node().setFromCollideMask(BITMASK_TERRAIN
                                                    | BITMASK_CHARACTER)
        if SHOW_COLLISIONS:
            self.fromCollider.show()
        Character.collisionTraverser.addCollider(self.fromCollider,
                                                 self.collisionHandler)
def main():
    base = ShowBase()

    cm = CardMaker('')
    cm.set_frame(-.5, .5, -.5, .5)

    # Node which contains all the cards equally spaced apart and which is
    # animated to move the cards in front of the camera.
    cards = base.render.attach_new_node(PandaNode(''))
    cards.setPos(-2, 5, 0)
    cards.posInterval(2, Point3(-6, 5, 0)).loop()

    for i in range(5):
        card = cards.attach_new_node(cm.generate())
        card.setPos(i * 2, 0, 0)

    def on_every_frame(task):
        # Time which has elapsed since the last frame measured in units of
        # the time quota available at 60 fps (e.g. 1/60 second).
        time_quota = taskMgr.globalClock.get_dt() * 60

        # Print time use as percent of the 60-fps-quota.
        print(f'{round(time_quota * 100):4}', end='', flush=True)

        return Task.DSCont

    taskMgr.add(on_every_frame)
    taskMgr.run()
示例#12
0
    def configureDance(self):
        self.PRESSED,self.NPRESSED,self.PERFECT,self.GOOD,self.MISS=10,-10,2,1,0
        danceNode = self.render.attachNewNode(PandaNode('dance'))

        # load and set up scene
        danceScene = self.loader.loadModel("../models/disco_hall")
        danceScene.reparentTo(danceNode)
        danceScene.setPosHpr(0, 50, -4, 90, 0, 0)

        self.configureLights(danceNode)
        self.configureDancer(danceNode)

        scoreCircle=OnscreenImage(
                        image = '../textures/arrivalCircle.png', pos = (-1,0,0.8))
        scoreCircle.setTransparency(TransparencyAttrib.MAlpha)
        scoreCircle.setScale(0.2)
        scoreText= OnscreenText(text =str(0), pos = (-1.02,0.76), 
                            scale = 0.1,fg=(1,1,1,1))

        position=self.dancer.getPos()
        position[1]=0
        position[2]=-0.4
        GUIarrows=DirectFrame(frameColor=(0.3,0.3,0.7,0.3),
                                    frameSize=(-0.8,.8,0.2,-0.2),
                                    pos=position)

        hitSign=OnscreenImage(image ='../textures/circle.png', pos = (-0.6, 0, -0.4))
        hitSign.setTransparency(TransparencyAttrib.MAlpha)
        hitSign.setScale(0.15)
        scoreReminder=OnscreenText(text ='PERFECT', pos = (-0.6,-0.4), 
                            scale = 0.04,fg=(1,1,1,1),shadow=(0.4,0.4,0.7,0.3))

        self.setPanel('dance',Panel(danceNode, {'scoreCircle': scoreCircle,
            'GUIarrows':GUIarrows,'hitSign': hitSign,'scoreText': scoreText,
            'scoreReminder': scoreReminder}))
示例#13
0
    def createCharacter(self):
        charColl = BulletCapsuleShape(0.4, 1.75 - 2 * 0.4, ZUp)
        self.diamondChar = BulletCharacterControllerNode(
            charColl, 0.4, 'Player')
        self.diamondCharNP = self.worldNP.attachNewNode(self.diamondChar)
        self.diamondCharNP.setPos(0, 0, 0)
        self.diamondCharNP.setH(-90)
        self.diamondCharNP.setCollideMask(BitMask32.allOn())
        self.world.attachCharacter(self.diamondChar)

        # Summon the lord Diamondback
        self.diamondbackChar = Actor(
            "Resources/models/CHAR/CHRIS", {
                "walk": "Resources/models/CHAR/CHRIS-Walk2",
                "idle": "Resources/models/CHAR/CHRIS-Idle2",
                "jump": "Resources/models/CHAR/CHRIS-Jump"
            })
        self.diamondbackChar.reparentTo(self.diamondCharNP)
        self.diamondbackChar.setPos(0, 0, -.83)
        self.diamondbackChar.setScale(1)
        self.diamondbackChar.setBlend(animBlend=True, frameBlend=True)

        # Set the camera position tracker
        self.camPos = NodePath(PandaNode("camTracker"))
        self.camPos.reparentTo(self.diamondbackChar)

        # Set the camera to track the lord
        base.camera.reparentTo(self.camPos)
        base.camera.setPosHpr(0, 6, 2.5, 180, -5, 0)
        base.camLens.setFov(90)
示例#14
0
    def create(self):
        winprops = WindowProperties.size(self.size, self.size)
        props = FrameBufferProperties()
        props.setRgbColor(0)
        props.setAlphaBits(0)
        props.setDepthBits(1)
        self.buffer = base.graphicsEngine.makeOutput(
            base.pipe, "shadowsBuffer", -2, props, winprops,
            GraphicsPipe.BFRefuseWindow, base.win.getGsg(), base.win)

        if not self.buffer:
            print("Video driver cannot create an offscreen buffer.")
            return
        self.depthmap = Texture()
        self.buffer.addRenderTexture(self.depthmap,
                                     GraphicsOutput.RTMBindOrCopy,
                                     GraphicsOutput.RTPDepthStencil)

        self.depthmap.setMinfilter(Texture.FTShadow)
        self.depthmap.setMagfilter(Texture.FTShadow)
        self.depthmap.setBorderColor(LColor(1, 1, 1, 1))
        self.depthmap.setWrapU(Texture.WMBorderColor)
        self.depthmap.setWrapV(Texture.WMBorderColor)

        self.cam = base.makeCamera(self.buffer, lens=OrthographicLens())
        self.cam.reparent_to(render)
        self.node = self.cam.node()
        lci = NodePath(PandaNode("Light Camera Initializer"))
        lci.set_attrib(ColorWriteAttrib.make(ColorWriteAttrib.M_none), 1000)
        lci.set_attrib(
            CullFaceAttrib.make(CullFaceAttrib.MCullCounterClockwise), 1000)
        self.node.setInitialState(lci.getState())
        self.node.setScene(render)
        if settings.debug_shadow_frustum:
            self.node.showFrustum()
示例#15
0
 def __init__(self,
              context,
              outline,
              menuRootID=None,
              title='',
              closeAction='_',
              scale=.07,
              pos=(-.8, 0, .8),
              parent=aspect2d,
              style=None,
              tipe='vertical'):
     self.context = context
     if menuRootID == None: self.menuRootID = newID()
     else: self.menuRootID = menuRootID
     self.scale = scale
     self.style = style
     t = indent2tree(outline)
     if tipe == 'titleBar':
         t = [{
             'itmTxt': title + delimiter,
             'children': t[:]
         }, {
             'itmTxt':
             'X' + delimiter + ' kind=close, closeAction=' + closeAction
         }]
     root = self.makeMenu('root', t, PandaNode('ehh'), tipe)
     self.np = parent.attachNewNode(root)
     self.np.setScale(scale)
     firstItemPath = self.np.find('-PGItem')
     f = firstItemPath.node().getPythonTag('extras').getFFrame()
     self.np.setPos(pos[0], pos[0], pos[2] - f[3] * scale)
     self.showing = False
     self.menu_Click = False
     self.clickBlock = False
     self.showIt()
示例#16
0
    def __init__(self, world, name, basedir):
        self.world = world
        self.name = name
        self.basedir = basedir
        self.load_complete = 0

        self.world.consoleOut('zone initializing: ' + self.name)

        # store the in memory WLDFile objects that make uo the zone for direct access
        self.wld_containers = {}  # and as a directory
        self.zone_wld_container = None
        self.obj1_wld_container = None
        self.obj2_wld_container = None
        self.chr_wld_container = None

        # init our texture manager
        self.tm = TextureManager()

        # init our model manager
        self.mm = ModelManager(self)

        self.nulltex = Texture(
        )  # create dummy exture object for use in non textured polys

        self.rootNode = NodePath(PandaNode("zone_root"))
        self.rootNode.reparentTo(render)

        self.delta_t = 0
示例#17
0
    def addLight(self):
        self.render.clearLight()
        self.lightCenter = self.render.attachNewNode(PandaNode("center"))
        #self.lightCenter.setCompass()

        # ambient light
        self.ambientLight = AmbientLight('ambientLight')
        self.ambientLight.setColor(Vec4(0.5, 0.5, 0.5, 1))
        self.alight = self.lightCenter.attachNewNode(self.ambientLight)
        self.render.setLight(self.alight)

        # point light
        self.pointlight = PointLight("pLight")
        self.light = self.lightCenter.attachNewNode(self.pointlight)
        self.pointlight.setColor(Vec4(0.8, 0.8, 0.8, 1))
        self.light.setPos(0, 0, 2)
        self.render.setLight(self.light)

        # directional light
        self.dirlight = DirectionalLight("dLight")
        self.dlight = self.lightCenter.attachNewNode(self.dirlight)
        self.dirlight.setColor(Vec4(0.8, 0.8, 0.8, 1))
        self.dirlight.setShadowCaster(True)

        self.dlight.setPos(0, 0, 5)
        self.dlight.lookAt(5, 10, 0)
        self.render.setLight(self.dlight)

        self.render.setShaderAuto()
示例#18
0
 def traverse(self, nodePath, dnaStorage):
     node = PandaNode(self.name)
     node = nodePath.attachNewNode(node, 0)
     node.setPosHprScale(self.pos, self.hpr, self.scale)
     for child in self.children_:
         child.traverse(node, dnaStorage)
     node.flattenMedium()
示例#19
0
    def __init__(self, parent: NodePath):
        super().__init__()
        self.parent = parent

        self.mouse_np = p3d.camera.attach_new_node(PandaNode('mouse'))
        self.mouse_np.set_y(p3d.lens.get_near())

        picker_node = CollisionNode('mouse_ray')
        picker_np = p3d.camera.attach_new_node(picker_node)
        self._picker_ray = CollisionRay()
        picker_node.add_solid(self._picker_ray)
        self._collision_handler = CollisionHandlerQueue()
        self._traverser = CollisionTraverser('mouse_traverser')
        self._traverser.add_collider(picker_np, self._collision_handler)

        self.actor = Actor(
            resource_filename('tsim', 'data/models/cursor'),
            {'spin': resource_filename('tsim', 'data/models/cursor-spin')})
        self.actor.loop('spin')
        self.actor.reparent_to(parent)
        self.actor.set_pos(0.0, 0.0, 0.0)
        self.actor.set_shader_off()

        self._position = Point(0.0, 0.0)
        self.last_position = self._position
        self.moved = False
        self.pointed_at = None

        self._tool: Optional[Tool] = None
        self._register_events()
示例#20
0
def test_node_prev_transform():
    identity = TransformState.make_identity()
    t1 = TransformState.make_pos((1, 0, 0))
    t2 = TransformState.make_pos((2, 0, 0))
    t3 = TransformState.make_pos((3, 0, 0))

    node = PandaNode("node")
    assert node.transform == identity
    assert node.prev_transform == identity
    assert not node.has_dirty_prev_transform()

    node.transform = t1
    assert node.transform == t1
    assert node.prev_transform == identity
    assert node.has_dirty_prev_transform()

    node.transform = t2
    assert node.transform == t2
    assert node.prev_transform == identity
    assert node.has_dirty_prev_transform()

    node.reset_prev_transform()
    assert node.transform == t2
    assert node.prev_transform == t2
    assert not node.has_dirty_prev_transform()

    node.transform = t3
    assert node.prev_transform == t2
    assert node.has_dirty_prev_transform()
    PandaNode.reset_all_prev_transform()
    assert node.transform == t3
    assert node.prev_transform == t3
    assert not node.has_dirty_prev_transform()
示例#21
0
    def __init__(self, name):
        self.name = name
        self.poly_groups = []

        # GeomVertexFormats
        #
        # GeomVertexFormat.getV3cpt2()  - vertex, color, uv
        # GeomVertexFormat.getV3t2()    - vertex, uv
        # GeomVertexFormat.getV3cp()    - vertex, color
        # GeomVertexFormat.getV3n3t2()  - vertex, normal, uv
        # GeomVertexFormat.getV3n3cpt2()- vertex, normal, rgba, uv

        # textured
        self.vdata = GeomVertexData(name, GeomVertexFormat.getV3n3cpt2(),
                                    Geom.UHStatic)

        # plain color filled polys
        # self.vdata = GeomVertexData(name, GeomVertexFormat.getV3cp(), Geom.UHStatic)

        self.vertex = GeomVertexWriter(self.vdata, 'vertex')
        self.vnormal = GeomVertexWriter(self.vdata, 'normal')
        self.color = GeomVertexWriter(self.vdata, 'color')
        self.texcoord = GeomVertexWriter(self.vdata, 'texcoord')

        self.root = NodePath(PandaNode(name + '_mesh'))
示例#22
0
    def draw_floor(self):
        # Load the scene.
        # if self.box.dimensions < 3:
        #     return
        floorTex = self.loader.loadTexture('maps/grid.jpg')

        cm = CardMaker('')
        # cm.setFrame(-2, 2, -2, 2)
        X = self.box.box_sizes[0]
        if self.box.dimensions > 1:
            Y = self.box.box_sizes[1]
        else:
            Y = X
        cm.setFrame(0, X, 0, Y)
        # cm.setFrame(0, 0, self.box.box_sizes[0], self.box.box_sizes[1])
        floor = self.render.attachNewNode(PandaNode("floor"))
        floor.reparentTo(self.boxnode)
        for y in range(1):
            for x in range(1):
                nn = floor.attachNewNode(cm.generate())
                nn.setP(-90)
                # nn.setPos((x - 6) * 4, (y - 6) * 4, 0)
                nn.setPos((x - 0) * 4, (y - 0) * 4, 0)
        floor.setTexture(floorTex)
        floor.flattenStrong()
        floor.setTwoSided(True)
示例#23
0
    def __init__(self, cr):
        self.cr = cr
        self.ralph = DistributedSmoothActor(self.cr)

        self.cr.createDistributedObject(
            distObj = self.ralph,
            zoneId = 2)

        # Create a floater object, which floats 2 units above ralph.  We
        # use this as a target for the camera to look at.

        self.floater = NodePath(PandaNode("floater"))
        self.floater.reparentTo(self.ralph)
        self.floater.setZ(2.0)

        # We will use this for checking if keyboard keys are pressed
        self.isDown = base.mouseWatcherNode.isButtonDown

        taskMgr.add(self.move, "moveTask")

        # Set up the camera
        base.camera.setPos(self.ralph.getX(), self.ralph.getY() + 10, 2)

        # start the avatar
        self.ralph.start()
示例#24
0
 def addchildren_(self, items, parent, insertPoint):
     menuItms = self.makeMenu('tmp', indent2tree(items), PandaNode('tmp'))
     sybGroup = parent.find('-PandaNode')
     sybs = []
     if sybGroup.isEmpty():
         sybGroup = parent.attachNewNode(parent.getName())
         sybGroup.setX(parent.node().getPythonTag('extras').getFWidth())
     else:
         sybs = sybGroup.getChildren()
         sybGroup.node().removeAllChildren()
     n, inserted = 0, False
     for s in sybs:
         #print "@@hi"
         if n == insertPoint:
             for m in NodePath(menuItms).getChildren():
                 m.getPythonTag('extras').deformat()
                 m.reparentTo(sybGroup)
             #print "@@inserted"
             inserted = True
         s.getPythonTag('extras').deformat()
         s.reparentTo(sybGroup)
         n += 1
     if not inserted:  #insertPoint was beyond last child...
         #print "@@not hi"
         for m in NodePath(menuItms).getChildren():
             m.getPythonTag('extras').deformat()
             m.reparentTo(sybGroup)
     verticalGroupFinish(sybGroup, True)
     sybGroup.hide()
示例#25
0
    def Start(self,pl_name,pl_char,pl_count,pl_list):



        # Set up the environment
        #

        self.environ = loader.loadModel("models/square")
        self.environ.reparentTo(render)
        self.environ.setPos(0,0,0)
        self.environ.setScale(100,100,1)
        self.moon_tex = loader.loadTexture("models/moon_1k_tex.jpg")
    	self.environ.setTexture(self.moon_tex, 1)

        self.floater = NodePath(PandaNode("floater"))
        self.floater.reparentTo(render)

        # # add spheres
        earth = Earth(self)
        sun = Sun(self)
        venus = Venus(self)



        controls = Control()
        chat = Chat(self)


        if pl_char == "Panda1"  or pl_char == "Panda2":
            print "hi"
            player = Panda(self)
        elif pl_char == "Car":
            player = Car(self)
        else :
            player = Ralph(self)

        #player = Car(self)


        # player = Panda(self)
        # player = Car(self)



        taskMgr.add(player.move,"moveTask" )
        taskMgr.add(sun.rotatePlanets,"rotateSun", extraArgs = [self.sun,self.player], appendTask = True)
        taskMgr.add(earth.rotatePlanets,"rotateEarth", extraArgs = [self.earth, self.player], appendTask = True)
        taskMgr.add(venus.rotatePlanets,"rotateVenus", extraArgs = [self.venus, self.player], appendTask = True)


        # Create some lighting
        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor(Vec4(.3, .3, .3, 1))
        directionalLight = DirectionalLight("directionalLight")
        directionalLight.setDirection(Vec3(-5, -5, -5))
        directionalLight.setColor(Vec4(1, 1, 1, 1))
        directionalLight.setSpecularColor(Vec4(1, 1, 1, 1))
        render.setLight(render.attachNewNode(ambientLight))
        render.setLight(render.attachNewNode(directionalLight))
示例#26
0
 def startCamera(self):
     """Starts the camera module."""
     # to enhance readability
     self.cam_floater = self.mainNode
     self.cam_floater = self.mainNode.attachNewNode(
         PandaNode("playerCamFloater"))
     self.cam_floater.setPos(self.cam_floater_pos)
     taskMgr.add(self.updateCamera, "task_camActualisation", priority=-4)
示例#27
0
    def __init__(self):
        base.win.setClearColor(Vec4(0, 0, 0, 1))

        # Network Setup
        print "before"
        self.cManager = ConnectionManager(self)
        self.startConnection()
        print "after"

        # Set up the environment
        #

        self.environ = loader.loadModel("models/square")
        self.environ.reparentTo(render)
        self.environ.setPos(0, 0, 0)
        self.environ.setScale(100, 100, 1)
        self.moon_tex = loader.loadTexture("models/moon_1k_tex.jpg")
        self.environ.setTexture(self.moon_tex, 1)

        self.floater = NodePath(PandaNode("floater"))
        self.floater.reparentTo(render)

        # add spheres
        earth = Earth(self)

        sun = Sun(self)
        venus = Venus(self)

        controls = Control()
        chat = Chat(self)
        player = Ralph(self)

        # player = Panda(self)
        # player = Car(self)

        taskMgr.add(player.move, "moveTask")
        taskMgr.add(sun.rotatePlanets,
                    "rotateSun",
                    extraArgs=[self.player],
                    appendTask=True)
        taskMgr.add(earth.rotatePlanets,
                    "rotateEarth",
                    extraArgs=[self.player],
                    appendTask=True)
        taskMgr.add(venus.rotatePlanets,
                    "rotateVenus",
                    extraArgs=[self.player],
                    appendTask=True)

        # Create some lighting
        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor(Vec4(.3, .3, .3, 1))
        directionalLight = DirectionalLight("directionalLight")
        directionalLight.setDirection(Vec3(-5, -5, -5))
        directionalLight.setColor(Vec4(1, 1, 1, 1))
        directionalLight.setSpecularColor(Vec4(1, 1, 1, 1))
        render.setLight(render.attachNewNode(ambientLight))
        render.setLight(render.attachNewNode(directionalLight))
示例#28
0
    def __init__(self, modelName):
        self.root = render.attachNewNode(PandaNode("obj"))
        self.actor = loader.loadModel(modelName)
        self.actor.reparentTo(self.root)
        self.actor.setLightOff(1)

        self.actor.setBillboardAxis()

        self.auraName = None
示例#29
0
    def loadGame(self):
        # Setting up key maps and the instruction set into the scene...
        LandwalkerGlobals.setKeys()
        LandwalkerGlobals.setInstructions()

        # Loads our world.
        scene = self.loadWorld()

        # Makes our local avatar.
        localAvatar = actor.makeActor()
        base.localAvatar = localAvatar
        base.localAvatar.reparentTo(render)

        # Load our buttons.
        self.LoadButtons()

        # Load our shaders.
        #fog = loadFog()
        #print(fogStats(fog))
        EffectsManager.loadShaders()
        #FogDensity = EffectsManager.loadFog(1)

        # Floater Object (For camera)
        floater = NodePath(PandaNode("floater"))
        floater.reparentTo(localAvatar)
        floater.setY(-10)
        floater.setZ(8.5)
        floater.setHpr(0, -10, 0)

        # Set Camera
        camera.reparentTo(floater)

        wallBitmask = BitMask32(1)
        floorBitmask = BitMask32(2)
        base.cTrav = CollisionTraverser()

        # Walk controls
        walkControls = GravityWalker(legacyLifter=True)
        walkControls.setWallBitMask(wallBitmask)
        walkControls.setFloorBitMask(floorBitmask)
        walkControls.setWalkSpeed(16.0, 24.0, 8.0, 80.0)
        walkControls.initializeCollisions(base.cTrav,
                                          localAvatar,
                                          floorOffset=0.025,
                                          reach=4.0)
        walkControls.setAirborneHeightFunc(
            LandwalkerAvatarControls.getAirborneHeight())
        walkControls.enableAvatarControls()
        # controlManager.add(walkControls, 'walk')
        localAvatar.physControls = walkControls
        localAvatar.physControls.placeOnFloor()

        # Some debug stuff, should be moved later once I can toggle stuff from different files./
        self.onScreenDebug.enabled = True
        base.setFrameRateMeter(True)
        base.taskMgr.add(LandwalkerAvatarControls.move, "moveTask")
        base.taskMgr.add(self.updateOnScreenDebug, 'UpdateOSD')
示例#30
0
    def __init__(self):
        __builtin__.main = self
        self.taskMgr = taskMgr
        self.base = base

        # Connect to the server
        self.cManager = ConnectionManager()
        self.startConnection()

        self.characters = dict()
        self.cpList = dict()

        base.win.setClearColor(Vec4(0, 0, 0, 1))

        self.environ = loader.loadModel("models/world")
        self.environ.reparentTo(render)
        self.environ.setPos(0, 0, 0)
        self.ralphStartPos = self.environ.find("**/start_point").getPos()

        # Create a floater object.  We use the "floater" as a temporary
        # variable in a variety of calculations.

        self.floater = NodePath(PandaNode("floater"))
        self.floater.reparentTo(render)

        self.accept("escape", sys.exit)

        # Login as 'CPHandler'
        # Temporary workaround, can add a seperate request/response for client/NPC client logins later
        self.name = "CPHandler"
        factionId = 0
        self.cManager.sendRequest(Constants.CMSG_AUTH, [self.name, factionId])

        # Create two control points
        cp1 = ControlPoint(1, -107.575, 0.6066, 0.490075, 10, RED)
        cp2 = ControlPoint(2, -100.575, -35.6066, 0.090075, 10, BLUE)

        self.cpList[1] = cp1
        self.cpList[2] = cp2

        taskMgr.doMethodLater(0.1, self.refresh, "heartbeat")
        taskMgr.doMethodLater(1, self.CPHandler, 'CPHandler')

        # Set up the camera
        base.disableMouse()
        #base.camera.setPos(self.character.actor.getX(),self.character.actor.getY()+10,2)

        # Create some lighting
        ambientLight = AmbientLight("ambientLight")
        ambientLight.setColor(Vec4(.3, .3, .3, 1))
        directionalLight = DirectionalLight("directionalLight")
        directionalLight.setDirection(Vec3(-5, -5, -5))
        directionalLight.setColor(Vec4(1, 1, 1, 1))
        directionalLight.setSpecularColor(Vec4(1, 1, 1, 1))
        render.setLight(render.attachNewNode(ambientLight))
        render.setLight(render.attachNewNode(directionalLight))