Merge remote-tracking branch 'origin/main'

# Conflicts:
#	LastSession.t4jlog
This commit is contained in:
Halbear 2026-07-09 00:18:55 +01:00
commit 745d38fb09
5 changed files with 989 additions and 149 deletions

File diff suppressed because it is too large Load diff

View file

@ -25,6 +25,7 @@ import net.halbear.Terrain4J.EngineCore.Logic.Rendering.ModelLoader;
import net.halbear.Terrain4J.EngineCore.Main.Scene.*;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.Gimbal;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.LoadingScreen;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs.StartMenu;
import net.halbear.Terrain4J.EngineCore.Profiling.CPUMonitor;
import net.halbear.Terrain4J.EngineCore.Profiling.GPUProfiler;
import net.halbear.Terrain4J.EngineCore.Threads.ClientConnectionThread;
@ -68,6 +69,8 @@ public class GameCore implements GameLogic {
private ModelData RevolverData;
public ILight SkyLight;
private LoadingScreen loadingScreen;
private final StartMenu startMenu = new StartMenu();
public boolean StartMenuActive = true;
public List<IMoveableActorComponent> ActorEditorComponents = new ArrayList<>();
private Vector2f DeltaPos = new Vector2f(0,0);
private String PlayerActorID = "NULL";
@ -162,6 +165,10 @@ public class GameCore implements GameLogic {
}
}
}
scene.RemoveActor(Musket);
scene.AddActor(Revolver);
Musket.AttachedCameraID = "NULL";
Revolver.AttachedCameraID = "DebugCamera";
return new InitData(models,materials,guiTextures);
}
@ -398,7 +405,12 @@ public class GameCore implements GameLogic {
| ImGuiWindowFlags.NoMove;
ImGui.newFrame();
if(LoadingLevel){
loadingScreen.RenderGUI(engineInstance,frameTimeNS,this);
loadingScreen.RenderGUI(engineInstance, frameTimeNS, this);
} else if (StartMenuActive) {
startMenu.RenderGUI(engineInstance, frameTimeNS, this);
if (startMenu.GameStarted) {
StartMenuActive = false;
}
} else {
engineInstance.scene().RenderGUIs(engineInstance, frameTimeNS, this);
if (ChangeGraphicsSettings) {

View file

@ -1,5 +1,6 @@
package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs;
import imgui.ImDrawList;
import imgui.ImGui;
import imgui.ImGuiViewport;
import imgui.flag.ImGuiCol;

View file

@ -0,0 +1,87 @@
package net.halbear.Terrain4J.EngineCore.Main.Scene.GUIs;
import imgui.ImDrawList;
import imgui.ImGui;
import imgui.ImGuiViewport;
import imgui.flag.ImGuiCol;
import imgui.flag.ImGuiCond;
import imgui.flag.ImGuiStyleVar;
import imgui.flag.ImGuiWindowFlags;
import imgui.type.ImFloat;
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
import net.halbear.Terrain4J.EngineCore.Main.GameCore;
import net.halbear.Terrain4J.EngineCore.Main.PrimaryRuntime;
import net.halbear.Terrain4J.EngineCore.Main.Scene.GUIOverlay;
import net.halbear.Terrain4J.EngineCore.Vulkan.GUI.GuiTexture;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.DeferredSceneRender;
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.ForwardSceneRender;
import net.halbear.Terrain4J.EngineCore.Main.AudioInstance;
import net.halbear.Terrain4J.EngineCore.Main.Scene.Scene;
import org.joml.Vector3f;
import org.tinylog.Logger;
public class StartMenu implements GUIOverlay {
public boolean GameStarted = false;
@Override
public void RenderGUI(EngineInstance engineInstance, long frameTimeNS, GameCore parent) {
if (GameStarted) return;
ImGuiViewport viewport = ImGui.getMainViewport();
int menuFlags = ImGuiWindowFlags.NoDecoration
| ImGuiWindowFlags.AlwaysAutoResize
| ImGuiWindowFlags.NoSavedSettings
| ImGuiWindowFlags.NoFocusOnAppearing
| ImGuiWindowFlags.NoNav
| ImGuiWindowFlags.NoMove;
float CenterX = viewport.getWorkPosX() + viewport.getWorkSizeX() / 2.0f;
float CenterY = viewport.getWorkPosY() + viewport.getWorkSizeY() / 2.0f;
ImGui.setNextWindowPos(viewport.getWorkPosX(), viewport.getWorkPosY(), ImGuiCond.Always);
ImGui.setNextWindowSize(viewport.getWorkSizeX(), viewport.getWorkSizeY());
ImGui.pushStyleColor(ImGuiCol.WindowBg, 0.08f, 0.08f, 0.1f, 1.0f);
ImGui.pushStyleVar(ImGuiStyleVar.WindowPadding, 40f, 30f);
ImGui.pushStyleVar(ImGuiStyleVar.ItemSpacing, 10f, 16f);
ImGui.pushStyleVar(ImGuiStyleVar.WindowRounding, 8f);
ImGui.begin("Start Menu", menuFlags);
ImGui.setWindowFontScale(8.0f);
float titleX = (viewport.getWorkSizeX() - ImGui.calcTextSize("Shooter Game").x) / 2.0f;
float titleY = viewport.getWorkSizeY() * 0.25f;
ImGui.setCursorPos(titleX, titleY);
ImGui.text("Shooter Game");
ImGui.setWindowFontScale(3.0f);
ImGui.spacing();
ImGui.spacing();
float buttonWidth = 450f;
float buttonHeight = 90f;
float buttonX = (viewport.getWorkSizeX() - buttonWidth) / 2.0f;
ImGui.setCursorPosX(buttonX);
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();
}
ImGui.setCursorPosX(buttonX);
if (ImGui.button("Settings", buttonWidth, buttonHeight)) {
System.exit(0);
}
ImGui.setCursorPosX(buttonX);
if (ImGui.button("Quit", buttonWidth, buttonHeight)) {
System.exit(0);
}
ImGui.end();
ImGui.popStyleVar(3);
ImGui.popStyleColor();
}
}

View file

@ -50,7 +50,7 @@ public class Scene implements IScene {
private Vector2f LastMousePos = new Vector2f(0,0);
private final ISceneLightingManager lightingManager;
private SkyBox skyBox;
private Map<String,AudioInstance> audioInstances;
public Map<String,AudioInstance> audioInstances;
private DynamicTerrainMesh terrainMesh;
public IPlayerController playerController;
@ -175,7 +175,6 @@ public class Scene implements IScene {
newInstance.Play();
audioInstances.put("BGM",newInstance);
}
public Camera GetCamera(){return camera;}
public void AddActor(Actor NewActor){
if(NewActor == null) return;