fix js and camera stuff

This commit is contained in:
RandomityGuy 2023-07-15 14:15:40 +05:30
parent f019160c3f
commit 9c7c8f318e
23 changed files with 166 additions and 18 deletions

View file

@ -27,6 +27,7 @@ import h3d.Vector;
import hxsl.Types.Matrix; import hxsl.Types.Matrix;
import h3d.scene.Scene; import h3d.scene.Scene;
import src.Gamepad; import src.Gamepad;
import src.MarbleGame;
enum CameraMode { enum CameraMode {
FreeOrbit; FreeOrbit;
@ -63,6 +64,10 @@ class CameraController extends Object {
var _ignoreCursor:Bool = false; var _ignoreCursor:Bool = false;
var hasXInput:Bool = false;
var hasYInput:Bool = false;
var dt:Float;
public function new(marble:Marble) { public function new(marble:Marble) {
super(); super();
this.marble = marble; this.marble = marble;
@ -127,8 +132,8 @@ class CameraController extends Object {
} }
} }
var factor = isTouch ? Util.lerp(1 / 250, 1 / 25, var factor = isTouch ? Util.lerp(1 / 25, 1 / 15,
Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 2500, 1 / 100, Settings.controlsSettings.cameraSensitivity); Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 750, 1 / 50, Settings.controlsSettings.cameraSensitivity);
// CameraPitch += deltaposY * factor; // CameraPitch += deltaposY * factor;
// CameraYaw += deltaposX * factor; // CameraYaw += deltaposX * factor;
@ -136,6 +141,20 @@ class CameraController extends Object {
nextCameraPitch = CameraPitch + deltaposY * factor; nextCameraPitch = CameraPitch + deltaposY * factor;
nextCameraYaw = CameraYaw + deltaposX * factor; nextCameraYaw = CameraYaw + deltaposX * factor;
if (Math.abs(deltaposX) > 0.001)
hasXInput = true;
else
hasXInput = false;
if (Math.abs(deltaposY) > 0.001)
hasYInput = true;
else
hasYInput = false;
if (MarbleGame.instance.touchInput.cameraInput.pressed) {
hasXInput = true;
hasYInput = true;
}
// var rotX = deltaposX * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2; // var rotX = deltaposX * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2;
// var rotY = deltaposY * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2; // var rotY = deltaposY * 0.001 * Settings.controlsSettings.cameraSensitivity * Math.PI * 2;
// CameraYaw -= rotX; // CameraYaw -= rotX;
@ -191,8 +210,9 @@ class CameraController extends Object {
// this.level.scene.camera.target = marblePosition.add(cameraVerticalTranslation); // this.level.scene.camera.target = marblePosition.add(cameraVerticalTranslation);
// camera.position.add(cameraVerticalTranslation); // camera.position.add(cameraVerticalTranslation);
var camera = level.scene.camera; var camera = level.scene.camera;
this.dt = dt;
var lerpt = Math.pow(0.5, dt / 0.032); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600)); var lerpt = 1 - Math.pow(0.5, dt / 0.016); // Math.min(1, 1 - Math.pow(0.6, dt / 0.032)); // hxd.Math.min(1, 1 - Math.pow(0.6, dt * 600));
var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0) var cameraPitchDelta = (Key.isDown(Settings.controlsSettings.camBackward) ? 1 : 0)
- (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0) - (Key.isDown(Settings.controlsSettings.camForward) ? 1 : 0)
@ -232,7 +252,7 @@ class CameraController extends Object {
deltaX = deltaNew; deltaX = deltaNew;
// Center the pitch // Center the pitch
if (!Settings.controlsSettings.alwaysFreeLook && !Key.isDown(Settings.controlsSettings.freelook)) { if (!Settings.controlsSettings.alwaysFreeLook && !Key.isDown(Settings.controlsSettings.freelook) && !(hasXInput || hasYInput)) {
var rescaledY = deltaY; var rescaledY = deltaY;
if (rescaledY <= 0.0) if (rescaledY <= 0.0)
rescaledY = 0.4 - rescaledY * -0.75; rescaledY = 0.4 - rescaledY * -0.75;
@ -252,6 +272,11 @@ class CameraController extends Object {
deltaY = movePitchSpeed; deltaY = movePitchSpeed;
} }
if (!MarbleGame.instance.touchInput.cameraInput.pressed) {
hasXInput = false;
hasYInput = false;
}
nextCameraYaw += deltaX; nextCameraYaw += deltaX;
nextCameraPitch += deltaY; nextCameraPitch += deltaY;
nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch)); nextCameraPitch = Math.max(-Math.PI / 2 + Math.PI / 4, Math.min(Math.PI / 2 - 0.0001, nextCameraPitch));

View file

@ -1,5 +1,6 @@
package src; package src;
import h3d.pass.PassList;
import hxd.Window; import hxd.Window;
import src.ResourceLoader; import src.ResourceLoader;
import shaders.GammaRamp; import shaders.GammaRamp;
@ -147,17 +148,28 @@ class Renderer extends h3d.scene.Renderer {
if (!cubemapPass || Settings.optionsSettings.reflectionDetail >= 4) { if (!cubemapPass || Settings.optionsSettings.reflectionDetail >= 4) {
var glowObjects = get("glow"); var glowObjects = get("glow");
if (!glowObjects.isEmpty()) { if (!glowObjects.isEmpty()) {
if (dirtyBuffers) { var frustum = ctx.camera.frustum;
ctx.engine.pushTarget(glowBuffer); var hasOne = false;
ctx.engine.clear(0); for (obj in glowObjects) {
renderPass(defaultPass, glowObjects); var bounds = obj.obj.getBounds();
bloomPass(ctx); if (frustum.hasBounds(bounds)) {
ctx.engine.popTarget(); hasOne = true;
break;
}
}
if (hasOne) {
if (dirtyBuffers) {
ctx.engine.pushTarget(glowBuffer);
ctx.engine.clear(0);
renderPass(defaultPass, glowObjects);
bloomPass(ctx);
ctx.engine.popTarget();
}
copyPass.shader.texture = growBufferTemps[0];
copyPass.pass.blend(One, One);
copyPass.pass.depth(false, Always);
copyPass.render();
} }
copyPass.shader.texture = growBufferTemps[0];
copyPass.pass.blend(One, One);
copyPass.pass.depth(false, Always);
copyPass.render();
} }
} }
if (!cubemapPass) if (!cubemapPass)

View file

@ -126,7 +126,7 @@ class Settings {
marbleCategoryIndex: 0, marbleCategoryIndex: 0,
marbleSkin: "base", marbleSkin: "base",
marbleModel: "data/shapes/balls/marble01.dts", marbleModel: "data/shapes/balls/marble01.dts",
marbleShader: "Default", marbleShader: "ClassicGlassPureSphere",
rewindEnabled: false, rewindEnabled: false,
rewindTimescale: 1, rewindTimescale: 1,
reflectionDetail: 3, reflectionDetail: 3,
@ -412,7 +412,7 @@ class Settings {
optionsSettings.marbleCategoryIndex = 0; optionsSettings.marbleCategoryIndex = 0;
} }
if (optionsSettings.marbleShader == null) { if (optionsSettings.marbleShader == null) {
optionsSettings.marbleShader = "Default"; optionsSettings.marbleShader = "ClassicGlassPureSphere";
} }
if (controlsSettings.blast == null) { if (controlsSettings.blast == null) {
controlsSettings.blast = Key.E; controlsSettings.blast = Key.E;

View file

@ -24,7 +24,12 @@ class AboutMenuOptionsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -25,7 +25,12 @@ class AchievementsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -25,7 +25,12 @@ class DifficultySelectGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -39,7 +39,12 @@ class EndGameGui extends GuiImage {
return [normal, hover, pressed]; return [normal, hover, pressed];
} }
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -32,7 +32,12 @@ class ExitGameDlg extends GuiImage {
return [normal, hover, pressed]; return [normal, hover, pressed];
} }
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -33,7 +33,12 @@ class HelpCreditsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -24,7 +24,12 @@ class InputOptionsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -84,7 +84,12 @@ class KeyBindingsGui extends GuiImage {
} }
} }
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -99,7 +99,12 @@ class LevelSelectGui extends GuiImage {
this.vertSizing = Height; this.vertSizing = Height;
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -29,7 +29,12 @@ class MainMenuGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -245,7 +245,12 @@ class MarblePickerGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -23,7 +23,12 @@ class MiscOptionsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -23,7 +23,12 @@ class OptionsListGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -111,7 +111,12 @@ class PlayGui {
playGuiCtrlOuter.horizSizing = Width; playGuiCtrlOuter.horizSizing = Width;
playGuiCtrlOuter.vertSizing = Height; playGuiCtrlOuter.vertSizing = Height;
#if hl
var wnd = hxd.Window.getInstance(); var wnd = hxd.Window.getInstance();
#end
#if js
var wnd = MarbleGame.instance.scene2d;
#end
var safeVerMargin = 1 + (wnd.height * 0.15) / 2; var safeVerMargin = 1 + (wnd.height * 0.15) / 2;
var safeHorMargin = 1 + (wnd.width * 0.15) / 2; var safeHorMargin = 1 + (wnd.width * 0.15) / 2;
@ -181,7 +186,12 @@ class PlayGui {
} }
public function initTimer() { public function initTimer() {
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var safeVerMargin = 1 + (scene2d.height * 0.15) / 2; var safeVerMargin = 1 + (scene2d.height * 0.15) / 2;
var timerCtrl = new GuiImage(ResourceLoader.getResource('data/ui/game/timebackdrop0.png', ResourceLoader.getImage, this.imageResources).toTile()); var timerCtrl = new GuiImage(ResourceLoader.getResource('data/ui/game/timebackdrop0.png', ResourceLoader.getImage, this.imageResources).toTile());
@ -287,7 +297,12 @@ class PlayGui {
} }
public function initGemCounter() { public function initGemCounter() {
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var safeVerMargin = 1 + (scene2d.height * 0.15) / 2; var safeVerMargin = 1 + (scene2d.height * 0.15) / 2;
var gemBox = new GuiControl(); var gemBox = new GuiControl();
@ -374,7 +389,12 @@ class PlayGui {
} }
function initPowerupBox() { function initPowerupBox() {
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var safeVerMargin = 1 + (scene2d.height * 0.15) / 2; var safeVerMargin = 1 + (scene2d.height * 0.15) / 2;
var powerupImgs = [ var powerupImgs = [
@ -526,7 +546,12 @@ class PlayGui {
} }
function initBlastBar() { function initBlastBar() {
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var safeVerMargin = 1 + (scene2d.height * 0.15) / 2; var safeVerMargin = 1 + (scene2d.height * 0.15) / 2;
blastBar = new GuiControl(); blastBar = new GuiControl();

View file

@ -29,7 +29,12 @@ class ReplayCenterGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -21,7 +21,12 @@ class TouchCtrlsEditGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -19,7 +19,12 @@ class VersionGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -23,7 +23,12 @@ class VideoOptionsGui extends GuiImage {
this.position = new Vector(); this.position = new Vector();
this.extent = new Vector(640, 480); this.extent = new Vector(640, 480);
#if hl
var scene2d = hxd.Window.getInstance(); var scene2d = hxd.Window.getInstance();
#end
#if js
var scene2d = MarbleGame.instance.scene2d;
#end
var offsetX = (scene2d.width - 1280) / 2; var offsetX = (scene2d.width - 1280) / 2;
var offsetY = (scene2d.height - 720) / 2; var offsetY = (scene2d.height - 720) / 2;

View file

@ -13,6 +13,7 @@ class CameraInput {
var identifier:Int = -1; var identifier:Int = -1;
public var enabled = false; public var enabled = false;
public var pressed = false;
var added = false; var added = false;
@ -35,7 +36,7 @@ class CameraInput {
this.collider.horizSizing = Width; this.collider.horizSizing = Width;
this.collider.vertSizing = Height; this.collider.vertSizing = Height;
var pressed = false; pressed = false;
var prevMouse = new Vector(0, 0); var prevMouse = new Vector(0, 0);
interactive.onPush = (e) -> { interactive.onPush = (e) -> {

View file

@ -34,7 +34,7 @@ class TouchEventState {
} }
class TouchInput { class TouchInput {
var cameraInput:CameraInput; public var cameraInput:CameraInput;
public var movementInput:MovementInput; public var movementInput:MovementInput;