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

📄 gamemisc.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    };    /*     * QUAKED func_wall (0 .5 .8) ? TRIGGER_SPAWN TOGGLE START_ON ANIMATED     * ANIMATED_FAST This is just a solid wall if not inhibited     *      * TRIGGER_SPAWN the wall will not be present until triggered it will then     * blink in to existance; it will kill anything that was in it's way     *      * TOGGLE only valid for TRIGGER_SPAWN walls this allows the wall to be     * turned on and off     *      * START_ON only valid for TRIGGER_SPAWN walls the wall will initially be     * present     */    static EntUseAdapter func_wall_use = new EntUseAdapter() {        public String getID() { return "func_wall_use";}        public void use(edict_t self, edict_t other, edict_t activator) {            if (self.solid == Defines.SOLID_NOT) {                self.solid = Defines.SOLID_BSP;                self.svflags &= ~Defines.SVF_NOCLIENT;                GameUtil.KillBox(self);            } else {                self.solid = Defines.SOLID_NOT;                self.svflags |= Defines.SVF_NOCLIENT;            }            GameBase.gi.linkentity(self);            if (0 == (self.spawnflags & 2))                self.use = null;        }    };    /*     * QUAKED func_object (0 .5 .8) ? TRIGGER_SPAWN ANIMATED ANIMATED_FAST This     * is solid bmodel that will fall if it's support it removed.     */    static EntTouchAdapter func_object_touch = new EntTouchAdapter() {        public String getID() { return "func_object_touch";}        public void touch(edict_t self, edict_t other, cplane_t plane,                csurface_t surf) {            // only squash thing we fall on top of            if (plane == null)                return;            if (plane.normal[2] < 1.0)                return;            if (other.takedamage == Defines.DAMAGE_NO)                return;            GameCombat.T_Damage(other, self, self, Globals.vec3_origin,                    self.s.origin, Globals.vec3_origin, self.dmg, 1, 0,                    Defines.MOD_CRUSH);        }    };    static EntThinkAdapter func_object_release = new EntThinkAdapter() {        public String getID() { return "func_object_release";}        public boolean think(edict_t self) {            self.movetype = Defines.MOVETYPE_TOSS;            self.touch = func_object_touch;            return true;        }    };    static EntUseAdapter func_object_use = new EntUseAdapter() {        public String getID() { return "func_object_use";}        public void use(edict_t self, edict_t other, edict_t activator) {            self.solid = Defines.SOLID_BSP;            self.svflags &= ~Defines.SVF_NOCLIENT;            self.use = null;            GameUtil.KillBox(self);            func_object_release.think(self);        }    };    /*     * QUAKED func_explosive (0 .5 .8) ? Trigger_Spawn ANIMATED ANIMATED_FAST     * Any brush that you want to explode or break apart. If you want an     * ex0plosion, set dmg and it will do a radius explosion of that amount at     * the center of the bursh.     *      * If targeted it will not be shootable.     *      * health defaults to 100.     *      * mass defaults to 75. This determines how much debris is emitted when it     * explodes. You get one large chunk per 100 of mass (up to 8) and one small     * chunk per 25 of mass (up to 16). So 800 gives the most.     */    public static EntDieAdapter func_explosive_explode = new EntDieAdapter() {        public String getID() { return "func_explosive_explode";}        public void die(edict_t self, edict_t inflictor, edict_t attacker,                int damage, float[] point) {            float[] origin = { 0, 0, 0 };            float[] chunkorigin = { 0, 0, 0 };            float[] size = { 0, 0, 0 };            int count;            int mass;            // bmodel origins are (0 0 0), we need to adjust that here            Math3D.VectorScale(self.size, 0.5f, size);            Math3D.VectorAdd(self.absmin, size, origin);            Math3D.VectorCopy(origin, self.s.origin);            self.takedamage = Defines.DAMAGE_NO;            if (self.dmg != 0)                GameCombat.T_RadiusDamage(self, attacker, self.dmg, null,                        self.dmg + 40, Defines.MOD_EXPLOSIVE);            Math3D.VectorSubtract(self.s.origin, inflictor.s.origin,                    self.velocity);            Math3D.VectorNormalize(self.velocity);            Math3D.VectorScale(self.velocity, 150, self.velocity);            // start chunks towards the center            Math3D.VectorScale(size, 0.5f, size);            mass = self.mass;            if (0 == mass)                mass = 75;            // big chunks            if (mass >= 100) {                count = mass / 100;                if (count > 8)                    count = 8;                while (count-- != 0) {                    chunkorigin[0] = origin[0] + Lib.crandom() * size[0];                    chunkorigin[1] = origin[1] + Lib.crandom() * size[1];                    chunkorigin[2] = origin[2] + Lib.crandom() * size[2];                    ThrowDebris(self, "models/objects/debris1/tris.md2",                            1, chunkorigin);                }            }            // small chunks            count = mass / 25;            if (count > 16)                count = 16;            while (count-- != 0) {                chunkorigin[0] = origin[0] + Lib.crandom() * size[0];                chunkorigin[1] = origin[1] + Lib.crandom() * size[1];                chunkorigin[2] = origin[2] + Lib.crandom() * size[2];                ThrowDebris(self, "models/objects/debris2/tris.md2", 2,                        chunkorigin);            }            GameUtil.G_UseTargets(self, attacker);            if (self.dmg != 0)                BecomeExplosion1(self);            else                GameUtil.G_FreeEdict(self);        }    };    public static EntUseAdapter func_explosive_use = new EntUseAdapter() {        public String getID() { return "func_explosive_use";}        public void use(edict_t self, edict_t other, edict_t activator) {            func_explosive_explode.die(self, self, other, self.health,                    Globals.vec3_origin);        }    };    public static EntUseAdapter func_explosive_spawn = new EntUseAdapter() {        public String getID() { return "func_explosive_spawn";}        public void use(edict_t self, edict_t other, edict_t activator) {            self.solid = Defines.SOLID_BSP;            self.svflags &= ~Defines.SVF_NOCLIENT;            self.use = null;            GameUtil.KillBox(self);            GameBase.gi.linkentity(self);        }    };    /*     * QUAKED misc_explobox (0 .5 .8) (-16 -16 0) (16 16 40) Large exploding     * box. You can override its mass (100), health (80), and dmg (150).     */    public static EntTouchAdapter barrel_touch = new EntTouchAdapter() {        public String getID() { return "barrel_touch";}        public void touch(edict_t self, edict_t other, cplane_t plane,                csurface_t surf) {            float ratio;            float[] v = { 0, 0, 0 };            if ((null == other.groundentity) || (other.groundentity == self))                return;            ratio = (float) other.mass / (float) self.mass;            Math3D.VectorSubtract(self.s.origin, other.s.origin, v);            M.M_walkmove(self, Math3D.vectoyaw(v), 20 * ratio                    * Defines.FRAMETIME);        }    };    public static EntThinkAdapter barrel_explode = new EntThinkAdapter() {        public String getID() { return "barrel_explode";}        public boolean think(edict_t self) {            float[] org = { 0, 0, 0 };            float spd;            float[] save = { 0, 0, 0 };            GameCombat.T_RadiusDamage(self, self.activator, self.dmg, null,                    self.dmg + 40, Defines.MOD_BARREL);            Math3D.VectorCopy(self.s.origin, save);            Math3D.VectorMA(self.absmin, 0.5f, self.size, self.s.origin);            // a few big chunks            spd = 1.5f * (float) self.dmg / 200.0f;            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris1/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris1/tris.md2", spd,                    org);            // bottom corners            spd = 1.75f * (float) self.dmg / 200.0f;            Math3D.VectorCopy(self.absmin, org);            ThrowDebris(self, "models/objects/debris3/tris.md2", spd,                    org);            Math3D.VectorCopy(self.absmin, org);            org[0] += self.size[0];            ThrowDebris(self, "models/objects/debris3/tris.md2", spd,                    org);            Math3D.VectorCopy(self.absmin, org);            org[1] += self.size[1];            ThrowDebris(self, "models/objects/debris3/tris.md2", spd,                    org);            Math3D.VectorCopy(self.absmin, org);            org[0] += self.size[0];            org[1] += self.size[1];            ThrowDebris(self, "models/objects/debris3/tris.md2", spd,                    org);            // a bunch of little chunks            spd = 2 * self.dmg / 200;            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            org[0] = self.s.origin[0] + Lib.crandom() * self.size[0];            org[1] = self.s.origin[1] + Lib.crandom() * self.size[1];            org[2] = self.s.origin[2] + Lib.crandom() * self.size[2];            ThrowDebris(self, "models/objects/debris2/tris.md2", spd,                    org);            Math3D.VectorCopy(save, self.s.origin);            if (self.groundentity != null)                BecomeExplosion2(self);            else                BecomeExplosion1(self);            return true;        }    };    public static EntDieAdapter barrel_delay = new EntDieAdapter() {        public String getID() { return "barrel_delay";}        public void die(edict_t self, edict_t inflictor, edict_t attacker,                int damage, float[] point) {            self.takedamage = Defines.DAMAGE_NO;            self.nextthink = GameBase.level.time + 2 * Defines.FRAMETIME;            self.think = barrel_explode;            self.activator = attacker;        }    };    //    // miscellaneous specialty items    //    /*     * QUAKED misc_blackhole (1 .5 0) (-8 -8 -8) (8 8 8)     */    static EntUseAdapter misc_blackhole_use = new EntUseAdapter() {        public String getID() { return "misc_blavkhole_use";}        public void use(edict_t ent, edict_t other, edict_t activator) {            /*             * gi.WriteByte (svc_temp_entity); gi.WriteByte (TE_BOSSTPORT);             * gi.WritePosition (ent.s.origin); gi.multicast (ent.s.origin,             * MULTICAST_PVS);             */            GameUtil.G_FreeEdict(ent);        }    };    static EntThinkAdapter misc_blackhole_think = new EntThinkAdapter() {        public String getID() { return "misc_blackhole_think";}        public boolean think(edict_t self) {            if (++self.s.frame < 19)                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            else {                self.s.frame = 0;                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            }            return true;        }    };    /*     * QUAKED misc_eastertank (1 .5 0) (-32 -32 -16) (32 32 32)     */    static EntThinkAdapter misc_eastertank_think = new EntThinkAdapter() {        public String getID() { return "misc_eastertank_think";}        public boolean think(edict_t self) {            if (++self.s.frame < 293)                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            else {                self.s.frame = 254;                self.nextthink = GameBase.level.time + Defines.FRAMETIME;            }            return true;        }    };    /*

⌨️ 快捷键说明

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