public void RegisterEffect(string name, EmitterData data) { Emitters[name] = new ParticleEmitter(Components, name, Components.RootComponent, Matrix.Identity, data); Emitters[name].DepthSort = false; Emitters[name].Tint = Color.White; Emitters[name].FrustrumCull = false; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.applyv3quat_(value_, emitter.rotation()); particleImpl._Position = _math.addv3_(particleImpl._Position, emitter.position()); float rnd_ = 0F + emitter.random()() * (1F - 0F); float _path_in = _math.clamp_(rnd_, 0, 1); _math.PathRes _path_srch = _math.pathRes(0, (_path_in - 0F) * 1F); _math.vec2 _path_pos; _math.pathLerp1(out _path_pos, this._path[_path_srch.s], _path_srch.i); _math.vec3 conv3d_ = _math.vec3_(_path_pos.x, _path_pos.y, 0F); particleImpl._Velocity = _math.applyv3quat_(conv3d_, emitter.rotation()); particleImpl._Velocity = _math.addv3_(particleImpl._Velocity, emitter.velocity()); float rnd_a = 0F + emitter.random()() * (360F - 0F); particleImpl._Angle = rnd_a; float rnd_b = 0F + emitter.random()() * (4F - 0F); particleImpl._Tex__index = rnd_b; float rnd_c = -180F + emitter.random()() * (180F - -180F); particleImpl._Rot__speed = rnd_c; particle.position_ = particleImpl._Position; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.addv3_(value_, emitter.position()); float rnd_ = 100F + emitter.random()() * (500F - 100F); _math.vec3 randvec_ = _math.randv3gen_(rnd_, emitter.random()); particleImpl._Velocity = randvec_; particleImpl._Angle = 0F; float rnd_a = 10F + emitter.random()() * (20F - 10F); particleImpl._Size = rnd_a; float rnd_b = 0F + emitter.random()() * (1F - 0F); particleImpl._Color = rnd_b; particle.position_ = particleImpl._Position; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); bool toTerminate = false; particleImpl._lifetime += dt; _math.vec3 move_ = _math.addv3_(particleImpl._Position, _math.mulv3scalar_(particleImpl._Velocity, dt)); particleImpl._Position = move_; particle.position_ = particleImpl._Position; float value_ = 2F; toTerminate |= (particleImpl._lifetime > value_); toTerminate |= TermPath.intersectTree(particleImpl.prevPosition_, _math.vec2_(particle.position_.x, particle.position_.y), _term_path); float value_a = 10F; particleImpl.size1_ = value_a; if (toTerminate) { particle.dead_ = true; } }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 noise_a = _math.mulv3scalar_(_math.vec3_(100F, 50F, 30F), emitter.effect().time()); _math.addv3(out noise_a, noise_a, particleImpl._Position); _math.vec3 noise_i = _math.mulv3scalar_(noise_a, 1.0F / 1000F); _math.vec3 noise = _math.noisePixelLinear3_(noise_i); _math.mulv3(out noise, noise, _math.vec3_(0.0078125F, 0.0078125F, 0.0078125F)); _math.addv3(out noise, noise, _math.vec3_(-1F, -1F, -1F)); _math.mulv3scalar(out noise, noise, 200F); _math.vec3 fmove_fs = noise; _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); _math.vec3 fmove_v = _math.addv3_(particleImpl._Velocity, _math.mulv3scalar_(fmove_fs, dt)); _math.vec3 fmove_p = _math.mulv3scalar_(fmove_v, dt); _math.addv3(out fmove_p, fmove_p, particleImpl._Position); particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; float value_ = 2F; if (particleImpl._lifetime > value_) { particle.dead_ = true; } float value_a = 10F; particleImpl.size1_ = value_a; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; particle.position_ = particleImpl._Position; ((Emitter_Sparks.EmitterData)particleImpl.attachedEmitters_[0].emitter_.data())._Color1 = emitterData._SparksColor1; ((Emitter_Sparks.EmitterData)particleImpl.attachedEmitters_[0].emitter_.data())._Color2 = emitterData._SparksColor2; particleImpl.attachedEmitters_[0].emitter_.update(dt, particle.position_, null); float value_ = 0.3F; if (particleImpl._lifetime > value_) { particle.dead_ = true; particleImpl.attachedEmitters_[0].emitter_.stop(); } float value_a = 100F; float expr_ = (particleImpl._lifetime / value_); float _plot_out; float _plot_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plot_srch0 = _plot_in0 < 0.0292826?_math.pathRes(0, (_plot_in0 - 0F) * 34.15F):_math.pathRes(1, (_plot_in0 - 0.0292826F) * 15.4525F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float expr_a = (value_a * _plot_out); particleImpl.size1_ = expr_a; particleImpl.color_ = emitterData._Color; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 value_ = _math.vec3_(0F, -100F, 0F); _math.vec3 fmove_fs = value_; _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 0.3F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; if (particleImpl._lifetime > particleImpl._Max_Life) { particle.dead_ = true; } float value_a = 30F; _math.vec3 expr_ = _math.addv3_(particleImpl._Color, _math.mulv3scalar_(_math.subv3_(emitterData._Color2, particleImpl._Color), particleImpl._Colora)); float expr_a = (particleImpl._lifetime / particleImpl._Max_Life); float _plota_out; float _plota_in0 = (expr_a < 0F?0F:(expr_a > 1F?1F:expr_a)); _math.PathRes _plota_srch0 = _plota_in0 < 0.79269?_math.pathRes(0, (_plota_in0 - 0F) * 1.26153F):_math.pathRes(1, (_plota_in0 - 0.79269F) * 4.82369F); _math.funcLerp(out _plota_out, this._plota[0][_plota_srch0.s], _plota_srch0.i); particleImpl.size1_ = value_a; particleImpl.color_ = expr_; particleImpl.alpha_ = _plota_out; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 value_ = _math.vec3_(0F, 100F, 0F); _math.vec3 fmove_fs = value_; _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 1F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; float value_a = 2F; if (particleImpl._lifetime > value_a) { particle.dead_ = true; } float value_b = 30F; particleImpl.size1_ = value_b; }
public override void Activate(object source, CogData data) { if (data != null && data.ObjectData != null) { // VectorData will always be available even if it's a (0, 0) value EmitterData ed = data.ObjectData as EmitterData; GameObject projectile = CreateInstance(ed.TemplateObject); Rigidbody2D phys = projectile.GetComponent <Rigidbody2D>(); projectile.transform.position = ed.Position; phys.AddForce(ed.Magnitude, ForceMode2D.Impulse); // TODO: Need to attach the context to the projectile somehow } base.Activate(source, data); }
public override void initParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.addv3_(value_, emitter.position()); _math.vec3 randvec_ = _math.randv3gen_(0F, emitter.random()); particleImpl._Velocity = randvec_; particleImpl._Angle = 0F; particle.position_ = particleImpl._Position; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.addv3_(value_, emitter.position()); particleImpl._Angle = 0F; particle.position_ = particleImpl._Position; particleImpl.attachedEmitters_[0].emitter_.reset(particle.position_, null); particleImpl.attachedEmitters_[0].emitter_.start(); ((Emitter_Sparks.EmitterData)particleImpl.attachedEmitters_[0].emitter_.data())._Color1 = emitterData._SparksColor1; ((Emitter_Sparks.EmitterData)particleImpl.attachedEmitters_[0].emitter_.data())._Color2 = emitterData._SparksColor2; }
private void UpdateParticleEmitter(KSPParticleEmitter pe) { var factor = _ts.scalingFactor; if (!_scales.ContainsKey(pe)) { _scales[pe] = new EmitterData(pe); } var ed = _scales[pe]; pe.minSize = ed.minSize * factor.absolute.linear; pe.maxSize = ed.maxSize * factor.absolute.linear; pe.shape1D = ed.shape1D * factor.absolute.linear; pe.shape2D = ed.shape2D * factor.absolute.linear; pe.shape3D = ed.shape3D * factor.absolute.linear; pe.force = ed.force * factor.absolute.linear; pe.localVelocity = ed.localVelocity * factor.absolute.linear; }
void UpdateParticleEmitter(KSPParticleEmitter pe) { if (pe == null) { return; } if (!orig_scales.ContainsKey(pe)) { orig_scales[pe] = new EmitterData(pe); } var ed = orig_scales[pe]; pe.minSize = ed.MinSize * scale; pe.maxSize = ed.MaxSize * scale; pe.shape1D = ed.Shape1D * scale; pe.shape2D = ed.Shape2D * scale; pe.shape3D = ed.Shape3D * scale; pe.force = ed.Force * scale; pe.localVelocity = ed.LocalVelocity * scale; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.applyv3quat_(value_, emitter.rotation()); particleImpl._Position = _math.addv3_(particleImpl._Position, emitter.position()); particleImpl._Angle = 0F; float rnd_ = 5F + emitter.random()() * (30F - 5F); particleImpl._Size = rnd_; float rnd_a = 0F + emitter.random()() * (1F - 0F); _math.vec3 _plot_out; float _plot_in0 = (rnd_a < 0F?0F:(rnd_a > 0.9F?0.9F:rnd_a)); _math.PathRes _plot_srch0 = _plot_in0 < 0.6?_plot_in0 < 0.3?_math.pathRes(0, (_plot_in0 - 0F) * 3.33333F):_math.pathRes(1, (_plot_in0 - 0.3F) * 3.33333F):_math.pathRes(2, (_plot_in0 - 0.6F) * 3.33333F); _math.funcLerp(out _plot_out.x, this._plot[0][_plot_srch0.s], _plot_srch0.i); float _plot_in1 = (rnd_a < 0F?0F:(rnd_a > 0.6F?0.6F:rnd_a)); _math.PathRes _plot_srch1 = _plot_in1 < 0.3?_math.pathRes(0, (_plot_in1 - 0F) * 3.33333F):_math.pathRes(1, (_plot_in1 - 0.3F) * 3.33333F); _math.funcLerp(out _plot_out.y, this._plot[1][_plot_srch1.s], _plot_srch1.i); float _plot_in2 = (rnd_a < 0F?0F:(rnd_a > 0.9F?0.9F:rnd_a)); _math.PathRes _plot_srch2 = _plot_in2 < 0.6?_plot_in2 < 0.3?_math.pathRes(0, (_plot_in2 - 0F) * 3.33333F):_math.pathRes(1, (_plot_in2 - 0.3F) * 3.33333F):_math.pathRes(2, (_plot_in2 - 0.6F) * 3.33333F); _math.funcLerp(out _plot_out.z, this._plot[2][_plot_srch2.s], _plot_srch2.i); particleImpl._Color = _plot_out; float rnd_b = 0F + emitter.random()() * (800F - 0F); _math.vec3 randvec_ = _math.randv3gen_(rnd_b, emitter.random()); particleImpl._Velocity = _math.applyv3quat_(randvec_, emitter.rotation()); particleImpl._Velocity = _math.addv3_(particleImpl._Velocity, emitter.velocity()); particle.position_ = particleImpl._Position; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.applyv3quat_(value_, emitter.rotation()); particleImpl._Position = _math.addv3_(particleImpl._Position, emitter.position()); particleImpl._Angle = 0F; float rnd_ = 0F + emitter.random()() * (5F - 0F); particleImpl._Tex__index = rnd_; _math.vec3 randvec_ = _math.randv3gen_(100F, emitter.random()); particleImpl._Velocity = _math.applyv3quat_(randvec_, emitter.rotation()); particleImpl._Velocity = _math.addv3_(particleImpl._Velocity, emitter.velocity()); particle.position_ = particleImpl._Position; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; float move_ = particleImpl._Angle + particleImpl._Rot__speed * dt; particleImpl._Angle = move_; particle.position_ = particleImpl._Position; float value_ = 4F; if (particleImpl._lifetime > value_) { particle.dead_ = true; } float value_a = 120F; float expr_ = (particleImpl._lifetime / value_); float _plot_out; float _plot_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plot_srch0 = _math.pathRes(0, (_plot_in0 - 0F) * 15F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float expr_a = (value_a * _plot_out); _math.vec3 expr_b = _math.addv3_(emitterData._Color1, _math.mulv3scalar_(_math.subv3_(emitterData._Color2, emitterData._Color1), particleImpl._Color)); float _plota_out; float _plota_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plota_srch0 = _plota_in0 < 0.4?_math.pathRes(0, (_plota_in0 - 0F) * 2.5F):_math.pathRes(1, (_plota_in0 - 0.4F) * 1.66667F); _math.funcLerp(out _plota_out, this._plota[0][_plota_srch0.s], _plota_srch0.i); particleImpl.size1_ = expr_a; particleImpl.color_ = expr_b; particleImpl.alpha_ = _plota_out; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.addv3_(value_, emitter.position()); float rnd_ = 0F + emitter.random()() * (360F - 0F); particleImpl._Angle = rnd_; float rnd_a = 0F + emitter.random()() * (1F - 0F); particleImpl._Color = rnd_a; float rnd_b = 0F + emitter.random()() * (-90F - 0F); particleImpl._Rot__speed = rnd_b; particle.position_ = particleImpl._Position; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 move_ = _math.addv3_(particleImpl._Position, _math.mulv3scalar_(particleImpl._Velocity, dt)); particleImpl._Position = move_; particle.position_ = particleImpl._Position; float value_ = 2F; if (particleImpl._lifetime > value_) { particle.dead_ = true; } float value_a = 30F; particleImpl.size1_ = value_a; particleImpl.color_ = emitterData._Color; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; float rnd_ = 1F + emitter.random()() * (3F - 1F); particleImpl._Max_Life = rnd_; _math.vec3 value_ = _math.vec3_(0F, 0F, 0F); particleImpl._Position = _math.addv3_(value_, emitter.position()); float rnd_a = 0F + emitter.random()() * (1F - 0F); float _plot_out; float _plot_in0 = (rnd_a < 0F?0F:(rnd_a > 1F?1F:rnd_a)); _math.PathRes _plot_srch0 = _math.pathRes(0, (_plot_in0 - 0F) * 15F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float _path_in = _math.clamp_(_plot_out, 0, 1); _math.PathRes _path_srch = _math.pathRes(0, (_path_in - 0F) * 1F); _math.vec2 _path_pos; _math.pathLerp1(out _path_pos, this._path[_path_srch.s], _path_srch.i); _math.vec3 conv3d_ = _math.vec3_(_path_pos.x, _path_pos.y, 0F); particleImpl._Velocity = _math.applyv3quat_(conv3d_, emitter.rotation()); particleImpl._Velocity = _math.addv3_(particleImpl._Velocity, emitter.velocity()); particleImpl._Angle = 0F; particleImpl._Color = emitterData._Color1; float rnd_b = 0F + emitter.random()() * (1F - 0F); particleImpl._Colora = rnd_b; particle.position_ = particleImpl._Position; }
public override void initBurstParticle(Emitter emitter, Particle particle) { ParticleImpl particleImpl = (ParticleImpl)particle; float dt = 0; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime = 0F; float rnd_ = 0F + emitter.random()() * (1F - 0F); float _path_in = _math.clamp_(rnd_, 0, 1); _math.PathRes _path_srch = _path_in < 0.495668?_math.pathRes(0, (_path_in - 0F) * 2.01748F):_math.pathRes(1, (_path_in - 0.495668F) * 1.98282F); _math.vec2 _path_pos; _math.pathLerp1(out _path_pos, this._path[_path_srch.s], _path_srch.i); _math.vec3 conv3d_ = _math.vec3_(_path_pos.x, _path_pos.y, 0F); particleImpl._Position = _math.addv3_(conv3d_, emitter.position()); _math.vec3 randvec_ = _math.randv3gen_(100F, emitter.random()); particleImpl._Velocity = randvec_; particleImpl._Angle = 0F; particle.position_ = particleImpl._Position; _math.setv2(out particleImpl.prevPosition_, particle.position_.x, particle.position_.y); }
private void UpdateParticleEmitter(KSPParticleEmitter pe) { if (pe == null) { return; } ScalingFactor factor = _ts.ScalingFactor; if (!_scales.ContainsKey(pe)) { _scales[pe] = new EmitterData(pe); } EmitterData ed = _scales[pe]; pe.minSize = ed.MinSize * factor.absolute.linear; pe.maxSize = ed.MaxSize * factor.absolute.linear; pe.shape1D = ed.Shape1D * factor.absolute.linear; pe.shape2D = ed.Shape2D * factor.absolute.linear; pe.shape3D = ed.Shape3D * factor.absolute.linear; pe.force = ed.Force * factor.absolute.linear; pe.localVelocity = ed.LocalVelocity * factor.absolute.linear; }
/// <summary> /// Creates all the static particle emitters used in the game. /// </summary> public void CreateParticles() { ParticleManager = new ParticleManager(ComponentManager); // Smoke EmitterData puff = ParticleManager.CreatePuffLike("puff", new SpriteSheet(ContentPaths.Particles.puff), Point.Zero, BlendState.AlphaBlend); ParticleManager.RegisterEffect("puff", puff); // Bubbles EmitterData bubble = ParticleManager.CreatePuffLike("splash2", new SpriteSheet(ContentPaths.Particles.splash2), Point.Zero, BlendState.AlphaBlend); bubble.ConstantAccel = new Vector3(0, 5, 0); bubble.EmissionSpeed = 3; bubble.LinearDamping = 0.9f; bubble.GrowthSpeed = -2.5f; bubble.MinScale = 1.5f; bubble.MaxScale = 2.5f; bubble.ParticleDecay = 1.5f; bubble.HasLighting = false; ParticleManager.RegisterEffect("splash2", bubble); EmitterData splat = ParticleManager.CreatePuffLike("splat", new SpriteSheet(ContentPaths.Particles.splat), Point.Zero, BlendState.AlphaBlend); splat.ConstantAccel = Vector3.Zero; splat.EmissionRadius = 0.01f; splat.EmissionSpeed = 0.0f; splat.GrowthSpeed = -1.75f; splat.MinAngle = -0.0f; splat.MaxAngle = 0.0f; splat.MinAngular = -0.01f; splat.MaxAngular = 0.01f; splat.MaxParticles = 500; splat.MinScale = 0.05f; splat.ParticleDecay = 1.5f; splat.HasLighting = false; splat.MaxScale = 1.1f; splat.EmitsLight = false; ParticleManager.RegisterEffect("splat", splat); EmitterData heart = ParticleManager.CreatePuffLike("heart", new SpriteSheet(ContentPaths.Particles.heart), Point.Zero, BlendState.AlphaBlend); heart.MinAngle = 0.01f; heart.MaxAngle = 0.01f; heart.MinAngular = 0.0f; heart.MinAngular = 0.0f; heart.ConstantAccel = Vector3.Up * 20; ParticleManager.RegisterEffect("heart", heart); // Fire SpriteSheet fireSheet = new SpriteSheet(ContentPaths.Particles.more_flames, 32, 32); EmitterData flame = ParticleManager.CreatePuffLike("flame", fireSheet, Point.Zero, BlendState.AlphaBlend); flame.ConstantAccel = Vector3.Up*20; flame.EmissionSpeed = 2; flame.GrowthSpeed = -1.9f; flame.MinAngle = -0.2f; flame.MaxAngle = 0.2f; flame.MinAngular = -0.01f; flame.MaxAngular = 0.01f; flame.MaxParticles = 500; flame.MinScale = 0.2f; flame.HasLighting = false; flame.MaxScale = 2.0f; flame.EmitsLight = true; flame.Blend = new BlendState() { AlphaSourceBlend = Blend.One, AlphaDestinationBlend = Blend.InverseSourceAlpha, ColorDestinationBlend = Blend.InverseSourceAlpha, ColorSourceBlend = Blend.One }; ParticleManager.RegisterEffect("flame", flame, flame.Clone(fireSheet, new Point(1, 0)), flame.Clone(fireSheet, new Point(2, 0)), flame.Clone(fireSheet, new Point(3, 0))); EmitterData greenFlame = ParticleManager.CreatePuffLike("green_flame", new SpriteSheet(ContentPaths.Particles.green_flame), new Point(0, 0), BlendState.Additive); greenFlame.ConstantAccel = Vector3.Up * 20; greenFlame.EmissionSpeed = 2; greenFlame.GrowthSpeed = -1.9f; greenFlame.MinAngle = -0.2f; greenFlame.MaxAngle = 0.2f; greenFlame.MinAngular = -0.01f; greenFlame.MaxAngular = 0.01f; greenFlame.HasLighting = false; ParticleManager.RegisterEffect("green_flame", greenFlame); List<Point> frm2 = new List<Point> { new Point(0, 0) }; // Leaves EmitterData testData2 = new EmitterData { Animation = new Animation(GraphicsDevice, new SpriteSheet(ContentPaths.Particles.leaf), "leaf", 32, 32, frm2, true, Color.White, 1.0f, 1.0f, 1.0f, false), ConstantAccel = new Vector3(0, -10, 0), LinearDamping = 0.95f, AngularDamping = 0.99f, EmissionFrequency = 1.0f, EmissionRadius = 2.0f, EmissionSpeed = 5.0f, GrowthSpeed = -0.5f, MaxAngle = 3.14159f, MinAngle = 0.0f, MaxParticles = 1000, MaxScale = 0.5f, MinScale = 0.1f, MinAngular = -5.0f, MaxAngular = 5.0f, ParticleDecay = 0.5f, ParticlesPerFrame = 0, Sleeps = true, ReleaseOnce = true, CollidesWorld = true, Texture = TextureManager.GetTexture(ContentPaths.Particles.leaf) }; ParticleManager.RegisterEffect("Leaves", testData2); // Various resource explosions ParticleManager.CreateGenericExplosion(ContentPaths.Particles.dirt_particle, "dirt_particle"); EmitterData stars = ParticleManager.CreatePuffLike( "star_particle", new SpriteSheet(ContentPaths.Particles.star_particle), new Point(0, 0), BlendState.Additive); stars.MinAngle = -0.1f; stars.MaxAngle = 0.1f; stars.MinScale = 0.2f; stars.MaxScale = 0.5f; stars.AngularDamping = 0.99f; stars.LinearDamping = 0.999f; stars.GrowthSpeed = -0.8f; stars.EmissionFrequency = 5; stars.CollidesWorld = false; stars.HasLighting = false; ParticleManager.RegisterEffect("star_particle", stars); ParticleManager.CreateGenericExplosion(ContentPaths.Particles.stone_particle, "stone_particle"); ParticleManager.CreateGenericExplosion(ContentPaths.Particles.sand_particle, "sand_particle"); ParticleManager.CreateGenericExplosion(ContentPaths.Particles.dirt_particle, "dirt_particle"); SpriteSheet bloodSheet = new SpriteSheet(ContentPaths.Particles.gibs, 32, 32); // Blood explosion // ParticleEmitter b = ParticleManager.CreateGenericExplosion(ContentPaths.Particles.blood_particle, "blood_particle").Emitters[0]; EmitterData b = ParticleManager.CreateExplosionLike("blood_particle", bloodSheet, Point.Zero, BlendState.AlphaBlend); b.MinScale = 0.75f; b.MaxScale = 1.0f; b.Damping = 0.1f; b.GrowthSpeed = -0.8f; b.RotatesWithVelocity = true; ParticleManager.RegisterEffect("blood_particle", b); ParticleManager.RegisterEffect("gibs", b.Clone(bloodSheet, new Point(1, 0)), b.Clone(bloodSheet, new Point(2, 0)), b.Clone(bloodSheet, new Point(3, 0))); }
public override void updateEmitter(Emitter emitter) { EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 value_ = _math.vec3_(0F, -300F, 0F); _math.vec3 fmove_fs = value_; _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 1F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; float move_ = particleImpl._Angle + particleImpl._Rot__speed * dt; particleImpl._Angle = move_; particle.position_ = particleImpl._Position; float value_a = 2F; if (particleImpl._lifetime > value_a) { particle.dead_ = true; } float value_b = 30F; float _plot_out; float _plot_in0 = (particleImpl._lifetime < 0F?0F:(particleImpl._lifetime > 1F?1F:particleImpl._lifetime)); _math.PathRes _plot_srch0 = _math.pathRes(0, (_plot_in0 - 0F) * 1F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float expr_ = (value_b * _plot_out); float expr_a = (particleImpl._lifetime / value_a); float _plota_out; float _plota_in0 = (expr_a < 0F?0F:(expr_a > 1F?1F:expr_a)); _math.PathRes _plota_srch0 = _math.pathRes(0, (_plota_in0 - 0F) * 1F); _math.funcLerp(out _plota_out, this._plota[0][_plota_srch0.s], _plota_srch0.i); particleImpl.size1_ = expr_; particleImpl.alpha_ = _plota_out; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 value_ = _math.vec3_(0F, 400F, 0F); _math.vec3 noise_a = _math.mulv3scalar_(_math.vec3_(100F, 50F, 30F), emitter.effect().time()); _math.addv3(out noise_a, noise_a, particleImpl._Position); _math.vec3 noise_i = _math.mulv3scalar_(noise_a, 1.0F / 1000F); _math.vec3 noise = _math.noisePixelLinear3_(noise_i); _math.mulv3(out noise, noise, _math.vec3_(0.0078125F, 0.0078125F, 0.0078125F)); _math.addv3(out noise, noise, _math.vec3_(-1F, -1F, -1F)); _math.mulv3scalar(out noise, noise, 200F); _math.vec3 fmove_fs = value_; _math.addv3(out fmove_fs, fmove_fs, noise); _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 1F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; float value_a = 1.5F; float expr_ = (particleImpl._lifetime / value_a); float _plot_out; float _plot_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plot_srch0 = _math.pathRes(0, (_plot_in0 - 0F) * 15F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float move_ = particleImpl._Angle + _plot_out * dt; particleImpl._Angle = move_; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; if (particleImpl._lifetime > value_a) { particle.dead_ = true; } float value_b = 40F; float _plota_out; float _plota_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plota_srch0 = _plota_in0 < 0.2?_math.pathRes(0, (_plota_in0 - 0F) * 75F):_math.pathRes(1, (_plota_in0 - 0.2F) * 18.75F); _math.funcLerp(out _plota_out, this._plota[0][_plota_srch0.s], _plota_srch0.i); float expr_a = (value_b * _plota_out); float _plotb_out; float _plotb_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plotb_srch0 = _plotb_in0 < 0.1?_math.pathRes(0, (_plotb_in0 - 0F) * 10F):_math.pathRes(1, (_plotb_in0 - 0.1F) * 16.6667F); _math.funcLerp(out _plotb_out, this._plotb[0][_plotb_srch0.s], _plotb_srch0.i); particleImpl.size1_ = expr_a; particleImpl.alpha_ = _plotb_out; }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 value_ = _math.vec3_(0F, 800F, 0F); _math.vec3 noise_a = _math.mulv3scalar_(_math.vec3_(100F, 50F, 30F), emitter.effect().time()); _math.addv3(out noise_a, noise_a, particleImpl._Position); _math.vec3 noise_i = _math.mulv3scalar_(noise_a, 1.0F / 1000F); _math.vec3 noise = _math.noisePixelLinear3_(noise_i); _math.mulv3(out noise, noise, _math.vec3_(0.0078125F, 0.0078125F, 0.0078125F)); _math.addv3(out noise, noise, _math.vec3_(-1F, -1F, -1F)); _math.mulv3scalar(out noise, noise, 1200F); _math.vec3 fmove_fs = value_; _math.addv3(out fmove_fs, fmove_fs, noise); _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 1F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; if (particleImpl._lifetime > particleImpl._Max_Life) { particle.dead_ = true; } _math.vec2 value_a = _math.vec2_(6F, 6F); float _plot_out; float _plot_in0 = (particleImpl._lifetime < 0F?0F:(particleImpl._lifetime > 1.35236F?(0F + ((particleImpl._lifetime - 0F) % 1.35236F)):particleImpl._lifetime)); _math.PathRes _plot_srch0 = _plot_in0 < 0.739748?_plot_in0 < 0.4?_plot_in0 < 0.1?_math.pathRes(0, (_plot_in0 - 0F) * 10F):_math.pathRes(1, (_plot_in0 - 0.1F) * 3.33333F):_plot_in0 < 0.558348?_math.pathRes(2, (_plot_in0 - 0.4F) * 6.3152F):_math.pathRes(3, (_plot_in0 - 0.558348F) * 5.51269F):_plot_in0 < 1.03367?_plot_in0 < 0.833292?_math.pathRes(4, (_plot_in0 - 0.739748F) * 10.6901F):_math.pathRes(5, (_plot_in0 - 0.833292F) * 4.99066F):_plot_in0 < 1.2?_math.pathRes(6, (_plot_in0 - 1.03367F) * 6.01203F):_math.pathRes(7, (_plot_in0 - 1.2F) * 6.56334F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); particleImpl.size2_ = value_a; particleImpl.alpha_ = _plot_out; }
public override void OnEnter() { dorfs = new List<Person>(); players = new List<Player>(); aiPlayers = new List<Player>(); hospitals = new List<Hospital>() ; Bloom = new BloomPostprocess.BloomComponent(Game); Bloom.Initialize(); Bloom.Settings = BloomPostprocess.BloomSettings.PresetSettings[5]; IsInitialized = true; MapHeight = 40; MapWidth = 40; Player.defib = new Player.defibCallbackType(defib); online = false; // DO NOT CHANGE, offline mode is now detected when server connection is refused SoundManager.Content = Game.Content; Camera = new OrbitCamera(Game.GraphicsDevice, 0, 0, 0.001f, new Vector3(0, 15, 0), new Vector3(-10, 10, 0), (float)Math.PI * 0.25f, Game.GraphicsDevice.Viewport.AspectRatio, 0.1f, 1000.0f); ComponentManager = new ComponentManager(); ComponentManager.RootComponent = new LocatableComponent(ComponentManager, "root", null, Matrix.Identity, Vector3.Zero, Vector3.Zero); notification = null; particles = new ParticleManager(ComponentManager); EmitterData testData = new EmitterData(); testData.AngularDamping = 1.0f; List<Point> frm = new List<Point>(); frm.Add(new Point(0, 0)); frm.Add(new Point(1, 0)); frm.Add(new Point(0, 1)); frm.Add(new Point(1, 1)); testData.Animation = new Animation(Game.GraphicsDevice, Game.Content.Load<Texture2D>("electricity"), "electricity", 32, 32, frm, true, Color.White, 20f, 1.0f, 1.0f, false); testData.ConstantAccel = new Vector3(0, -1, 0); testData.LinearDamping = 0.9f; testData.AngularDamping = 0.9f; testData.EmissionFrequency = 1.0f; testData.EmissionRadius = 1.0f; testData.EmissionSpeed = 20.0f; testData.GrowthSpeed = -0.9f; testData.MaxAngle = 3.14159f; testData.MinAngle = 0.0f; testData.MaxParticles = 1000; testData.MaxScale = 1.0f; testData.MinScale = 0.1f; testData.MinAngular = -5.0f; testData.MaxAngular = 5.0f; testData.ParticleDecay = 0.1f; testData.ParticlesPerFrame = 0; testData.ReleaseOnce = true; testData.Texture = Game.Content.Load<Texture2D>("electricity"); particles.RegisterEffect("shock", testData); ChargeCooldown = 1.0f; CurrentChargeCooldown = 1.0f; InputManager inputManager = new InputManager(); InputManager.KeyPressedCallback += pressKey; InputManager.KeyReleasedCallback += releaseKey; sounds = new SoundManager(); wordsDict = new Dictionary<string, string>(); wordsDict.Add("MONSTER SAVE", "monstersave"); wordsDict.Add("DOUBLE SAVE", "doublesave"); wordsDict.Add("TRIPLE SAVE", "triplesave"); drawer2D = new Drawer2D(Game.Content, Game.GraphicsDevice); client = new Client(online); string name = client.Connect(); if (name == "error") { Console.Out.WriteLine("connection refused"); name = "0"; online = false; } Hospital hospital1 = new Hospital(new Vector3(-10, 0, -10), new Vector3(4, 2, 3), ComponentManager, Game.Content, Game.GraphicsDevice, "hospital", Color.Red, new Point(2, 0)); Hospital hospital2 = new Hospital(new Vector3(12, 0, 12), new Vector3(4, 2, 3), ComponentManager, Game.Content, Game.GraphicsDevice, "hospital", Color.Blue, new Point(1, 0)); hospitals.Add(hospital1); hospitals.Add(hospital2); Random r = new Random(1); for (int i = 0; i < 20; i++) // fnord { NPC npc; switch ((int)(detRand(r) * 3)) { case (0): npc = new Smoker(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; case (1): npc = new Fatter(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; case (2): npc = new Older(new Vector3(detRand(r) * 9, 5, detRand(r) * 10), ComponentManager, Game.Content, Game.GraphicsDevice); break; default: /* graphics don't exist yet, never reached */ npc = new Worker(new Vector3(detRand(r) * 9, 5, detRand(r) * 10 - 0), ComponentManager, Game.Content, Game.GraphicsDevice); break; } npc.velocityController.MaxSpeed = 1; npc.SetTag((i + 1000).ToString()); int al = (int)(detRand(r) * 2); npc.Team = hospitals[al]; npc.Velocity = new Vector3(0f, -0.5f, 0f); npc.HasMoved = true; dorfs.Add(npc); } player = new Player(name, new Vector3(hospital1.Component.LocalTransform.Translation.X + 5, hospital1.Component.LocalTransform.Translation.Y, hospital1.Component.LocalTransform.Translation.Z), ComponentManager, Game.Content, Game.GraphicsDevice, "surgeonwalk"); player.Velocity = new Vector3(0f, -0.5f, 0f); player.HasMoved = true; dorfs.Add(player); players.Add(player); if (!online) { aiPlayers.Add(new Player("1", new Vector3(hospital2.Component.LocalTransform.Translation.X - 5, hospital2.Component.LocalTransform.Translation.Y, hospital2.Component.LocalTransform.Translation.Z), ComponentManager, Game.Content, Game.GraphicsDevice, "surgeonwalk")); players.Add(aiPlayers.ElementAt(0)); dorfs.Add(aiPlayers.ElementAt(0)); aiPlayers.ElementAt(0).team = hospital2; VelocityController velocityController4 = new VelocityController(aiPlayers.ElementAt(0)); velocityController4.IsTracking = true; } VelocityController velocityController3 = new VelocityController(player); velocityController3.IsTracking = true; Vector3 boundingBoxPos = new Vector3(0, -2, 0); Vector3 boundingBoxExtents = new Vector3(MapWidth, 4, MapHeight); Vector3 boundingBoxMin = boundingBoxPos - boundingBoxExtents * 0.5f; Vector3 boundingBoxMax = boundingBoxPos + boundingBoxExtents * 0.5f; ground = (LocatableComponent)EntityFactory.GenerateBlankBox(new BoundingBox(boundingBoxMin, boundingBoxMax), ComponentManager, Game.Content, Game.GraphicsDevice, "newground", Point.Zero, Point.Zero, 128, 128); if (Convert.ToInt32(name) % 2 == 0) player.team = hospital1; else player.team = hospital2; SpriteBatch = new SpriteBatch(Game.GraphicsDevice); Shader = Game.Content.Load<Effect>("Hargraves"); SunMap = Game.Content.Load<Texture2D>("sungradient"); AmbientMap = Game.Content.Load<Texture2D>("ambientgradient"); TorchMap = Game.Content.Load<Texture2D>("torchgradient"); if (online) { AddNotification("Mash Space to Begin"); } base.OnEnter(); }
public override void updateParticle(Emitter emitter, Particle particle, float dt) { ParticleImpl particleImpl = (ParticleImpl)particle; EmitterData emitterData = (EmitterData)emitter.data(); GeneratorPeriodic generator = (GeneratorPeriodic)emitter.generator(); GeneratorImpl generatorImpl = (GeneratorImpl)generator.impl(); particleImpl._lifetime += dt; _math.vec3 noise_a = _math.mulv3scalar_(_math.vec3_(100F, 50F, 30F), emitter.effect().time()); _math.addv3(out noise_a, noise_a, particleImpl._Position); _math.vec3 noise_i = _math.mulv3scalar_(noise_a, 1.0F / 500F); _math.vec3 noise = _math.noisePixelLinear3_(noise_i); _math.mulv3(out noise, noise, _math.vec3_(0.0078125F, 0.0078125F, 0.0078125F)); _math.addv3(out noise, noise, _math.vec3_(-1F, -1F, -1F)); _math.mulv3scalar(out noise, noise, 600F); _math.vec3 fmove_fs = noise; _math.vec3 fmove_vs = _math.vec3_(0F, 0F, 0F); float fmove_dtl = dt; _math.vec3 fmove_v = particleImpl._Velocity; _math.vec3 fmove_p = particleImpl._Position; while (fmove_dtl > 0.0001F) { float fmove_dtp = fmove_dtl; _math.vec3 fmove_fsd = fmove_fs; _math.vec3 fmove_rw = _math.subv3_(fmove_vs, fmove_v); float fmove_rwl = _math.lengthv3sq_(fmove_rw); if (fmove_rwl > 0.0001F) { fmove_rwl = (float)Math.Sqrt(fmove_rwl); _math.vec3 fmove_rwn = _math.divv3scalar_(fmove_rw, fmove_rwl); float fmove_df = 0.01F * 1F * fmove_rwl; if (fmove_df * fmove_dtp > 0.2F) { fmove_dtp = 0.2F / fmove_df; } _math.addv3(out fmove_fsd, fmove_fsd, _math.mulv3scalar_(fmove_rwn, fmove_rwl * fmove_df)); } _math.addv3(out fmove_v, fmove_v, _math.mulv3scalar_(fmove_fsd, fmove_dtp)); _math.addv3(out fmove_p, fmove_p, _math.mulv3scalar_(fmove_v, fmove_dtp)); fmove_dtl -= fmove_dtp; } particleImpl._Position = fmove_p; particleImpl._Velocity = fmove_v; particle.position_ = particleImpl._Position; float value_ = 2F; if (particleImpl._lifetime > value_) { particle.dead_ = true; } float expr_ = (particleImpl._lifetime / value_); float _plot_out; float _plot_in0 = (expr_ < 0F?0F:(expr_ > 1F?1F:expr_)); _math.PathRes _plot_srch0 = _math.pathRes(0, (_plot_in0 - 0F) * 1F); _math.funcLerp(out _plot_out, this._plot[0][_plot_srch0.s], _plot_srch0.i); float expr_a = (particleImpl._Size * _plot_out); _math.vec3 expr_b = _math.addv3_(emitterData._Color1, _math.mulv3scalar_(_math.subv3_(emitterData._Color2, emitterData._Color1), particleImpl._Color)); particleImpl.size1_ = expr_a; particleImpl.color_ = expr_b; }