camera and input bugs

This commit is contained in:
RandomityGuy 2022-08-09 14:44:03 +05:30
parent d7d2c7f67a
commit d4e0a23838
4 changed files with 151 additions and 40 deletions

View file

@ -118,7 +118,7 @@ class CameraController extends Object {
deltaposY = 0;
}
var factor = isTouch ? Util.lerp(1 / 250, 1 / 10,
var factor = isTouch ? Util.lerp(1 / 250, 1 / 25,
Settings.controlsSettings.cameraSensitivity) : Util.lerp(1 / 2500, 1 / 100, Settings.controlsSettings.cameraSensitivity);
CameraPitch += deltaposY * factor;

View file

@ -1,5 +1,8 @@
package gui;
import src.JSPlatform;
import src.Util;
import gui.GuiControl.MouseState;
import h2d.TextInput;
import h2d.Scene;
import hxd.res.BitmapFont;
@ -50,4 +53,15 @@ class GuiTextInput extends GuiControl {
MarbleGame.canvas.scene2d.removeChild(text); // Refresh "layer"
}
}
public override function onMousePress(mouseState:MouseState) {
super.onMousePress(mouseState);
#if js
if (Util.isTouchDevice()) {
text.text = js.Browser.window.prompt("Enter your name", text.text);
js.Browser.document.documentElement.requestFullscreen();
}
#end
}
}

View file

@ -1,5 +1,8 @@
package touch;
import gui.GuiGraphics;
import h3d.Vector;
import gui.GuiControl;
import src.MarbleGame;
import src.Settings;
import touch.TouchInput.TouchEventState;
@ -7,51 +10,141 @@ import touch.TouchInput.TouchEventState;
class CameraInput {
var identifier:Int = -1;
var doing = false;
public var enabled = false;
public function new() {}
var added = false;
public function update(touchState:TouchEventState, joycam:Bool) {
if (!enabled)
return;
if (!doing) {
// Check for touches on the right half of the screen
for (touch in touchState.changedTouches) {
if (touch.position.x >= Settings.optionsSettings.screenWidth / 2 && touch.state == Pressed) {
identifier = touch.identifier;
doing = true;
var collider:GuiGraphics;
public function new() {
var width = MarbleGame.canvas.scene2d.width;
var height = MarbleGame.canvas.scene2d.height;
var g = new h2d.Graphics();
// g.beginFill(0xFF00FF, 0.5);
// g.drawRect(0, 0, width, height);
// g.endFill();
var gcollider = h2d.col.Bounds.fromValues(0, 0, width, height);
var interactive = new h2d.Interactive(width, height, g, gcollider);
this.collider = new GuiGraphics(g);
this.collider.position = new Vector(0, 0);
this.collider.extent = new Vector(width, height);
this.collider.horizSizing = Width;
this.collider.vertSizing = Height;
var pressed = false;
var prevMouse = new Vector(0, 0);
interactive.onPush = (e) -> {
e.propagate = true;
if (!enabled)
return;
if (pressed)
return;
var scene2d = interactive.getScene();
if (e.relX < scene2d.width / 2) {
return;
}
pressed = true;
this.identifier = e.touchId;
prevMouse.x = e.relX;
prevMouse.y = e.relY;
}
interactive.onMove = (e) -> {
e.propagate = true;
if (!enabled)
return;
if (this.identifier != e.touchId)
return;
if (pressed) {
var curPos = new Vector(e.relX, e.relY);
var delta = curPos.sub(prevMouse);
var scaleFactor = 1.0;
#if js
scaleFactor = js.Browser.window.devicePixelRatio / Settings.zoomRatio;
#end
var jumpcam = MarbleGame.instance.touchInput.jumpButton.pressed || MarbleGame.instance.touchInput.powerupButton.pressed;
if (jumpcam) {
scaleFactor /= 2.5;
}
MarbleGame.instance.world.marble.camera.orbit(delta.x / scaleFactor, delta.y / scaleFactor, true);
prevMouse.x = e.relX;
prevMouse.y = e.relY;
}
}
if (doing) {
// Get our identifier
for (touch in touchState.changedTouches) {
if (touch.identifier == this.identifier) {
switch (touch.state) {
case Release:
doing = false;
return;
case Move:
var scaleFactor = 1.0;
#if js
scaleFactor = js.Browser.window.devicePixelRatio / Settings.zoomRatio;
#end
if (joycam) {
scaleFactor /= 2.5;
}
MarbleGame.instance.world.marble.camera.orbit(touch.deltaPosition.x / scaleFactor, touch.deltaPosition.y / scaleFactor, true);
return;
interactive.onRelease = (e) -> {
e.propagate = true;
if (!enabled)
return;
case _:
return;
}
}
}
if (this.identifier != e.touchId)
return;
doing = false;
pressed = false;
this.identifier = -1;
}
}
// public function update(touchState:TouchEventState, joycam:Bool) {
// if (!enabled)
// return;
// if (!doing) {
// // Check for touches on the right half of the screen
// for (touch in touchState.changedTouches) {
// if (touch.position.x >= Settings.optionsSettings.screenWidth / 2 && touch.state == Pressed) {
// identifier = touch.identifier;
// doing = true;
// }
// }
// }
// if (doing) {
// // Get our identifier
// for (touch in touchState.changedTouches) {
// if (touch.identifier == this.identifier) {
// switch (touch.state) {
// case Release:
// doing = false;
// return;
// case Move:
// var scaleFactor = 1.0;
// #if js
// scaleFactor = js.Browser.window.devicePixelRatio / Settings.zoomRatio;
// #end
// if (joycam) {
// scaleFactor /= 2.5;
// }
// MarbleGame.instance.world.marble.camera.orbit(touch.deltaPosition.x / scaleFactor, touch.deltaPosition.y / scaleFactor, true);
// return;
// case _:
// return;
// }
// }
// }
// doing = false;
// }
// }
public function dispose() {
this.collider.dispose();
}
public function add(parentGui:GuiControl) {
parentGui.addChild(this.collider);
added = true;
}
public function remove(parentGui:GuiControl) {
parentGui.removeChild(this.collider);
added = false;
}
}

View file

@ -97,7 +97,6 @@ class TouchInput {
}
public function update() {
this.cameraInput.update(currentTouchState, jumpButton.pressed || powerupButton.pressed);
previousTouchState = currentTouchState;
currentTouchState = new TouchEventState();
}
@ -107,7 +106,8 @@ class TouchInput {
powerupButton.dispose();
movementInput.dispose();
pauseButton.dispose();
this.cameraInput.enabled = true;
cameraInput.dispose();
this.cameraInput = new CameraInput();
this.movementInput = new MovementInput();
this.jumpButton = new JumpButton();
this.powerupButton = new PowerupButton();
@ -116,6 +116,8 @@ class TouchInput {
jumpButton.add(parentGui);
powerupButton.add(parentGui);
movementInput.add(parentGui);
cameraInput.add(parentGui);
cameraInput.enabled = true;
}
public function setControlsEnabled(enabled:Bool) {
@ -123,6 +125,7 @@ class TouchInput {
this.powerupButton.setVisible(enabled);
this.movementInput.setVisible(enabled);
this.pauseButton.setVisible(enabled);
this.cameraInput.enabled = enabled;
}
public function hideControls(parentGui:GuiControl) {
@ -130,10 +133,11 @@ class TouchInput {
powerupButton.remove(parentGui);
movementInput.remove(parentGui);
pauseButton.remove(parentGui);
cameraInput.remove(parentGui);
jumpButton.dispose();
powerupButton.dispose();
movementInput.dispose();
pauseButton.dispose();
this.cameraInput.enabled = false;
cameraInput.dispose();
}
}