Пример #1
0
    def join(self, ent):
        CSimpleActor.join(self, ent)
        o = split(ent.get('origin', '0 0 0'))
        self.origin = sylphis.CVector3(float(o[0]), float(o[2]), -float(o[1]))
        pi = 3.14159  # FIXME
        o = split(ent.get('angles', '0 0 0'))
        self.angles = sylphis.CVector3(-pi * float(o[0]) / 180,
                                       pi * float(o[1]) / 180,
                                       pi * float(o[2]) / 180)
        self.model = ent['model']
        self.startAnim = ent.get('start_anim', 'none')
        if self.startAnim is '': self.startAnim = 'none'
        self.triggerAnim = ent.get('trigger_anim', 'action')

        ##        try:
        ##            self.skin = ent['skin']
        ##        except KeyError, x:
        ##            self.skin = None

        model = CEngine.models.registerModel(self.model)

        sm = self.mContainer.getSceneManager()
        m = sylphis.CSceneModel(sm, model)
        m.setPosition(self.origin)
        if m.hasAnim(self.startAnim):
            m.blendAnimCycle(self.startAnim, 1.0, 0.01)

        m.yaw(self.angles.y)
        m.roll(self.angles.x)

        self.node = m

        self.cameraName = ent['camera']
Пример #2
0
    def join(self, ent):
        CTriggerBase.join(self, ent)
        
        o = split(ent['origin'])
        origin = sylphis.CVector3(float(o[0]), float(o[2]), -float(o[1]))
        
        if self.model_id is None:
            raise "No model_id for trigger"
        
        model = self.mScene.getWorldMapModel(int(self.model_id))

        m = manage(sylphis.CSceneMD3, self.mScene)
        m.setModel(model)
        m.setPosition(origin)

        rigidbody = 1
        if rigidbody == 1:
            self.body = manage(sylphis.CRigidBox, 0, m, sylphis.CVector3(20, 50, 20))
        elif rigidbody == 2:
            self.body = manage(sylphis.CRigidSphere, 0, m, 20)
        elif rigidbody == 3:
            self.body = manage(sylphis.CRigidCylinder, 0, m)
        else:
            return

        self.body.makeImmovable()
        self.body.setSolid(0)
        self.body.fitToModel(m)
        self.body.setListener(self)
        self.body.setPosition(origin)
        self.body.setContents(sylphis.CONTENTS_TRIGGER)
        self.body.setCollisionMask(sylphis.CONTENTS_BODY)
        CPhysicsEnv.registerRigidBody(self.body)
Пример #3
0
    def __init__(self, *args):
        CSimpleActor.__init__(self, *args)
        self.camera = manage(sylphis.CCamera, self.mScene)
        self.camera.setFov(self.fov)
        self.node = self.camera  # To be registered on the scenemanager
        self.body = manage(
            sylphis.CRigidCapsule, 0, None,
            sylphis.CVector3(self.width, self.height, self.width))

        self.body.setMass(5.0)
        self.body.setDamping(0.1)
        self.body.setMaxAngularVelocity(0.001)
        self.body.setDamageFactor(0.000001)
        self.body.setListener(self)
        self.body.setContents(sylphis.CONTENTS_BODY)
        self.body.setCollisionMask(sylphis.MASK_PLAYERSOLID)
        CPhysicsEnv.registerRigidBody(self.body)

        self.omove = sylphis.CActorMover(self.mScene)
        self.omove.mAccel = 0.1

        self.slistener = manage(sylphis.CSoundListener, CEngine.mSoundEnv)
        self.camera.addChild(self.slistener)

        self.lastPos = sylphis.CVector3(0, 0, 0)
        self.onGround = 0
        self.jumping = False
        self.count = 0
        self.lastGround = None
        self.flyMode = False

        self.camheight -= self.height / 2.0
Пример #4
0
 def join(self, ent):
     CJoint.join(self, ent)
     o = split(self.axis1)
     self.axis1 = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
     self.axis1.swapHand()
     o = split(self.axis2)
     self.axis2 = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
     self.axis2.swapHand()
     self.joint = manage(sylphis.CJointUniversal, 0, 0)
Пример #5
0
class CMiscSkelModel(CSimpleActor):
    __classname__ = 'misc_skel_model'
    __desc__ = 'A skeletal model'
    __actortype__ = 'e'
    __specs__ = [
        {'name':'model', 'doc':'The filename that contains the model'},
        {'name':'anim', 'doc':'The animation to run on the model. e.g. ''idle'''},
        {'name':'skin', 'doc':'The skin to apply on the model. (Not implemented yet)'}
    ]
    model = ''
    anim = 'idle'
    skin = ''
    
    def __init__(self, *args):
        CSimpleActor.__init__(self, *args)
      
    def join(self, ent):
        CSimpleActor.join(self, ent)
        pi = 3.14159 # FIXME
        try:
            o = split(ent['angles'])
        except KeyError,x:
            ang = ent.get('angle', '0')
            o = ('0', ang, '0')
        self.angles = sylphis.CVector3(-pi * float(o[0]) / 180, pi * float(o[1]) / 180, pi * float(o[2]) / 180)

        model = CEngine.models.registerSkelModel(self.model)

        bt = manage(sylphis.CBoneControler)
        bt.setTranslation(sylphis.CVector3(0,0,0))
        q = sylphis.CQuaternion()
        q.fromAngleAxis(sylphis.CVector3(1,0,0), 10.0)
        bt.setRotation(q)
        bt.setBoneId(0)
        
        sa = manage(sylphis.CSkelAnimation)
        sa.setDuration(100.0)
        sa.addBoneTrack(bt)

        #print "Controlers :", bt, sa

        sm = self.mScene
        m = sylphis.CSceneModel(sm, model)
        m.setPosition(self.origin)
        m.blendAnimCycle(self.anim, 1.0, 0.1)

        m.executeAction(sa, 'test')
        
        m.yaw(self.angles.y)
        m.roll(self.angles.x)

        self.node = m
Пример #6
0
class CWorld(CSimpleActor):
    """
    This is the 'world' actor. It represents the world that everything
    takes place.
    """
    __classname__ = 'worldspawn'
    __desc__ = 'The ''world'' actor'
    __actortype__ = 'e'
    __specs__ = [
        {'name':'ambient_color', 'doc':'The ambient color'},
        {'name':'sound_track', 'doc':'The default audio file to play in this world'},
        {'name':'fog', 'type':'bool', 'doc':'Use global fog?'},
        {'name':'fog_color', 'type':'color', 'doc':'fog color'},
        {'name':'fog_bounds', 'doc':'fog bounds'}
    ]
    ambient_color = '0 0 0'
    sound_track = ''
    fog = 0
    fog_color = sylphis.CVector3(1.0, 1.0, 1.0)
    fog_bounds = sylphis.CVector3(256.0, 2048.0, 1.0)
    def __init__(self, *args):
        CSimpleActor.__init__(self, *args)
      
    def join(self, ent):
        """
        Loads the soundtrack for this world.
        """
        CSimpleActor.join(self, ent)
        o = split(self.ambient_color)
        self.ambientLight = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
        if self.sound_track != '':
            self.soundTrack = CEngine.mSoundEnv.registerSoundBuffer(self.sound_track)
            self.track = manage(sylphis.CSoundSource, CEngine.mSoundEnv)
            self.track.setBuffer(self.soundTrack)
            self.track.setPosition(0,0,0)
            self.track.setSpatial(0)
            self.mScene.getRootSceneNode().addChild(self.track)

    def start(self):
        """
        Starts the playback of the soundtrack
        """
        CSimpleActor.start(self)
        self.mScene.setAmbientLight(self.ambientLight)
        if hasattr(self, 'track'):
            self.track.play()

        if self.fog == 1:
            r = CEngine.renderer
            #r.setEnableFog(True)
            r.setFogColor(self.fog_color)
            r.setFogBounds(self.fog_bounds.x, self.fog_bounds.y)
Пример #7
0
    def join(self, ent):
        CSimpleActor.join(self, ent)
        o = split(ent['origin'])
        self.origin = sylphis.CVector3(float(o[0]), float(o[2]), -float(o[1]))
        o = split(ent['_color'])
        self.color = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
        self.radius = float(ent['light'])

        try:
            self.type = int(ent['type'])
        except KeyError, x:
            print "WARNING : CLight property '" + str(x) + "' not defined"
            self.type = 0
Пример #8
0
    def join(self, ent):
        CJoint.join(self, ent)
        o = split(self.axis1)
        self.axis1 = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
        self.axis1.swapHand()
        o = split(self.axis2)
        self.axis2 = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
        self.axis2.swapHand()
        self.loStop = self.lo_stop / 180 * math.pi
        self.hiStop = self.hi_stop / 180 * math.pi
        self.cfm = self.stop_softness

        self.joint = manage(sylphis.CJointDoubleHinge, 0, 0)
Пример #9
0
 def join(self, ent):
     CSimpleActor.join(self, ent)
     o = split(ent['origin'])
     self.origin = sylphis.CVector3(float(o[0]), float(o[2]), -float(o[1]))
     pi = 3.14159  # FIXME
     o = split(ent['angles'])
     self.angles = sylphis.CVector3(pi * float(o[0]) / 180,
                                    pi * float(o[1]) / 180,
                                    pi * float(o[2]) / 180)
     self.model = ent['model']
     try:
         self.shader = ent['shader']
     except KeyError, x:
         self.shader = self.model
Пример #10
0
 def join(self, ent):
     self.defs = ent
     o = split(ent['origin'])
     self.origin = sylphis.CVector3(float(o[0]), float(o[2]), -float(o[1]))
     self.origin.y += 27
     self.body.mPosition = self.origin
     self.camera.setPosition(self.origin)
Пример #11
0
    def join(self, ent):
        CJoint.join(self, ent)
        o = split(self.axis)
        self.axis = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
        self.axis.swapHand()

        self.joint = manage(sylphis.CJointSlider, 0, 0)
Пример #12
0
    def join(self, ent):
        CSimpleActor.join(self, ent)

        # Get engine and scene manager in handy variables
        sm = self.mScene

        # Register the weapon model
        gun = CEngine.models.registerSkelModel(self.model)

        # Create the weapon scene model
        self.gun = manage(sylphis.CSceneModel, sm, gun)
        self.gun.setPosition(sylphis.CVector3(0.0, 0.0, 0.0))
        self.gun.blendAnimCycle('idle', 0.1, 0.1)
        self.gun.setFlags(sylphis.CSceneModel.NOSHADOW
                          | sylphis.CSceneModel.NOCULL)

        # Register the weapon sounds
        self.shotsound = CEngine.mSoundEnv.registerSoundBuffer(self.fire_sound)
        self.drysound = CEngine.mSoundEnv.registerSoundBuffer(
            self.dryfire_sound)
        self.reloadsound = CEngine.mSoundEnv.registerSoundBuffer(
            self.reload_sound)

        # Create the weapon sound source
        self.s = manage(sylphis.CSoundSource, CEngine.mSoundEnv)
        self.s.setLooping(0)

        # Attach the sound source to the weapon node
        self.gun.addChild(self.s)
Пример #13
0
    def join(self, ent):
        CSimpleActor.join(self, ent)

        # Get engine and scene manager in handy variables
        sm = self.mScene

        if thirdPerson:
            # Register the player model
            pmodel = CEngine.models.registerSkelModel('models/paladin.model')

            # Create the player scene model
            self.model = sylphis.CSceneModel(sm, pmodel)
            self.model.setPosition(sylphis.CVector3(0.0, -self.height, 0.0))
            self.model.blendAnimCycle('idle', 0.1, 0.1)
            self.anim = 'idle'
            #self.model.setFlags(sylphis.CSceneModel.NOSHADOW)

            sm.getRootSceneNode().addChild(self.model)

        self.camera.setPosition(self.origin)
        self.body.setPosition(self.origin)

        self.weapons = []
        self.weapons.append(self.addActor({'classname': 'CPistol'}))
        self.weapons.append(self.addActor({'classname': 'CGrenadeLauncher'}))
        self.changeWeapon(self.weapons[0])
Пример #14
0
    def __init__(self, *args):
        CSimpleActor.__init__(self, *args)
        self.camera = sylphis.CCamera(self.mContainer.getSceneManager())
        self.camera.setFov(90.0)
        self.body = sylphis.CRigidBody()
        self.body.mBBox.setBounds(sylphis.CVector3(-15, -49, -15),
                                  sylphis.CVector3(15, 5, 15))
        self.body.setDisabled(1)  # We handle our movement "manualy"
        self.body.setListener(self)
        self.omove = sylphis.CActorMover(self.mContainer.getSceneManager())
        self.mContainer.getSceneManager().registerRigidBody(self.body)

        self.lastFire = 0.0
        self.smoothing = 0.0
        self.lastY = 0.0
        print "CPlayer init"
Пример #15
0
 def handleEvent(self, *args):
     if args[0] == 11:
         other = args[1]
         if (other.getContents()):  # & sylphis.CONTENTS_BODY):
             other.setVelocity(sylphis.CVector3.ZERO)
             other.setPosition(other.getPosition() +
                               sylphis.CVector3(0, 1, 0))
             other.addForce(self.getForce(other))
Пример #16
0
 def applyDamage(self, damage):
     if damage > self.damage_thresh:
         self.health -= damage - self.damage_thresh
         print "Health :", self.health
         if self.health <= 0:
             self.body.setSleep(False)
             self.body.addForce(sylphis.CVector3(0,100,0))
             self.remove()
Пример #17
0
class CGrenade(CProjectile):
    __classname__ = 'CGrenade'
    model = 'models/bball.md3'
    hit_sound = 'sounds/bullet_hit.wav'
    health = 50.0
    velocity = sylphis.CVector3(0, 0, -800)
    angular_velocity = sylphis.CVector3(0, 0, 0)
    damping = 0.0001
    radius = 20.0
    bounce = 0
    mass = 10.0
    fuse = 5.0
    damage_factor = 0.01
    detonate_on_fuse = 1
    detonate_on_death = 0
    detonate_on_world = 0
    detonate_on_actor = 1
Пример #18
0
 def update(self, timeDelta):
     if self.filter != "nofilter":
         return
     self.time += timeDelta
     self.node.setPosition(self.origin + sylphis.CVector3(
         20 * math.sin(self.time * 1.8), math.fabs(
             15 * math.sin(self.time)), 30 * math.sin(self.time)))
     pass
Пример #19
0
class CBullet(CProjectile):
    __classname__ = 'CBullet'
    model = ''
    hit_sound = 'sounds/bullet_hit.wav'
    health = 5.0
    damage_factor = 100.0
    velocity = sylphis.CVector3(0, 0, -4000.0)
    angular_velocity = sylphis.CVector3(0, 0, 0)
    damping = 0.0
    radius = 3.0
    bounce = 0
    mass = 1.0
    fuse = 2.0
    detonate_on_fuse = 1
    detonate_on_death = 1
    detonate_on_world = 1
    detonate_on_actor = 1
Пример #20
0
 def parseEmitter(self, p):
     self.emitterShape = str(p.getAttribute('shape'))
     if self.emitterShape == 'sphere':
    	    self.emitterSize = sylphis.CVector3(float(getString(p, 'radius')), 0.0, 0.0)
     elif self.emitterShape == 'box':
    	    raise 'Unimplemented box parser'    
 	    
     self.emitterRate = float(getString(p, 'rate', '100.0'))
     self.emitterTime = float(getString(p, 'time', '-1.0'))
Пример #21
0
 def fire(self):
     if (self.lastFire + 0.2 > self.frameTime):
         return
     self.lastFire = self.frameTime
     p = projectile.CProjectile(self.mCont)
     v = sylphis.CVector3(0, 200, -500)
     v = self.camera.getOrientation() * v
     p.join({'position': self.camera.getPosition(), 'velocity': v})
     self.mCont.actors.append(p)
Пример #22
0
    def update(self, timeDelta):
        pos = sylphis.CVector3(self.targetNode.getPosition())
        ori = sylphis.CQuaternion(self.targetNode.getOrientation())

        q = sylphis.CQuaternion()
        q.fromAngleAxis(sylphis.CVector3(1, 0, 0), -0.4)
        ori = ori * q

        self.orientation.lerp(1.0 * timeDelta, ori)

        dir = self.orientation * sylphis.CVector3(0, 0, 1)
        dir = dir * 250.0
        end = pos + dir

        tr = sylphis.CTraceResult()
        self.targetBody.setDisabled(True)
        self.mScene.raytrace(tr, pos, end, self.targetBody)
        self.targetBody.setDisabled(False)
        tr.frac -= 0.2
        self.node.setPosition(pos + dir * tr.frac)
        self.node.setOrientation(self.orientation)
Пример #23
0
    def join(self, ent):
        e = self.mContainer.getEngine()
        md2 = e.renderables.registerMD2("models/grenade.md2")
        sm = self.mCont.getSceneManager()

        m = manage(sylphis.CRenderableMultiMesh, sm)
        m.setPosition(ent['position'])
        m.addMesh(md2, "textures/grenade")
        self.node = m

        sm.getRootSceneNode().addChild(self.node)
        e.shaders.loadAll()
        self.body = manage(sylphis.CRigidBody)
        self.body.setListener(self)
        self.body.mPosition = self.node.getPosition()
        self.body.mVelocity = ent['velocity']
        self.body.mBBox.setBounds(sylphis.CVector3(-3, -3, -3),
                                  sylphis.CVector3(3, 3, 3))
        sm.registerRigidBody(self.body)

        self.age = 0.0
Пример #24
0
    def join(self, ent):
        CSimpleActor.join(self, ent)

        from core.particlesystem import manager

        self.partdef = manager.registerParticleSystem(self.particledef)

        m = manage(sylphis.CRenderableMultiMesh, self.mScene)
        p = manage(sylphis.CParticleSystem)

        p.setDefinition(self.partdef)
        p.setDefaultShader(self.partdef.getMaterial())
        p.setDieAfterUse(False)
        self.mScene.addParticleSystem(p)
        m.getBound().setBounds(sylphis.CVector3(-1000, -1000, -1000),
                               sylphis.CVector3(1000, 1000, 1000))
        m.addMesh(p)

        m.setPosition(self.origin)

        self.node = m
        self.particleSystem = p
Пример #25
0
    def join(self, ent):
        CSimpleActor.join(self, ent)

        sm = self.mCont.getSceneManager()
        sl = manage(sylphis.CLight, sm)
        sl.setPosition(0, 0, 0)
        self.radius = 10.0
        sl.setRadius(self.radius)
        sl.setColor(sylphis.CVector3(1.0, 0.9, 0.6))
        sl.setPosition(self.origin)
        self.node = sl

        self.age = 0.0
Пример #26
0
class CMiscModel(CSimpleActor):
    ## 
    ## Actor specification 
    ## 
    __classname__ = 'misc_model'
    __desc__ = 'A simple model, that can have a physical responce'
    __actortype__ = 'e'
    __specs__ = [
        {'name':'model', 'doc':'The filename that contains the model'},
        {'name':'anim', 'doc':'The animation to run on the model. e.g. ''idle'''},
        {'name':'rigidbody', 'select':{0:'NONE', 1:'BOX', 2:'SPHERE', 5:'TRIMESH'}, 'doc':'This is the rigidbody shape that the engine will try to fit to'},
        {'name':'mass', 'doc':'The mass of the rigid body'},
        {'name':'damping', 'doc':'Air friction'},
        {'name':'damage_factor', 'doc':'Damage factor'},
        {'name':'damage_thresh', 'doc':'Damage threshold under which no damage is taken.'},
        {'name':'health', 'doc':'Health'},
        {'name':'shader', 'doc':'The skin to apply on the model'},
        {'name':'noshadow', 'doc':'Dont cast shadows'}
    ]
    rigidbody = 0
    rigidflags = 0
    mass = 1.0
    damping = 0.01
    damage_factor = 0.001
    damage_thresh = 30.0
    health = 100.0
    angulardamping = 0.01
    maxangularvel = 50.0
    model_id = None
    noshadow = 0

    ##
    ## Implementation
    ##
    def __init__(self, *args):
        CSimpleActor.__init__(self, *args)
      
    def join(self, ent):
        CSimpleActor.join(self, ent)
        try:
            o = split(ent['angles'])
        except KeyError,x:
            ang = ent.get('angle', '0')
            o = ('0', ang, '0')
        self.angles = sylphis.CVector3(-pi * float(o[0]) / 180, pi * float(o[1]) / 180, pi * float(o[2]) / 180)
        self.model = ent.get('model', '')
        try:
            self.shader = ent['shader']
        except KeyError, x:
            self.shader = self.model
Пример #27
0
 def join(self, ent):
     """
     Loads the soundtrack for this world.
     """
     CSimpleActor.join(self, ent)
     o = split(self.ambient_color)
     self.ambientLight = sylphis.CVector3(float(o[0]), float(o[1]), float(o[2]))
     if self.sound_track != '':
         self.soundTrack = CEngine.mSoundEnv.registerSoundBuffer(self.sound_track)
         self.track = manage(sylphis.CSoundSource, CEngine.mSoundEnv)
         self.track.setBuffer(self.soundTrack)
         self.track.setPosition(0,0,0)
         self.track.setSpatial(0)
         self.mScene.getRootSceneNode().addChild(self.track)
Пример #28
0
    def start(self):
        CTriggerModel.start(self)
        highpoint = self.mCont.actors.getActorByName(self.highpoint)
        if highpoint is None:
            raise "ERROR : No actor named %s" % (self.highpoint)

        self.highpoint = highpoint.origin

        delta = self.origin - self.highpoint
        vel = sylphis.CVector3(0, 0, 0)
        g = CPhysicsEnv.getGravity().y
        vel.y = math.sqrt(2 * delta.y * g)
        vel.x = delta.x / (vel.y / g)
        vel.z = delta.z / (vel.y / g)
        self.velocity = vel
Пример #29
0
    def join(self, ent):
        self.eng = self.mContainer.getEngine()

        sm = self.mCont.getSceneManager()
        sl = manage(sylphis.CLight, sm)
        sl.setPosition(0, 0, 0)
        self.radius = 10.0
        sl.setRadius(self.radius)
        sl.setColor(sylphis.CVector3(1.0, 0.9, 0.6))
        sl.setPosition(ent['position'])
        sm.getRootSceneNode().addChild(sl)
        sm.getRootSceneNode().addChild(sl)
        self.node = sl

        self.eng.shaders.loadAll()

        self.age = 0.0
Пример #30
0
    def parseInterpolator(self, p):
        pairs = {}
        if len(p):
            nodes = p[0].getElementsByTagName('node')
            for node in nodes:
                key = float(str(node.getAttribute('key')))
                data = 0
                fn = node.getElementsByTagName('float')
                if len(fn):
                    data = float(getString(node, 'float'))
                fn = node.getElementsByTagName('vector')
                if len(fn):
                    sdata = getString(node, 'vector')
                    x,y,z = string.split(sdata)
                    data = sylphis.CVector3(float(x), float(y), float(z))

                pairs[key] = data
                
        return pairs