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

📄 playerweapon.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/* * Copyright (C) 1997-2001 Id Software, Inc. *  * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) any later * version. *  * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. *  * See the GNU General Public License for more details. *  * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307, USA. *   */// Created on 16.11.2003 by RST.// $Id: PlayerWeapon.java,v 1.2 2005/11/20 22:18:33 salomo Exp $package jake2.game;import jake2.Defines;import jake2.Globals;import jake2.game.monsters.M_Player;import jake2.qcommon.Com;import jake2.util.Lib;import jake2.util.Math3D;public class PlayerWeapon {    public static EntThinkAdapter Weapon_Grenade = new EntThinkAdapter() {    	public String getID() { return "Weapon_Grenade"; }        public boolean think(edict_t ent) {            if ((ent.client.newweapon != null)                    && (ent.client.weaponstate == Defines.WEAPON_READY)) {                ChangeWeapon(ent);                return true;            }            if (ent.client.weaponstate == Defines.WEAPON_ACTIVATING) {                ent.client.weaponstate = Defines.WEAPON_READY;                ent.client.ps.gunframe = 16;                return true;            }            if (ent.client.weaponstate == Defines.WEAPON_READY) {                if (((ent.client.latched_buttons | ent.client.buttons) & Defines.BUTTON_ATTACK) != 0) {                    ent.client.latched_buttons &= ~Defines.BUTTON_ATTACK;                    if (0 != ent.client.pers.inventory[ent.client.ammo_index]) {                        ent.client.ps.gunframe = 1;                        ent.client.weaponstate = Defines.WEAPON_FIRING;                        ent.client.grenade_time = 0;                    } else {                        if (GameBase.level.time >= ent.pain_debounce_time) {                            GameBase.gi.sound(ent, Defines.CHAN_VOICE,                                    GameBase.gi                                            .soundindex("weapons/noammo.wav"),                                    1, Defines.ATTN_NORM, 0);                            ent.pain_debounce_time = GameBase.level.time + 1;                        }                        NoAmmoWeaponChange(ent);                    }                    return true;                }                if ((ent.client.ps.gunframe == 29)                        || (ent.client.ps.gunframe == 34)                        || (ent.client.ps.gunframe == 39)                        || (ent.client.ps.gunframe == 48)) {                    if ((Lib.rand() & 15) != 0)                        return true;                }                if (++ent.client.ps.gunframe > 48)                    ent.client.ps.gunframe = 16;                return true;            }            if (ent.client.weaponstate == Defines.WEAPON_FIRING) {                if (ent.client.ps.gunframe == 5)                    GameBase.gi.sound(ent, Defines.CHAN_WEAPON, GameBase.gi                            .soundindex("weapons/hgrena1b.wav"), 1,                            Defines.ATTN_NORM, 0);                if (ent.client.ps.gunframe == 11) {                    if (0 == ent.client.grenade_time) {                        ent.client.grenade_time = GameBase.level.time                                + Defines.GRENADE_TIMER + 0.2f;                        ent.client.weapon_sound = GameBase.gi                                .soundindex("weapons/hgrenc1b.wav");                    }                    // they waited too long, detonate it in their hand                    if (!ent.client.grenade_blew_up                            && GameBase.level.time >= ent.client.grenade_time) {                        ent.client.weapon_sound = 0;                        weapon_grenade_fire(ent, true);                        ent.client.grenade_blew_up = true;                    }                    if ((ent.client.buttons & Defines.BUTTON_ATTACK) != 0)                        return true;                    if (ent.client.grenade_blew_up) {                        if (GameBase.level.time >= ent.client.grenade_time) {                            ent.client.ps.gunframe = 15;                            ent.client.grenade_blew_up = false;                        } else {                            return true;                        }                    }                }                if (ent.client.ps.gunframe == 12) {                    ent.client.weapon_sound = 0;                    weapon_grenade_fire(ent, false);                }                if ((ent.client.ps.gunframe == 15)                        && (GameBase.level.time < ent.client.grenade_time))                    return true;                ent.client.ps.gunframe++;                if (ent.client.ps.gunframe == 16) {                    ent.client.grenade_time = 0;                    ent.client.weaponstate = Defines.WEAPON_READY;                }            }            return true;        }    };    /*     * ======================================================================     *      * GRENADE LAUNCHER     *      * ======================================================================     */    public static EntThinkAdapter weapon_grenadelauncher_fire = new EntThinkAdapter() {    	public String getID() { return "weapon_grenadelauncher_fire"; }        public boolean think(edict_t ent) {            float[] offset = { 0, 0, 0 };            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 };            float[] start = { 0, 0, 0 };            int damage = 120;            float radius;            radius = damage + 40;            if (is_quad)                damage *= 4;            Math3D.VectorSet(offset, 8, 8, ent.viewheight - 8);            Math3D.AngleVectors(ent.client.v_angle, forward, right, null);            P_ProjectSource(ent.client, ent.s.origin, offset, forward, right,                    start);            Math3D.VectorScale(forward, -2, ent.client.kick_origin);            ent.client.kick_angles[0] = -1;            GameWeapon.fire_grenade(ent, start, forward, damage, 600, 2.5f, radius);            GameBase.gi.WriteByte(Defines.svc_muzzleflash);            GameBase.gi.WriteShort(ent.index);            GameBase.gi.WriteByte(Defines.MZ_GRENADE | is_silenced);            GameBase.gi.multicast(ent.s.origin, Defines.MULTICAST_PVS);            ent.client.ps.gunframe++;            PlayerWeapon.PlayerNoise(ent, start, Defines.PNOISE_WEAPON);            if (0 == ((int) GameBase.dmflags.value & Defines.DF_INFINITE_AMMO))                ent.client.pers.inventory[ent.client.ammo_index]--;            return true;        }    };    public static EntThinkAdapter Weapon_GrenadeLauncher = new EntThinkAdapter() {    	public String getID() { return "Weapon_GrenadeLauncher"; }        public boolean think(edict_t ent) {            int pause_frames[] = { 34, 51, 59, 0 };            int fire_frames[] = { 6, 0 };            Weapon_Generic(ent, 5, 16, 59, 64, pause_frames, fire_frames,                    weapon_grenadelauncher_fire);            return true;        }    };    /*     * ======================================================================     *      * ROCKET     *      * ======================================================================     */    public static EntThinkAdapter Weapon_RocketLauncher_Fire = new EntThinkAdapter() {    	public String getID() { return "Weapon_RocketLauncher_Fire"; }        public boolean think(edict_t ent) {            float[] offset = { 0, 0, 0 }, start = { 0, 0, 0 };            float[] forward = { 0, 0, 0 }, right = { 0, 0, 0 };            int damage;            float damage_radius;            int radius_damage;            damage = 100 + (int) (Lib.random() * 20.0);            radius_damage = 120;            damage_radius = 120;            if (is_quad) {                damage *= 4;                radius_damage *= 4;            }            Math3D.AngleVectors(ent.client.v_angle, forward, right, null);            Math3D.VectorScale(forward, -2, ent.client.kick_origin);            ent.client.kick_angles[0] = -1;            Math3D.VectorSet(offset, 8, 8, ent.viewheight - 8);            P_ProjectSource(ent.client, ent.s.origin, offset, forward, right,                    start);            GameWeapon.fire_rocket(ent, start, forward, damage, 650, damage_radius,                    radius_damage);            // send muzzle flash            GameBase.gi.WriteByte(Defines.svc_muzzleflash);            GameBase.gi.WriteShort(ent.index);            GameBase.gi.WriteByte(Defines.MZ_ROCKET | is_silenced);            GameBase.gi.multicast(ent.s.origin, Defines.MULTICAST_PVS);            ent.client.ps.gunframe++;            PlayerWeapon.PlayerNoise(ent, start, Defines.PNOISE_WEAPON);            if (0 == ((int) GameBase.dmflags.value & Defines.DF_INFINITE_AMMO))                ent.client.pers.inventory[ent.client.ammo_index]--;            return true;        }    };    public static EntThinkAdapter Weapon_RocketLauncher = new EntThinkAdapter() {    	public String getID() { return "Weapon_RocketLauncher"; }        public boolean think(edict_t ent) {            int pause_frames[] = { 25, 33, 42, 50, 0 };            int fire_frames[] = { 5, 0 };            Weapon_Generic(ent, 4, 12, 50, 54, pause_frames, fire_frames,                    Weapon_RocketLauncher_Fire);            return true;        }    };    public static EntThinkAdapter Weapon_Blaster_Fire = new EntThinkAdapter() {    	public String getID() { return "Weapon_Blaster_Fire"; }        public boolean think(edict_t ent) {            int damage;            if (GameBase.deathmatch.value != 0)                damage = 15;            else                damage = 10;            Blaster_Fire(ent, Globals.vec3_origin, damage, false,                    Defines.EF_BLASTER);            ent.client.ps.gunframe++;            return true;        }    };    public static EntThinkAdapter Weapon_Blaster = new EntThinkAdapter() {    	public String getID() { return "Weapon_Blaster"; }        public boolean think(edict_t ent) {            int pause_frames[] = { 19, 32, 0 };            int fire_frames[] = { 5, 0 };            Weapon_Generic(ent, 4, 8, 52, 55, pause_frames, fire_frames,                    Weapon_Blaster_Fire);            return true;        }    };    public static EntThinkAdapter Weapon_HyperBlaster_Fire = new EntThinkAdapter() {    	public String getID() { return "Weapon_HyperBlaster_Fire"; }        public boolean think(edict_t ent) {            float rotation;            float[] offset = { 0, 0, 0 };            int effect;            int damage;            ent.client.weapon_sound = GameBase.gi                    .soundindex("weapons/hyprbl1a.wav");            if (0 == (ent.client.buttons & Defines.BUTTON_ATTACK)) {                ent.client.ps.gunframe++;            } else {                if (0 == ent.client.pers.inventory[ent.client.ammo_index]) {                    if (GameBase.level.time >= ent.pain_debounce_time) {                        GameBase.gi.sound(ent, Defines.CHAN_VOICE, GameBase.gi                                .soundindex("weapons/noammo.wav"), 1,                                Defines.ATTN_NORM, 0);                        ent.pain_debounce_time = GameBase.level.time + 1;                    }                    NoAmmoWeaponChange(ent);                } else {                    rotation = (float) ((ent.client.ps.gunframe - 5) * 2                            * Math.PI / 6);                    offset[0] = (float) (-4 * Math.sin(rotation));                    offset[1] = 0f;                    offset[2] = (float) (4 * Math.cos(rotation));                    if ((ent.client.ps.gunframe == 6)                            || (ent.client.ps.gunframe == 9))                        effect = Defines.EF_HYPERBLASTER;                    else                        effect = 0;                    if (GameBase.deathmatch.value != 0)                        damage = 15;                    else                        damage = 20;                    Blaster_Fire(ent, offset, damage, true, effect);                    if (0 == ((int) GameBase.dmflags.value & Defines.DF_INFINITE_AMMO))                        ent.client.pers.inventory[ent.client.ammo_index]--;                    ent.client.anim_priority = Defines.ANIM_ATTACK;                    if ((ent.client.ps.pmove.pm_flags & pmove_t.PMF_DUCKED) != 0) {                        ent.s.frame = M_Player.FRAME_crattak1 - 1;                        ent.client.anim_end = M_Player.FRAME_crattak9;                    } else {                        ent.s.frame = M_Player.FRAME_attack1 - 1;                        ent.client.anim_end = M_Player.FRAME_attack8;                    }                }                ent.client.ps.gunframe++;                if (ent.client.ps.gunframe == 12                        && 0 != ent.client.pers.inventory[ent.client.ammo_index])                    ent.client.ps.gunframe = 6;            }            if (ent.client.ps.gunframe == 12) {                GameBase.gi.sound(ent, Defines.CHAN_AUTO, GameBase.gi                        .soundindex("weapons/hyprbd1a.wav"), 1,                        Defines.ATTN_NORM, 0);                ent.client.weapon_sound = 0;            }            return true;        }    };    public static EntThinkAdapter Weapon_HyperBlaster = new EntThinkAdapter() {    	public String getID() { return "Weapon_HyperBlaster"; }        public boolean think(edict_t ent) {

⌨️ 快捷键说明

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