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

📄 playertrail.java

📁 JAKE2用JAVA写的queck2的3D游戏开发引擎
💻 JAVA
字号:
/* * 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 13.11.2003 by RST.// $Id: PlayerTrail.java,v 1.2 2004/09/22 19:22:04 salomo Exp $package jake2.game;import jake2.util.Math3D;public class PlayerTrail {    /*     * ==============================================================================     *      * PLAYER TRAIL     *      * ==============================================================================     *      * This is a circular list containing the a list of points of where the     * player has been recently. It is used by monsters for pursuit.     *      * .origin the spot .owner forward link .aiment backward link     */    static int TRAIL_LENGTH = 8;    static edict_t trail[] = new edict_t[TRAIL_LENGTH];    static int trail_head;    static boolean trail_active = false;    static {        //TODO: potential error        for (int n = 0; n < TRAIL_LENGTH; n++)            trail[n] = new edict_t(n);    }    static int NEXT(int n) {        return (n + 1) % PlayerTrail.TRAIL_LENGTH;    }    static int PREV(int n) {        return (n + PlayerTrail.TRAIL_LENGTH - 1) % PlayerTrail.TRAIL_LENGTH;    }    static void Init() {        // FIXME || coop        if (GameBase.deathmatch.value != 0)            return;        for (int n = 0; n < PlayerTrail.TRAIL_LENGTH; n++) {            PlayerTrail.trail[n] = GameUtil.G_Spawn();            PlayerTrail.trail[n].classname = "player_trail";        }        trail_head = 0;        trail_active = true;    }    static void Add(float[] spot) {        float[] temp = { 0, 0, 0 };        if (!trail_active)            return;        Math3D.VectorCopy(spot, PlayerTrail.trail[trail_head].s.origin);        PlayerTrail.trail[trail_head].timestamp = GameBase.level.time;        Math3D.VectorSubtract(spot,                PlayerTrail.trail[PREV(trail_head)].s.origin, temp);        PlayerTrail.trail[trail_head].s.angles[1] = Math3D.vectoyaw(temp);        trail_head = NEXT(trail_head);    }    static void New(float[] spot) {        if (!trail_active)            return;        Init();        Add(spot);    }    static edict_t PickFirst(edict_t self) {        if (!trail_active)            return null;        int marker = trail_head;        for (int n = PlayerTrail.TRAIL_LENGTH; n > 0; n--) {            if (PlayerTrail.trail[marker].timestamp <= self.monsterinfo.trail_time)                marker = NEXT(marker);            else                break;        }        if (GameUtil.visible(self, PlayerTrail.trail[marker])) {            return PlayerTrail.trail[marker];        }        if (GameUtil.visible(self, PlayerTrail.trail[PREV(marker)])) {            return PlayerTrail.trail[PREV(marker)];        }        return PlayerTrail.trail[marker];    }    static edict_t PickNext(edict_t self) {        int marker;        int n;        if (!trail_active)            return null;        for (marker = trail_head, n = PlayerTrail.TRAIL_LENGTH; n > 0; n--) {            if (PlayerTrail.trail[marker].timestamp <= self.monsterinfo.trail_time)                marker = NEXT(marker);            else                break;        }        return PlayerTrail.trail[marker];    }    static edict_t LastSpot() {        return PlayerTrail.trail[PREV(trail_head)];    }}

⌨️ 快捷键说明

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