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

📄 gamebase.java

📁 Jake2是一个Java 3D游戏引擎.
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* 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 30.11.2003 by RST.// $Id: GameBase.java,v 1.13 2006/01/21 21:53:31 salomo Exp $/** Father of all GameObjects. */package jake2.game;import java.util.StringTokenizer;import jake2.*;import jake2.client.*;import jake2.qcommon.Com;import jake2.server.*;import jake2.util.*;public class GameBase {    public static cplane_t dummyplane = new cplane_t();    public static game_locals_t game = new game_locals_t();    public static level_locals_t level = new level_locals_t();    public static game_import_t gi = new game_import_t();    public static spawn_temp_t st = new spawn_temp_t();    public static int sm_meat_index;    public static int snd_fry;    public static int meansOfDeath;    public static int num_edicts;    public static edict_t g_edicts[] = new edict_t[Defines.MAX_EDICTS];    static {        for (int n = 0; n < Defines.MAX_EDICTS; n++)            g_edicts[n] = new edict_t(n);    }    public static cvar_t deathmatch = new cvar_t();    public static cvar_t coop = new cvar_t();    public static cvar_t dmflags = new cvar_t();    public static cvar_t skill; // = new cvar_t();    public static cvar_t fraglimit = new cvar_t();    public static cvar_t timelimit = new cvar_t();    public static cvar_t password = new cvar_t();    public static cvar_t spectator_password = new cvar_t();    public static cvar_t needpass = new cvar_t();    public static cvar_t maxclients = new cvar_t();    public static cvar_t maxspectators = new cvar_t();    public static cvar_t maxentities = new cvar_t();    public static cvar_t g_select_empty = new cvar_t();    public static cvar_t filterban = new cvar_t();    public static cvar_t sv_maxvelocity = new cvar_t();    public static cvar_t sv_gravity = new cvar_t();    public static cvar_t sv_rollspeed = new cvar_t();    public static cvar_t sv_rollangle = new cvar_t();    public static cvar_t gun_x = new cvar_t();    public static cvar_t gun_y = new cvar_t();    public static cvar_t gun_z = new cvar_t();    public static cvar_t run_pitch = new cvar_t();    public static cvar_t run_roll = new cvar_t();    public static cvar_t bob_up = new cvar_t();    public static cvar_t bob_pitch = new cvar_t();    public static cvar_t bob_roll = new cvar_t();    public static cvar_t sv_cheats = new cvar_t();    public static cvar_t flood_msgs = new cvar_t();    public static cvar_t flood_persecond = new cvar_t();    public static cvar_t flood_waitdelay = new cvar_t();    public static cvar_t sv_maplist = new cvar_t();    public final static float STOP_EPSILON = 0.1f;    /**     * Slide off of the impacting object returns the blocked flags (1 = floor, 2 =     * step / wall).     */    public static int ClipVelocity(float[] in, float[] normal, float[] out,            float overbounce) {        float backoff;        float change;        int i, blocked;        blocked = 0;        if (normal[2] > 0)            blocked |= 1; // floor        if (normal[2] == 0.0f)            blocked |= 2; // step        backoff = Math3D.DotProduct(in, normal) * overbounce;        for (i = 0; i < 3; i++) {            change = normal[i] * backoff;            out[i] = in[i] - change;            if (out[i] > -STOP_EPSILON && out[i] < STOP_EPSILON)                out[i] = 0;        }        return blocked;    }    /**     * Searches all active entities for the next one that holds the matching     * string at fieldofs (use the FOFS() macro) in the structure.     *      * Searches beginning at the edict after from, or the beginning if null null     * will be returned if the end of the list is reached.     *      */    public static EdictIterator G_Find(EdictIterator from, EdictFindFilter eff,            String s) {        if (from == null)            from = new EdictIterator(0);        else            from.i++;        for (; from.i < num_edicts; from.i++) {            from.o = g_edicts[from.i];            if (from.o.classname == null) {                Com.Printf("edict with classname = null" + from.o.index);            }            if (!from.o.inuse)                continue;            if (eff.matches(from.o, s))                return from;        }        return null;    }    // comfort version (rst)    public static edict_t G_FindEdict(EdictIterator from, EdictFindFilter eff,            String s) {        EdictIterator ei = G_Find(from, eff, s);        if (ei == null)            return null;        else            return ei.o;    }    /**     * Returns entities that have origins within a spherical area.     */    public static EdictIterator findradius(EdictIterator from, float[] org,            float rad) {        float[] eorg = { 0, 0, 0 };        int j;        if (from == null)            from = new EdictIterator(0);        else            from.i++;        for (; from.i < num_edicts; from.i++) {            from.o = g_edicts[from.i];            if (!from.o.inuse)                continue;            if (from.o.solid == Defines.SOLID_NOT)                continue;            for (j = 0; j < 3; j++)                eorg[j] = org[j]                        - (from.o.s.origin[j] + (from.o.mins[j] + from.o.maxs[j]) * 0.5f);            if (Math3D.VectorLength(eorg) > rad)                continue;            return from;        }        return null;    }    /**     * Searches all active entities for the next one that holds the matching     * string at fieldofs (use the FOFS() macro) in the structure.     *      * Searches beginning at the edict after from, or the beginning if null null     * will be returned if the end of the list is reached.     */    public static int MAXCHOICES = 8;    public static edict_t G_PickTarget(String targetname) {        int num_choices = 0;        edict_t choice[] = new edict_t[MAXCHOICES];        if (targetname == null) {            gi.dprintf("G_PickTarget called with null targetname\n");            return null;        }        EdictIterator es = null;        while ((es = G_Find(es, findByTarget, targetname)) != null) {            choice[num_choices++] = es.o;            if (num_choices == MAXCHOICES)                break;        }        if (num_choices == 0) {            gi.dprintf("G_PickTarget: target " + targetname + " not found\n");            return null;        }        return choice[Lib.rand() % num_choices];    }    public static float[] VEC_UP = { 0, -1, 0 };    public static float[] MOVEDIR_UP = { 0, 0, 1 };    public static float[] VEC_DOWN = { 0, -2, 0 };    public static float[] MOVEDIR_DOWN = { 0, 0, -1 };    public static void G_SetMovedir(float[] angles, float[] movedir) {        if (Math3D.VectorEquals(angles, VEC_UP)) {            Math3D.VectorCopy(MOVEDIR_UP, movedir);        } else if (Math3D.VectorEquals(angles, VEC_DOWN)) {            Math3D.VectorCopy(MOVEDIR_DOWN, movedir);        } else {            Math3D.AngleVectors(angles, movedir, null, null);        }        Math3D.VectorClear(angles);    }    public static String G_CopyString(String in) {        return new String(in);    }    /**     * G_TouchTriggers     */    static edict_t touch[] = new edict_t[Defines.MAX_EDICTS];    public static void G_TouchTriggers(edict_t ent) {        int i, num;        edict_t hit;        // dead things don't activate triggers!        if ((ent.client != null || (ent.svflags & Defines.SVF_MONSTER) != 0)                && (ent.health <= 0))            return;        num = gi.BoxEdicts(ent.absmin, ent.absmax, touch, Defines.MAX_EDICTS,                Defines.AREA_TRIGGERS);        // be careful, it is possible to have an entity in this        // list removed before we get to it (killtriggered)        for (i = 0; i < num; i++) {            hit = touch[i];            if (!hit.inuse)                continue;            if (hit.touch == null)                continue;            hit.touch.touch(hit, ent, dummyplane, null);        }    }    public static pushed_t pushed[] = new pushed_t[Defines.MAX_EDICTS];    static {        for (int n = 0; n < Defines.MAX_EDICTS; n++)            pushed[n] = new pushed_t();    }    public static int pushed_p;

⌨️ 快捷键说明

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