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

📄 lib.java

📁 JAKE2用JAVA写的queck2的3D游戏开发引擎
💻 JAVA
字号:
/*Copyright (C) 1997-2001 Id Software, Inc.This program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of 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 ofMERCHANTABILITY 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 Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/// Created on 09.12.2003 by RST.// $Id: Lib.java,v 1.18 2005/12/18 22:10:12 cawe Exp $package jake2.util;import jake2.Globals;import jake2.qcommon.Com;import jake2.qcommon.FS;import java.io.*;import java.nio.*;public class Lib {	/** Converts a vector to a string. */	public static String vtos(float[] v) {		return (int) v[0] + " " + (int) v[1] + " " + (int) v[2];	}		/** Converts a vector to a string. */	public static String vtofs(float[] v) {		return v[0] + " " + v[1] + " " + v[2];	}		/** Converts a vector to a beatiful string. */	public static String vtofsbeaty(float[] v) {		return Com.sprintf("%8.2f %8.2f %8.2f", new Vargs().add(v[0]).add(v[1]).add(v[2]));	}		/** Like in  libc. */	public static short rand() {		return (short)Globals.rnd.nextInt(Short.MAX_VALUE+1);	}		/** Like in libc. */	public static float crandom() {		return (Globals.rnd.nextFloat() - 0.5f) * 2.0f;	}		/** Like in libc. */	public static float random() {		return Globals.rnd.nextFloat();	}		/** Like in libc. */	public static float crand() {		return (Globals.rnd.nextFloat() - 0.5f) * 2.0f;	}		/** Like in libc. */	public static int strcmp(String in1, String in2) {		return in1.compareTo(in2);	}	/** Like in libc. */	public static float atof(String in) {		float res = 0;			try {			res = Float.parseFloat(in);		}		catch (Exception e) {		}			return res;	}		/** Like in quake2. */	public static int Q_stricmp(String in1, String in2) {		return in1.compareToIgnoreCase(in2);	}		/** Like in libc. */	public static int atoi(String in) {		try {			return Integer.parseInt(in);		}		catch (Exception e) {			try {				return (int)Double.parseDouble(in);			} catch (Exception e1) {				return 0;			}		}	}		/** Converts a string to a vector. Needs improvement. */	public static float[] atov(String v) {		float[] res = { 0, 0, 0 };		String strres[] = v.split(" ");		for (int n=0; n < 3 && n < strres.length; n++)		{			res[n] = atof(strres[n]);		}		return res;	}	/** Like in libc. */	public static int strlen(char in[]) {		for (int i = 0; i < in.length; i++)			if (in[i] == 0)				return i;		return in.length;	}		/** Like in libc. */	public static int strlen(byte in[]) {		for (int i = 0; i < in.length; i++)			if (in[i] == 0)				return i;		return in.length;	}	/** Converts memory to a memory dump string. */	public static String hexdumpfile(ByteBuffer bb, int len) throws IOException {			ByteBuffer bb1 = bb.slice();			byte buf[] = new byte[len];			bb1.get(buf);			return hexDump(buf, len, false);	}		/** Converts memory to a memory dump string. */	public static String hexDump(byte data1[], int len, boolean showAddress) {		StringBuffer result = new StringBuffer();		StringBuffer charfield = new StringBuffer();		int i = 0;		while (i < len) {			if ((i & 0xf) == 0) {				if (showAddress) {					String address = Integer.toHexString(i);					address = ("0000".substring(0, 4 - address.length()) + address).toUpperCase();					result.append(address + ": ");				}			}			int v = data1[i];				result.append(hex2(v));			result.append(" ");				charfield.append(readableChar(v));			i++;				// nach dem letzten, newline einfuegen			if ((i & 0xf) == 0) {				result.append(charfield);				result.append("\n");				charfield.setLength(0);			}			//	in der Mitte ein Luecke einfuegen ?			else if ((i & 0xf) == 8) {				result.append(" ");			}		}		return result.toString();	}		/** Formats an hex byte. */	public static String hex2(int i) {		String val = Integer.toHexString(i & 0xff);		return ("00".substring(0, 2 - val.length()) + val).toUpperCase();		}		/** Returns true if the char is alphanumeric. */	public static char readableChar(int i) {		if ((i < 0x20) || (i > 0x7f))			return '.';		else			return (char) i;	}		/** Prints a vector to the quake console. */	public static void printv(String in, float arr[]) {		for (int n = 0; n < arr.length; n++) {			Com.Println(in + "[" + n + "]: " + arr[n]);		}	}		static final byte nullfiller[] = new byte[8192];			/** Like in libc. */	public static void fwriteString(String s, int len, RandomAccessFile f) throws IOException {		if (s ==  null) 			return;		int diff = len - s.length();		if (diff > 0) {			f.write(stringToBytes(s));				f.write(nullfiller, 0, diff);		}		else			f.write(stringToBytes(s), 0, len);	}		/** Like in libc */	public static RandomAccessFile fopen(String name, String mode) {		try {			return new RandomAccessFile(name, mode);		}		catch (Exception e) {			Com.DPrintf("Could not open file:" + name);			return null;		}	}		/** Like in libc */	public static void fclose(RandomAccessFile f) {		try {			f.close();		}		catch (Exception e) {		}	}		/** Like in libc */	public static String freadString(RandomAccessFile f, int len) {		byte buffer[] = new byte[len];		FS.Read(buffer, len, f);			return Lib.CtoJava(buffer);	}		/** Returns the right part of the string from the last occruence of c. */	public static String rightFrom(String in, char c) {		int pos = in.lastIndexOf(c);		if (pos == -1)			return "";		else if (pos < in.length())			return in.substring(pos + 1, in.length());		return "";	}		/** Returns the left part of the string from the last occruence of c. */	public static String leftFrom(String in, char c) {		int pos = in.lastIndexOf(c);		if (pos == -1)			return "";		else if (pos < in.length())			return in.substring(0, pos);		return "";	}	/** Renames a file. */	public static int rename(String oldn, String newn) {		try {			File f1 = new File(oldn);			File f2 = new File(newn);			f1.renameTo(f2);			return 0;		}		catch (Exception e) {			return 1;		}	}		/** Converts an int to 4 bytes java representation. */	public static byte[] getIntBytes(int c) {		byte b[] = new byte[4];		b[0] = (byte) ((c & 0xff));		b[1] = (byte) ((c >>> 8) & 0xff);		b[2] = (byte) ((c >>> 16) & 0xff);		b[3] = (byte) ((c >>> 24) & 0xff);		return b;	}		/** Converts an 4 bytes java int representation to an int. */	public static int getInt(byte b[]) {		return (b[0] & 0xff) | ((b[1] & 0xff) << 8) | ((b[2] & 0xff) << 16) | ((b[3] & 0xff) << 24);	}		/** Duplicates a float array. */	public static float[] clone(float in[]) {		float out[] = new float[in.length];			if (in.length != 0)			System.arraycopy(in, 0, out, 0, in.length);			return out;	}        /**      * convert a java string to byte[] with 8bit latin 1     *      * avoid String.getBytes() because it is using system specific character encoding.     */    public static byte[] stringToBytes(String value) {        try {           return value.getBytes("ISO-8859-1");        } catch (UnsupportedEncodingException e) {            // can't happen: Latin 1 is a standard encoding            return null;        }    }        /**      * convert a byte[] with 8bit latin 1 to java string     *      * avoid new String(bytes) because it is using system specific character encoding.     */    public static String bytesToString(byte[] value) {        try {           return new String(value, "ISO-8859-1");        } catch (UnsupportedEncodingException e) {            // can't happen: Latin 1 is a standard encoding            return null;        }    }		/** Helper method that savely handles the null termination of old C String data. */	public static String CtoJava(String old) {	    int index = old.indexOf('\0');	    if (index == 0) return "";	    return (index > 0) ? old.substring(0, index) : old; 	}		/** Helper method that savely handles the null termination of old C String data. */	public static String CtoJava(byte[] old) {		return CtoJava(old, 0, old.length);	}	/** Helper method that savely handles the null termination of old C String data. */	public static String CtoJava(byte[] old, int offset, int maxLenght) {		if (old.length == 0 || old[0] == 0) return "";	    int i;	    for (i = offset; (i - offset) < maxLenght && old[i] != 0; i++);		return new String(old, offset, i - offset);	}			/* java.nio.* Buffer util functions */		public static final int SIZEOF_FLOAT = 4;	public static final int SIZEOF_INT = 4;		public static FloatBuffer newFloatBuffer(int numElements) {	  ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT);	  return bb.asFloatBuffer();	}	public static FloatBuffer newFloatBuffer(int numElements, ByteOrder order) {	  ByteBuffer bb = newByteBuffer(numElements * SIZEOF_FLOAT, order);	  return bb.asFloatBuffer();	}	public static IntBuffer newIntBuffer(int numElements) {	  ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT);	  return bb.asIntBuffer();	}	public static IntBuffer newIntBuffer(int numElements, ByteOrder order) {	  ByteBuffer bb = newByteBuffer(numElements * SIZEOF_INT, order);	  return bb.asIntBuffer();	}	public static ByteBuffer newByteBuffer(int numElements) {	  ByteBuffer bb = ByteBuffer.allocateDirect(numElements);	  bb.order(ByteOrder.nativeOrder());	  return bb;	}	public static ByteBuffer newByteBuffer(int numElements, ByteOrder order) {	  ByteBuffer bb = ByteBuffer.allocateDirect(numElements);	  bb.order(order);	  return bb;	}}

⌨️ 快捷键说明

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