added audio settings and aiming with right click

This commit is contained in:
Will_Allen 2026-07-09 13:31:07 +01:00
parent aff4c2a57a
commit 0f8fa9c9f9
5 changed files with 967 additions and 1053 deletions

View file

@ -69,7 +69,7 @@ public class GameCore implements GameLogic {
private ModelData RevolverData;
public ILight SkyLight;
private LoadingScreen loadingScreen;
private final StartMenu startMenu = new StartMenu();
public final StartMenu startMenu = new StartMenu();
public boolean StartMenuActive = true;
public List<IMoveableActorComponent> ActorEditorComponents = new ArrayList<>();
private Vector2f DeltaPos = new Vector2f(0,0);
@ -268,14 +268,24 @@ public class GameCore implements GameLogic {
ActorEditorComponents.add(new EditorActorComponent(Melona,new Vector3f(scene.GetCamera().GetPosition()),new Vector3f(1.0f,1.8f,1.0f)));
}
private void InitiateAudio(EngineInstance engineInstance){
if(RenderThread.Headless || PrimaryRuntime.Server) return;
private void InitiateAudio(EngineInstance engineInstance) {
if (RenderThread.Headless || PrimaryRuntime.Server) return;
AudioManager audioManager = engineInstance.audioManager();
Camera camera = engineInstance.scene().GetCamera();
audioManager.SetAttenuationModel(AL11.AL_EXPONENT_DISTANCE);
audioManager.SetListener(new SoundListener(camera.GetPosition()));
engineInstance.scene().SetUpAudio(engineInstance,audioManager);
engineInstance.scene().SetUpAudio(engineInstance, audioManager);
}
public void SwitchBGM(EngineInstance engineInstance, Scene scene, String path) {
AudioInstance bgm = scene.audioInstances.get("BGM");
if (bgm == null) {
scene.SetUpAudio(engineInstance, engineInstance.audioManager());
bgm = scene.audioInstances.get("BGM");
}
bgm.Pause();
bgm.ChangePath(path, engineInstance.audioManager());
bgm.Play();
}
@Override
public void CameraInput(EngineInstance engineInstance, long FrameDiffNanoSeconds) {

View file

@ -23,7 +23,16 @@ import org.tinylog.Logger;
public class StartMenu implements GUIOverlay {
public boolean GameStarted = false;
public boolean ShowSettings = false;
public float Volume = 1.0f;
private void ApplyVolume(EngineInstance engineInstance) {
Scene scene = (Scene) engineInstance.scene();
AudioInstance bgm = scene.audioInstances.get("BGM");
if (bgm != null) {
bgm.SetVolume(Volume);
}
}
@Override
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
if (GameStarted) return;
@ -61,20 +70,39 @@ public class StartMenu implements GUIOverlay {
if (ImGui.button("Play", buttonWidth, buttonHeight)) {
GameStarted = true;
Scene scene = (Scene) engineInstance.scene();
AudioInstance bgm = scene.audioInstances.get("BGM");
if (bgm == null) {
scene.SetUpAudio(engineInstance, engineInstance.audioManager());
bgm = scene.audioInstances.get("BGM");
}
bgm.Pause();
bgm.ChangePath("resources/EngineResources/audio/music/theshiteventhefar.ogg", engineInstance.audioManager());
bgm.Play();
parent.SwitchBGM(engineInstance, scene, "resources/EngineResources/audio/music/theshiteventhefar.ogg");
}
ImGui.setCursorPosX(buttonX);
if (ImGui.button("Settings", buttonWidth, buttonHeight)) {
System.exit(0);
ShowSettings = !ShowSettings;
}
if (ShowSettings) {
ImGui.spacing();
ImGui.setCursorPosX(buttonX);
ImGui.text("Volume: " + Math.round(Volume * 100) + "%");
ImGui.setCursorPosX(buttonX);
if (ImGui.button("-", 40f, 40f)) {
Volume = Math.max(0f, Volume - 0.1f);
ApplyVolume(engineInstance);
}
ImGui.sameLine();
if (ImGui.button("+", 40f, 40f)) {
Volume = Math.min(1f, Volume + 0.1f);
ApplyVolume(engineInstance);
}
ImGui.sameLine();
if (ImGui.button("Mute", 100f, 40f)) {
Scene scene = (Scene) engineInstance.scene();
AudioInstance bgm = scene.audioInstances.get("BGM");
bgm.Pause();
}
ImGui.sameLine();
if (ImGui.button("Unmute", 130f, 40f)) {
Scene scene = (Scene) engineInstance.scene();
AudioInstance bgm = scene.audioInstances.get("BGM");
bgm.Play();
}
}
ImGui.setCursorPosX(buttonX);
if (ImGui.button("Quit", buttonWidth, buttonHeight)) {

View file

@ -14,6 +14,7 @@ import net.halbear.Terrain4J.EngineCore.Main.GameCore;
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.Gimbal;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.PerformanceOverlay;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu;
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
import net.halbear.Terrain4J.EngineCore.Threads.RenderThread;
import net.halbear.Terrain4J.EngineCore.Vulkan.Rendering.DynamicMesh.DynamicTerrainMesh;
@ -61,6 +62,8 @@ public class Scene implements IScene {
public PlayerActor CurrentWeapon;
public PlayerActor Musket;
public PlayerActor Revolver;
private final StartMenu startMenu = new StartMenu();
public boolean StartMenuActive = true;
public List<String> ActiveGUIs = new ArrayList<>();
public Map<String, GUIOverlay> GUIReg = new HashMap<>();
@ -276,7 +279,17 @@ public class Scene implements IScene {
}
}
if (input.keySinglePress(GLFW_KEY_ESCAPE)) {
parent.StartMenuActive = true;
parent.startMenu.GameStarted = false;
parent.SwitchBGM(engineInstance, this, "resources/EngineResources/audio/music/MENUMUSIC_RetroFutureClean.ogg");
}
MouseListener mouseListener = window.getMouseInput();
if (mouseListener.isRightButtonPressed()) {
CurrentWeapon.SetPositionOffset(new Vector3f(0f,1.0f,-1.25f)); // centered = aiming
} else {
CurrentWeapon.SetPositionOffset(new Vector3f(0.5f,1.0f,-1.25f)); // hip-fire default
}
if(input.keyPressed(GLFW_KEY_1)) {
Gimbal.universalType = Gimbal.GimbalType.Move;
}