diff --git a/src/CameraController.hx b/src/CameraController.hx index 283f3cf7..8418213b 100644 --- a/src/CameraController.hx +++ b/src/CameraController.hx @@ -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; diff --git a/src/gui/GuiTextInput.hx b/src/gui/GuiTextInput.hx index 82f9efb5..ac4fc6ed 100644 --- a/src/gui/GuiTextInput.hx +++ b/src/gui/GuiTextInput.hx @@ -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 + } } diff --git a/src/touch/CameraInput.hx b/src/touch/CameraInput.hx index 6473ecca..da72129d 100644 --- a/src/touch/CameraInput.hx +++ b/src/touch/CameraInput.hx @@ -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; + } } diff --git a/src/touch/TouchInput.hx b/src/touch/TouchInput.hx index a92dc9bc..18d90c8c 100644 --- a/src/touch/TouchInput.hx +++ b/src/touch/TouchInput.hx @@ -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(); } }