Вход Регистрация
Файл: Space race/bkcore.coffee/threejs/Particles.js
Строк: 165
<?php
// Generated by CoffeeScript 1.4.0

/*
  Particle system wrapper/helper
  
  @class bkcore.threejs.Particles
  @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
*/


(function() {
  var 
ParticleParticlesexports_base;

  
Particles = (function() {
    
/*
        Creates a new particle system using given parameters
        
        @param {Object{max, spawnRate, spawn, velocity, randomness,
        force, spawnRadius, life, friction, color, color2, tint,
        texture, size, blending, depthTest, transparent, opacity}} opts
    */

    
function Particles(opts) {
      var 
_ref_ref1_ref10_ref11_ref12_ref13_ref14_ref15_ref16_ref17_ref18_ref19_ref2_ref3_ref4_ref5_ref6_ref7_ref8_ref9;
      
this.black = new THREE.Color(0x000000);
      
this.white = new THREE.Color(0xffffff);
      
this.material = new THREE.ParticleBasicMaterial({
        
color: (_ref opts.tint) != null _ref 0xffffff,
        
map: (_ref1 opts.texture) != null _ref1 null,
        
size: (_ref2 opts.size) != null _ref2 4,
        
blending: (_ref3 opts.blending) != null _ref3 THREE.AdditiveBlending,
        
depthTest: (_ref4 opts.depthTest) != null _ref4 false,
        
transparent: (_ref5 opts.transparent) != null _ref5 true,
        
vertexColorstrue,
        
opacity: (_ref6 opts.opacity) != null _ref6 1.0,
        
sizeAttenuationtrue
      
});
      
this.max = (_ref7 opts.max) != null _ref7 1000;
      
this.spawnRate = (_ref8 opts.spawnRate) != null _ref8 0;
      
this.spawn = (_ref9 opts.spawn) != null _ref9 : new THREE.Vector3();
      
this.velocity = (_ref10 opts.velocity) != null _ref10 : new THREE.Vector3();
      
this.randomness = (_ref11 opts.randomness) != null _ref11 : new THREE.Vector3();
      
this.force = (_ref12 opts.force) != null _ref12 : new THREE.Vector3();
      
this.spawnRadius = (_ref13 opts.spawnRadius) != null _ref13 : new THREE.Vector3();
      
this.life = (_ref14 opts.life) != null _ref14 60;
      
this.ageing this.life;
      
this.friction = (_ref15 opts.friction) != null _ref15 1.0;
      
this.color = new THREE.Color((_ref16 opts.color) != null _ref16 0xffffff);
      
this.color2 opts.color2 != null ? new THREE.Color(opts.color2) : null;
      
this.position = (_ref17 opts.position) != null _ref17 : new THREE.Vector3();
      
this.rotation = (_ref18 opts.rotation) != null _ref18 : new THREE.Vector3();
      
this.sort = (_ref19 opts.sort) != null _ref19 false;
      
this.pool = [];
      
this.buffer = [];
      
this.geometry null;
      
this.system null;
      
this.build();
    }

    
/*
        Emits given number of particles
        @param  int count
    */


    
Particles.prototype.emit = function(count) {
      var 
emitableip_i_results;
      
emitable Math.min(countthis.pool.length);
      
_results = [];
      for (
_i 0<= emitable _i <= emitable _i >= emitable<= emitable ? ++_i : --_i) {
        
this.pool.pop();
        
p.available false;
        
p.position.copy(this.spawn).addSelf(this.randomVector().multiplySelf(this.spawnRadius));
        
p.velocity.copy(this.velocity).addSelf(this.randomVector().multiplySelf(this.randomness));
        
p.force.copy(this.force);
        
p.basecolor.copy(this.color);
        if (
this.color2 != null) {
          
p.basecolor.lerpSelf(this.color2Math.random());
        }
        
_results.push(p.life 1.0);
      }
      return 
_results;
    };

    
/*
        @private
    */


    
Particles.prototype.build = function() {
      var 
ip_i_ref;
      
this.geometry = new THREE.Geometry();
      
this.geometry.dynamic true;
      
this.pool = [];
      
this.buffer = [];
      for (
_i 0_ref this.max<= _ref _i <= _ref _i >= _ref<= _ref ? ++_i : --_i) {
        
= new bkcore.threejs.Particle();
        
this.pool.push(p);
        
this.buffer.push(p);
        
this.geometry.vertices.push(p.position);
        
this.geometry.colors.push(p.color);
      }
      
this.system = new THREE.ParticleSystem(this.geometrythis.material);
      
this.system.position this.position;
      
this.system.rotation this.rotation;
      return 
this.system.sort this.sort;
    };

    
/*
        @private
    */


    
Particles.prototype.randomVector = function() {
      return new 
THREE.Vector3(Math.random() * 1Math.random() * 1Math.random() * 1);
    };

    
/*
        Updates particles (should be call in a RAF loop)
        @param  float dt time delta ~1.0
    */


    
Particles.prototype.update = function(dt) {
      var 
dfdvilp_i_ref;
      
df = new THREE.Vector3();
      
dv = new THREE.Vector3();
      for (
_i 0_ref this.buffer.length<= _ref _i <= _ref _i >= _ref<= _ref ? ++_i : --_i) {
        
this.buffer[i];
        if (
p.available) {
          continue;
        }
        
p.life -= this.ageing;
        if (
p.life <= 0) {
          
p.reset();
          
this.pool.push(p);
          continue;
        }
        
p.life 0.5 1.0 p.life 0.5;
        
p.color.setRGB(p.basecolor.rp.basecolor.gp.basecolor.b);
        if (
this.friction !== 1.0) {
          
p.velocity.multiplyScalar(this.friction);
        }
        
df.copy(p.force).multiplyScalar(dt);
        
p.velocity.addSelf(df);
        
dv.copy(p.velocity).multiplyScalar(dt);
        
p.position.addSelf(dv);
      }
      if (
this.spawnRate 0) {
        
this.emit(this.spawnRate);
      }
      
this.geometry.verticesNeedUpdate true;
      return 
this.geometry.colorsNeedUpdate true;
    };

    return 
Particles;

  })();

  
/*
    Particle sub class
    
    @class bkcore.threejs.Particle
    @author Thibaut 'BKcore' Despoulain <http://bkcore.com>
  */


  
Particle = (function() {

    function 
Particle() {
      
this.position = new THREE.Vector3(-10000, -10000, -10000);
      
this.velocity = new THREE.Vector3();
      
this.force = new THREE.Vector3();
      
this.color = new THREE.Color(0x000000);
      
this.basecolor = new THREE.Color(0x000000);
      
this.life 0.0;
      
this.available true;
    }

    
Particle.prototype.reset = function() {
      
this.position.set(0, -1000000);
      
this.velocity.set(000);
      
this.force.set(000);
      
this.color.setRGB(000);
      
this.basecolor.setRGB(000);
      
this.life 0.0;
      return 
this.available true;
    };

    return 
Particle;

  })();

  
/*
    Exports
    @package bkcore.threejs
  */


  
exports exports != null exports this;

  
exports.bkcore || (exports.bkcore = {});

  (
_base exports.bkcore).threejs || (_base.threejs = {});

  
exports.bkcore.threejs.Particle Particle;

  
exports.bkcore.threejs.Particles Particles;

}).
call(this);
?>
Онлайн: 2
Реклама