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

📄 gameitems.java

📁 JAKE2用JAVA写的queck2的3D游戏开发引擎
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
            //v = Lib.tv(15, 15, 15);            //Math3D.VectorCopy(v, ent.maxs);            ent.maxs[0] = ent.maxs[1] = ent.maxs[2] = 15;                if (ent.model != null)                GameBase.gi.setmodel(ent, ent.model);            else                GameBase.gi.setmodel(ent, ent.item.world_model);            ent.solid = Defines.SOLID_TRIGGER;            ent.movetype = Defines.MOVETYPE_TOSS;            ent.touch = Touch_Item;                float v[] = { 0, 0, -128 };            Math3D.VectorAdd(ent.s.origin, v, dest);                tr = GameBase.gi.trace(ent.s.origin, ent.mins, ent.maxs, dest, ent,                    Defines.MASK_SOLID);            if (tr.startsolid) {                GameBase.gi.dprintf("droptofloor: " + ent.classname                        + " startsolid at " + Lib.vtos(ent.s.origin) + "\n");                GameUtil.G_FreeEdict(ent);                return true;            }                Math3D.VectorCopy(tr.endpos, ent.s.origin);                if (ent.team != null) {                ent.flags &= ~Defines.FL_TEAMSLAVE;                ent.chain = ent.teamchain;                ent.teamchain = null;                    ent.svflags |= Defines.SVF_NOCLIENT;                ent.solid = Defines.SOLID_NOT;                if (ent == ent.teammaster) {                    ent.nextthink = GameBase.level.time + Defines.FRAMETIME;                    ent.think = DoRespawn;                }            }                if ((ent.spawnflags & Defines.ITEM_NO_TOUCH) != 0) {                ent.solid = Defines.SOLID_BBOX;                ent.touch = null;                ent.s.effects &= ~Defines.EF_ROTATE;                ent.s.renderfx &= ~Defines.RF_GLOW;            }                if ((ent.spawnflags & Defines.ITEM_TRIGGER_SPAWN) != 0) {                ent.svflags |= Defines.SVF_NOCLIENT;                ent.solid = Defines.SOLID_NOT;                ent.use = Use_Item;            }                GameBase.gi.linkentity(ent);            return true;        }    };    public static ItemUseAdapter Use_PowerArmor = new ItemUseAdapter() {        public String getID() { return "use_powerarmor";}        public void use(edict_t ent, gitem_t item) {            int index;                if ((ent.flags & Defines.FL_POWER_ARMOR) != 0) {                ent.flags &= ~Defines.FL_POWER_ARMOR;                GameBase.gi                        .sound(ent, Defines.CHAN_AUTO, GameBase.gi                                .soundindex("misc/power2.wav"), 1,                                Defines.ATTN_NORM, 0);            } else {                index = ITEM_INDEX(FindItem("cells"));                if (0 == ent.client.pers.inventory[index]) {                    GameBase.gi.cprintf(ent, Defines.PRINT_HIGH,                            "No cells for power armor.\n");                    return;                }                ent.flags |= Defines.FL_POWER_ARMOR;                GameBase.gi                        .sound(ent, Defines.CHAN_AUTO, GameBase.gi                                .soundindex("misc/power1.wav"), 1,                                Defines.ATTN_NORM, 0);            }        }    };    public static EntUseAdapter Use_Item = new EntUseAdapter() {        public String getID() { return "use_item";}        public void use(edict_t ent, edict_t other, edict_t activator) {            ent.svflags &= ~Defines.SVF_NOCLIENT;            ent.use = null;                if ((ent.spawnflags & Defines.ITEM_NO_TOUCH) != 0) {                ent.solid = Defines.SOLID_BBOX;                ent.touch = null;            } else {                ent.solid = Defines.SOLID_TRIGGER;                ent.touch = Touch_Item;            }                GameBase.gi.linkentity(ent);        }    };    /*     * =============== GetItemByIndex ===============     */    public static gitem_t GetItemByIndex(int index) {        if (index == 0 || index >= GameBase.game.num_items)            return null;            return GameItemList.itemlist[index];    }    /*     * =============== FindItemByClassname     *      * ===============     */    static gitem_t FindItemByClassname(String classname) {            for (int i = 1; i < GameBase.game.num_items; i++) {            gitem_t it = GameItemList.itemlist[i];                if (it.classname == null)                continue;            if (it.classname.equalsIgnoreCase(classname))                return it;        }            return null;    }    /*     * =============== FindItem ===============     */    //geht.    static gitem_t FindItem(String pickup_name) {        for (int i = 1; i < GameBase.game.num_items; i++) {            gitem_t it = GameItemList.itemlist[i];                if (it.pickup_name == null)                continue;            if (it.pickup_name.equalsIgnoreCase(pickup_name))                return it;        }        Com.Println("Item not found:" + pickup_name);        return null;    }    static void SetRespawn(edict_t ent, float delay) {        ent.flags |= Defines.FL_RESPAWN;        ent.svflags |= Defines.SVF_NOCLIENT;        ent.solid = Defines.SOLID_NOT;        ent.nextthink = GameBase.level.time + delay;        ent.think = DoRespawn;        GameBase.gi.linkentity(ent);    }    static int ITEM_INDEX(gitem_t item) {        return item.index;    }    static edict_t Drop_Item(edict_t ent, gitem_t item) {        edict_t dropped;        float[] forward = { 0, 0, 0 };        float[] right = { 0, 0, 0 };        float[] offset = { 0, 0, 0 };            dropped = GameUtil.G_Spawn();            dropped.classname = item.classname;        dropped.item = item;        dropped.spawnflags = Defines.DROPPED_ITEM;        dropped.s.effects = item.world_model_flags;        dropped.s.renderfx = Defines.RF_GLOW;        Math3D.VectorSet(dropped.mins, -15, -15, -15);        Math3D.VectorSet(dropped.maxs, 15, 15, 15);        GameBase.gi.setmodel(dropped, dropped.item.world_model);        dropped.solid = Defines.SOLID_TRIGGER;        dropped.movetype = Defines.MOVETYPE_TOSS;            dropped.touch = drop_temp_touch;            dropped.owner = ent;            if (ent.client != null) {            trace_t trace;                Math3D.AngleVectors(ent.client.v_angle, forward, right, null);            Math3D.VectorSet(offset, 24, 0, -16);            Math3D.G_ProjectSource(ent.s.origin, offset, forward, right,                    dropped.s.origin);            trace = GameBase.gi.trace(ent.s.origin, dropped.mins, dropped.maxs,                    dropped.s.origin, ent, Defines.CONTENTS_SOLID);            Math3D.VectorCopy(trace.endpos, dropped.s.origin);        } else {            Math3D.AngleVectors(ent.s.angles, forward, right, null);            Math3D.VectorCopy(ent.s.origin, dropped.s.origin);        }            Math3D.VectorScale(forward, 100, dropped.velocity);        dropped.velocity[2] = 300;            dropped.think = drop_make_touchable;        dropped.nextthink = GameBase.level.time + 1;            GameBase.gi.linkentity(dropped);            return dropped;    }    static void Use_Item(edict_t ent, edict_t other, edict_t activator) {        ent.svflags &= ~Defines.SVF_NOCLIENT;        ent.use = null;            if ((ent.spawnflags & Defines.ITEM_NO_TOUCH) != 0) {            ent.solid = Defines.SOLID_BBOX;            ent.touch = null;        } else {            ent.solid = Defines.SOLID_TRIGGER;            ent.touch = Touch_Item;        }            GameBase.gi.linkentity(ent);    }    static int PowerArmorType(edict_t ent) {        if (ent.client == null)            return Defines.POWER_ARMOR_NONE;            if (0 == (ent.flags & Defines.FL_POWER_ARMOR))            return Defines.POWER_ARMOR_NONE;            if (ent.client.pers.inventory[power_shield_index] > 0)            return Defines.POWER_ARMOR_SHIELD;            if (ent.client.pers.inventory[power_screen_index] > 0)            return Defines.POWER_ARMOR_SCREEN;            return Defines.POWER_ARMOR_NONE;    }    static int ArmorIndex(edict_t ent) {        if (ent.client == null)            return 0;            if (ent.client.pers.inventory[jacket_armor_index] > 0)            return jacket_armor_index;            if (ent.client.pers.inventory[combat_armor_index] > 0)            return combat_armor_index;            if (ent.client.pers.inventory[body_armor_index] > 0)            return body_armor_index;            return 0;    }    public static boolean Pickup_PowerArmor(edict_t ent, edict_t other) {        int quantity;            quantity = other.client.pers.inventory[ITEM_INDEX(ent.item)];            other.client.pers.inventory[ITEM_INDEX(ent.item)]++;            if (GameBase.deathmatch.value != 0) {            if (0 == (ent.spawnflags & Defines.DROPPED_ITEM))                SetRespawn(ent, ent.item.quantity);            // auto-use for DM only if we didn't already have one            if (0 == quantity)                ent.item.use.use(other, ent.item);        }            return true;    }    public static boolean Add_Ammo(edict_t ent, gitem_t item, int count) {        int index;        int max;            if (null == ent.client)            return false;            if (item.tag == Defines.AMMO_BULLETS)            max = ent.client.pers.max_bullets;        else if (item.tag == Defines.AMMO_SHELLS)            max = ent.client.pers.max_shells;        else if (item.tag == Defines.AMMO_ROCKETS)            max = ent.client.pers.max_rockets;        else if (item.tag == Defines.AMMO_GRENADES)            max = ent.client.pers.max_grenades;        else if (item.tag == Defines.AMMO_CELLS)            max = ent.client.pers.max_cells;        else if (item.tag == Defines.AMMO_SLUGS)            max = ent.client.pers.max_slugs;        else            return false;            index = ITEM_INDEX(item);            if (ent.client.pers.inventory[index] == max)            return false;            ent.client.pers.inventory[index] += count;            if (ent.client.pers.inventory[index] > max)            ent.client.pers.inventory[index] = max;            return true;    }    public static void InitItems() {        GameBase.game.num_items = GameItemList.itemlist.length - 1;    }    /*     * =============== SetItemNames     *      * Called by worldspawn ===============     */    public static void SetItemNames() {        int i;        gitem_t it;            for (i = 1; i < GameBase.game.num_items; i++) {            it = GameItemList.itemlist[i];            GameBase.gi.configstring(Defines.CS_ITEMS + i, it.pickup_name);        }            jacket_armor_index = ITEM_INDEX(FindItem("Jacket Armor"));        combat_armor_index = ITEM_INDEX(FindItem("Combat Armor"));        body_armor_index = ITEM_INDEX(FindItem("Body Armor"));        power_screen_index = ITEM_INDEX(FindItem("Power Screen"));        power_shield_index = ITEM_INDEX(FindItem("Power Shield"));    }    public static void SelectNextItem(edict_t ent, int itflags) {        gclient_t cl;        int i, index;        gitem_t it;            cl = ent.client;    

⌨️ 快捷键说明

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