removed flying added double jump :)

This commit is contained in:
Will_Allen 2026-07-07 14:07:22 +01:00
parent 42fc70100d
commit f2174e4364
2 changed files with 1048 additions and 948 deletions

File diff suppressed because it is too large Load diff

View file

@ -5,6 +5,8 @@ import net.halbear.Terrain4J.EngineCore.Input.KeyboardInput;
import net.halbear.Terrain4J.EngineCore.Input.MouseListener; import net.halbear.Terrain4J.EngineCore.Input.MouseListener;
import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig; import net.halbear.Terrain4J.EngineCore.Logic.EngineConfig;
import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance; import net.halbear.Terrain4J.EngineCore.Logic.EngineInstance;
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidBody;
import net.halbear.Terrain4J.EngineCore.Logic.Physics.RigidBody.RigidPhysicsController;
import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox; import net.halbear.Terrain4J.EngineCore.Logic.Rendering.SkyBox;
import net.halbear.Terrain4J.EngineCore.Main.AudioInstance; import net.halbear.Terrain4J.EngineCore.Main.AudioInstance;
import net.halbear.Terrain4J.EngineCore.Main.GameCore; import net.halbear.Terrain4J.EngineCore.Main.GameCore;
@ -42,16 +44,18 @@ public class Scene implements IScene {
private CameraFrame LastCameraFrame; private CameraFrame LastCameraFrame;
public int TotalTransitionTicks = 1000; public int TotalTransitionTicks = 1000;
public float CurrentTransitionTick = 0; public float CurrentTransitionTick = 0;
private Vector2f LastMousePos = new Vector2f(0,0); private Vector2f LastMousePos = new Vector2f(0, 0);
private final ISceneLightingManager lightingManager; private final ISceneLightingManager lightingManager;
private SkyBox skyBox; private SkyBox skyBox;
private Map<String,AudioInstance> audioInstances; private Map<String, AudioInstance> audioInstances;
private DynamicTerrainMesh terrainMesh; private DynamicTerrainMesh terrainMesh;
private int Jumps = 0;
private final int MaxJumps = 2;
public List<String> ActiveGUIs = new ArrayList<>(); public List<String> ActiveGUIs = new ArrayList<>();
public Map<String, GUIOverlay> GUIReg = new HashMap<>(); public Map<String, GUIOverlay> GUIReg = new HashMap<>();
public void SetSkyBox(SkyBox skyBox){ public void SetSkyBox(SkyBox skyBox) {
this.skyBox = skyBox; this.skyBox = skyBox;
} }
@ -65,172 +69,218 @@ public class Scene implements IScene {
int Width = 32; int Width = 32;
int Height = 32; int Height = 32;
float[] Heights = new float[Width * Height]; float[] Heights = new float[Width * Height];
for(int i = 0; i < Heights.length; i++){ for (int i = 0; i < Heights.length; i++) {
Heights[i] = 3 * (float)Math.random(); Heights[i] = 3 * (float) Math.random();
} }
terrainMesh = new DynamicTerrainMesh(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext().GetDevice(), Heights, Width, Height); terrainMesh = new DynamicTerrainMesh(PrimaryRuntime.GetRenderThread().GetRenderer().GetVulkanContext().GetDevice(), Heights, Width, Height);
} }
public SkyBox GetSkyBox(){return skyBox;} public SkyBox GetSkyBox() {
return skyBox;
}
public Scene(Window window) { public Scene(Window window) {
// CreateTerrainMesh(); // CreateTerrainMesh();
lightingManager = new SceneLightingManager(1000,new Vector3f(1f,1f,1f), 0.5f); lightingManager = new SceneLightingManager(1000, new Vector3f(1f, 1f, 1f), 0.5f);
Actors = new HashMap<>(); Actors = new HashMap<>();
audioInstances = new HashMap<>(); audioInstances = new HashMap<>();
ActiveActors = new ArrayList<>(); ActiveActors = new ArrayList<>();
CameraFrames = new HashMap<>(); CameraFrames = new HashMap<>();
var EngConfig = EngineConfig.getInstance(); var EngConfig = EngineConfig.getInstance();
camera = new Camera("DebugCamera"); camera = new Camera("DebugCamera");
LastCameraFrame = new CameraFrame(camera.GetPosition(),camera.GetRotation(),camera.GetFOV(), "NO_FRAME"); LastCameraFrame = new CameraFrame(camera.GetPosition(), camera.GetRotation(), camera.GetFOV(), "NO_FRAME");
Projection = new Project3D(camera.GetFOV(),EngConfig.GetZNearPlane(), EngConfig.GetZFarPlane(), Projection = new Project3D(camera.GetFOV(), EngConfig.GetZNearPlane(), EngConfig.GetZFarPlane(),
window.getWidth(), window.getHeight()); window.getWidth(), window.getHeight());
GUIReg.put("PerformanceOverlay",new PerformanceOverlay()); GUIReg.put("PerformanceOverlay", new PerformanceOverlay());
ActiveGUIs.add("PerformanceOverlay"); ActiveGUIs.add("PerformanceOverlay");
} }
public ISceneLightingManager GetLightingManager(){return lightingManager;} public ISceneLightingManager GetLightingManager() {
return lightingManager;
}
public void CameraTick(long FrameDiffNanoSeconds){ public void CameraTick(long FrameDiffNanoSeconds) {
float FrameTimeMS = FrameDiffNanoSeconds/1000000.0f; float FrameTimeMS = FrameDiffNanoSeconds / 1000000.0f;
float DeltaTime = FrameTimeMS/(60.0f/240.0f); float DeltaTime = FrameTimeMS / (60.0f / 240.0f);
if(TransitionCameraFrame && TotalTransitionTicks > CurrentTransitionTick && !Objects.equals(SetCameraFrame, "NO_FRAME")){ if (TransitionCameraFrame && TotalTransitionTicks > CurrentTransitionTick && !Objects.equals(SetCameraFrame, "NO_FRAME")) {
float StartFOV = LastCameraFrame.FOV(); float StartFOV = LastCameraFrame.FOV();
Vector3f StartPos = LastCameraFrame.Position(); Vector3f StartPos = LastCameraFrame.Position();
Vector3f StartRot = LastCameraFrame.Rotation(); Vector3f StartRot = LastCameraFrame.Rotation();
CameraFrame StartFrame; CameraFrame StartFrame;
if(CameraFrames.containsKey(ActiveCameraFrame)){ if (CameraFrames.containsKey(ActiveCameraFrame)) {
StartFrame = CameraFrames.get(ActiveCameraFrame); StartFrame = CameraFrames.get(ActiveCameraFrame);
} else StartFrame = new CameraFrame(StartPos,StartRot,StartFOV, "NO_FRAME"); } else StartFrame = new CameraFrame(StartPos, StartRot, StartFOV, "NO_FRAME");
float EndFOV = camera.GetFOV(); float EndFOV = camera.GetFOV();
Vector3f EndPos = camera.GetPosition(); Vector3f EndPos = camera.GetPosition();
Vector3f EndRot = camera.GetRotation(); Vector3f EndRot = camera.GetRotation();
CameraFrame EndFrame; CameraFrame EndFrame;
if(CameraFrames.containsKey(SetCameraFrame)){ if (CameraFrames.containsKey(SetCameraFrame)) {
EndFrame = CameraFrames.get(SetCameraFrame); EndFrame = CameraFrames.get(SetCameraFrame);
} else EndFrame = new CameraFrame(EndPos,EndRot,EndFOV, "NO_FRAME"); } else EndFrame = new CameraFrame(EndPos, EndRot, EndFOV, "NO_FRAME");
CameraFrame LerpedFrame = StartFrame.Lerp(EndFrame, (int)CurrentTransitionTick, TotalTransitionTicks); CameraFrame LerpedFrame = StartFrame.Lerp(EndFrame, (int) CurrentTransitionTick, TotalTransitionTicks);
camera.SetCameraFrame(LerpedFrame); camera.SetCameraFrame(LerpedFrame);
if(LastCameraFrame.FOV() != LerpedFrame.FOV()){ if (LastCameraFrame.FOV() != LerpedFrame.FOV()) {
Projection.ChangeFOV(LerpedFrame.FOV()); Projection.ChangeFOV(LerpedFrame.FOV());
} }
CurrentTransitionTick+= DeltaTime; CurrentTransitionTick += DeltaTime;
} else if (TransitionCameraFrame){ } else if (TransitionCameraFrame) {
CurrentTransitionTick = 0; CurrentTransitionTick = 0;
ActiveCameraFrame = SetCameraFrame; ActiveCameraFrame = SetCameraFrame;
if(!Objects.equals(CameraFrames.get(ActiveCameraFrame).NextFrame(), "NO_FRAME") && CameraFrames.containsKey(CameraFrames.get(ActiveCameraFrame).NextFrame())){ if (!Objects.equals(CameraFrames.get(ActiveCameraFrame).NextFrame(), "NO_FRAME") && CameraFrames.containsKey(CameraFrames.get(ActiveCameraFrame).NextFrame())) {
SetCameraFrame = CameraFrames.get(ActiveCameraFrame).NextFrame(); SetCameraFrame = CameraFrames.get(ActiveCameraFrame).NextFrame();
} else{ } else {
TotalTransitionTicks = 1000; TotalTransitionTicks = 1000;
TransitionCameraFrame = false; TransitionCameraFrame = false;
} }
} else{ } else {
if(!Objects.equals(ActiveCameraFrame, SetCameraFrame) && !Objects.equals(SetCameraFrame, "NO_FRAME")){ if (!Objects.equals(ActiveCameraFrame, SetCameraFrame) && !Objects.equals(SetCameraFrame, "NO_FRAME")) {
LastCameraFrame = new CameraFrame(camera.GetPosition(),camera.GetRotation(),camera.GetFOV(), "NO_FRAME"); LastCameraFrame = new CameraFrame(camera.GetPosition(), camera.GetRotation(), camera.GetFOV(), "NO_FRAME");
CurrentTransitionTick = 0; CurrentTransitionTick = 0;
TransitionCameraFrame = true; TransitionCameraFrame = true;
} }
} }
} }
public Map<String, CameraFrame> GetCameraFrameReg(){return CameraFrames;} public Map<String, CameraFrame> GetCameraFrameReg() {
public CameraFrame GetCameraFrame(String Name){return CameraFrames.get(Name);} return CameraFrames;
public Scene AddCameraFrame(String Name, CameraFrame frame){ }
CameraFrames.put(Name,frame);
public CameraFrame GetCameraFrame(String Name) {
return CameraFrames.get(Name);
}
public Scene AddCameraFrame(String Name, CameraFrame frame) {
CameraFrames.put(Name, frame);
return this; return this;
} }
public void StartCameraTrack(String StartFrame, String EndFrame, int TickAmount){
public void StartCameraTrack(String StartFrame, String EndFrame, int TickAmount) {
ActiveCameraFrame = StartFrame; ActiveCameraFrame = StartFrame;
CurrentTransitionTick = 0; CurrentTransitionTick = 0;
TotalTransitionTicks = TickAmount; TotalTransitionTicks = TickAmount;
SetCameraFrame = EndFrame; SetCameraFrame = EndFrame;
} }
public void SetActiveCameraFrame(String frameName){SetCameraFrame = frameName;}
public String GetActiveCameraFrame(){return ActiveCameraFrame;} public void SetActiveCameraFrame(String frameName) {
public Camera GetCamera(){return camera;} SetCameraFrame = frameName;
public void AddActor(Actor NewActor){ }
public String GetActiveCameraFrame() {
return ActiveCameraFrame;
}
public Camera GetCamera() {
return camera;
}
public void AddActor(Actor NewActor) {
Actors.put(NewActor.GetID(), NewActor); Actors.put(NewActor.GetID(), NewActor);
ActiveActors.add(NewActor.GetID()); ActiveActors.add(NewActor.GetID());
} }
public List<Actor> GetActors(){
public List<Actor> GetActors() {
List<Actor> actors = new ArrayList<>(); List<Actor> actors = new ArrayList<>();
for(int i = 0; i < ActiveActors.size(); i++){ for (int i = 0; i < ActiveActors.size(); i++) {
actors.add(Actors.get(ActiveActors.get(i))); actors.add(Actors.get(ActiveActors.get(i)));
} }
return actors; return actors;
} }
public Project3D GetProjection(){return Projection;}
public void RemoveAllActors(){Actors.clear();}
public Actor RemoveActor(Actor actor){return Actors.remove(actor.GetID());}
public void SetUpAudio(EngineInstance engineInstance){ public Project3D GetProjection() {
return Projection;
}
public void RemoveAllActors() {
Actors.clear();
}
public Actor RemoveActor(Actor actor) {
return Actors.remove(actor.GetID());
}
public void SetUpAudio(EngineInstance engineInstance) {
} }
public int GUI_MODE = 0; public int GUI_MODE = 0;
@Override @Override
public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds,PlayerActor playerActor, float MOVEMENT_SPEED, GameCore parent) { public void Input(EngineInstance engineInstance, long FrameDiffNanoSeconds, PlayerActor playerActor, float MOVEMENT_SPEED, GameCore parent) {
IScene scene = engineInstance.scene(); IScene scene = engineInstance.scene();
Window window = engineInstance.window(); Window window = engineInstance.window();
KeyboardInput input = window.getKeyboardInput(); KeyboardInput input = window.getKeyboardInput();
float MovementDist = (float)(FrameDiffNanoSeconds / 1000000L) * MOVEMENT_SPEED; float MovementDist = (float) (FrameDiffNanoSeconds / 1000000L) * MOVEMENT_SPEED;
Camera camera = scene.GetCamera(); Camera camera = scene.GetCamera();
if(playerActor!= null)camera = Camera.GetCamera(playerActor.AttachedCameraID); if (playerActor != null) camera = Camera.GetCamera(playerActor.AttachedCameraID);
if(input.keySinglePress(GLFW_KEY_F3)){ if (input.keySinglePress(GLFW_KEY_F3)) {
GUI_MODE = (GUI_MODE + 1) % 2; GUI_MODE = (GUI_MODE + 1) % 2;
} }
if(input.keyPressed(GLFW_KEY_ENTER)) { if (input.keyPressed(GLFW_KEY_ENTER)) {
parent.SpawnNewActor(engineInstance, new Vector3f( (float)(5 * Math.random()),20 + (float)(10 * Math.random()), (float)(5 * Math.random())),new Vector3f(-1f + (float)(2 * Math.random()),-1f + (float)(2 * Math.random()),-1f + (float)(2 * Math.random())),new Vector3f((float)Math.random(),(float)Math.random(),(float)Math.random())); parent.SpawnNewActor(engineInstance, new Vector3f((float) (5 * Math.random()), 20 + (float) (10 * Math.random()), (float) (5 * Math.random())), new Vector3f(-1f + (float) (2 * Math.random()), -1f + (float) (2 * Math.random()), -1f + (float) (2 * Math.random())), new Vector3f((float) Math.random(), (float) Math.random(), (float) Math.random()));
} }
if(input.keyPressed(GLFW_KEY_1)) { if (input.keyPressed(GLFW_KEY_1)) {
Gimbal.universalType = Gimbal.GimbalType.Move; Gimbal.universalType = Gimbal.GimbalType.Move;
} }
if(input.keyPressed(GLFW_KEY_2)) { if (input.keyPressed(GLFW_KEY_2)) {
Gimbal.universalType = Gimbal.GimbalType.Resize; Gimbal.universalType = Gimbal.GimbalType.Resize;
} }
if(input.keyPressed(GLFW_KEY_3)) { if (input.keyPressed(GLFW_KEY_3)) {
Gimbal.universalType = Gimbal.GimbalType.Rotate; Gimbal.universalType = Gimbal.GimbalType.Rotate;
} }
if(input.keyPressed(GLFW_KEY_TAB)){ if (input.keyPressed(GLFW_KEY_TAB)) {
for(int i = 0; i < parent.ActorEditorComponents.size(); i++){ for (int i = 0; i < parent.ActorEditorComponents.size(); i++) {
parent.ActorEditorComponents.get(i).UpdateAll(); parent.ActorEditorComponents.get(i).UpdateAll();
} }
} }
if(input.keySinglePress(GLFW_KEY_F2)) { if (input.keySinglePress(GLFW_KEY_F2)) {
EngineConfig.getInstance().SetRenderCollisionMesh(!EngineConfig.getInstance().RenderCollisionMeshes()); EngineConfig.getInstance().SetRenderCollisionMesh(!EngineConfig.getInstance().RenderCollisionMeshes());
} }
if(input.keyPressed(GLFW_KEY_W)){ if (input.keyPressed(GLFW_KEY_W)) {
if(playerActor == null)camera.MoveForward(MovementDist); if (playerActor == null) camera.MoveForward(MovementDist);
else playerActor.Move(new Vector3f(MovementDist* (float)Math.sin((camera.GetRotation().y)),0,-MovementDist* (float)Math.cos((camera.GetRotation().y)))); else
playerActor.Move(new Vector3f(MovementDist * (float) Math.sin((camera.GetRotation().y)), 0, -MovementDist * (float) Math.cos((camera.GetRotation().y))));
} }
if(input.keyPressed(GLFW_KEY_S)){ if (input.keyPressed(GLFW_KEY_S)) {
if(playerActor == null)camera.MoveBackward(MovementDist); if (playerActor == null) camera.MoveBackward(MovementDist);
else playerActor.Move(new Vector3f(-MovementDist* (float)Math.sin((camera.GetRotation().y)),0,MovementDist * (float)Math.cos((camera.GetRotation().y)))); else
playerActor.Move(new Vector3f(-MovementDist * (float) Math.sin((camera.GetRotation().y)), 0, MovementDist * (float) Math.cos((camera.GetRotation().y))));
} }
if(input.keyPressed(GLFW_KEY_A)){ if (input.keyPressed(GLFW_KEY_A)) {
if(playerActor == null) camera.MoveLeft(MovementDist); if (playerActor == null) camera.MoveLeft(MovementDist);
else playerActor.Move(new Vector3f(-MovementDist * (float)Math.cos((camera.GetRotation().y)),0,-MovementDist * (float)Math.sin((camera.GetRotation().y)))); else
playerActor.Move(new Vector3f(-MovementDist * (float) Math.cos((camera.GetRotation().y)), 0, -MovementDist * (float) Math.sin((camera.GetRotation().y))));
} }
if(input.keyPressed(GLFW_KEY_D)){ if (input.keyPressed(GLFW_KEY_D)) {
if(playerActor == null)camera.MoveRight(MovementDist); if (playerActor == null) camera.MoveRight(MovementDist);
else playerActor.Move(new Vector3f(MovementDist * (float)Math.cos((camera.GetRotation().y)),0,MovementDist * (float)Math.sin((camera.GetRotation().y)))); else
playerActor.Move(new Vector3f(MovementDist * (float) Math.cos((camera.GetRotation().y)), 0, MovementDist * (float) Math.sin((camera.GetRotation().y))));
} }
if(input.keyPressed(GLFW_KEY_SPACE)){ if (input.keyPressed(GLFW_KEY_SPACE)) {
if(playerActor == null)camera.MoveUp(MovementDist); if (playerActor == null) camera.MoveUp(MovementDist);
} }
if(input.keySinglePress(GLFW_KEY_SPACE)){ if (playerActor != null) {
RigidPhysicsController physicsController = (RigidPhysicsController) playerActor.GetPhysicsController();
RigidBody body = RigidBody.RigidBodyRegister.get(physicsController.RigidBodyID);
if (body != null && body.Grounded) {
Jumps = 0;
}
}
if (input.keySinglePress(GLFW_KEY_SPACE)) {
// camera.MoveUp(MovementDist); // camera.MoveUp(MovementDist);
if(playerActor != null)playerActor.Move(new Vector3f(0,5f,0)); if (Jumps < MaxJumps) {
if (playerActor != null) playerActor.Move(new Vector3f(0, 5f, 0));
Jumps++;
}
} }
if(input.keyPressed(GLFW_KEY_LEFT_SHIFT)){ if (input.keyPressed(GLFW_KEY_LEFT_SHIFT)) {
if(playerActor == null)camera.MoveDown(MovementDist); if (playerActor == null) camera.MoveDown(MovementDist);
} }
if(input.keyPressed(GLFW_KEY_LEFT_CONTROL)){ if (input.keyPressed(GLFW_KEY_LEFT_CONTROL)) {
camera.Sprint(true); camera.Sprint(true);
} else camera.Sprint(false); } else camera.Sprint(false);
if(GUI_MODE == 0 && !ActiveGUIs.contains("PerformanceOverlay")) ActiveGUIs.add("PerformanceOverlay"); if (GUI_MODE == 0 && !ActiveGUIs.contains("PerformanceOverlay")) ActiveGUIs.add("PerformanceOverlay");
else if (GUI_MODE != 0) ActiveGUIs.remove("PerformanceOverlay"); else if (GUI_MODE != 0) ActiveGUIs.remove("PerformanceOverlay");
} }