/* * Copyright (C) 2006, 2007 Clam <clamisgood@gmail.com> * Copyright (C) 2008, 2010 IsmAvatar <IsmAvatar@gmail.com> * Copyright (C) 2008 Quadduc <quadduc@gmail.com> * * This file is part of LateralGM. * LateralGM is free software and comes with ABSOLUTELY NO WARRANTY. * See LICENSE for details. */ package org.lateralgm.resources.sub; import static org.lateralgm.main.Util.deRef; import java.awt.event.KeyEvent; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.lateralgm.messages.Messages; import org.lateralgm.resources.GmObject; import org.lateralgm.resources.ResourceReference; public class Event extends ActionContainer implements Comparable<Event> { // mouse event types public static final byte EV_LEFT_BUTTON = 0; public static final byte EV_RIGHT_BUTTON = 1; public static final byte EV_MIDDLE_BUTTON = 2; public static final byte EV_NO_BUTTON = 3; public static final byte EV_LEFT_PRESS = 4; public static final byte EV_RIGHT_PRESS = 5; public static final byte EV_MIDDLE_PRESS = 6; public static final byte EV_LEFT_RELEASE = 7; public static final byte EV_RIGHT_RELEASE = 8; public static final byte EV_MIDDLE_RELEASE = 9; public static final byte EV_MOUSE_ENTER = 10; public static final byte EV_MOUSE_LEAVE = 11; public static final byte EV_MOUSE_WHEEL_UP = 60; public static final byte EV_MOUSE_WHEEL_DOWN = 61; public static final byte EV_GLOBAL_LEFT_BUTTON = 50; public static final byte EV_GLOBAL_RIGHT_BUTTON = 51; public static final byte EV_GLOBAL_MIDDLE_BUTTON = 52; public static final byte EV_GLOBAL_LEFT_PRESS = 53; public static final byte EV_GLOBAL_RIGHT_PRESS = 54; public static final byte EV_GLOBAL_MIDDLE_PRESS = 55; public static final byte EV_GLOBAL_LEFT_RELEASE = 56; public static final byte EV_GLOBAL_RIGHT_RELEASE = 57; public static final byte EV_GLOBAL_MIDDLE_RELEASE = 58; public static final byte EV_JOYSTICK1_LEFT = 16; public static final byte EV_JOYSTICK1_RIGHT = 17; public static final byte EV_JOYSTICK1_UP = 18; public static final byte EV_JOYSTICK1_DOWN = 19; public static final byte EV_JOYSTICK1_BUTTON1 = 21; public static final byte EV_JOYSTICK1_BUTTON2 = 22; public static final byte EV_JOYSTICK1_BUTTON3 = 23; public static final byte EV_JOYSTICK1_BUTTON4 = 24; public static final byte EV_JOYSTICK1_BUTTON5 = 25; public static final byte EV_JOYSTICK1_BUTTON6 = 26; public static final byte EV_JOYSTICK1_BUTTON7 = 27; public static final byte EV_JOYSTICK1_BUTTON8 = 28; public static final byte EV_JOYSTICK2_LEFT = 31; public static final byte EV_JOYSTICK2_RIGHT = 32; public static final byte EV_JOYSTICK2_UP = 33; public static final byte EV_JOYSTICK2_DOWN = 34; public static final byte EV_JOYSTICK2_BUTTON1 = 36; public static final byte EV_JOYSTICK2_BUTTON2 = 37; public static final byte EV_JOYSTICK2_BUTTON3 = 38; public static final byte EV_JOYSTICK2_BUTTON4 = 39; public static final byte EV_JOYSTICK2_BUTTON5 = 40; public static final byte EV_JOYSTICK2_BUTTON6 = 41; public static final byte EV_JOYSTICK2_BUTTON7 = 42; public static final byte EV_JOYSTICK2_BUTTON8 = 43; // other event types public static final byte EV_OUTSIDE = 0; public static final byte EV_BOUNDARY = 1; public static final byte EV_GAME_START = 2; public static final byte EV_GAME_END = 3; public static final byte EV_ROOM_START = 4; public static final byte EV_ROOM_END = 5; public static final byte EV_NO_MORE_LIVES = 6; public static final byte EV_NO_MORE_HEALTH = 9; public static final byte EV_ANIMATION_END = 7; public static final byte EV_END_OF_PATH = 8; public static final byte EV_USER0 = 10; public static final byte EV_USER1 = 11; public static final byte EV_USER2 = 12; public static final byte EV_USER3 = 13; public static final byte EV_USER4 = 14; public static final byte EV_USER5 = 15; public static final byte EV_USER6 = 16; public static final byte EV_USER7 = 17; public static final byte EV_USER8 = 18; public static final byte EV_USER9 = 19; public static final byte EV_USER10 = 20; public static final byte EV_USER11 = 21; public static final byte EV_USER12 = 22; public static final byte EV_USER13 = 23; public static final byte EV_USER14 = 24; public static final byte EV_USER15 = 25; // step event types public static final byte EV_STEP_NORMAL = 0; public static final byte EV_STEP_BEGIN = 1; public static final byte EV_STEP_END = 2; //alarm event types public static final byte EV_ALARM0 = 0; public static final byte EV_ALARM1 = 1; public static final byte EV_ALARM2 = 2; public static final byte EV_ALARM3 = 3; public static final byte EV_ALARM4 = 4; public static final byte EV_ALARM5 = 5; public static final byte EV_ALARM6 = 6; public static final byte EV_ALARM7 = 7; public static final byte EV_ALARM8 = 8; public static final byte EV_ALARM9 = 9; public static final byte EV_ALARM10 = 10; public static final byte EV_ALARM11 = 11; /* * note: The constant definitions were generated by a small GM program, which parses * the clipboard (with parts of the gm manual on it) and generates the Java definitions. */ public int id = 0; public ResourceReference<GmObject> other = null; // For collision Events public int mainId = 0; public static final List<Integer> KEYS; public Event() { } public Event(int mainId, int id) { this.mainId = mainId; this.id = id; } public Event(int mainId, ResourceReference<GmObject> other) { this.mainId = mainId; this.other = other; } public Event(int mainId, int id, ResourceReference<GmObject> other) { this.mainId = mainId; this.id = id; this.other = other; } public String toString() { switch (mainId) { case MainEvent.EV_COLLISION: GmObject obj = deRef(other); String name; if (obj == null) name = "<undefined>"; else name = obj.getName(); return Messages.format("Event.EVENT4_X",name); //$NON-NLS-1$ default: return eventName(mainId,id); } } public int compareTo(Event e) { if (e.mainId != mainId) return e.mainId > mainId ? -1 : 1; return e.id > id ? -1 : e.id == id ? 0 : 1; } public boolean matchesType(Event e) { if (e.mainId != mainId) return false; if (mainId != MainEvent.EV_COLLISION) return e.id == id; return e.other == other; } public static String getGmKeyName(int keyCode) { switch (keyCode) { case 0: return Messages.getString("Event.NO_KEY"); case 1: return Messages.getString("Event.ANY_KEY"); case 13: keyCode = KeyEvent.VK_ENTER; break; case 46: keyCode = KeyEvent.VK_DELETE; break; case 45: keyCode = KeyEvent.VK_INSERT; break; default: break; } return KeyEvent.getKeyText(keyCode); } public static int getGmKeyCode(int keyCode) { switch (keyCode) { case KeyEvent.VK_ENTER: return 13; case KeyEvent.VK_DELETE: return 46; case KeyEvent.VK_INSERT: return 45; default: return keyCode; } } public static String eventName(int mainId, int eventId) { switch (mainId) { case MainEvent.EV_ALARM: case MainEvent.EV_TRIGGER: return Messages.format("Event.EVENT" + mainId + "_X",eventId); //$NON-NLS-1$ case MainEvent.EV_MOUSE: if ((eventId <= 9) || (eventId >= 50 && eventId <= 58)) { int i = eventId % 10; int b; boolean g = eventId >= 50; if (g || i < 3) b = i % 3; else if (i > 3) b = --i % 3; else { b = -1; i = 0; } return Messages.format("Event.EVENT6_BUTTON",b,i / 3,g ? 1 : 0); } else if ((eventId >= 16 && eventId <= 28) || (eventId >= 31 && eventId <= 43)) { int j = eventId < 31 ? 1 : 2; int i = eventId - (j == 1 ? 16 : 31); return Messages.format("Event.EVENT6_JOYSTICK",j,i < 4 ? i : 4,i - 4); } return Messages.getString("Event.EVENT" + mainId + "_" + eventId); //$NON-NLS-1$ case MainEvent.EV_KEYBOARD: case MainEvent.EV_KEYPRESS: case MainEvent.EV_KEYRELEASE: return Messages.format("Event.EVENT" + mainId + "_X",getGmKeyName(eventId)); //$NON-NLS-1$ case MainEvent.EV_OTHER: if (eventId >= EV_USER0) return Messages.format("Event.EVENT" + mainId + "_X",eventId - EV_USER0); //$NON-NLS-1$ return Messages.getString("Event.EVENT" + mainId + "_" + eventId); //$NON-NLS-1$ default: return Messages.getString("Event.EVENT" + mainId + "_" + eventId); //$NON-NLS-1$ } } public Event copy() { Event ev = new Event(); ev.mainId = mainId; ev.id = id; ev.other = other; for (Action act : actions) ev.actions.add(act.copy()); return ev; } static { List<Integer> keys = new ArrayList<Integer>(); keys.add(37); //vk_left keys.add(39); //vk_right keys.add(38); //vk_up keys.add(40); //vk_down keys.add(17); //vk_control keys.add(18); //vk_alt keys.add(16); //vk_shift keys.add(32); //vk_space keys.add(13); //vk_enter keys.add(96); //vk_numpad0 keys.add(97); //vk_numpad1 keys.add(98); //vk_numpad2 keys.add(99); //vk_numpad3 keys.add(100); //vk_numpad4 keys.add(101); //vk_numpad5 keys.add(102); //vk_numpad6 keys.add(103); //vk_numpad7 keys.add(104); //vk_numpad8 keys.add(105); //vk_numpad9 keys.add(111); //vk_divide keys.add(106); //vk_multiply keys.add(109); //vk_subtract keys.add(107); //vk_add keys.add(110); //vk_decimal keys.add(48); //0 keys.add(49); //1 keys.add(50); //2 keys.add(51); //3 keys.add(52); //4 keys.add(53); //5 keys.add(54); //6 keys.add(55); //7 keys.add(56); //8 keys.add(57); //9 keys.add(65); //A keys.add(66); //B keys.add(67); //C keys.add(68); //D keys.add(69); //E keys.add(70); //F keys.add(71); //G keys.add(72); //H keys.add(73); //I keys.add(74); //J keys.add(75); //K keys.add(76); //L keys.add(77); //M keys.add(78); //N keys.add(79); //O keys.add(80); //P keys.add(81); //Q keys.add(82); //R keys.add(83); //S keys.add(84); //T keys.add(85); //U keys.add(86); //V keys.add(87); //W keys.add(88); //X keys.add(89); //Y keys.add(90); //Z keys.add(112); //vk_f1 keys.add(113); //vk_f2 keys.add(114); //vk_f3 keys.add(115); //vk_f4 keys.add(116); //vk_f5 keys.add(117); //vk_f6 keys.add(118); //vk_f7 keys.add(119); //vk_f8 keys.add(120); //vk_f9 keys.add(121); //vk_f10 keys.add(122); //vk_f11 keys.add(123); //vk_f12 keys.add(8); //vk_backspace keys.add(27); //vk_escape keys.add(36); //vk_home keys.add(35); //vk_end keys.add(33); //vk_pageup keys.add(34); //vk_pagedown keys.add(46); //vk_delete keys.add(45); //vk_insert keys.add(0); //vk_nokey keys.add(1); //vk_anykey KEYS = Collections.unmodifiableList((keys)); } }