aboutsummaryrefslogtreecommitdiffstats
path: root/test/jake2/render/DancingQueens.java
diff options
context:
space:
mode:
Diffstat (limited to 'test/jake2/render/DancingQueens.java')
-rw-r--r--test/jake2/render/DancingQueens.java320
1 files changed, 320 insertions, 0 deletions
diff --git a/test/jake2/render/DancingQueens.java b/test/jake2/render/DancingQueens.java
new file mode 100644
index 0000000..fbf233b
--- /dev/null
+++ b/test/jake2/render/DancingQueens.java
@@ -0,0 +1,320 @@
+/*
+ * DancingQueens.java
+ * Copyright (C) 2003
+ *
+ * $Id: DancingQueens.java,v 1.1 2004-07-07 19:59:58 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.render;
+
+import jake2.Defines;
+import jake2.Globals;
+import jake2.client.*;
+import jake2.game.Cmd;
+import jake2.game.cvar_t;
+import jake2.qcommon.*;
+import jake2.sys.IN;
+import jake2.sys.KBD;
+import jake2.util.Math3D;
+import jake2.util.Vargs;
+
+import java.awt.Dimension;
+import java.util.Arrays;
+
+
+/**
+ * DancingQueens
+ *
+ * @author cwei
+ */
+public class DancingQueens
+{
+ String[] args;
+
+ refexport_t re;
+ refimport_t ri;
+ viddef_t viddef;
+ int framecount = 0;
+
+ public DancingQueens(String[] args) {
+ this.args = args;
+ }
+
+ public static void main(String[] args) {
+
+ DancingQueens test = new DancingQueens(args);
+ test.init();
+ test.run();
+ }
+
+ void init() {
+
+ // only for testing
+ // a simple refimport_t implementation
+ ri = new refimport_t() {
+ public void Sys_Error(int err_level, String str) {
+ VID.Error(err_level, str, null);
+ }
+
+ public void Sys_Error(int err_level, String str, Vargs vargs) {
+ VID.Error(err_level, str, vargs);
+ }
+
+ public void Cmd_AddCommand(String name, xcommand_t cmd) {
+ Cmd.AddCommand(name, cmd);
+ }
+
+ public void Cmd_RemoveCommand(String name) {
+ Cmd.RemoveCommand(name);
+ }
+
+ public int Cmd_Argc() {
+ return Cmd.Argc();
+ }
+
+ public String Cmd_Argv(int i) {
+ return Cmd.Argv(i);
+ }
+
+ public void Cmd_ExecuteText(int exec_when, String text) {
+ Cbuf.ExecuteText(exec_when, text);
+ }
+
+ public void Con_Printf(int print_level, String str) {
+ VID.Printf(print_level, str, null);
+ }
+
+ public void Con_Printf(int print_level, String str, Vargs vargs) {
+ VID.Printf(print_level, str, vargs);
+ }
+
+ public byte[] FS_LoadFile(String name) {
+ return FS.LoadFile(name);
+ }
+
+ public int FS_FileLength(String name) {
+ return FS.FileLength(name);
+ }
+
+ public void FS_FreeFile(byte[] buf) {
+ FS.FreeFile(buf);
+ }
+
+ public String FS_Gamedir() {
+ return FS.Gamedir();
+ }
+
+ public cvar_t Cvar_Get(String name, String value, int flags) {
+ return Cvar.Get(name, value, flags);
+ }
+
+ public cvar_t Cvar_Set(String name, String value) {
+ return Cvar.Set(name, value);
+ }
+
+ public void Cvar_SetValue(String name, float value) {
+ Cvar.SetValue(name, value);
+ }
+
+ public boolean Vid_GetModeInfo(Dimension dim, int mode) {
+ return VID.GetModeInfo(dim, mode);
+ }
+
+ public void Vid_MenuInit() {
+ VID.MenuInit();
+ }
+
+ public void Vid_NewWindow(int width, int height) {
+ VID.NewWindow(width, height);
+ }
+
+ public void updateScreenCallback() {
+ DancingQueens.this.updateScreen();
+ }
+ };
+
+
+ Qcommon.InitForTestMap(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);
+
+ System.out.println("Use driver: " + re);
+ System.out.println();
+
+ re.Init(0, 0);
+
+ Cmd.AddCommand("togglemouse", togglemouse);
+ Cbuf.AddText("bind t togglemouse");
+ Cbuf.Execute();
+ Globals.cls.key_dest = Defines.key_game;
+ Globals.cls.state = Defines.ca_active;
+
+ viddef = Globals.viddef;
+ fov_y = Math3D.CalcFov(fov_x, viddef.width, viddef.height);
+ }
+
+ float fps = 0.0f;
+ long start = 0;
+
+ void updateScreen()
+ {
+ re.BeginFrame(0.0f);
+
+ if (framecount % 500 == 0)
+ {
+ long time = System.currentTimeMillis();
+ fps = 500000.0f / (time - start);
+ start = time;
+ }
+ String text = fps + " fps";
+
+ testModel();
+
+ drawString(10, viddef.height - 16, text);
+
+ re.EndFrame();
+ framecount++;
+ }
+
+ long startTime;
+
+ void run()
+ {
+ startTime = System.currentTimeMillis();
+ while (true)
+ {
+ re.updateScreen(null);
+ KBD.Update();
+ Cbuf.Execute();
+ }
+ }
+
+// ===================================================================
+
+ private float yaw = 0;
+ private entity_t[] models;
+
+ private final static String[] skinNames = {
+ "players/female/athena",
+ "players/female/lotus",
+ "players/female/venus",
+ "players/female/voodoo",
+ "players/female/cobalt",
+ "players/female/lotus",
+ "players/female/brianna"
+ };
+
+ private float fov_x = 50;
+ private float fov_y;
+
+ private void testModel() {
+
+ refdef_t refdef = new refdef_t();
+
+ refdef.x = 0;
+ refdef.y = 0;
+ refdef.width = viddef.width;
+ refdef.height = viddef.height;
+ refdef.fov_x = fov_x;
+ refdef.fov_y = fov_y;
+ refdef.time = 1.0f * 0.001f;
+
+ if (models == null) {
+ models = new entity_t[12]; // model count
+ entity_t m = null;
+ for (int i = 0; i < models.length; i++)
+ {
+ m = getModel(skinNames[i % skinNames.length]);
+ m.origin[0] += 30 * i;
+ m.origin[1] += ((i % 4)) * 30 - 20;
+ models[i] = m;
+ }
+ }
+
+
+ yaw = time() * 0.1f;
+ if (yaw > 360)
+ yaw -= 360;
+ if (yaw < 0)
+ yaw += 360;
+
+ for (int i = 0; i < models.length; i++)
+ {
+ models[i].frame = (time() / 70) % models[i].model.numframes;
+ models[i].angles[1] = yaw;
+ models[i].origin[0] += KBD.my;
+ models[i].origin[1] += KBD.mx;
+
+ }
+
+ refdef.areabits = null;
+ refdef.num_entities = models.length;
+ refdef.entities = models;
+
+ refdef.lightstyles = null;
+ refdef.rdflags = Defines.RDF_NOWORLDMODEL;
+
+ re.RenderFrame(refdef);
+ }
+
+ private entity_t getModel(String name) {
+ entity_t entity = new entity_t();
+ String modelName = "players/female/tris.md2";
+ String modelSkin = name +".pcx";
+
+ entity.model = re.RegisterModel(modelName);
+ entity.skin = re.RegisterSkin(modelSkin);
+ entity.flags = Defines.RF_FULLBRIGHT;
+ entity.origin[0] = 80;
+ entity.origin[1] = 0;
+ entity.origin[2] = 0;
+ Math3D.VectorCopy(entity.origin, entity.oldorigin);
+ entity.frame = 0;
+ entity.oldframe = 0;
+ entity.backlerp = 0.0f;
+ return entity;
+ }
+
+
+ private void drawString(int x, int y, String text)
+ {
+ for (int i = 0; i < text.length(); i++)
+ {
+ re.DrawChar(x + 8 * i, y, (int) text.charAt(i));
+ }
+ }
+
+ private final int time()
+ {
+ return (int) (System.currentTimeMillis() - startTime);
+ }
+
+ static xcommand_t togglemouse = new xcommand_t() {
+ public void execute() {
+ IN.toggleMouse();
+ }
+ };
+} \ No newline at end of file