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']
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)
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
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)
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
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)
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
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)
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
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)
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)
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)
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])
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"
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))
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()
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
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
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
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'))
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)
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)
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
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
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
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
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): 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
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
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