diff options
author | Holger Zickner <[email protected]> | 2004-07-09 06:50:52 +0000 |
---|---|---|
committer | Holger Zickner <[email protected]> | 2004-07-09 06:50:52 +0000 |
commit | 20a66a892a3f0704ef37f1eebb681edfee6fc165 (patch) | |
tree | 118e0e5ea00eecf450e4c63edc88c421d52a7db2 /test | |
parent | 6b36f9e0380b7c80aecdc78ef07a0cf473712416 (diff) |
import of Jake2
Diffstat (limited to 'test')
-rw-r--r-- | test/AdapterRegister.java | 104 | ||||
-rw-r--r-- | test/ConvertDefines.java | 138 | ||||
-rw-r--r-- | test/Unpack.java | 202 | ||||
-rw-r--r-- | test/jake2/imageio/TestImage.java | 160 | ||||
-rw-r--r-- | test/jake2/qcommon/TestCMD.java | 3 | ||||
-rw-r--r-- | test/jake2/qcommon/TestFS.java | 132 | ||||
-rw-r--r-- | test/jake2/qcommon/TestLoadMap.java | 12 | ||||
-rw-r--r-- | test/jake2/qcommon/TestMD4.java | 31 | ||||
-rw-r--r-- | test/jake2/qcommon/TestTGA.java | 327 | ||||
-rw-r--r-- | test/jake2/render/DancingQueens.java | 6 | ||||
-rw-r--r-- | test/jake2/render/TestMap.java | 58 | ||||
-rw-r--r-- | test/jake2/render/TestRenderer.java | 52 |
12 files changed, 549 insertions, 676 deletions
diff --git a/test/AdapterRegister.java b/test/AdapterRegister.java new file mode 100644 index 0000000..5e56c0b --- /dev/null +++ b/test/AdapterRegister.java @@ -0,0 +1,104 @@ +/* +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 08.01.2004 by RST. +// $Id: AdapterRegister.java,v 1.1 2004-07-09 06:50:51 hzi Exp $ +// $Log: AdapterRegister.java,v $ +// Revision 1.1 2004-07-09 06:50:51 hzi +// import of Jake2 +// +// Revision 1.1 2004/02/25 21:30:15 hoz +// *** empty log message *** +// +// Revision 1.2 2004/02/02 22:19:17 rst +// cosmetic +// +// Revision 1.1 2004/02/02 22:16:05 rst +// cosmetic +// +// Revision 1.2 2004/01/09 18:30:57 rst +// Superadapter replaces function pointers in save games. +// +// Revision 1.1 2004/01/08 23:56:43 rst +// some preisfrage +// + +// import jake2.*; +// import jake2.client.*; +// import jake2.game.*; +// import jake2.qcommon.*; +// import jake2.render.*; +// import jake2.server.*; + +public class AdapterRegister { + + // concept for adapter indexing for function pointers + + + // the counter + static int id =0; + + static class t0 + { + // the identificator + public int myid = id++; + + public String test() + { + return ("t0, id = " + myid); + } + + }; + // any stupid adapter + static class t1 extends t0 + { + public String test() + { + return ("t1, id = " + myid); + } + }; + // second adapter + static class t2 extends t0 + { + public String test(int x) + { + return ("t2, id = " + myid); + } + } + + + // an auto test client + public static void main(String[] args) { + + // program starts + System.out.println("hello world."); + + t1 t1 = new t1(); + t2 t2 = new t2(); + t2 t3 = new t2(); + System.out.println(t1.test()); + System.out.println(t2.test()); + System.out.println(t2.test(5)); + System.out.println(t3.test(5)); + + System.out.println("good bye world."); + // program ends + } +} diff --git a/test/ConvertDefines.java b/test/ConvertDefines.java new file mode 100644 index 0000000..9a411a3 --- /dev/null +++ b/test/ConvertDefines.java @@ -0,0 +1,138 @@ +import java.io.*; +import java.util.StringTokenizer; + + +/** This class converts the #define statements into java + * public static final int statements. + * + * Additionally it converts some mframe_t statements, when the filename + * starts with "jake2/game/M_" . + */ + +public class ConvertDefines +{ + public static String convertDefine(String in) + { + StringBuffer out= new StringBuffer(); + + StringTokenizer tk= new StringTokenizer(in); + while (tk.hasMoreElements()) + { + String token= tk.nextToken(); + + // finds the define + if (token.equals("#define")) + { + out.append(" public final static int "); + out.append(tk.nextToken()); + out.append("= "); + out.append(tk.nextToken()); + out.append(";\t"); + + // append rest and out. + while (tk.hasMoreElements()) + { + out.append(tk.nextToken()); + out.append(" "); + } + } + else + { + out.append(token); + out.append(" "); + } + } + return out.toString(); + } + + /********************************************/ + public static void main(String args[]) + { + try + { + + System.out.println("\n".trim().length()); + String line; + String filename; + boolean m_doc = true; + + if (args.length == 0) + { + filename= "jake2/Defines.java"; + } + else + filename= args[0]; + + if (filename.startsWith("jake2/game/M_")) + m_doc = true; + else m_doc = false; + + FileWriter fw= new FileWriter(filename + ".new"); + FileReader fr= new FileReader(filename); + BufferedReader br= new BufferedReader(fr); + + while (br.ready()) + { + line= br.readLine(); + if (line.indexOf("#define") != -1) + fw.write(convertDefine(line) + "\n"); + + + else if (m_doc && line.trim().startsWith("mframe_t ") && line.indexOf("new") == -1) + { + fw.write(" static " + line + " new mframe_t[] \n"); + while (br.ready()) + { + line= br.readLine(); + // opening brace + + if (line.indexOf("{")!=-1) + fw.write(line + "\n"); + // opening brace + else if (line.indexOf("}")!=-1) + { + fw.write(line + "\n"); + break; + + } + else if (line.trim().length()==0) + fw.write("\n"); + else + { + String comma =""; + String line1 = line; + + if (line.endsWith(",")) + { + line1=line.substring(0,line1.length()-1); + comma = ","; + } + fw.write("\tnew mframe_t (" + line1 + ")" + comma + "\n"); + } + } + } + else if (m_doc && line.trim().startsWith("mmove_t")) + { + int pos1 = line.indexOf("{"); + int pos2 = line.indexOf("}"); + String seg1 = line.substring(0,pos1); + String seg2 = line.substring(pos1+1, pos2); + String seg3 = line.substring(pos2+1, line.length()); + fw.write("static " + seg1 + " new mmove_t (" + seg2 + ")" + seg3 + "\n\n"); + //fw.write(line); + } + else + fw.write(line + "\n"); + } + fr.close(); + fw.close(); + + //System.out.println(convertDefine("#define IT_WEAPON 1 // use makes active weapon")); + //System.out.println(convertDefine("#define IT_AMMO 2")); + } + catch (Exception e) + { + System.err.println("Exception:" + e); + } + } +} diff --git a/test/Unpack.java b/test/Unpack.java new file mode 100644 index 0000000..dc302ea --- /dev/null +++ b/test/Unpack.java @@ -0,0 +1,202 @@ +/* + * Unpack -- a completely non-object oriented utility... + * + */ + +import java.io.*; + +class Unpack +{ + static final int IDPAKHEADER= (('K' << 24) + ('C' << 16) + ('A' << 8) + 'P'); + + static int intSwap(int i) + { + int a, b, c, d; + + a= i & 255; + b= (i >> 8) & 255; + c= (i >> 16) & 255; + d= (i >> 24) & 255; + + return (a << 24) + (b << 16) + (c << 8) + d; + } + + static boolean patternMatch(String pattern, String s) + { + int index; + int remaining; + + if (pattern.equals(s)) + { + return true; + } + + // fairly lame single wildcard matching + index= pattern.indexOf('*'); + if (index == -1) + { + return false; + } + if (!pattern.regionMatches(0, s, 0, index)) + { + return false; + } + + index += 1; // skip the * + remaining= pattern.length() - index; + if (s.length() < remaining) + { + return false; + } + + if (!pattern.regionMatches(index, s, s.length() - remaining, remaining)) + { + return false; + } + + return true; + } + + static void usage() + { + System.out.println("Usage: unpack <packfile> <match> <basedir>"); + System.out.println(" or: unpack -list <packfile>"); + System.out.println("<match> may contain a single * wildcard"); + System.exit(1); + } + + public static void main(String[] args) + { + int ident; + int dirofs; + int dirlen; + int i; + int numLumps; + byte[] name= new byte[56]; + String nameString; + int filepos; + int filelen; + RandomAccessFile readLump; + DataInputStream directory; + String pakName; + String pattern; + + if (args.length == 2) + { + if (!args[0].equals("-list")) + { + usage(); + } + pakName= args[1]; + pattern= null; + } + else if (args.length == 3) + { + pakName= args[0]; + pattern= args[1]; + } + else + { + pakName= null; + pattern= null; + usage(); + } + + try + { + // one stream to read the directory + directory= new DataInputStream(new FileInputStream(pakName)); + + // another to read lumps + readLump= new RandomAccessFile(pakName, "r"); + + // read the header + ident= intSwap(directory.readInt()); + dirofs= intSwap(directory.readInt()); + dirlen= intSwap(directory.readInt()); + + if (ident != IDPAKHEADER) + { + System.out.println(pakName + " is not a pakfile."); + System.exit(1); + } + + // read the directory + directory.skipBytes(dirofs - 12); + numLumps= dirlen / 64; + + System.out.println(numLumps + " lumps in " + pakName); + + for (i= 0; i < numLumps; i++) + { + directory.readFully(name); + filepos= intSwap(directory.readInt()); + filelen= intSwap(directory.readInt()); + + nameString= new String(name); + // chop to the first 0 byte + nameString= nameString.substring(0, nameString.indexOf(0)); + + if (pattern == null) + { + // listing mode + System.out.println(nameString + " : " + filelen + "bytes"); + } + else if (patternMatch(pattern, nameString)) + { + File writeFile; + DataOutputStream writeLump; + byte[] buffer= new byte[filelen]; + StringBuffer fixedString; + String finalName; + int index; + + System.out.println("Unpaking " + nameString + " " + filelen + " bytes"); + + // load the lump + readLump.seek(filepos); + readLump.readFully(buffer); + + // quake uses forward slashes, but java requires + // they only by the host's seperator, which + // varies from win to unix + fixedString= new StringBuffer(args[2] + File.separator + nameString); + for (index= 0; index < fixedString.length(); index++) + { + if (fixedString.charAt(index) == '/') + { + fixedString.setCharAt(index, File.separatorChar); + } + } + finalName= fixedString.toString(); + + index= finalName.lastIndexOf(File.separatorChar); + if (index != -1) + { + String finalPath; + File writePath; + + finalPath= finalName.substring(0, index); + writePath= new File(finalPath); + writePath.mkdirs(); + } + + writeFile= new File(finalName); + writeLump= new DataOutputStream(new FileOutputStream(writeFile)); + writeLump.write(buffer); + writeLump.close(); + + } + } + + readLump.close(); + directory.close(); + + } + catch (IOException e) + { + System.out.println(e.toString()); + } + } + +} diff --git a/test/jake2/imageio/TestImage.java b/test/jake2/imageio/TestImage.java deleted file mode 100644 index 4290359..0000000 --- a/test/jake2/imageio/TestImage.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - * Created on Nov 17, 2003 - * - */ -package jake2.imageio; - -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; -import java.awt.image.BufferedImage; -import java.awt.image.BufferedImageOp; -import java.io.File; -import java.io.FileFilter; -import java.io.FilenameFilter; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; - -import javax.imageio.*; - -/** - * @author cwei - * - */ -public class TestImage { - - static final String TEST_FILE = "pics/colormap.pcx"; - static final long PAUSE = 15; // ms - static final int ENTRIES = 2501; - - File pakPath; - List imageFiles; - - TestImage(File pakPath) { - this.pakPath = pakPath; - this.imageFiles = new ArrayList(ENTRIES); - } - - public static void main(String[] args) throws Exception { - - - if (args == null || args.length == 0) { - usage(); - } - - File path = new File(args[0]); - - if (!path.isDirectory()) { - System.err.println(path.toString() + " is not a directory"); - usage(); - } - - if (!new File(path.getPath() + "/" + TEST_FILE).canRead()) { - System.err.println( - path.getPath() + " is not a unpacked quake2-pak file location"); - usage(); - } - - System.out.println("*** Start Image test ***\n"); - - ImageIO.scanForPlugins(); - - TestImage test = new TestImage(path); - test.run(); - - System.gc(); - Runtime rt = Runtime.getRuntime(); - System.out.println( - "JVM total memory: " + rt.totalMemory() / 1024 + " Kbytes\n"); - - System.out.println("*** Image test is succeeded :-) ***\n"); - } - - static void usage() { - System.out.println( - "usage: TestImage <path to unpacked quake2-pak file>"); - System.exit(0); - } - - void run() { - - System.out.println("begin directory scanning ..."); - scanDirectory(pakPath); - System.out.println(imageFiles.size() + " graphic files found\n"); - - ImageFrame frame = new ImageFrame(null); - frame.setVisible(true); - - File f = null; - BufferedImage image = null; - - for (Iterator it = imageFiles.iterator(); it.hasNext();) { - f = (File) it.next(); - try { - image = scale(ImageIO.read(f)); - frame.showImage(image); - frame.setTitle(f.getPath()); - - Thread.sleep(PAUSE); - - } catch (IOException e) { - System.err.println(e.getMessage()); - } catch (InterruptedException e) { - } - } - frame.dispose(); - imageFiles.clear(); - } - - void scanDirectory(File dir) { - File[] files = dir.listFiles(new FilenameFilter() { - public boolean accept(File dir, String name) { - /* matches *.pcx or *.wal files */ - return name.matches(".*(pcx|wal)$"); - } - }); - - if (files != null && files.length > 0) { - imageFiles.addAll(Arrays.asList(files)); - } - - File[] dirs = dir.listFiles(new FileFilter() { - public boolean accept(File pathname) { - return pathname.isDirectory(); - } - }); - - if (dirs != null && dirs.length > 0) { - for (int i = 0; i < dirs.length; i++) { - System.out.println(dirs[i]); - // recursive directory scanning - scanDirectory(dirs[i]); - } - } - } - - BufferedImage scale(BufferedImage src) { - BufferedImage dst = null; - - int size = Math.max(src.getHeight(), src.getWidth()); - - double scale = 1.5; - - if (size < 50) { - scale = 4.0; - } else if (size < 200) { - scale = 2.5; - } else if (size > 400) { - scale = 1.5; - } - BufferedImageOp op = - new AffineTransformOp( - AffineTransform.getScaleInstance(scale, scale), - AffineTransformOp.TYPE_NEAREST_NEIGHBOR/*TYPE_BILINEAR*/); - dst = op.filter(src, null); - - return (dst != null) ? dst : src; - } -} diff --git a/test/jake2/qcommon/TestCMD.java b/test/jake2/qcommon/TestCMD.java index 140f075..3316fd7 100644 --- a/test/jake2/qcommon/TestCMD.java +++ b/test/jake2/qcommon/TestCMD.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 29.12.2003 by RST. -// $Id: TestCMD.java,v 1.1 2004-07-07 19:59:56 hzi Exp $ +// $Id: TestCMD.java,v 1.2 2004-07-09 06:50:51 hzi Exp $ package jake2.qcommon; @@ -49,7 +49,6 @@ public class TestCMD { } } catch (Exception e) { - // TODO: handle exception e.printStackTrace(); } } diff --git a/test/jake2/qcommon/TestFS.java b/test/jake2/qcommon/TestFS.java deleted file mode 100644 index f46f43f..0000000 --- a/test/jake2/qcommon/TestFS.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * TestFS.java - * Copyright (C) 2003 - * - * $Id: TestFS.java,v 1.1 2004-07-07 19:59:56 hzi Exp $ - */ -/* -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. - -*/ -package jake2.qcommon; - -import jake2.game.Cmd; -import jake2.imageio.ImageFrame; - -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.util.Collection; -import java.util.Iterator; -import java.util.TreeSet; -import java.util.logging.*; - -import javax.imageio.ImageIO; -import javax.imageio.stream.MemoryCacheImageInputStream; - -/** - * TestFS - * - * @author cwei - */ -public class TestFS { - - public static void main(String[] args) { - System.out.println("*** Start FS test ***\n"); - - init(); - - FS.InitFilesystem(); - - Cmd.ExecuteString("link unknown.pcx ../../baseq2/space.pcx"); - Cmd.ExecuteString("link unknown1.pcx ../../baseq2/config.cfg"); - - FS.Path_f(); - - // loescht den link - Cmd.ExecuteString("link unknown1.pcx"); - - FS.Path_f(); - - Cmd.ExecuteString("dir players/male/*.[a-zA-Z_0-9]?x"); - - // search for pack_t - FS.searchpath_t search; - Collection filenames = new TreeSet(); - for (search = FS.fs_searchpaths; search != null; search = search.next) { - // is the element a pak file? - if (search.pack != null) { - // add all the pak file names - filenames.addAll(search.pack.files.keySet()); - } - } - - ImageFrame frame = new ImageFrame(null); - frame.setVisible(true); - byte[] buffer = null; - - BufferedImage image = null; - for (Iterator it = filenames.iterator(); it.hasNext();) { - - String filename = it.next().toString(); - if (!filename.endsWith(".wal") && !filename.endsWith(".pcx")) continue; - - buffer = FS.LoadFile(filename); - - if (buffer != null) { - try { - image = - ImageIO.read( - new MemoryCacheImageInputStream( - new ByteArrayInputStream(buffer))); - - frame.showImage(image); - frame.setTitle(filename); - - Thread.sleep(15); - - } catch (IOException e) { - e.printStackTrace(); - } catch (InterruptedException e1) { - } - } - } - frame.dispose(); - - System.gc(); - Runtime rt = Runtime.getRuntime(); - System.out.println( - "\nJVM total memory: " + rt.totalMemory() / 1024 + " Kbytes"); - - System.out.println("\n*** FS test is succeeded :-) ***"); - } - - static void init() { - // init the global LogManager with the logging.properties file - try { - LogManager.getLogManager().readConfiguration( - TestFS.class.getResourceAsStream("/jake2/logging.properties")); - } catch (SecurityException secEx) { - secEx.printStackTrace(); - } catch (IOException ioEx) { - System.err.println( - "FATAL Error: can't load /jake2/logging.properties (classpath)"); - ioEx.printStackTrace(); - } - } -} diff --git a/test/jake2/qcommon/TestLoadMap.java b/test/jake2/qcommon/TestLoadMap.java index 3410ca2..bc3efca 100644 --- a/test/jake2/qcommon/TestLoadMap.java +++ b/test/jake2/qcommon/TestLoadMap.java @@ -19,24 +19,16 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 02.01.2004 by RST. -// $Id: TestLoadMap.java,v 1.1 2004-07-07 19:59:56 hzi Exp $ +// $Id: TestLoadMap.java,v 1.2 2004-07-09 06:50:51 hzi Exp $ package jake2.qcommon; - -// import jake2.*; -// import jake2.client.*; -// import jake2.game.*; -// import jake2.qcommon.*; -// import jake2.render.*; -// import jake2.server.*; - public class TestLoadMap { public static void main(String[] args) { Com.DPrintf("hello!\n"); FS.InitFilesystem(); - CM.CM_LoadMap("maps/base1.bsp", true, new CM.intwrap(0)); + CM.CM_LoadMap("maps/base1.bsp", true, new int[]{0}); } } diff --git a/test/jake2/qcommon/TestMD4.java b/test/jake2/qcommon/TestMD4.java index 9b86058..5a0d84a 100644 --- a/test/jake2/qcommon/TestMD4.java +++ b/test/jake2/qcommon/TestMD4.java @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ // Created on 02.02.2004 by RST. -// $Id: TestMD4.java,v 1.1 2004-07-07 19:59:57 hzi Exp $ +// $Id: TestMD4.java,v 1.2 2004-07-09 06:50:51 hzi Exp $ package jake2.qcommon; @@ -1133,6 +1133,35 @@ public class TestMD4 { test("abc"); test("abcdefghijklmnopqrstuvwxyz"); test("hi"); + MD4 md4 = new MD4(); + + byte data[]= + { + (byte) 0x71, + (byte) 0xa9, + (byte) 0x05, + (byte) 0xce, + (byte) 0x8d, + (byte) 0x75, + (byte) 0x28, + (byte) 0xc8, + (byte) 0xba, + (byte) 0x97, + + (byte) 0x45, + (byte) 0xe9, + (byte) 0x8a, + (byte) 0xe0, + (byte) 0x37, + (byte) 0xbd, + (byte) 0x6c, + (byte) 0x6d, + (byte) 0x67, + (byte) 0x4a, + (byte) 0x21 }; + + System.out.println("checksum=" + MD4.Com_BlockChecksum(data, 21)); + } public static void test(String s) { diff --git a/test/jake2/qcommon/TestTGA.java b/test/jake2/qcommon/TestTGA.java deleted file mode 100644 index 32d45cd..0000000 --- a/test/jake2/qcommon/TestTGA.java +++ /dev/null @@ -1,327 +0,0 @@ -/* - * TestTGA.java - * Copyright (C) 2003 - * - * $Id: TestTGA.java,v 1.1 2004-07-08 20:24:31 hzi Exp $ - */ -/* -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. - -*/ -package jake2.qcommon; - -import jake2.game.Cmd; -import jake2.imageio.ImageFrame; - -import java.awt.Dimension; -import java.awt.geom.AffineTransform; -import java.awt.image.AffineTransformOp; -import java.awt.image.BufferedImage; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.nio.ByteBuffer; -import java.nio.ByteOrder; -import java.nio.IntBuffer; -import java.util.Collection; -import java.util.Iterator; -import java.util.TreeSet; -import java.util.logging.*; - -import javax.imageio.stream.MemoryCacheImageInputStream; - - - -/** - * TestTGA - * - * @author cwei - */ -public class TestTGA { - - public static void main(String[] args) { - System.out.println("*** Start TGA test ***\n"); - - init(); - - FS.InitFilesystem(); - - // search for pack_t - FS.searchpath_t search; - Collection filenames = new TreeSet(); - for (search = FS.fs_searchpaths; search != null; search = search.next) { - // is the element a pak file? - if (search.pack != null) { - // add all the pak file names - filenames.addAll(search.pack.files.keySet()); - } - } - - ImageFrame frame = new ImageFrame(null); - frame.setVisible(true); - frame.setLocation(50, 50); - frame.setSize(800, 800); - - byte[] buffer = null; - Dimension dim = new Dimension(); - BufferedImage image = null; - - int[] pixel = new int[512 * 512]; - - - for (Iterator it = filenames.iterator(); it.hasNext();) { - - String filename = it.next().toString(); - if (!filename.endsWith(".tga")) continue; - - System.out.println(filename); - buffer = LoadTGA(filename, dim); - - if (buffer != null) { - try { - - int w = dim.width; - int h = dim.height; - int size = w * h; - - int r, g, b, a; - - for (int i = 0; i < size; i++) - { - r = buffer[4* i + 0] & 0xFF; - g = buffer[4* i + 1] & 0xFF; - b = buffer[4* i + 2] & 0xFF; - a = buffer[4* i +3] & 0xFF; - - pixel[i] = (a << 24) | (r << 16) | (g << 8) | (b << 0); - } - - image = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); - image.setRGB(0, 0, w, h, pixel, 0, w); - - AffineTransformOp op = new AffineTransformOp(AffineTransform.getScaleInstance(3, 3), AffineTransformOp.TYPE_NEAREST_NEIGHBOR); - BufferedImage tmp = op.filter(image, null); - - frame.showImage(tmp); - frame.setTitle(filename); - - Thread.sleep(500); - - } catch (InterruptedException e) { - } - } - } - frame.dispose(); - - System.gc(); - Runtime rt = Runtime.getRuntime(); - System.out.println( - "\nJVM total memory: " + rt.totalMemory() / 1024 + " Kbytes"); - - System.out.println("\n*** TGA test is succeeded :-) ***"); - } - - static void init() { - // init the global LogManager with the logging.properties file - try { - LogManager.getLogManager().readConfiguration( - TestFS.class.getResourceAsStream("/jake2/logging.properties")); - } catch (SecurityException secEx) { - secEx.printStackTrace(); - } catch (IOException ioEx) { - System.err.println( - "FATAL Error: can't load /jake2/logging.properties (classpath)"); - ioEx.printStackTrace(); - } - } - - /* - ============= - LoadTGA - ============= - */ - static byte[] LoadTGA(String name, Dimension dim) { - int columns, rows, numPixels; - int pixbuf; // index into pic - int row, column; - byte[] raw; - ByteBuffer buf_p; - int length; - qfiles.tga_t targa_header; - byte[] pic = null; - - // - // load the file - // - raw = FS.LoadFile(name); - - if (raw == null) - { - System.out.println("Bad tga file "+ name +'\n'); - return null; - } - - targa_header = new qfiles.tga_t(raw); - - if (targa_header.image_type != 2 && targa_header.image_type != 10) - System.out.println("LoadTGA: Only type 2 and 10 targa RGB images supported\n"); - - if (targa_header.colormap_type != 0 || (targa_header.pixel_size != 32 && targa_header.pixel_size != 24)) - System.out.println("LoadTGA: Only 32 or 24 bit images supported (no colormaps)\n"); - - columns = targa_header.width; - rows = targa_header.height; - numPixels = columns * rows; - - if (dim != null) { - dim.width = columns; - dim.height = rows; - } - - pic = new byte[numPixels * 4]; // targa_rgba; - - if (targa_header.id_length != 0) - targa_header.data.position(targa_header.id_length); // skip TARGA image comment - - buf_p = targa_header.data; - - byte red,green,blue,alphabyte; - red = green = blue = alphabyte = 0; - int packetHeader, packetSize, j; - - if (targa_header.image_type==2) { // Uncompressed, RGB images - for(row=rows-1; row>=0; row--) { - - pixbuf = row * columns * 4; - - for(column=0; column<columns; column++) { - switch (targa_header.pixel_size) { - case 24: - - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - pic[pixbuf++] = red; - pic[pixbuf++] = green; - pic[pixbuf++] = blue; - pic[pixbuf++] = (byte)255; - break; - case 32: - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - alphabyte = buf_p.get(); - pic[pixbuf++] = red; - pic[pixbuf++] = green; - pic[pixbuf++] = blue; - pic[pixbuf++] = alphabyte; - break; - } - } - } - } - else if (targa_header.image_type==10) { // Runlength encoded RGB images - for(row=rows-1; row>=0; row--) { - - pixbuf = row * columns * 4; - try { - - for(column=0; column<columns; ) { - - packetHeader= buf_p.get() & 0xFF; - packetSize = 1 + (packetHeader & 0x7f); - - if ((packetHeader & 0x80) != 0) { // run-length packet - switch (targa_header.pixel_size) { - case 24: - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - alphabyte = (byte)255; - break; - case 32: - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - alphabyte = buf_p.get(); - break; - } - - for(j=0;j<packetSize;j++) { - pic[pixbuf++]=red; - pic[pixbuf++]=green; - pic[pixbuf++]=blue; - pic[pixbuf++]=alphabyte; - column++; - if (column==columns) { // run spans across rows - column=0; - if (row>0) - row--; - else - // goto label breakOut; - throw new longjmpException(); - - pixbuf = row * columns * 4; - } - } - } - else { // non run-length packet - for(j=0;j<packetSize;j++) { - switch (targa_header.pixel_size) { - case 24: - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - pic[pixbuf++] = red; - pic[pixbuf++] = green; - pic[pixbuf++] = blue; - pic[pixbuf++] = (byte)255; - break; - case 32: - blue = buf_p.get(); - green = buf_p.get(); - red = buf_p.get(); - alphabyte = buf_p.get(); - pic[pixbuf++] = red; - pic[pixbuf++] = green; - pic[pixbuf++] = blue; - pic[pixbuf++] = alphabyte; - break; - } - column++; - if (column==columns) { // pixel packet run spans across rows - column=0; - if (row>0) - row--; - else - // goto label breakOut; - throw new longjmpException(); - - pixbuf = row * columns * 4; - } - } - } - } - } catch (longjmpException e){ - // label breakOut: - } - } - } - return pic; - } - -} diff --git a/test/jake2/render/DancingQueens.java b/test/jake2/render/DancingQueens.java index d7d2ea4..db4200c 100644 --- a/test/jake2/render/DancingQueens.java +++ b/test/jake2/render/DancingQueens.java @@ -2,7 +2,7 @@ * DancingQueens.java * Copyright (C) 2003 * - * $Id: DancingQueens.java,v 1.2 2004-07-08 20:24:31 hzi Exp $ + * $Id: DancingQueens.java,v 1.3 2004-07-09 06:50:51 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -152,14 +152,14 @@ public class DancingQueens }; - Qcommon.InitForTestMap(new String[] {"DancingQueens"}); + Qcommon.Init(new String[] {"DancingQueens"}); // sehr wichtig !!! VID.Shutdown(); String[] names = Renderer.getDriverNames(); System.out.println("Registered Drivers: " + Arrays.asList(names)); - this.re = Renderer.getDriver("jogl", ri); + this.re = Renderer.getDriver("fastjogl", ri); System.out.println("Use driver: " + re); System.out.println(); diff --git a/test/jake2/render/TestMap.java b/test/jake2/render/TestMap.java index 711b159..e6670dc 100644 --- a/test/jake2/render/TestMap.java +++ b/test/jake2/render/TestMap.java @@ -2,7 +2,7 @@ * TestMap.java * Copyright (C) 2003 * - * $Id: TestMap.java,v 1.2 2004-07-08 20:24:31 hzi Exp $ + * $Id: TestMap.java,v 1.3 2004-07-09 06:50:51 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -36,6 +36,7 @@ import jake2.sys.KBD; import jake2.util.*; import java.awt.Dimension; +import java.nio.FloatBuffer; import java.util.*; /** @@ -177,7 +178,7 @@ public class TestMap } }; - Qcommon.InitForTestMap(new String[] { "TestMap $Id: TestMap.java,v 1.2 2004-07-08 20:24:31 hzi Exp $" }); + Qcommon.Init(new String[] { "TestMap $Id: TestMap.java,v 1.3 2004-07-09 06:50:51 hzi Exp $" }); // sehr wichtig !!! VID.Shutdown(); @@ -246,8 +247,8 @@ public class TestMap break; case 1 : // register the map - re.SetSky("space1", 0, new float[]{ 0, 0, 0 }); re.BeginRegistration("base1"); + re.SetSky("space1", 0, new float[]{ 0, 0, 0 }); re.EndRegistration(); currentState = 2; //break; @@ -431,7 +432,7 @@ public class TestMap refdef.time = time() * 0.001f; // particle init - particles.clear(); + r_numparticles = 0; // check the enemy distance float[] diff = {0, 0, 0}; @@ -451,11 +452,7 @@ public class TestMap // particles animateParticles(); - particle_t[] tmp = new particle_t[particles.size()]; - particles.toArray(tmp); - - refdef.particles = tmp; - refdef.num_particles = tmp.length; + refdef.num_particles = r_numparticles; } else { ent.frame = 0; @@ -463,10 +460,11 @@ public class TestMap } } + refdef.num_dlights = 0; + re.RenderFrame(refdef); } - private Vector particles = new Vector(1024); // = new particle_t[20]; private LinkedList active_particles = new LinkedList(); private boolean explode = false; private float[] target; @@ -480,8 +478,7 @@ public class TestMap float time, time2; float[] org = {0, 0, 0}; int color; - particle_t particle; - + time = 0.0f; for (Iterator it = active_particles.iterator(); it.hasNext();) @@ -514,13 +511,8 @@ public class TestMap org[1] = p.org[1] + p.vel[1]*time + p.accel[1]*time2; org[2] = p.org[2] + p.vel[2]*time + p.accel[2]*time2; - particle = new particle_t(); - particle.alpha = alpha; - Math3D.VectorCopy(org, particle.origin); - particle.color = color; - - particles.add(particle); - + AddParticle(org, color, alpha); + // PMM if (p.alphavel == INSTANT_PARTICLE) { @@ -565,7 +557,7 @@ public class TestMap Math3D.VectorMA (dir, s, up, dir); p.alpha = 1.0f; - p.alphavel = -1.0f / (1 + Lib.frand() * 0.2f); + p.alphavel = -1.0f / (1 + Globals.rnd.nextFloat() * 0.2f); p.color = 0x74 + (Lib.rand() & 7); for (j=0 ; j<3 ; j++) { @@ -592,7 +584,7 @@ public class TestMap Math3D.VectorClear (p.accel); p.alpha = 1.0f; - p.alphavel = -1.0f / (0.6f + Lib.frand() * 0.2f); + p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f); p.color = 0x0 + Lib.rand()&15; for (j=0 ; j<3 ; j++) @@ -625,4 +617,28 @@ public class TestMap IN.toggleMouse(); } }; + + int r_numparticles = 0; + /* + ===================== + V_AddParticle + + ===================== + */ + void AddParticle(float[] org, int color, float alpha) { + if (r_numparticles >= Defines.MAX_PARTICLES) + return; + + int i = r_numparticles++; + + int c = particle_t.colorTable[color]; + c |= (int)(alpha * 255) << 24; + particle_t.colorArray.put(i, c); + + i *= 3; + FloatBuffer vertexBuf = particle_t.vertexArray; + vertexBuf.put(i++, org[0]); + vertexBuf.put(i++, org[1]); + vertexBuf.put(i++, org[2]); + } } diff --git a/test/jake2/render/TestRenderer.java b/test/jake2/render/TestRenderer.java index e152747..376bb60 100644 --- a/test/jake2/render/TestRenderer.java +++ b/test/jake2/render/TestRenderer.java @@ -2,7 +2,7 @@ * TestRenderer.java * Copyright (C) 2003 * - * $Id: TestRenderer.java,v 1.2 2004-07-08 20:24:31 hzi Exp $ + * $Id: TestRenderer.java,v 1.3 2004-07-09 06:50:51 hzi Exp $ */ /* Copyright (C) 1997-2001 Id Software, Inc. @@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. package jake2.render; import java.awt.Dimension; +import java.nio.FloatBuffer; import java.util.Arrays; import java.util.Iterator; import java.util.LinkedList; @@ -441,7 +442,6 @@ public class TestRenderer { re.RenderFrame(refdef); } - private Vector particles = new Vector(1024); // = new particle_t[20]; private LinkedList active_particles = new LinkedList(); private boolean explode = false; private float[] target; @@ -450,7 +450,7 @@ public class TestRenderer { private void testParticles() { - particles.clear(); + r_numparticles = 0; if (active_particles.size() == 0) { if (explode) @@ -474,14 +474,9 @@ public class TestRenderer { animateParticles(); - drawString(refdef.x, refdef.y - 20, "active particles: " + particles.size()); + drawString(refdef.x, refdef.y - 20, "active particles: " + r_numparticles); - particle_t[] tmp = new particle_t[particles.size()]; - - particles.toArray(tmp); - - refdef.particles = tmp; - refdef.num_particles = tmp.length; + refdef.num_particles = r_numparticles; refdef.areabits = null; refdef.num_entities = 0; @@ -582,7 +577,7 @@ public class TestRenderer { p.accel[0] = p.accel[1] = 0; p.accel[2] = -PARTICLE_GRAVITY; p.alpha = 1.0f; - p.alphavel = -0.8f / (0.5f + Lib.frand() * 0.3f); + p.alphavel = -0.8f / (0.5f + Globals.rnd.nextFloat() * 0.3f); active_particles.add(p); } @@ -604,7 +599,6 @@ public class TestRenderer { float time, time2; float[] org = {0, 0, 0}; int color; - particle_t particle; time = 0.0f; @@ -637,13 +631,8 @@ public class TestRenderer { org[0] = p.org[0] + p.vel[0]*time + p.accel[0]*time2; org[1] = p.org[1] + p.vel[1]*time + p.accel[1]*time2; org[2] = p.org[2] + p.vel[2]*time + p.accel[2]*time2; - - particle = new particle_t(); - particle.alpha = alpha; - Math3D.VectorCopy(org, particle.origin); - particle.color = color; - particles.add(particle); + AddParticle(org, color, alpha); // PMM if (p.alphavel == INSTANT_PARTICLE) @@ -778,7 +767,7 @@ public class TestRenderer { Math3D.VectorMA (dir, s, up, dir); p.alpha = 1.0f; - p.alphavel = -1.0f / (1 + Lib.frand() * 0.2f); + p.alphavel = -1.0f / (1 + Globals.rnd.nextFloat() * 0.2f); p.color = 0x74 + (Lib.rand() & 7); for (j=0 ; j<3 ; j++) { @@ -805,7 +794,7 @@ public class TestRenderer { Math3D.VectorClear (p.accel); p.alpha = 1.0f; - p.alphavel = -1.0f / (0.6f + Lib.frand() * 0.2f); + p.alphavel = -1.0f / (0.6f + Globals.rnd.nextFloat() * 0.2f); p.color = 0x0 + Lib.rand()&15; for (j=0 ; j<3 ; j++) @@ -830,5 +819,28 @@ public class TestRenderer { testnr = testnr % 3; } }; + + int r_numparticles = 0; + /* + ===================== + V_AddParticle + ===================== + */ + void AddParticle(float[] org, int color, float alpha) { + if (r_numparticles >= Defines.MAX_PARTICLES) + return; + + int i = r_numparticles++; + + int c = particle_t.colorTable[color]; + c |= (int)(alpha * 255) << 24; + particle_t.colorArray.put(i, c); + + i *= 3; + FloatBuffer vertexBuf = particle_t.vertexArray; + vertexBuf.put(i++, org[0]); + vertexBuf.put(i++, org[1]); + vertexBuf.put(i++, org[2]); + } } |