⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cl_newfx.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    static void TrackerTrail(float[] start, float[] end, int particleColor) {        float len;        cparticle_t p;        int dec;        float dist;        Math3D.VectorCopy(start, move);        Math3D.VectorSubtract(end, start, vec);        len = Math3D.VectorNormalize(vec);        Math3D.VectorCopy(vec, forward);        Math3D.vectoangles(forward, angle_dir);        Math3D.AngleVectors(angle_dir, forward, right, up);        dec = 3;        Math3D.VectorScale(vec, 3, vec);        // FIXME: this is a really silly way to have a loop        while (len > 0) {            len -= dec;            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = -2.0f;            p.color = particleColor;            dist = Math3D.DotProduct(move, forward);            Math3D.VectorMA(move, (float) (8 * Math.cos(dist)), up, p.org);            for (int j = 0; j < 3; j++) {                p.vel[j] = 0;                p.accel[j] = 0;            }            p.vel[2] = 5;            Math3D.VectorAdd(move, vec, move);        }    }    // stack variable    // dir    static void Tracker_Shell(float[] origin) {        cparticle_t p;        for (int i = 0; i < 300; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = CL_fx.INSTANT_PARTICLE;            p.color = 0;            dir[0] = Lib.crand();            dir[1] = Lib.crand();            dir[2] = Lib.crand();            Math3D.VectorNormalize(dir);            Math3D.VectorMA(origin, 40, dir, p.org);        }    }    // stack variable    // dir    static void MonsterPlasma_Shell(float[] origin) {        cparticle_t p;        for (int i = 0; i < 40; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = CL_fx.INSTANT_PARTICLE;            p.color = 0xe0;            dir[0] = Lib.crand();            dir[1] = Lib.crand();            dir[2] = Lib.crand();            Math3D.VectorNormalize(dir);            Math3D.VectorMA(origin, 10, dir, p.org);            //			VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))),            // dir, p.org);        }    }    private static int[] wb_colortable = { 2 * 8, 13 * 8, 21 * 8, 18 * 8 };    // stack variable    // dir    static void Widowbeamout(cl_sustain_t self) {        int i;        cparticle_t p;        float ratio;        ratio = 1.0f - (((float) self.endtime - (float) Globals.cl.time) / 2100.0f);        for (i = 0; i < 300; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = CL_fx.INSTANT_PARTICLE;            p.color = wb_colortable[Lib.rand() & 3];            dir[0] = Lib.crand();            dir[1] = Lib.crand();            dir[2] = Lib.crand();            Math3D.VectorNormalize(dir);            Math3D.VectorMA(self.org, (45.0f * ratio), dir, p.org);            //			VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))),            // dir, p.org);        }    }    private static int[] nb_colortable = { 110, 112, 114, 116 };    // stack variable    // dir    static void Nukeblast(cl_sustain_t self) {        int i;        cparticle_t p;        float ratio;        ratio = 1.0f - (((float) self.endtime - (float) Globals.cl.time) / 1000.0f);        for (i = 0; i < 700; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = CL_fx.INSTANT_PARTICLE;            p.color = nb_colortable[Lib.rand() & 3];            dir[0] = Lib.crand();            dir[1] = Lib.crand();            dir[2] = Lib.crand();            Math3D.VectorNormalize(dir);            Math3D.VectorMA(self.org, (200.0f * ratio), dir, p.org);            //			VectorMA(origin, 10*(((rand () & 0x7fff) / ((float)0x7fff))),            // dir, p.org);        }    }    private static int[] ws_colortable = { 2 * 8, 13 * 8, 21 * 8, 18 * 8 };    // stack variable    // dir    static void WidowSplash(float[] org) {        int i;        cparticle_t p;        for (i = 0; i < 256; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            p.time = Globals.cl.time;            p.color = ws_colortable[Lib.rand() & 3];            dir[0] = Lib.crand();            dir[1] = Lib.crand();            dir[2] = Lib.crand();            Math3D.VectorNormalize(dir);            Math3D.VectorMA(org, 45.0f, dir, p.org);            Math3D.VectorMA(Globals.vec3_origin, 40.0f, dir, p.vel);            p.accel[0] = p.accel[1] = 0;            p.alpha = 1.0f;            p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f);        }    }    // stack variable    // move, vec    /*     * ===============     *  CL_TagTrail     * ===============     */    static void TagTrail(float[] start, float[] end, float color) {        float len;        int j;        cparticle_t p;        int dec;        Math3D.VectorCopy(start, move);        Math3D.VectorSubtract(end, start, vec);        len = Math3D.VectorNormalize(vec);        dec = 5;        Math3D.VectorScale(vec, 5, vec);        while (len >= 0) {            len -= dec;            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = -1.0f / (0.8f + Globals.rnd.nextFloat() * 0.2f);            p.color = color;            for (j = 0; j < 3; j++) {                p.org[j] = move[j] + Lib.crand() * 16;                p.vel[j] = Lib.crand() * 5;                p.accel[j] = 0;            }            Math3D.VectorAdd(move, vec, move);        }    }    /*     * =============== CL_ColorExplosionParticles ===============     */    static void ColorExplosionParticles(float[] org, int color, int run) {        int i, j;        cparticle_t p;        for (i = 0; i < 128; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            p.time = Globals.cl.time;            p.color = color + (Lib.rand() % run);            for (j = 0; j < 3; j++) {                p.org[j] = org[j] + ((Lib.rand() % 32) - 16);                p.vel[j] = (Lib.rand() % 256) - 128;            }            p.accel[0] = p.accel[1] = 0;            p.accel[2] = -CL_fx.PARTICLE_GRAVITY;            p.alpha = 1.0f;            p.alphavel = -0.4f / (0.6f + Globals.rnd.nextFloat() * 0.2f);        }    }    // stack variable    // r, u    /*     * =============== CL_ParticleSmokeEffect - like the steam effect, but     * unaffected by gravity ===============     */    static void ParticleSmokeEffect(float[] org, float[] dir, int color,            int count, int magnitude) {        int i, j;        cparticle_t p;        float d;        Math3D.MakeNormalVectors(dir, r, u);        for (i = 0; i < count; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            p.time = Globals.cl.time;            p.color = color + (Lib.rand() & 7);            for (j = 0; j < 3; j++) {                p.org[j] = org[j] + magnitude * 0.1f * Lib.crand();                //				p.vel[j] = dir[j]*magnitude;            }            Math3D.VectorScale(dir, magnitude, p.vel);            d = Lib.crand() * magnitude / 3;            Math3D.VectorMA(p.vel, d, r, p.vel);            d = Lib.crand() * magnitude / 3;            Math3D.VectorMA(p.vel, d, u, p.vel);            p.accel[0] = p.accel[1] = p.accel[2] = 0;            p.alpha = 1.0f;            p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f);        }    }    /*     * =============== CL_BlasterParticles2     *      * Wall impact puffs (Green) ===============     */    static void BlasterParticles2(float[] org, float[] dir, long color) {        int i, j;        cparticle_t p;        float d;        int count;        count = 40;        for (i = 0; i < count; i++) {            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            p.time = Globals.cl.time;            p.color = color + (Lib.rand() & 7);            d = Lib.rand() & 15;            for (j = 0; j < 3; j++) {                p.org[j] = org[j] + ((Lib.rand() & 7) - 4) + d * dir[j];                p.vel[j] = dir[j] * 30 + Lib.crand() * 40;            }            p.accel[0] = p.accel[1] = 0;            p.accel[2] = -CL_fx.PARTICLE_GRAVITY;            p.alpha = 1.0f;            p.alphavel = -1.0f / (0.5f + Globals.rnd.nextFloat() * 0.3f);        }    }    // stack variable    // move, vec    /*     * =============== CL_BlasterTrail2     *      * Green! ===============     */    static void BlasterTrail2(float[] start, float[] end) {        float len;        int j;        cparticle_t p;        int dec;        Math3D.VectorCopy(start, move);        Math3D.VectorSubtract(end, start, vec);        len = Math3D.VectorNormalize(vec);        dec = 5;        Math3D.VectorScale(vec, 5, vec);        // FIXME: this is a really silly way to have a loop        while (len > 0) {            len -= dec;            if (CL_fx.free_particles == null)                return;            p = CL_fx.free_particles;            CL_fx.free_particles = p.next;            p.next = CL_fx.active_particles;            CL_fx.active_particles = p;            Math3D.VectorClear(p.accel);            p.time = Globals.cl.time;            p.alpha = 1.0f;            p.alphavel = -1.0f / (0.3f + Globals.rnd.nextFloat() * 0.2f);            p.color = 0xd0;            for (j = 0; j < 3; j++) {                p.org[j] = move[j] + Lib.crand();                p.vel[j] = Lib.crand() * 5;                p.accel[j] = 0;            }            Math3D.VectorAdd(move, vec, move);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -