/* * This file is part of the Haven & Hearth game client. * Copyright (C) 2009 Fredrik Tolf <fredrik@dolda2000.com>, and * Björn Johannessen <johannessen.bjorn@gmail.com> * * Redistribution and/or modification of this file is subject to the * terms of the GNU Lesser General Public License, version 3, as * published by the Free Software Foundation. * * 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. * * Other parts of this source tree adhere to other copying * rights. Please see the file `COPYING' in the root directory of the * source tree for details. * * A copy the GNU Lesser General Public License is distributed along * with the source tree of which this file is a part in the file * `doc/LPGL-3'. If it is missing for any reason, please see the Free * Software Foundation's website at <http://www.fsf.org/>, or write * to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, * Boston, MA 02111-1307 USA */ package haven; import java.awt.event.KeyEvent; import java.io.File; import java.io.IOException; import javax.media.opengl.GLException; import com.jogamp.opengl.util.awt.Screenshot; public class RootWidget extends ConsoleHost { public static Resource defcurs = Resource.load("gfx/hud/curs/arw"); Logout logout = null; Profile gprof; boolean afk = false; public static boolean screenshot = false; public static boolean names_ready = true; private long last = 0; private int ticks = 0; private int fps = 0; public ChatHW ircchat = null; public RootWidget(UI ui, Coord sz) { super(ui, new Coord(0, 0), sz); setfocusctl(true); cursor = defcurs; } public boolean globtype(char key, KeyEvent ev) { if (!super.globtype(key, ev)) { int code = ev.getKeyCode(); boolean ctrl = ev.isControlDown(); boolean alt = ev.isAltDown(); boolean shift = ev.isShiftDown(); if (Config.profile && (key == '`')) { new Profwnd(ui.slen, ui.mainview.prof, "MV prof"); } else if (Config.profile && (key == '~')) { new Profwnd(ui.slen, gprof, "Glob prof"); } else if (Config.profile && (key == '!')) { new Profwnd(ui.slen, ui.mainview.mask.prof, "ILM prof"); } else if ((code == KeyEvent.VK_N) && ctrl) { Config.nightvision = !Config.nightvision; } else if ((code == KeyEvent.VK_X) && ctrl) { Config.xray = !Config.xray; } else if ((code == KeyEvent.VK_C) && alt) { Config.muteChat = !Config.muteChat; String str = "Chat mute is turned " + ((Config.muteChat) ? "ON" : "OFF"); ui.cons.out.println(str); ui.slen.error(str); } else if ((code == KeyEvent.VK_F) && ctrl) { Config.fps = !Config.fps; } else if ((code == KeyEvent.VK_K) && ctrl) { Config.TEST = !Config.TEST; } else if ((code == KeyEvent.VK_D) && ctrl) { Config.dbtext = !Config.dbtext; } else if ((code == KeyEvent.VK_P) && ctrl) { Config.profile = !Config.profile; } else if ((code == KeyEvent.VK_H) && ctrl) { Config.hide = !Config.hide; } else if ((code == KeyEvent.VK_Q) && alt) { ui.spd.setspeed(0, true); } else if ((code == KeyEvent.VK_W) && alt) { ui.spd.setspeed(1, true); } else if ((code == KeyEvent.VK_E) && alt) { ui.spd.setspeed(2, true); } else if ((code == KeyEvent.VK_R) && alt) { ui.spd.setspeed(3, true); } else if ((code == KeyEvent.VK_G) && ctrl) { Config.grid = !Config.grid; } else if (((int) key == 2) & ctrl) {// CTRL-B have code of 02 BuddyWnd bw = MaidFrame.getCurrentSession().buddyWnd; bw.visible = !bw.visible; } else if (((int) key == 20) & ctrl) {// CTRL-T have code of 20 MaidFrame.getCurrentSession().charWnd.toggle(); } else if (code == KeyEvent.VK_HOME) { ui.mainview.resetcam(); } else if (code == KeyEvent.VK_END) { screenshot = true; } else if (code == KeyEvent.VK_UP) { // new for (Widget w = ui.root.child; w != null; w = w.next) { if (w instanceof Fightview) { ((Fightview) w).currentUp(); } } } else if (code == KeyEvent.VK_DOWN) { // new for (Widget w = ui.root.child; w != null; w = w.next) { if (w instanceof Fightview) { ((Fightview) w).currentDown(); } } } else if ((code == KeyEvent.VK_A) && ctrl) { // new Config.pathDrinker = !Config.pathDrinker; String str = "Auto drinker: " + ((Config.pathDrinker) ? "ON" : "OFF"); ui.cons.out.println(str); ui.slen.error(str); addons.MainScript.flaskScript(); } else if ((code == KeyEvent.VK_M) && ctrl) { // new Config.minerSafety = !Config.minerSafety; String str = "Mining safety: " + ((Config.minerSafety) ? "ON" : "OFF"); ui.cons.out.println(str); ui.slen.error(str); } else if ((code == KeyEvent.VK_S) && alt) { // new addons.MainScript.cleanupItems(1, ui.mainview.gobAtMouse); } else if ((code == KeyEvent.VK_S) && shift) { // new addons.MainScript.cleanupItems(1000, ui.mainview.gobAtMouse); } else if (key == ':') { entercmd(); } else if (key != 0) { wdgmsg("gk", (int) key); } } return (true); } public void draw(GOut g) { if (screenshot && Config.sshot_noui) { visible = false; } super.draw(g); drawcmd(g, new Coord(20, 580)); if (screenshot && (!Config.sshot_nonames || names_ready)) { visible = true; screenshot = false; try { Coord s = MainFrame.getInnerSize(); String stamp = Utils.sessdate(System.currentTimeMillis()); String ext = Config.sshot_compress ? ".jpg" : ".png"; File f = new File("screenshots/SS_" + stamp + ext); f.mkdirs(); Screenshot.writeToFile(f, s.x, s.y); } catch (GLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // if(!afk && (System.currentTimeMillis() - ui.lastevent > 300000)) { // afk = true; // Widget slen = findchild(SlenHud.class); // if(slen != null) // slen.wdgmsg("afk"); // } else if(afk && (System.currentTimeMillis() - ui.lastevent < // 300000)) { // afk = false; // } if (Config.fps) { long now = System.currentTimeMillis(); ticks++; if ((now - last) > 1000) { fps = (int) (ticks * (now - last) / 1000); last = now; ticks = 0; } g.text("FPS: " + fps, Coord.z); } } public void error(String msg) { } }