diff --git a/sigIRCv2.jar b/sigIRCv2.jar index 5bff6e5..e0c169d 100644 Binary files a/sigIRCv2.jar and b/sigIRCv2.jar differ diff --git a/src/sig/modules/BandoriModule.java b/src/sig/modules/BandoriModule.java index e71bd45..df0b820 100644 --- a/src/sig/modules/BandoriModule.java +++ b/src/sig/modules/BandoriModule.java @@ -116,7 +116,7 @@ public class BandoriModule extends Module{ stamp_map.put("sayo_goodwork",Arrays.asList("goodwork","goodjob","nicejob","welldone","greatwork","greatjob")); stamp_map.put("lisa_nextonelastone",Arrays.asList("lastone","mylast")); stamp_map.put("ako_onemoretime",Arrays.asList("onemore","goagain","keepgoing","dontstop","runit")); - stamp_map.put("rinko_jam",Arrays.asList("lovethissong","jam")); + stamp_map.put("rinko_jam",Arrays.asList("lovethissong","jam","happybirthday")); stamp_map.put("marina_yeahyeah",Arrays.asList("yeahyeah","letsgo")); stamp_map.put("kokoro_moremore",Arrays.asList("moremore","iwantmore")); stamp_map.put("arisa_huh",Arrays.asList("huh?","hh?","yy?","aat?","aa?","tt?","nani","nand")); diff --git a/src/sig/modules/ControllerModule.java b/src/sig/modules/ControllerModule.java index d5b61f4..efd56a2 100644 --- a/src/sig/modules/ControllerModule.java +++ b/src/sig/modules/ControllerModule.java @@ -74,9 +74,11 @@ public class ControllerModule extends Module{ final static int RESIZE_BORDER = 5; final static double MINIMUM_ELEMENT_SIZE=8; boolean proportionalResize=false; + public static ControllerModule controller_module; public ControllerModule(Rectangle2D bounds, String moduleName) { super(bounds, moduleName); + ControllerModule.controller_module = this; if (!GLFW.glfwInit()) { System.out.println("Failed to initialize GLFW!"); } else { diff --git a/src/sig/modules/DDRStepModule.java b/src/sig/modules/DDRStepModule.java new file mode 100644 index 0000000..3276ceb --- /dev/null +++ b/src/sig/modules/DDRStepModule.java @@ -0,0 +1,282 @@ +package sig.modules; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Image; +import java.awt.Point; +import java.awt.event.KeyEvent; +import java.awt.geom.Rectangle2D; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import javax.imageio.ImageIO; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.Clip; +import javax.sound.sampled.LineUnavailableException; +import javax.sound.sampled.UnsupportedAudioFileException; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; + +import sig.Module; +import sig.sigIRC; +import sig.modules.Controller.Controller; + +public class DDRStepModule extends Module{ + public static DDRStepModule step_module; + ControllerModule controller; + Controller cont; + AudioInputStream songStream,metronomeStream; + Clip audioClip,metronomeClick; + int bpm=180; + int lastsystemtime = 0; + int lastnotetime = 0; + int offset = 0; + int framecounter = 0; + Image arrow_img1,arrow_img2; + byte[] lastbuttonstate = new byte[]{0,0,0,0,0,0}; + boolean[] lastpressedstate = new boolean[]{false,false,false,false,false,false}; + List notelist = new ArrayList(); + boolean notepressed=false; + int notespd = 256; + + public DDRStepModule(Rectangle2D bounds, String moduleName) { + this(bounds,moduleName,true); + } + + public DDRStepModule(Rectangle2D bounds, String moduleName, boolean enabled) { + super(bounds, moduleName, enabled); + Initialize(); + } + + void Initialize() { + DDRStepModule.step_module = this; + if (sigIRC.controllermodule_enabled) { + try { + metronomeStream = AudioSystem.getAudioInputStream(new File(sigIRC.BASEDIR+"sigIRC/sounds/tick.wav")); + try { + metronomeClick = AudioSystem.getClip(); + metronomeClick.open(metronomeStream); + } catch (LineUnavailableException e) { + e.printStackTrace(); + } + } catch (UnsupportedAudioFileException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + } + controller = ControllerModule.controller_module; + cont = controller.getControllers().get(0); + try { + arrow_img1 = ImageIO.read(new File(sigIRC.BASEDIR+"sigIRC/ddr_notes1.png")); + arrow_img2 = ImageIO.read(new File(sigIRC.BASEDIR+"sigIRC/ddr_notes2.png")); + } catch (IOException e) { + e.printStackTrace(); + } + } else { + System.out.println("Cannot initialize DDRStepModule due to Controller Module being disabled!"); + this.enabled = false; + } + } + + public void run() { + super.run(); + + if (cont!=null) { + //System.out.println(cont.outputButtons()); + /* Start = 1 + Select = 0 + Up = 5 + Right = 2 + Left = 4 + Down = 3 + */ + + + //System.out.println((System.currentTimeMillis()-(1000/(bpm/60d)))+"/"+lastsystemtime); + if (audioClip!=null && + audioClip.isRunning() && lastsystemtime0;i--) { + Note n = notelist.get(i); + if ((int)(notespd*((audioClip.getFramePosition()-n.framePosition)/44100d))>this.position.getHeight()) { + break; + } + g.setColor(Color.RED); + g.drawImage(arrow_img2, initialP.x+128+n.direction.xoffset, initialP.y-(int)(notespd*((audioClip.getFramePosition()-n.framePosition)/44100d)), initialP.x+64+128+n.direction.xoffset, initialP.y+64-(int)(notespd*((audioClip.getFramePosition()-n.framePosition)/44100d)), n.direction.subimage*64, 0, n.direction.subimage*64+64, 64, new Color(0,0,0,0), sigIRC.window); + } + } + } + + public void keypressed(KeyEvent ev) { + super.keypressed(ev); + if (ev.getKeyCode() == ev.VK_OPEN_BRACKET) { + JFileChooser song_choice = new JFileChooser(); + int val = song_choice.showOpenDialog(sigIRC.window); + if (val == JFileChooser.APPROVE_OPTION) { + System.out.println("Opening file "+song_choice.getSelectedFile().getAbsolutePath()); + } + JOptionPane bpm_pane = new JOptionPane(); + String input = bpm_pane.showInputDialog(sigIRC.window,"Input Song BPM:","180"); + if (input!=null && input.length()>0) { + bpm = Integer.parseInt(input); + System.out.println("BPM set to "+bpm); + try { + songStream = AudioSystem.getAudioInputStream(new File(song_choice.getSelectedFile().getAbsolutePath())); + try { + if (audioClip!=null && audioClip.isOpen()) { + audioClip.close(); + } + audioClip = AudioSystem.getClip(); + audioClip.open(songStream); + } catch (LineUnavailableException e) { + e.printStackTrace(); + } + } catch (UnsupportedAudioFileException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + } + bpm_pane.showMessageDialog(sigIRC.window,"Press the RIGHT BRACKET button to begin playing."); + } else + if (ev.getKeyCode() == ev.VK_1) { + if (audioClip.isOpen() && !audioClip.isRunning()) { + audioClip.start(); + framecounter = audioClip.getFramePosition(); + System.out.println("Audio Clip Started."); + lastsystemtime = audioClip.getFramePosition(); + lastnotetime = audioClip.getFramePosition(); + } + } else + if (ev.getKeyCode() == ev.VK_2) { + if (audioClip.isOpen() && audioClip.isRunning()) { + audioClip.stop(); + audioClip.setFramePosition(offset); + System.out.println("Audio Clip Stopped."); + } + } else + if (ev.getKeyCode() == ev.VK_3) { + if (audioClip.isOpen() && audioClip.isRunning()) { + offset = audioClip.getFramePosition(); + //audioClip.setMicrosecondPosition(offset); + System.out.println("Set new Offset to "+offset); + } + } else + if (ev.getKeyCode() == ev.VK_4) { + if (audioClip.isOpen() && !audioClip.isRunning()) { + framecounter = 0; + audioClip.setFramePosition(0); + System.out.println("Reset offset to 0."); + } + } + } +} diff --git a/src/sig/sigIRC.java b/src/sig/sigIRC.java index c7f0549..4a0f6cd 100644 --- a/src/sig/sigIRC.java +++ b/src/sig/sigIRC.java @@ -25,6 +25,7 @@ import com.sun.jna.platform.win32.WinNT.HANDLEByReference; import sig.modules.BandoriModule; import sig.modules.ChatLogModule; import sig.modules.ControllerModule; +import sig.modules.DDRStepModule; import sig.modules.RabiRaceModule; import sig.modules.RabiRibiModule; import sig.modules.TouhouMotherModule; @@ -79,7 +80,7 @@ public class sigIRC{ public static List customsounds = new ArrayList(); public static List modules = new ArrayList(); static UpdateEvent updater = new UpdateEvent(); - static Timer programClock = new Timer(32,updater); + static Timer programClock = new Timer(10,updater); final public static int BASESCROLLSPD = 4; final public static int ROWSEPARATION = 64; final public static String BASEDIR = "./"; @@ -140,6 +141,11 @@ public class sigIRC{ public static int bandorimodule_height=312; public static int bandorimodule_X=0; public static int bandorimodule_Y=312; + public static int ddrstepmodule_width=320; + public static int ddrstepmodule_height=312; + public static int ddrstepmodule_X=0; + public static int ddrstepmodule_Y=312; + public static boolean ddrstepmodule_enabled=false; public static boolean bandorimodule_enabled=false; public static boolean rabiribimodule_enabled=false; public static int rabiracemodule_width=320; @@ -231,6 +237,11 @@ public class sigIRC{ bandorimodule_width = config.getInteger("BANDORI_module_width", 640); bandorimodule_height = config.getInteger("BANDORI_module_height", 120); bandorimodule_enabled = config.getBoolean("Module_bandori_Enabled", false); + ddrstepmodule_X = config.getInteger("ddrstep_module_X", 240); + ddrstepmodule_Y = config.getInteger("ddrstep_module_Y", 0); + ddrstepmodule_width = config.getInteger("ddrstep_module_width", 640); + ddrstepmodule_height = config.getInteger("ddrstep_module_height", 120); + ddrstepmodule_enabled = config.getBoolean("Module_ddrstep_Enabled", false); rabiracemodule_X = config.getInteger("RABIRACE_module_X",0); rabiracemodule_Y = config.getInteger("RABIRACE_module_Y",312); rabiracemodule_width = config.getInteger("RABIRACE_module_width",320); @@ -420,6 +431,12 @@ public class sigIRC{ "Bandori" )); } + if (ddrstepmodule_enabled) { + modules.add(new DDRStepModule( + new Rectangle(ddrstepmodule_X,ddrstepmodule_Y,ddrstepmodule_width,ddrstepmodule_height), + "DDR Step" + )); + } } private static void InitializeCustomSounds() {