From 219ccd94dbe4e11d46aba8d9d2242aefb48a7b55 Mon Sep 17 00:00:00 2001 From: andrewlalis Date: Wed, 20 Jul 2022 18:33:58 +0200 Subject: [PATCH] Added GUI components for gun ammo, and rifle sound. --- .../java/nl/andrewl/aos2_client/Client.java | 10 ++ .../aos2_client/control/InputHandler.java | 1 + .../aos2_client/render/GameRenderer.java | 51 +++++-- .../aos2_client/render/gui/GUIRenderer.java | 53 ++++--- .../aos2_client/render/gui/GUITexture.java | 52 +++++-- .../aos2_client/sound/SoundManager.java | 53 +++++++ .../aos2_client/sound/SoundSource.java | 23 +++ .../andrewl/aos2_client/sound/WaveData.java | 86 +++++++++++ client/src/main/resources/gui/bullet.png | Bin 0 -> 1907 bytes client/src/main/resources/gui/clip.png | Bin 0 -> 2808 bytes .../main/resources/sound/m1garand-shot1.wav | Bin 0 -> 111280 bytes .../main/java/nl/andrewl/aos_core/Net.java | 1 + .../nl/andrewl/aos_core/model/item/Gun.java | 9 +- .../aos_core/model/item/gun/Rifle.java | 3 +- .../aos_core/net/client/ClientInputState.java | 1 + .../aos_core/net/client/SoundMessage.java | 12 ++ design/bullet.png | Bin 0 -> 1907 bytes design/bullet.svg | 79 ++++++++++ design/clip.png | Bin 0 -> 2808 bytes design/clip.svg | 135 ++++++++++++++++++ .../logic/PlayerActionManager.java | 70 ++++++++- 21 files changed, 589 insertions(+), 50 deletions(-) create mode 100644 client/src/main/java/nl/andrewl/aos2_client/sound/SoundManager.java create mode 100644 client/src/main/java/nl/andrewl/aos2_client/sound/SoundSource.java create mode 100644 client/src/main/java/nl/andrewl/aos2_client/sound/WaveData.java create mode 100644 client/src/main/resources/gui/bullet.png create mode 100644 client/src/main/resources/gui/clip.png create mode 100644 client/src/main/resources/sound/m1garand-shot1.wav create mode 100644 core/src/main/java/nl/andrewl/aos_core/net/client/SoundMessage.java create mode 100644 design/bullet.png create mode 100644 design/bullet.svg create mode 100644 design/clip.png create mode 100644 design/clip.svg diff --git a/client/src/main/java/nl/andrewl/aos2_client/Client.java b/client/src/main/java/nl/andrewl/aos2_client/Client.java index 4f3a4d4..7e3d748 100644 --- a/client/src/main/java/nl/andrewl/aos2_client/Client.java +++ b/client/src/main/java/nl/andrewl/aos2_client/Client.java @@ -8,6 +8,8 @@ import nl.andrewl.aos2_client.control.PlayerViewCursorCallback; import nl.andrewl.aos2_client.model.ClientPlayer; import nl.andrewl.aos2_client.model.OtherPlayer; import nl.andrewl.aos2_client.render.GameRenderer; +import nl.andrewl.aos2_client.sound.SoundManager; +import nl.andrewl.aos2_client.sound.SoundSource; import nl.andrewl.aos_core.config.Config; import nl.andrewl.aos_core.model.Player; import nl.andrewl.aos_core.model.Team; @@ -34,6 +36,8 @@ public class Client implements Runnable { private final CommunicationHandler communicationHandler; private final InputHandler inputHandler; private GameRenderer gameRenderer; + private SoundManager soundManager; + private SoundSource playerSource; private long lastPlayerUpdate = 0; private ClientWorld world; @@ -81,6 +85,9 @@ public class Client implements Runnable { new PlayerInputKeyCallback(inputHandler), new PlayerInputMouseClickCallback(inputHandler) ); + soundManager = new SoundManager(); + soundManager.load("rifle", "sound/m1garand-shot1.wav"); + playerSource = new SoundSource(); long lastFrameAt = System.currentTimeMillis(); while (!gameRenderer.windowShouldClose()) { @@ -113,6 +120,7 @@ public class Client implements Runnable { if (gameRenderer != null) { gameRenderer.getCamera().setToPlayer(myPlayer); } + soundManager.updateListener(myPlayer.getPosition(), myPlayer.getVelocity()); lastPlayerUpdate = playerUpdate.timestamp(); } else { OtherPlayer p = players.get(playerUpdate.clientId()); @@ -141,6 +149,8 @@ public class Client implements Runnable { players.put(op.getId(), op); } else if (msg instanceof PlayerLeaveMessage leaveMessage) { players.remove(leaveMessage.id()); + } else if (msg instanceof SoundMessage soundMessage) { + playerSource.play(soundManager.getSoundBuffer(soundMessage.name())); } } diff --git a/client/src/main/java/nl/andrewl/aos2_client/control/InputHandler.java b/client/src/main/java/nl/andrewl/aos2_client/control/InputHandler.java index 8887fd0..b3d2fa8 100644 --- a/client/src/main/java/nl/andrewl/aos2_client/control/InputHandler.java +++ b/client/src/main/java/nl/andrewl/aos2_client/control/InputHandler.java @@ -39,6 +39,7 @@ public class InputHandler { glfwGetKey(window, GLFW_KEY_LEFT_SHIFT) == GLFW_PRESS, glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_1) == GLFW_PRESS, glfwGetMouseButton(window, GLFW_MOUSE_BUTTON_2) == GLFW_PRESS, + glfwGetKey(window, GLFW_KEY_R) == GLFW_PRESS, selectedInventoryIndex ); if (!currentInputState.equals(lastInputState)) { diff --git a/client/src/main/java/nl/andrewl/aos2_client/render/GameRenderer.java b/client/src/main/java/nl/andrewl/aos2_client/render/GameRenderer.java index fb3ac2e..72e80b3 100644 --- a/client/src/main/java/nl/andrewl/aos2_client/render/GameRenderer.java +++ b/client/src/main/java/nl/andrewl/aos2_client/render/GameRenderer.java @@ -8,6 +8,8 @@ import nl.andrewl.aos2_client.render.gui.GUIRenderer; import nl.andrewl.aos2_client.render.gui.GUITexture; import nl.andrewl.aos2_client.render.model.Model; import nl.andrewl.aos_core.model.item.BlockItemStack; +import nl.andrewl.aos_core.model.item.Gun; +import nl.andrewl.aos_core.model.item.GunItemStack; import nl.andrewl.aos_core.model.item.ItemTypes; import org.joml.Matrix4f; import org.joml.Vector3f; @@ -44,6 +46,11 @@ public class GameRenderer { private Model rifleModel; private Model blockModel; + // Standard GUI textures. + private GUITexture crosshairTexture; + private GUITexture clipTexture; + private GUITexture bulletTexture; + private long windowHandle; private int screenWidth = 800; private int screenHeight = 600; @@ -110,17 +117,16 @@ public class GameRenderer { this.chunkRenderer = new ChunkRenderer(); log.debug("Initialized chunk renderer."); + this.guiRenderer = new GUIRenderer(); - // TODO: More organized way to load textures for GUI. - try { - var crosshairTexture = new GUITexture("gui/crosshair.png"); - float size = 32; - crosshairTexture.getScale().set(size / screenWidth, size / screenHeight); - guiRenderer.addTexture(crosshairTexture); - } catch (IOException e) { - throw new RuntimeException(e); - } + crosshairTexture = new GUITexture("gui/crosshair.png"); + clipTexture = new GUITexture("gui/clip.png"); + bulletTexture = new GUITexture("gui/bullet.png"); + guiRenderer.addTexture("crosshair", crosshairTexture); + guiRenderer.addTexture("clip", clipTexture); + guiRenderer.addTexture("bullet", bulletTexture); log.debug("Initialized GUI renderer."); + this.modelRenderer = new ModelRenderer(); try { playerModel = new Model("model/player_simple.obj", "model/simple_player.png"); @@ -212,7 +218,32 @@ public class GameRenderer { modelRenderer.end(); - guiRenderer.draw(); + // GUI rendering + guiRenderer.start(); + guiRenderer.draw(crosshairTexture, crosshairTexture.getIdealScaleX(32, screenWidth), crosshairTexture.getIdealScaleY(32, screenHeight), 0, 0); + // If we're holding a gun, draw clip and bullet graphics. + if (client.getMyPlayer().getInventory().getSelectedItemStack().getType() instanceof Gun) { + GunItemStack stack = (GunItemStack) client.getMyPlayer().getInventory().getSelectedItemStack(); + for (int i = 0; i < stack.getClipCount(); i++) { + guiRenderer.draw( + clipTexture, + clipTexture.getIdealScaleX(64, screenWidth), + clipTexture.getIdealScaleY(clipTexture.getIdealHeight(64), screenHeight), + 0.90f, + -0.90f + (i * 0.15f) + ); + } + for (int i = 0; i < stack.getBulletCount(); i++) { + guiRenderer.draw( + bulletTexture, + bulletTexture.getIdealScaleX(16, screenWidth), + bulletTexture.getIdealScaleY(bulletTexture.getIdealHeight(16), screenHeight), + 0.80f - (i * 0.05f), + -0.90f + ); + } + } + guiRenderer.end(); glfwSwapBuffers(windowHandle); glfwPollEvents(); diff --git a/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUIRenderer.java b/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUIRenderer.java index ba6dc99..0a85037 100644 --- a/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUIRenderer.java +++ b/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUIRenderer.java @@ -5,8 +5,8 @@ import org.joml.Matrix4f; import org.lwjgl.BufferUtils; import java.nio.FloatBuffer; -import java.util.ArrayList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; import static org.lwjgl.opengl.GL46.*; @@ -19,9 +19,10 @@ public class GUIRenderer { private final int vertexCount; private final ShaderProgram shaderProgram; private final int transformUniformLocation; + private final Matrix4f transformMatrix; + private final float[] transformMatrixData; - - private final List guiTextures = new ArrayList<>(); + private final Map textures = new HashMap<>(); public GUIRenderer() { vaoId = glGenVertexArrays(); @@ -47,38 +48,52 @@ public class GUIRenderer { .build(); transformUniformLocation = shaderProgram.getUniform("transform"); shaderProgram.bindAttribute(0, "position"); + this.transformMatrix = new Matrix4f(); + this.transformMatrixData = new float[16]; } - public void addTexture(GUITexture texture) { - guiTextures.add(texture); + public void loadTexture(String name, String resource) { + textures.put(name, new GUITexture(resource)); } - public void draw() { + public void addTexture(String name, GUITexture texture) { + textures.put(name, texture); + } + + public void start() { shaderProgram.use(); glBindVertexArray(vaoId); glEnableVertexAttribArray(0); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glDisable(GL_DEPTH_TEST); - for (var texture : guiTextures) { - glActiveTexture(GL_TEXTURE0); - Matrix4f transform = new Matrix4f() - .translate(texture.getPosition().x, texture.getPosition().y, 0) - .scale(texture.getScale().x, texture.getScale().y, 1); - float[] transformData = new float[16]; - transform.get(transformData); - glUniformMatrix4fv(transformUniformLocation, false, transformData); - glBindTexture(GL_TEXTURE_2D, texture.getTextureId()); - glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexCount); - } + } + + public void draw(String name, float scaleX, float scaleY, float x, float y) { + draw(textures.get(name), scaleX, scaleY, x, y); + } + + public void draw(GUITexture texture, float scaleX, float scaleY, float x, float y) { + glActiveTexture(0); + transformMatrix.identity() + .translate(x, y, 0) + .scale(scaleX, scaleY, 1) + .get(transformMatrixData); + glUniformMatrix4fv(transformUniformLocation, false, transformMatrixData); + glBindTexture(GL_TEXTURE_2D, texture.getTextureId()); + glDrawArrays(GL_TRIANGLE_STRIP, 0, vertexCount); + } + + public void end() { glDisable(GL_BLEND); glEnable(GL_DEPTH_TEST); glDisableVertexAttribArray(0); glBindVertexArray(0); + shaderProgram.stopUsing(); } public void free() { - for (var tex : guiTextures) tex.free(); + for (var tex : textures.values()) tex.free(); glDeleteBuffers(vboId); glDeleteVertexArrays(vaoId); shaderProgram.free(); diff --git a/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUITexture.java b/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUITexture.java index 59d15ce..56a1ba0 100644 --- a/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUITexture.java +++ b/client/src/main/java/nl/andrewl/aos2_client/render/gui/GUITexture.java @@ -2,7 +2,6 @@ package nl.andrewl.aos2_client.render.gui; import nl.andrewl.aos_core.ImageUtils; import org.joml.Vector2f; -import org.joml.Vector3f; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; @@ -10,14 +9,21 @@ import java.io.IOException; import static org.lwjgl.opengl.GL46.*; +/** + * Represents a texture loaded onto the GPU. + */ public class GUITexture { private final int textureId; + /** + * The original image's width. + */ private final int width; + /** + * The original image's height. + */ private final int height; - private final Vector2f position = new Vector2f(0, 0); - private final Vector2f scale = new Vector2f(1, 1); - public GUITexture(String location) throws IOException { + public GUITexture(String location) { try (var in = GUITexture.class.getClassLoader().getResourceAsStream(location)) { if (in == null) throw new IOException("Couldn't load texture image from " + location); BufferedImage img = ImageIO.read(in); @@ -31,21 +37,43 @@ public class GUITexture { glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); var buf = ImageUtils.decodePng(img); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf); + } catch (IOException e) { + throw new RuntimeException("Failed to load GUI texture.", e); } } + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public float getAspectRatio() { + return (float) width / height; + } + + public float getIdealHeight(float width) { + return width / getAspectRatio(); + } + + public float getIdealWidth(float height) { + return height * getAspectRatio(); + } + + public float getIdealScaleX(float desiredWidth, float screenWidth) { + return desiredWidth / screenWidth; + } + + public float getIdealScaleY(float desiredHeight, float screenHeight) { + return desiredHeight / screenHeight; + } + public int getTextureId() { return textureId; } - public Vector2f getPosition() { - return position; - } - - public Vector2f getScale() { - return scale; - } - public void free() { glDeleteTextures(textureId); } diff --git a/client/src/main/java/nl/andrewl/aos2_client/sound/SoundManager.java b/client/src/main/java/nl/andrewl/aos2_client/sound/SoundManager.java new file mode 100644 index 0000000..d6420a7 --- /dev/null +++ b/client/src/main/java/nl/andrewl/aos2_client/sound/SoundManager.java @@ -0,0 +1,53 @@ +package nl.andrewl.aos2_client.sound; + +import nl.andrewl.aos2_client.model.ClientPlayer; +import org.joml.Vector3f; +import org.lwjgl.openal.AL; +import org.lwjgl.openal.ALC; +import org.lwjgl.openal.ALCCapabilities; + +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.HashMap; +import java.util.Map; + +import static org.lwjgl.openal.ALC10.*; +import static org.lwjgl.openal.AL10.*; + +public class SoundManager { + private final long alContext; + private final Map audioBuffers = new HashMap<>(); + + public SoundManager() { + long device = alcOpenDevice((ByteBuffer) null); + ALCCapabilities capabilities = ALC.createCapabilities(device); + alContext = alcCreateContext(device, (IntBuffer) null); + alcMakeContextCurrent(alContext); + AL.createCapabilities(capabilities); + + } + + public void load(String name, String resource) { + int bufferId = alGenBuffers(); + audioBuffers.put(name, bufferId); + WaveData waveData = WaveData.create(resource); + alBufferData(bufferId, waveData.format, waveData.data, waveData.samplerate); + waveData.dispose(); + } + + public void updateListener(Vector3f position, Vector3f velocity) { + alListener3f(AL_POSITION, position.x(), position.y(), position.z()); + alListener3f(AL_VELOCITY, velocity.x(), velocity.y(), velocity.z()); + } + + public int getSoundBuffer(String name) { + return audioBuffers.get(name); + } + + public void free() { + for (var bufferId : audioBuffers.values()) { + alDeleteBuffers(bufferId); + } + alcDestroyContext(alContext); + } +} diff --git a/client/src/main/java/nl/andrewl/aos2_client/sound/SoundSource.java b/client/src/main/java/nl/andrewl/aos2_client/sound/SoundSource.java new file mode 100644 index 0000000..c2b782f --- /dev/null +++ b/client/src/main/java/nl/andrewl/aos2_client/sound/SoundSource.java @@ -0,0 +1,23 @@ +package nl.andrewl.aos2_client.sound; + +import static org.lwjgl.openal.AL10.*; + +public class SoundSource { + private final int sourceId; + + public SoundSource() { + sourceId = alGenSources(); + alSourcef(sourceId, AL_GAIN, 1); + alSourcef(sourceId, AL_PITCH, 1); + alSource3f(sourceId, AL_POSITION, 0, 0, 0); + } + + public void play(int bufferId) { + alSourcei(sourceId, AL_BUFFER, bufferId); + alSourcePlay(sourceId); + } + + public void free() { + alDeleteSources(sourceId); + } +} diff --git a/client/src/main/java/nl/andrewl/aos2_client/sound/WaveData.java b/client/src/main/java/nl/andrewl/aos2_client/sound/WaveData.java new file mode 100644 index 0000000..079270d --- /dev/null +++ b/client/src/main/java/nl/andrewl/aos2_client/sound/WaveData.java @@ -0,0 +1,86 @@ +package nl.andrewl.aos2_client.sound; + +import org.lwjgl.BufferUtils; +import org.lwjgl.openal.AL10; + +import javax.sound.sampled.AudioFormat; +import javax.sound.sampled.AudioInputStream; +import javax.sound.sampled.AudioSystem; +import javax.sound.sampled.UnsupportedAudioFileException; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.ByteBuffer; + +public class WaveData { + + final int format; + final int samplerate; + final int totalBytes; + final int bytesPerFrame; + final ByteBuffer data; + + private final AudioInputStream audioStream; + private final byte[] dataArray; + + private WaveData(AudioInputStream stream) { + this.audioStream = stream; + AudioFormat audioFormat = stream.getFormat(); + format = getOpenAlFormat(audioFormat.getChannels(), audioFormat.getSampleSizeInBits()); + this.samplerate = (int) audioFormat.getSampleRate(); + this.bytesPerFrame = audioFormat.getFrameSize(); + this.totalBytes = (int) (stream.getFrameLength() * bytesPerFrame); + this.data = BufferUtils.createByteBuffer(totalBytes); + this.dataArray = new byte[totalBytes]; + loadData(); + } + + protected void dispose() { + try { + audioStream.close(); + data.clear(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private ByteBuffer loadData() { + try { + int bytesRead = audioStream.read(dataArray, 0, totalBytes); + data.clear(); + data.put(dataArray, 0, bytesRead); + data.flip(); + } catch (IOException e) { + e.printStackTrace(); + System.err.println("Couldn't read bytes from audio stream!"); + } + return data; + } + + + public static WaveData create(String file){ + InputStream stream = WaveData.class.getClassLoader().getResourceAsStream(file); + if (stream == null) { + System.err.println("Couldn't find file: " + file); + return null; + } + InputStream bufferedInput = new BufferedInputStream(stream); + AudioInputStream audioStream; + try { + audioStream = AudioSystem.getAudioInputStream(bufferedInput); + } catch (UnsupportedAudioFileException | IOException e) { + throw new RuntimeException(e); + } + return new WaveData(audioStream); + } + + + private static int getOpenAlFormat(int channels, int bitsPerSample) { + if (channels == 1) { + return bitsPerSample == 8 ? AL10.AL_FORMAT_MONO8 : AL10.AL_FORMAT_MONO16; + } else { + return bitsPerSample == 8 ? AL10.AL_FORMAT_STEREO8 : AL10.AL_FORMAT_STEREO16; + } + } + +} diff --git a/client/src/main/resources/gui/bullet.png b/client/src/main/resources/gui/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..6abbce453535d838f0566715568f47219c7036c1 GIT binary patch literal 1907 zcmds2iC5D37XSW0z+6&CO2Z9v(oUq|LtM(*;c`TJ50^)Pw> z07D-d<){`(S{3UewYGfsiT7I2;duE3>S`rjH%g%Ow=sZ+Pp_I;31ys z9;b$k#dUs zT8?}D|1w%K2d=qd)f30Znp$Uo&`|KM4Yu`p)-wb&*bVe(>iWg{Rk7LYYq`ceI{{11`(7d7CkYr`*pWF z(tB%^Z^x~%mPOx?cy7w1E}UNL~X{*`J(`S1I63z$3hjh0*RSKG0cd&2z6{xy$@cQN1eaz`^_#!@9xq~(81rBt^yx2uI2 zf4djEeP3$Srwb{C$if)@eLVukw-e9?iyWX?xa+oUXNIKIKSDQgBT(Z>h_!6md)OM(ck@ys|mLAH?DqS%o6a2 z*hK^nykc9zQf1?ujF*AzETCHtlGhC=vwLqZtUKJ|4~IfCyauZlxAR~(K0;dhnS82_ z7v?4892RxJCp7RUw)A?}j+FjiB!Nb>ScC{~ajo?R3Ru-k#2nHy9Cl^?k7`biv4L!+ z`jOtzP{_XMWd4S>VCP~@0oONL98liMqC^zKr(ZDoLy&a4{jqZ=L#*B@M8kT5#)d7X z+AgPu=uGCG1G%j*-}ybtYlUhzUd7$!$$t(J^0}NDW_$`auUY;O$6MYs6tT6`UJbJ~ zvmcZx78-PTXnb})&`FDyUhFm)l*&7dZ?@G5P4V@M6lOSG;|ymPws-m3ZV{yZTO_B- z2W1Hz>eF2xRA4jZr4p;^h_#2b6huh4uR8SEtE|O=E6jU%$gxjvur%>U8cgOK8D|H>yU%4m zjp~fN)B3gD1kz3IwX#y%maVL8TtToWObx(8Inhpin>}GA5~lXlgYAB=V={Fm>~n7w z5s={gFbXL7S#DPm(?03ndLs7Hq#o%AkUiOK!pl!bJaO{d#|i1ZxOw=3_^IZ39!ijw znwyii@!q>q+46cng3-!^)pz^A{127Rh|rAm*n3-Wyjsc`9qeFEd8z5oz|XAV8qcIO z))P2SIYaJm`f^d>S8%1n&k(wS9?K7q2B8c3zws6{(Z0$qKHtU+6AT52g^`iLo8e|B zKD1nq#BRsNhnEFv$FkS111&&=TLnZXPf`hMGCi!!VfarQ2`TD4Z+ut$kw(ww*1?2+ zvkU%iftyGY+BVm zCF>GS!>2e^!f5)m|7XMLLE%Bt&J{;hMy3b*dgcWEX6Cq?UJ8aX`uKS*)H$o_npO3Q z`iy0w^90_fVS89GYBBfq{3&nx`$e*pwUNIC!j literal 0 HcmV?d00001 diff --git a/client/src/main/resources/gui/clip.png b/client/src/main/resources/gui/clip.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3a8a1b7a69aa7f0fb200c617cdbefa1df026e5 GIT binary patch literal 2808 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 KrE#N?C+6P+$659O literal 0 HcmV?d00001 diff --git a/client/src/main/resources/sound/m1garand-shot1.wav b/client/src/main/resources/sound/m1garand-shot1.wav new file mode 100644 index 0000000000000000000000000000000000000000..6b689bf465055e87a6446abfe079035abd0157f4 GIT binary patch literal 111280 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

vEkY5cCj8|n=JTgb42zUi6>=}LsMI%B* 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 UkeWW@OPZ!nD~l{ffyCec2XP6h82|tP literal 0 HcmV?d00001 diff --git a/core/src/main/java/nl/andrewl/aos_core/Net.java b/core/src/main/java/nl/andrewl/aos_core/Net.java index 3791028..779f983 100644 --- a/core/src/main/java/nl/andrewl/aos_core/Net.java +++ b/core/src/main/java/nl/andrewl/aos_core/Net.java @@ -42,6 +42,7 @@ public final class Net { serializer.registerTypeSerializer(13, new InventorySerializer()); serializer.registerTypeSerializer(14, new ItemStackSerializer()); serializer.registerType(15, InventorySelectedStackMessage.class); + serializer.registerType(16, SoundMessage.class); } public static ExtendedDataInputStream getInputStream(InputStream in) { diff --git a/core/src/main/java/nl/andrewl/aos_core/model/item/Gun.java b/core/src/main/java/nl/andrewl/aos_core/model/item/Gun.java index 00cd1aa..6ae92d1 100644 --- a/core/src/main/java/nl/andrewl/aos_core/model/item/Gun.java +++ b/core/src/main/java/nl/andrewl/aos_core/model/item/Gun.java @@ -14,6 +14,7 @@ public class Gun extends Item { private final float reloadTime; private final float baseDamage; private final float recoil; + private boolean automatic; public Gun( int id, @@ -25,7 +26,8 @@ public class Gun extends Item { float shotCooldownTime, float reloadTime, float baseDamage, - float recoil + float recoil, + boolean automatic ) { super(id, name, 1); this.maxClipCount = maxClipCount; @@ -36,6 +38,7 @@ public class Gun extends Item { this.reloadTime = reloadTime; this.baseDamage = baseDamage; this.recoil = recoil; + this.automatic = automatic; } public int getMaxClipCount() { @@ -69,4 +72,8 @@ public class Gun extends Item { public float getRecoil() { return recoil; } + + public boolean isAutomatic() { + return automatic; + } } diff --git a/core/src/main/java/nl/andrewl/aos_core/model/item/gun/Rifle.java b/core/src/main/java/nl/andrewl/aos_core/model/item/gun/Rifle.java index 5cc10a6..1f07c6a 100644 --- a/core/src/main/java/nl/andrewl/aos_core/model/item/gun/Rifle.java +++ b/core/src/main/java/nl/andrewl/aos_core/model/item/gun/Rifle.java @@ -14,7 +14,8 @@ public class Rifle extends Gun { 0.8f, 2.5f, 80f, - 50f + 50f, + false ); } } diff --git a/core/src/main/java/nl/andrewl/aos_core/net/client/ClientInputState.java b/core/src/main/java/nl/andrewl/aos_core/net/client/ClientInputState.java index 1e0b2a8..ccc862f 100644 --- a/core/src/main/java/nl/andrewl/aos_core/net/client/ClientInputState.java +++ b/core/src/main/java/nl/andrewl/aos_core/net/client/ClientInputState.java @@ -20,5 +20,6 @@ public record ClientInputState( // Interaction boolean hitting, // Usually a "left-click" action. boolean interacting, // Usually a "right-click" action. + boolean reloading, // Usually the "R" key. int selectedInventoryIndex // The selected index in the player's inventory. ) implements Message {} diff --git a/core/src/main/java/nl/andrewl/aos_core/net/client/SoundMessage.java b/core/src/main/java/nl/andrewl/aos_core/net/client/SoundMessage.java new file mode 100644 index 0000000..c0ccb5f --- /dev/null +++ b/core/src/main/java/nl/andrewl/aos_core/net/client/SoundMessage.java @@ -0,0 +1,12 @@ +package nl.andrewl.aos_core.net.client; + +import nl.andrewl.record_net.Message; + +/** + * A message that indicates that a sound has been emitted somewhere in the + * world, and that clients may need to play the sound. + */ +public record SoundMessage( + String name, + float px, float py, float pz +) implements Message {} diff --git a/design/bullet.png b/design/bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..6abbce453535d838f0566715568f47219c7036c1 GIT binary patch literal 1907 zcmds2iC5D37XSW0z+6&CO2Z9v(oUq|LtM(*;c`TJ50^)Pw> z07D-d<){`(S{3UewYGfsiT7I2;duE3>S`rjH%g%Ow=sZ+Pp_I;31ys z9;b$k#dUs zT8?}D|1w%K2d=qd)f30Znp$Uo&`|KM4Yu`p)-wb&*bVe(>iWg{Rk7LYYq`ceI{{11`(7d7CkYr`*pWF z(tB%^Z^x~%mPOx?cy7w1E}UNL~X{*`J(`S1I63z$3hjh0*RSKG0cd&2z6{xy$@cQN1eaz`^_#!@9xq~(81rBt^yx2uI2 zf4djEeP3$Srwb{C$if)@eLVukw-e9?iyWX?xa+oUXNIKIKSDQgBT(Z>h_!6md)OM(ck@ys|mLAH?DqS%o6a2 z*hK^nykc9zQf1?ujF*AzETCHtlGhC=vwLqZtUKJ|4~IfCyauZlxAR~(K0;dhnS82_ z7v?4892RxJCp7RUw)A?}j+FjiB!Nb>ScC{~ajo?R3Ru-k#2nHy9Cl^?k7`biv4L!+ z`jOtzP{_XMWd4S>VCP~@0oONL98liMqC^zKr(ZDoLy&a4{jqZ=L#*B@M8kT5#)d7X z+AgPu=uGCG1G%j*-}ybtYlUhzUd7$!$$t(J^0}NDW_$`auUY;O$6MYs6tT6`UJbJ~ zvmcZx78-PTXnb})&`FDyUhFm)l*&7dZ?@G5P4V@M6lOSG;|ymPws-m3ZV{yZTO_B- z2W1Hz>eF2xRA4jZr4p;^h_#2b6huh4uR8SEtE|O=E6jU%$gxjvur%>U8cgOK8D|H>yU%4m zjp~fN)B3gD1kz3IwX#y%maVL8TtToWObx(8Inhpin>}GA5~lXlgYAB=V={Fm>~n7w z5s={gFbXL7S#DPm(?03ndLs7Hq#o%AkUiOK!pl!bJaO{d#|i1ZxOw=3_^IZ39!ijw znwyii@!q>q+46cng3-!^)pz^A{127Rh|rAm*n3-Wyjsc`9qeFEd8z5oz|XAV8qcIO z))P2SIYaJm`f^d>S8%1n&k(wS9?K7q2B8c3zws6{(Z0$qKHtU+6AT52g^`iLo8e|B zKD1nq#BRsNhnEFv$FkS111&&=TLnZXPf`hMGCi!!VfarQ2`TD4Z+ut$kw(ww*1?2+ zvkU%iftyGY+BVm zCF>GS!>2e^!f5)m|7XMLLE%Bt&J{;hMy3b*dgcWEX6Cq?UJ8aX`uKS*)H$o_npO3Q z`iy0w^90_fVS89GYBBfq{3&nx`$e*pwUNIC!j literal 0 HcmV?d00001 diff --git a/design/bullet.svg b/design/bullet.svg new file mode 100644 index 0000000..6abf8fe --- /dev/null +++ b/design/bullet.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/design/clip.png b/design/clip.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3a8a1b7a69aa7f0fb200c617cdbefa1df026e5 GIT binary patch literal 2808 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 KrE#N?C+6P+$659O literal 0 HcmV?d00001 diff --git a/design/clip.svg b/design/clip.svg new file mode 100644 index 0000000..051cf3f --- /dev/null +++ b/design/clip.svg @@ -0,0 +1,135 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/server/src/main/java/nl/andrewl/aos2_server/logic/PlayerActionManager.java b/server/src/main/java/nl/andrewl/aos2_server/logic/PlayerActionManager.java index 65e9a2a..23ed622 100644 --- a/server/src/main/java/nl/andrewl/aos2_server/logic/PlayerActionManager.java +++ b/server/src/main/java/nl/andrewl/aos2_server/logic/PlayerActionManager.java @@ -3,12 +3,12 @@ package nl.andrewl.aos2_server.logic; import nl.andrewl.aos2_server.Server; import nl.andrewl.aos2_server.ServerPlayer; import nl.andrewl.aos2_server.config.ServerConfig; -import nl.andrewl.aos_core.model.item.BlockItemStack; -import nl.andrewl.aos_core.model.item.ItemTypes; +import nl.andrewl.aos_core.model.item.*; import nl.andrewl.aos_core.model.world.World; import nl.andrewl.aos_core.net.client.ClientInputState; import nl.andrewl.aos_core.net.client.InventorySelectedStackMessage; import nl.andrewl.aos_core.net.client.ItemStackMessage; +import nl.andrewl.aos_core.net.client.SoundMessage; import nl.andrewl.aos_core.net.world.ChunkUpdateMessage; import org.joml.Math; import org.joml.Vector2i; @@ -30,6 +30,11 @@ public class PlayerActionManager { private long lastBlockRemovedAt = 0; private long lastBlockPlacedAt = 0; + private long gunLastShotAt = 0; + private boolean gunNeedsReCock = false; + private boolean gunReloading = false; + private long gunReloadingStartedAt = 0; + private boolean updated = false; public PlayerActionManager(ServerPlayer player) { @@ -38,7 +43,7 @@ public class PlayerActionManager { player.getId(), false, false, false, false, false, false, false, - false, false, + false, false, false, player.getInventory().getSelectedIndex() ); } @@ -67,8 +72,15 @@ public class PlayerActionManager { updated = true; // Tell everyone else that this player's selected item has changed. } - if (player.getInventory().getSelectedItemStack().getType().equals(ItemTypes.BLOCK)) { - tickBlockAction(now, server, world); + ItemStack selectedStack = player.getInventory().getSelectedItemStack(); + if (selectedStack instanceof BlockItemStack b) { + tickBlockAction(now, server, world, b); + } else if (selectedStack instanceof GunItemStack g) { + try { + tickGunAction(now, server, world, g); + } catch (Exception e) { + System.out.println("bleh"); + } } if (player.isCrouching() != lastInputState.crouching()) { @@ -79,8 +91,52 @@ public class PlayerActionManager { tickMovement(dt, world, server.getConfig().physics); } - private void tickBlockAction(long now, Server server, World world) { - BlockItemStack stack = (BlockItemStack) player.getInventory().getSelectedItemStack(); + private void tickGunAction(long now, Server server, World world, GunItemStack g) { + Gun gun = (Gun) g.getType(); + if (// Check to see if the player is shooting. + lastInputState.hitting() && + g.getBulletCount() > 0 && + !gunReloading && + now - gunLastShotAt > gun.getShotCooldownTime() * 1000 && + (gun.isAutomatic() || !gunNeedsReCock) + ) { + // TODO: trace a ray from gun to see if players intersect with it. + g.setBulletCount(g.getBulletCount() - 1); + gunLastShotAt = now; + if (!gun.isAutomatic()) { + gunNeedsReCock = true; + } + server.getPlayerManager().getHandler(player.getId()).sendDatagramPacket(new ItemStackMessage(player.getInventory())); + server.getPlayerManager().broadcastUdpMessage(new SoundMessage("rifle", player.getPosition().x(), player.getPosition().y(), player.getPosition().z())); + } + + if (// Check to see if the player is reloading. + lastInputState.reloading() && + !gunReloading && + g.getClipCount() > 0 + ) { + g.setClipCount(g.getClipCount() - 1); + gunReloadingStartedAt = now; + gunReloading = true; + server.getPlayerManager().getHandler(player.getId()).sendDatagramPacket(new ItemStackMessage(player.getInventory())); + } + + if (// Check to see if reloading is done. + gunReloading && + now - gunReloadingStartedAt > gun.getReloadTime() * 1000 + ) { + g.setBulletCount(gun.getMaxBulletCount()); + gunReloading = false; + server.getPlayerManager().getHandler(player.getId()).sendDatagramPacket(new ItemStackMessage(player.getInventory())); + } + + // Check to see if the player released the trigger, for non-automatic weapons. + if (!gun.isAutomatic() && gunNeedsReCock && !lastInputState.hitting()) { + gunNeedsReCock = false; + } + } + + private void tickBlockAction(long now, Server server, World world, BlockItemStack stack) { // Check for breaking blocks. if ( lastInputState.hitting() &&