Path: blob/main/projects/HexGL/bkcore/hexgl/ShipEffects.js
4627 views
/*1* HexGL2* @author Thibaut 'BKcore' Despoulain <http://bkcore.com>3* @license This work is licensed under the Creative Commons Attribution-NonCommercial 3.0 Unported License.4* To view a copy of this license, visit http://creativecommons.org/licenses/by-nc/3.0/.5*/67var bkcore = bkcore || {};8bkcore.hexgl = bkcore.hexgl || {};910bkcore.hexgl.ShipEffects = function(opts)11{12this.scene = opts.scene;13this.shipControls = opts.shipControls;1415this.booster = opts.booster;16this.boosterLight = opts.boosterLight;17this.boosterSprite = opts.boosterSprite;1819this.useParticles = opts.useParticles;2021if(this.useParticles)22{23this.pVel = new THREE.Vector3(0.5,0,0);24this.pOffset = new THREE.Vector3(-3,-0.3,0);25this.pRad = new THREE.Vector3(0,0,1.5);2627this.shipVelocity = new THREE.Vector3();2829this.pVelS = this.pVel.length();30this.pOffsetS = this.pOffset.length();31this.pRadS = this.pRad.length();3233this.pVel.normalize();34this.pOffset.normalize();35this.pRad.normalize();3637this.particles = {3839leftSparks: new bkcore.threejs.Particles(40{41randomness: new THREE.Vector3(0.4,0.4,0.4),42tint: 0xffffff,43color: 0xffc000,44color2: 0xffffff,45texture: opts.textureSpark,46size: 2,47life: 60,48max: 20049}),5051leftClouds: new bkcore.threejs.Particles(52{53opacity: 0.8,54tint: 0xffffff,55color: 0x666666,56color2: 0xa4f1ff,57texture: opts.textureCloud,58size: 6,59blending: THREE.NormalBlending,60life: 60,61max: 200,62spawn: new THREE.Vector3(3,-0.3,0),63spawnRadius: new THREE.Vector3(1,1,2),64velocity: new THREE.Vector3(0,0,-0.4),65randomness: new THREE.Vector3(0.05,0.05,0.1)66}),6768rightSparks: new bkcore.threejs.Particles(69{70randomness: new THREE.Vector3(0.4,0.4,0.4),71tint: 0xffffff,72color: 0xffc000,73color2: 0xffffff,74texture: opts.textureSpark,75size: 2,76life: 60,77max: 20078}),7980rightClouds: new bkcore.threejs.Particles(81{82opacity: 0.8,83tint: 0xffffff,84color: 0x666666,85color2: 0xa4f1ff,86texture: opts.textureCloud,87size: 6,88blending: THREE.NormalBlending,89life: 60,90max: 200,91spawn: new THREE.Vector3(-3,-0.3,0),92spawnRadius: new THREE.Vector3(1,1,2),93velocity: new THREE.Vector3(0,0,-0.4),94randomness: new THREE.Vector3(0.05,0.05,0.1)95})96};9798this.shipControls.mesh.add(this.particles.leftClouds.system);99this.shipControls.mesh.add(this.particles.rightClouds.system);100this.scene.add(this.particles.leftSparks.system);101this.scene.add(this.particles.rightSparks.system);102}103}104105bkcore.hexgl.ShipEffects.prototype.update = function(dt)106{107var boostRatio, opacity, scale, intensity, random;108109if(this.shipControls.destroyed)110{111opacity = 0;112scale = 0;113intensity = 0;114random = 0;115}116else117{118boostRatio = this.shipControls.getBoostRatio();119opacity = this.shipControls.key.forward ? 0.8 : 0.3 + boostRatio * 0.4;120scale = (this.shipControls.key.forward ? 1.0 : 0.8) + boostRatio * 0.5;121intensity = this.shipControls.key.forward ? 4.0 : 2.0;122random = Math.random()*0.2;123}124125if(this.booster)126{127this.booster.rotation.z += 1;128this.booster.scale.set(scale, scale, scale);129this.booster.material.opacity = random+opacity;130this.boosterSprite.opacity = random+opacity;131this.boosterLight.intensity = intensity*(random+0.8);132}133134// PARTICLES135if(this.useParticles)136{137this.shipVelocity.copy(this.shipControls.currentVelocity).multiplyScalar(0.7);138139this.particles.rightSparks.velocity.copy(this.pVel);140this.particles.rightSparks.spawnRadius.copy(this.pRad);141this.particles.rightSparks.spawn.copy(this.pOffset);142143this.particles.leftSparks.velocity.copy(this.pVel).x *= -1;144this.particles.leftSparks.spawn.copy(this.pOffset).x *= -1;145146if(this.shipControls.mesh)147{148// RIGHT149this.shipControls.mesh.matrix.rotateAxis(this.particles.rightSparks.spawn);150this.particles.rightSparks.spawn.multiplyScalar(this.pOffsetS).addSelf(this.shipControls.dummy.position);151152this.shipControls.mesh.matrix.rotateAxis(this.particles.rightSparks.velocity);153this.particles.rightSparks.velocity.multiplyScalar(this.pVelS).addSelf(this.shipVelocity);154155this.shipControls.mesh.matrix.rotateAxis(this.particles.rightSparks.spawnRadius);156this.particles.rightSparks.spawnRadius.multiplyScalar(this.pRadS);157158// LEFT159this.shipControls.mesh.matrix.rotateAxis(this.particles.leftSparks.spawn);160this.particles.leftSparks.spawn.multiplyScalar(this.pOffsetS).addSelf(this.shipControls.dummy.position);161162this.shipControls.mesh.matrix.rotateAxis(this.particles.leftSparks.velocity);163this.particles.leftSparks.velocity.multiplyScalar(this.pVelS).addSelf(this.shipVelocity);164165this.particles.leftSparks.spawnRadius.copy(this.particles.rightSparks.spawnRadius);166}167168if(this.shipControls.collision.right)169{170this.particles.rightSparks.emit(10);171this.particles.rightClouds.emit(5);172}173174if(this.shipControls.collision.left)175{176this.particles.leftSparks.emit(10);177this.particles.leftClouds.emit(5);178}179180this.particles.rightSparks.update(dt);181this.particles.rightClouds.update(dt);182this.particles.leftSparks.update(dt);183this.particles.leftClouds.update(dt);184}185}186187188