void ParticleSystem::init(MPQFile &f, ModelParticleEmitterDef &mta, int *globals) { speed.init (mta.params[0], f, globals); variation.init(mta.params[1], f, globals); spread.init (mta.params[2], f, globals); lat.init (mta.params[3], f, globals); gravity.init (mta.params[4], f, globals); lifespan.init(mta.params[5], f, globals); rate.init (mta.params[6], f, globals); areal.init (mta.params[7], f, globals); areaw.init (mta.params[8], f, globals); grav2.init (mta.params[9], f, globals); for (size_t i=0; i<3; i++) { colors[i] = fromARGB(mta.p.colors[i]); sizes[i] = mta.p.sizes[i];// * mta.p.scales[i]; } mid = mta.p.mid; slowdown = mta.p.slowdown; rotation = mta.p.rotation; pos = fixCoordSystem(mta.pos); texture = model->textures[mta.texture]; blend = mta.blend; rows = mta.rows; cols = mta.cols; type = mta.s1; //order = mta.s2; order = mta.s1>0 ? -1 : 0; parent = model->bones + mta.bone; switch (mta.type) { case 1: emitter = new PlaneParticleEmitter(this); break; case 2: emitter = new SphereParticleEmitter(this); break; } //transform = mta.flags & 1024; billboard = !(mta.flags & 4096); manim = mtime = 0; rem = 0; tofs = frand(); // init tiles for (int i=0; i<rows*cols; i++) { TexCoordSet tc; initTile(tc.tc,i); tiles.push_back(tc); } }
void ModelInstance::init2(Model *m, MPQFile &f) { // MODD model = m; float ff[3],temp; f.read(ff,12); // Position (X,Z,-Y) pos = Vec3D(ff[0],ff[1],ff[2]); temp = pos.z; pos.z = -pos.y; pos.y = temp; f.read(&w,4); // W component of the orientation quaternion f.read(ff,12); // X, Y, Z components of the orientaton quaternion dir = Vec3D(ff[0],ff[1],ff[2]); f.read(&sc,4); // Scale factor unsigned int d1; f.read(&d1,4); // (B,G,R,A) Lightning-color. lcol = fromARGB(d1); }