diff --git a/.gitignore b/.gitignore index 3516599..80948a7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ bin/* .project -.classpath \ No newline at end of file +.classpath +*.jar \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..9bcf999 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,3 @@ +language: java +jdk: + - oraclejdk8 diff --git a/README.md b/README.md index 20693c9..f293cb9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,8 @@ # First-Game-Lighting +Compile status: ![Status](https://travis-ci.org/mrdev023/First-Game-Lighting.svg?branch=master) + Ce projet est seulement a projet utiliser pour apprendre le forward rendering pour ensuite l'integrer dans mon moteur de jeu qui sera conçus avec ces derniere technologie pour ensuite faire des jeux avec celui-ci. + +![Image](https://pbs.twimg.com/media/Cc3DuwnWIAII5Zw.jpg:large) diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..9ae77ff --- /dev/null +++ b/build.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libs/OpenAL.dll b/libs/OpenAL.dll new file mode 100644 index 0000000..f29c3ce Binary files /dev/null and b/libs/OpenAL.dll differ diff --git a/libs/OpenAL32.dll b/libs/OpenAL32.dll new file mode 100644 index 0000000..31d639d Binary files /dev/null and b/libs/OpenAL32.dll differ diff --git a/libs/glfw.dll b/libs/glfw.dll new file mode 100644 index 0000000..f8c3dc7 Binary files /dev/null and b/libs/glfw.dll differ diff --git a/libs/glfw32.dll b/libs/glfw32.dll new file mode 100644 index 0000000..3291dce Binary files /dev/null and b/libs/glfw32.dll differ diff --git a/libs/jemalloc.dll b/libs/jemalloc.dll new file mode 100644 index 0000000..c71efc1 Binary files /dev/null and b/libs/jemalloc.dll differ diff --git a/libs/jemalloc32.dll b/libs/jemalloc32.dll new file mode 100644 index 0000000..6bea0b3 Binary files /dev/null and b/libs/jemalloc32.dll differ diff --git a/libs/libglfw.dylib b/libs/libglfw.dylib new file mode 100644 index 0000000..905c1bd Binary files /dev/null and b/libs/libglfw.dylib differ diff --git a/libs/libglfw.so b/libs/libglfw.so new file mode 100644 index 0000000..e97463b Binary files /dev/null and b/libs/libglfw.so differ diff --git a/libs/libjemalloc.dylib b/libs/libjemalloc.dylib new file mode 100644 index 0000000..1d7cc79 Binary files /dev/null and b/libs/libjemalloc.dylib differ diff --git a/libs/libjemalloc.so b/libs/libjemalloc.so new file mode 100644 index 0000000..dc95c65 Binary files /dev/null and b/libs/libjemalloc.so differ diff --git a/libs/liblwjgl.dylib b/libs/liblwjgl.dylib new file mode 100644 index 0000000..aeda823 Binary files /dev/null and b/libs/liblwjgl.dylib differ diff --git a/libs/liblwjgl.so b/libs/liblwjgl.so new file mode 100644 index 0000000..229b3c9 Binary files /dev/null and b/libs/liblwjgl.so differ diff --git a/libs/libopenal.dylib b/libs/libopenal.dylib new file mode 100644 index 0000000..7f0047b Binary files /dev/null and b/libs/libopenal.dylib differ diff --git a/libs/libopenal.so b/libs/libopenal.so new file mode 100644 index 0000000..0c8e888 Binary files /dev/null and b/libs/libopenal.so differ diff --git a/libs/lwjgl.dll b/libs/lwjgl.dll new file mode 100644 index 0000000..8f385e5 Binary files /dev/null and b/libs/lwjgl.dll differ diff --git a/libs/lwjgl32.dll b/libs/lwjgl32.dll new file mode 100644 index 0000000..6177778 Binary files /dev/null and b/libs/lwjgl32.dll differ diff --git a/src/fr/technicalgames/Main.java b/src/fr/technicalgames/Main.java index 91db18e..6b729db 100644 --- a/src/fr/technicalgames/Main.java +++ b/src/fr/technicalgames/Main.java @@ -16,35 +16,35 @@ import fr.technicalgames.math.*; import fr.technicalgames.render.*; public class Main { - + //Valeur de la fenetre public static final int WIDTH = 800,HEIGHT = 600; public static final String TITLE = "Test Shader OpenGL"; - + //Variable pour la gestion de la fenetre public static long windowID = 0; public static float mousePositionX = 0,mousePositionY = 0,dMouseX = 0,dMouseY = 0; public static GLFWErrorCallback errorCallback; - + //variable du moteur du jeu public static float delta = 0; public static Game game; public static long previous = System.currentTimeMillis(),previousInfo = System.currentTimeMillis(),previousTicks = System.currentTimeMillis(); public static int FPS = 0,TICKS = 0; - + public static void main(String[] args) throws Exception { //Creation de la fenetre //------------------------------------------------------------------------------------ errorCallback = new GLFWErrorCallback() { public void invoke(int error, long description) { - System.err.println("ID : " + error + " | Description :" + description); + System.err.println("ID : " + error + " | Description :" + description); } }; // glfwSetErrorCallback(errorCallback); - - if(glfwInit() != GL11.GL_TRUE)throw new Exception("GLFW not init"); + + if(glfwInit())throw new Exception("GLFW not init"); glfwDefaultWindowHints(); - glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE); + glfwWindowHint(GLFW_VISIBLE, GL11.GL_FALSE); glfwWindowHint(GLFW_RESIZABLE, GL11.GL_FALSE); glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); @@ -59,24 +59,24 @@ public class Main { System.out.println("OpenGL Version :" + glGetString(GL_VERSION)); System.out.println("GLSL Shader Version :" + glGetString(GL20.GL_SHADING_LANGUAGE_VERSION)); //------------------------------------------------------------------------------------ - + //Creation du device audio //------------------------------------------------------------------------------------ Audio.create(); //------------------------------------------------------------------------------------ - + //initialisation //------------------------------------------------------------------------------------ Input.init(); game = new MainGame(); - + Camera.rot = new Vector3f(-3.0f,-338.0f,0.0f); Camera.pos = new Vector3f(1.5242399f,0.0f,-13.456063f); Camera.transform(); //------------------------------------------------------------------------------------ - - while(glfwWindowShouldClose(windowID) == GL11.GL_FALSE){ - + + while(glfwWindowShouldClose(windowID)){ + if(System.currentTimeMillis() - previousTicks >= 1000/60){//Update TICKS glfwPollEvents(); Input.update(); @@ -96,7 +96,7 @@ public class Main { glfwSwapBuffers(windowID); FPS++; } - + if(System.currentTimeMillis() - previousInfo >= 1000){ glfwSetWindowTitle(windowID, TITLE + " | FPS:" + FPS + " TICKS:" + TICKS); FPS = 0; @@ -104,10 +104,10 @@ public class Main { previousInfo = System.currentTimeMillis(); } } - + Audio.destroy(); glfwDestroyWindow(windowID); glfwTerminate(); } - + } diff --git a/src/fr/technicalgames/audio/Audio.java b/src/fr/technicalgames/audio/Audio.java index 31e95ce..6b38928 100644 --- a/src/fr/technicalgames/audio/Audio.java +++ b/src/fr/technicalgames/audio/Audio.java @@ -1,9 +1,8 @@ package fr.technicalgames.audio; +import static org.lwjgl.openal.AL.createCapabilities; import static org.lwjgl.openal.AL10.*; import static org.lwjgl.openal.ALC10.*; -import static org.lwjgl.openal.ALC11.*; -import static org.lwjgl.openal.ALUtil.*; import static org.lwjgl.stb.STBVorbis.*; import static org.lwjgl.system.MemoryUtil.*; @@ -19,323 +18,305 @@ import org.lwjgl.openal.*; import org.lwjgl.stb.STBVorbisInfo; -public abstract class Audio { - - //Variables global - //------------------------------------------------------ - public static ALDevice device; - public static ALCCapabilities caps; - public static ALContext context; - public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114; - //------------------------------------------------------ - - //Variable de l'objet audio ou du son a lire - //------------------------------------------------------ - private int buffer,source; - private String fileName; - private String format; - //------------------------------------------------------ +public class Audio { - //Fonction global - //------------------------------------------------------ - public static void create(){ - device = ALDevice.create(null); - if ( device == null ) - throw new IllegalStateException("Failed to open the default device."); - caps = device.getCapabilities(); - System.out.println("---------------------------- Create Audio Device -------------------------------------"); - System.out.println("OpenALC10: " + caps.OpenALC10); - System.out.println("OpenALC11: " + caps.OpenALC11); - System.out.println("caps.ALC_EXT_EFX = " + caps.ALC_EXT_EFX); - - String defaultDeviceSpecifier = alcGetString(0L, ALC_DEFAULT_DEVICE_SPECIFIER); - System.out.println("Default device: " + defaultDeviceSpecifier); + //Variables global + //------------------------------------------------------ + public static long device; + public static ALCCapabilities caps; + public static long context; + public static final int INITIAL_STATE = 4113,PAUSED_STATE = 4115,STOPPED_STATE = 4116,PLAYING_STATE = 4114; + //------------------------------------------------------ - context = ALContext.create(device); + //Variable de l'objet audio ou du son a lire + //------------------------------------------------------ + private int buffer,source; + private String fileName; + private String format; + //------------------------------------------------------ - System.out.println("ALC_FREQUENCY: " + alcGetInteger(device.address(), ALC_FREQUENCY) + "Hz"); - System.out.println("ALC_REFRESH: " + alcGetInteger(device.address(), ALC_REFRESH) + "Hz"); - System.out.println("ALC_SYNC: " + (alcGetInteger(device.address(), ALC_SYNC) == ALC_TRUE)); - System.out.println("ALC_MONO_SOURCES: " + alcGetInteger(device.address(), ALC_MONO_SOURCES)); - System.out.println("ALC_STEREO_SOURCES: " + alcGetInteger(device.address(), ALC_STEREO_SOURCES)); - System.out.println("---------------------------------------------------------------------------------------"); - } - - public static void destroy(){ - context.destroy(); - device.destroy(); - } - //------------------------------------------------------ - - //Fonction de l'objet audio ou du son a lire - //------------------------------------------------------ - - public Audio(String fileName) throws Exception{ - this.fileName = fileName; - setSound(); - } - - private void setSound() throws Exception{ - if(fileName.endsWith(".ogg")){ - loadOGGFormat(); - format = "OGG"; - }else if(fileName.endsWith(".wav")){ - loadWavFormat(); - format = "WAV"; - }else{ - throw new Exception("Format not supported !"); - } + //Fonction global + //------------------------------------------------------ + public static void create(){ + device = alcOpenDevice((ByteBuffer)null); + ALCCapabilities deviceCaps = ALC.createCapabilities(device); + + context = alcCreateContext(device, (IntBuffer)null); + alcMakeContextCurrent(context); + createCapabilities(deviceCaps); + } + + public static void destroy(){ + alcCloseDevice(device); + alcDestroyContext(context); + } + //------------------------------------------------------ + + //Fonction de l'objet audio ou du son a lire + //------------------------------------------------------ + + public Audio(String fileName) throws Exception{ + this.fileName = fileName; + setSound(); + } + + private void setSound() throws Exception{ + if(fileName.endsWith(".ogg")){ + loadOGGFormat(); + format = "OGG"; + }else if(fileName.endsWith(".wav")){ + loadWavFormat(); + format = "WAV"; + }else{ + throw new Exception("Format not supported !"); + } alSourcei(source, AL_BUFFER, buffer); - checkALError(); int size = alGetBufferi(buffer,AL_SIZE); - int bits = alGetBufferi(buffer, AL_BITS); - int channels = alGetBufferi(buffer, AL_CHANNELS); - int freq = alGetBufferi(buffer, AL_FREQUENCY); + int bits = alGetBufferi(buffer, AL_BITS); + int channels = alGetBufferi(buffer, AL_CHANNELS); + int freq = alGetBufferi(buffer, AL_FREQUENCY); System.out.println(fileName + " loaded !" + " | TIME : " + (size/channels/(bits/8)/freq) + "s | BITS : " + bits + " | CHANNELS : " + channels + " | FREQUENCE : " + freq + " FORMAT : " + format); - } - - public void loadWavFormat() throws Exception{ - AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName))); - AudioFormat audioformat = ais.getFormat(); + } - // get channels - int channels = 0; - if (audioformat.getChannels() == 1) { - if (audioformat.getSampleSizeInBits() == 8) { - channels = AL10.AL_FORMAT_MONO8; - } else if (audioformat.getSampleSizeInBits() == 16) { - channels = AL10.AL_FORMAT_MONO16; - } else { - assert false : "Illegal sample size"; - } - } else if (audioformat.getChannels() == 2) { - if (audioformat.getSampleSizeInBits() == 8) { - channels = AL10.AL_FORMAT_STEREO8; - } else if (audioformat.getSampleSizeInBits() == 16) { - channels = AL10.AL_FORMAT_STEREO16; - } else { - assert false : "Illegal sample size"; - } - } else { - assert false : "Only mono or stereo is supported"; - } - - int available = ais.available(); - if(available <= 0) { - available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8; - } - byte[] buf = new byte[ais.available()]; - int read = 0, total = 0; - while ((read = ais.read(buf, total, buf.length - total)) != -1 - && total < buf.length) { - total += read; - } - byte[] audio_bytes = buf; - boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16; - ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN; - ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length); - dest.order(ByteOrder.nativeOrder()); - ByteBuffer src = ByteBuffer.wrap(audio_bytes); - src.order(order); - if (two_bytes_data) { - ShortBuffer dest_short = dest.asShortBuffer(); - ShortBuffer src_short = src.asShortBuffer(); - while (src_short.hasRemaining()) - dest_short.put(src_short.get()); - } else { - while (src.hasRemaining()) - dest.put(src.get()); - } - dest.rewind(); - - this.buffer = alGenBuffers(); - this.source = alGenSources(); + public void loadWavFormat() throws Exception{ + AudioInputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream(fileName))); + AudioFormat audioformat = ais.getFormat(); + + // get channels + int channels = 0; + if (audioformat.getChannels() == 1) { + if (audioformat.getSampleSizeInBits() == 8) { + channels = AL10.AL_FORMAT_MONO8; + } else if (audioformat.getSampleSizeInBits() == 16) { + channels = AL10.AL_FORMAT_MONO16; + } else { + assert false : "Illegal sample size"; + } + } else if (audioformat.getChannels() == 2) { + if (audioformat.getSampleSizeInBits() == 8) { + channels = AL10.AL_FORMAT_STEREO8; + } else if (audioformat.getSampleSizeInBits() == 16) { + channels = AL10.AL_FORMAT_STEREO16; + } else { + assert false : "Illegal sample size"; + } + } else { + assert false : "Only mono or stereo is supported"; + } + + int available = ais.available(); + if(available <= 0) { + available = ais.getFormat().getChannels() * (int) ais.getFrameLength() * ais.getFormat().getSampleSizeInBits() / 8; + } + byte[] buf = new byte[ais.available()]; + int read = 0, total = 0; + while ((read = ais.read(buf, total, buf.length - total)) != -1 + && total < buf.length) { + total += read; + } + byte[] audio_bytes = buf; + boolean two_bytes_data = audioformat.getSampleSizeInBits() == 16; + ByteOrder order = audioformat.isBigEndian() ? ByteOrder.BIG_ENDIAN : ByteOrder.LITTLE_ENDIAN; + ByteBuffer dest = ByteBuffer.allocateDirect(audio_bytes.length); + dest.order(ByteOrder.nativeOrder()); + ByteBuffer src = ByteBuffer.wrap(audio_bytes); + src.order(order); + if (two_bytes_data) { + ShortBuffer dest_short = dest.asShortBuffer(); + ShortBuffer src_short = src.asShortBuffer(); + while (src_short.hasRemaining()) + dest_short.put(src_short.get()); + } else { + while (src.hasRemaining()) + dest.put(src.get()); + } + dest.rewind(); + + this.buffer = alGenBuffers(); + this.source = alGenSources(); alBufferData(this.buffer, channels, dest, (int)audioformat.getSampleRate()); dest.clear(); - } - - public void loadOGGFormat(){ - STBVorbisInfo info = STBVorbisInfo.malloc(); - ByteBuffer buff = BufferUtils.createByteBuffer(0); - //lecture du fichier - //---------------------------------------------------------------------------------------------------------------- - try { - File file = new File(fileName); - if ( file.isFile() ) { - FileInputStream fis = new FileInputStream(file); - FileChannel fc = fis.getChannel(); - buff = BufferUtils.createByteBuffer((int)fc.size() + 1); - - while ( fc.read(buff) != -1 ) ; - - fis.close(); - fc.close(); - } else { - System.err.println("File not found !"); - return; - } + } - buff.flip(); - } catch (IOException e) { - throw new RuntimeException(e); - } - //---------------------------------------------------------------------------------------------------------------- + public void loadOGGFormat(){ + STBVorbisInfo info = STBVorbisInfo.malloc(); + ByteBuffer buff = BufferUtils.createByteBuffer(0); + //lecture du fichier + //---------------------------------------------------------------------------------------------------------------- + try { + File file = new File(fileName); + if ( file.isFile() ) { + FileInputStream fis = new FileInputStream(file); + FileChannel fc = fis.getChannel(); + buff = BufferUtils.createByteBuffer((int)fc.size() + 1); - IntBuffer error = BufferUtils.createIntBuffer(1); - long decoder = stb_vorbis_open_memory(buff, error, null); - if ( decoder == NULL ) - throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0)); + while ( fc.read(buff) != -1 ) ; - stb_vorbis_get_info(decoder, info); + fis.close(); + fc.close(); + } else { + System.err.println("File not found !"); + return; + } - int channels = info.channels(); + buff.flip(); + } catch (IOException e) { + throw new RuntimeException(e); + } + //---------------------------------------------------------------------------------------------------------------- - stb_vorbis_seek_start(decoder); - int lengthSamples = stb_vorbis_stream_length_in_samples(decoder); + IntBuffer error = BufferUtils.createIntBuffer(1); + long decoder = stb_vorbis_open_memory(buff, error, null); + if ( decoder == NULL ) + throw new RuntimeException("Failed to open Ogg Vorbis file. Error: " + error.get(0)); - ByteBuffer pcm = BufferUtils.createByteBuffer(lengthSamples * 2 * channels); + stb_vorbis_get_info(decoder, info); - stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm, lengthSamples); - stb_vorbis_close(decoder); - - buffer = alGenBuffers(); - checkALError(); - - source = alGenSources(); - checkALError(); - - if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate()); - else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate()); - checkALError(); - } - - public void playSound(){ - if(source == 0 || buffer == 0) return; - alSourcePlay(source); - } - - public int getPosition(){ - return alGetSourcei(source, AL_POSITION); - } - - public int getDurationInSeconds(){ - if(source == 0 || buffer == 0) return 0; - int size = alGetBufferi(buffer,AL_SIZE); - int bits = alGetBufferi(buffer, AL_BITS); - int channels = alGetBufferi(buffer, AL_CHANNELS); - int freq = alGetBufferi(buffer, AL_FREQUENCY); - return size/channels/(bits/8)/freq; - } - - public int getStateSound(){ - if(source == 0 || buffer == 0) return 0; - return alGetSourcei(source, AL_SOURCE_STATE); - } - - public boolean isStopped(){ - if(source == 0 || buffer == 0) return false; - if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true; - else return false; - } - - public boolean isPaused(){ - if(source == 0 || buffer == 0) return false; - if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true; - else return false; - } - - public boolean isPlaying(){ - if(source == 0 || buffer == 0) return false; - if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true; - else return false; - } - - public boolean isInitial(){ - if(source == 0 || buffer == 0) return false; - if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true; - else return false; - } - - public void stopSound(){ - if(source == 0 || buffer == 0) return; - alSourceStop(source); - } + int channels = info.channels(); - public void pauseSound(){ - if(source == 0 || buffer == 0) return; - alSourcePause(source); - } - - public void rewindSound(){ - if(source == 0 || buffer == 0) return; - alSourceRewind(source); - } - - public void setGain(float gain){ - if(source == 0 || buffer == 0) return; - if(gain > 1.0f)gain = 1.0f; - if(gain < 0.0f)gain = 0.0f; - alSourcef(source, AL_GAIN, gain); - } - - public void setPitch(float pitch){ - if(source == 0 || buffer == 0) return; - if(pitch < 0.0f)pitch = 0.0f; - alSourcef(source, AL_PITCH, pitch); - } - - - public float getGain(){ - if(source == 0 || buffer == 0) return 0; - return alGetSourcef(source, AL_GAIN); - } - - public float getPitch(){ - if(source == 0 || buffer == 0) return 0; - return alGetSourcef(source, AL_PITCH); - } - - public void setLooping(boolean looping){ - if(source == 0 || buffer == 0) return; - if(looping){ - alSourcef(source, AL_LOOPING, AL_TRUE); - }else{ - alSourcef(source, AL_LOOPING, AL_FALSE); - } - } - - public void destroySound(){ - alDeleteSources(source); - alDeleteBuffers(buffer); - source = 0; - buffer = 0; - } - - public String getFileName() { - return fileName; - } + stb_vorbis_seek_start(decoder); + int lengthSamples = stb_vorbis_stream_length_in_samples(decoder); - public void setFileName(String fileName) throws Exception { - this.fileName = fileName; - destroySound(); - setSound(); - } + ShortBuffer pcm = BufferUtils.createShortBuffer(lengthSamples * channels); - public int getBuffer() { - return buffer; - } + stb_vorbis_get_samples_short_interleaved(decoder, channels, pcm); + stb_vorbis_close(decoder); - public void setBuffer(int buffer) { - this.buffer = buffer; - } + buffer = alGenBuffers(); - public int getSource() { - return source; - } + source = alGenSources(); + + if(channels == 1)alBufferData(buffer, AL_FORMAT_MONO16, pcm, info.sample_rate()); + else alBufferData(buffer, AL_FORMAT_STEREO16, pcm, info.sample_rate()); + } + + public void playSound(){ + if(source == 0 || buffer == 0) return; + alSourcePlay(source); + } + + public int getPosition(){ + return alGetSourcei(source, AL_POSITION); + } + + public int getDurationInSeconds(){ + if(source == 0 || buffer == 0) return 0; + int size = alGetBufferi(buffer,AL_SIZE); + int bits = alGetBufferi(buffer, AL_BITS); + int channels = alGetBufferi(buffer, AL_CHANNELS); + int freq = alGetBufferi(buffer, AL_FREQUENCY); + return size/channels/(bits/8)/freq; + } + + public int getStateSound(){ + if(source == 0 || buffer == 0) return 0; + return alGetSourcei(source, AL_SOURCE_STATE); + } + + public boolean isStopped(){ + if(source == 0 || buffer == 0) return false; + if(alGetSourcei(source, AL_SOURCE_STATE) == STOPPED_STATE)return true; + else return false; + } + + public boolean isPaused(){ + if(source == 0 || buffer == 0) return false; + if(alGetSourcei(source, AL_SOURCE_STATE) == PAUSED_STATE)return true; + else return false; + } + + public boolean isPlaying(){ + if(source == 0 || buffer == 0) return false; + if(alGetSourcei(source, AL_SOURCE_STATE) == PLAYING_STATE)return true; + else return false; + } + + public boolean isInitial(){ + if(source == 0 || buffer == 0) return false; + if(alGetSourcei(source, AL_SOURCE_STATE) == INITIAL_STATE)return true; + else return false; + } + + public void stopSound(){ + if(source == 0 || buffer == 0) return; + alSourceStop(source); + } + + public void pauseSound(){ + if(source == 0 || buffer == 0) return; + alSourcePause(source); + } + + public void rewindSound(){ + if(source == 0 || buffer == 0) return; + alSourceRewind(source); + } + + public void setGain(float gain){ + if(source == 0 || buffer == 0) return; + if(gain > 1.0f)gain = 1.0f; + if(gain < 0.0f)gain = 0.0f; + alSourcef(source, AL_GAIN, gain); + } + + public void setPitch(float pitch){ + if(source == 0 || buffer == 0) return; + if(pitch < 0.0f)pitch = 0.0f; + alSourcef(source, AL_PITCH, pitch); + } + + + public float getGain(){ + if(source == 0 || buffer == 0) return 0; + return alGetSourcef(source, AL_GAIN); + } + + public float getPitch(){ + if(source == 0 || buffer == 0) return 0; + return alGetSourcef(source, AL_PITCH); + } + + public void setLooping(boolean looping){ + if(source == 0 || buffer == 0) return; + if(looping){ + alSourcef(source, AL_LOOPING, AL_TRUE); + }else{ + alSourcef(source, AL_LOOPING, AL_FALSE); + } + } + + public void destroySound(){ + alDeleteSources(source); + alDeleteBuffers(buffer); + source = 0; + buffer = 0; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) throws Exception { + this.fileName = fileName; + destroySound(); + setSound(); + } + + public int getBuffer() { + return buffer; + } + + public void setBuffer(int buffer) { + this.buffer = buffer; + } + + public int getSource() { + return source; + } + + public void setSource(int source) { + this.source = source; + } + //------------------------------------------------------ - public void setSource(int source) { - this.source = source; - } - //------------------------------------------------------ - } diff --git a/src/fr/technicalgames/input/Input.java b/src/fr/technicalgames/input/Input.java index 79fa83b..91d5a5e 100644 --- a/src/fr/technicalgames/input/Input.java +++ b/src/fr/technicalgames/input/Input.java @@ -12,22 +12,22 @@ import fr.technicalgames.*; import fr.technicalgames.math.*; public class Input{ - + public static GLFWScrollCallback scroll; public static GLFWCursorPosCallback mousePos; - + private static Vector2f mousePosition = new Vector2f(); private static Vector2f dMouse = new Vector2f(); private static Vector2f previousDMouse = new Vector2f(); - + public static final int NONE = 0,PRESSED = 1,RELEASED = 2,REPEATED = 3,UP = 4,DOWN = 5, NBRE_KEY = 0x15D,NBRE_BUTTON = 10, MOUSE_OFFSET = NBRE_KEY + 1,MOUSE_WHEEL_OFFSET = MOUSE_OFFSET + 1; - + private static HashMap state = new HashMap(); - + private static double ywheel = 0; - + public static void init(){ glfwSetScrollCallback(Main.windowID, scroll = new GLFWScrollCallback() { public void invoke(long window, double xoffset, double yoffset) { @@ -47,7 +47,7 @@ public class Input{ } state.put(MOUSE_WHEEL_OFFSET, NONE); } - + public static void update(){ for(Entry set : state.entrySet()){ int i = set.getKey(); @@ -91,63 +91,63 @@ public class Input{ previousDMouse = dMouse; } } - + public static void destroy(){ - mousePos.release(); - scroll.release(); + mousePos.free(); + scroll.free(); } - + public static void scroll(long window, double xoffset, double yoffset) { ywheel = yoffset; } - + public static void mousepos(long window, double xpos, double ypos) { dMouse.x = (float) (xpos - mousePosition.x); dMouse.y = (float) (ypos - mousePosition.y); mousePosition.x = (float) xpos; mousePosition.y = (float) ypos; } - + public static boolean isButtonDown(int button){ return state.get(button + MOUSE_OFFSET) == PRESSED; } - + public static boolean isButtonUp(int button){ return state.get(button + MOUSE_OFFSET) == RELEASED; } - + public static boolean isButton(int button){ return state.get(button + MOUSE_OFFSET) == PRESSED || state.get(button + MOUSE_OFFSET) == REPEATED; } - + public static int isButtonState(int button){ return state.get(button + MOUSE_OFFSET); } - + public static boolean isKeyDown(int key){ return state.get(key) == PRESSED; } - + public static boolean isKeyUp(int key){ return state.get(key) == RELEASED; } - + public static boolean isKey(int key){ return state.get(key) == PRESSED || state.get(key) == REPEATED; } - + public static int isKeyState(int key){ return state.get(key); } - + public static int isMouseWheelState(){ return state.get(MOUSE_WHEEL_OFFSET); } - + public static boolean isMouseWheelUp(){ return state.get(MOUSE_WHEEL_OFFSET) == UP; } - + public static boolean isMouseWheelDown(){ return state.get(MOUSE_WHEEL_OFFSET) == DOWN; } @@ -239,7 +239,7 @@ public class Input{ public static int getMouseWheelOffset() { return MOUSE_WHEEL_OFFSET; } - - - + + + } diff --git a/src/fr/technicalgames/render/Camera.java b/src/fr/technicalgames/render/Camera.java index 732f81a..40250dd 100644 --- a/src/fr/technicalgames/render/Camera.java +++ b/src/fr/technicalgames/render/Camera.java @@ -18,10 +18,10 @@ public class Camera { public static float speed = 1.0f; - + public static Vector3f rot = new Vector3f(); public static Vector3f pos = new Vector3f(); - + public static void update(){ speed = SPEED * Main.delta; if(Input.isKey(GLFW_KEY_LEFT_CONTROL))speed *= 2.0f; @@ -51,11 +51,11 @@ public class Camera { if(Input.isKey(GLFW.GLFW_KEY_SPACE)){ pos.y += speed; } - if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, GL11.GL_TRUE); + if(Input.isKeyDown(GLFW_KEY_ESCAPE))glfwSetWindowShouldClose(Main.windowID, true); if(Input.isButtonDown(0))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_DISABLED); if(Input.isButtonDown(1))glfwSetInputMode(Main.windowID, GLFW_CURSOR, GLFW_CURSOR_NORMAL); } - + public static void transform(){ matrix.loadIdentity(); matrix.rotate(new Quaternion(new Vector3f(1,0,0),rot.x)); @@ -63,5 +63,5 @@ public class Camera { matrix.rotate(new Quaternion(new Vector3f(0,0,1),rot.z)); matrix.tranlate(-pos.x, -pos.y, -pos.z); } - + }