mirror of
https://github.com/tobspr/shapez.io.git
synced 2025-06-13 13:04:03 +00:00
Add axis control for camera move
This is simple linear control. It needs some more tuning of the sensitivity, but works ok.
This commit is contained in:
parent
e7981d485e
commit
301a841955
@ -220,6 +220,24 @@ export class InputDistributor {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getGamepadAxes() {
|
||||||
|
if (this.connectedGamepadIndex === null) {
|
||||||
|
return {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
const gamepad = navigator.getGamepads()[this.connectedGamepadIndex];
|
||||||
|
|
||||||
|
// Threshold 0.25 as the joysticks never return to exact 0
|
||||||
|
// power to 9 function to decrease the sensitivity, to be ~0.25 at 85%
|
||||||
|
return {
|
||||||
|
x: Math.abs(gamepad.axes[0]) < 0.25 ? 0 : gamepad.axes[0],
|
||||||
|
y: Math.abs(gamepad.axes[1]) < 0.25 ? 0 : gamepad.axes[1],
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Event} event
|
* @param {Event} event
|
||||||
*/
|
*/
|
||||||
|
@ -778,6 +778,7 @@ export class Camera extends BasicSerializableObject {
|
|||||||
this.internalUpdateCentering(now, physicsStepSizeMs);
|
this.internalUpdateCentering(now, physicsStepSizeMs);
|
||||||
this.internalUpdateShake(now, physicsStepSizeMs);
|
this.internalUpdateShake(now, physicsStepSizeMs);
|
||||||
this.internalUpdateKeyboardForce(now, physicsStepSizeMs);
|
this.internalUpdateKeyboardForce(now, physicsStepSizeMs);
|
||||||
|
this.internalUpdateGamepadForce(now, physicsStepSizeMs);
|
||||||
}
|
}
|
||||||
this.clampZoomLevel();
|
this.clampZoomLevel();
|
||||||
}
|
}
|
||||||
@ -1008,4 +1009,24 @@ export class Camera extends BasicSerializableObject {
|
|||||||
this.center.y += moveAmount * forceY * movementSpeed;
|
this.center.y += moveAmount * forceY * movementSpeed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the gamepad axis forces
|
||||||
|
* @param {number} now
|
||||||
|
* @param {number} dt Delta time
|
||||||
|
*/
|
||||||
|
internalUpdateGamepadForce(now, dt) {
|
||||||
|
const inputMgr = this.root.app.inputMgr;
|
||||||
|
|
||||||
|
if (inputMgr.connectedGamepadIndex !== null && !this.currentlyMoving && this.desiredCenter == null) {
|
||||||
|
const limitingDimension = Math.min(this.root.gameWidth, this.root.gameHeight);
|
||||||
|
|
||||||
|
const moveAmount = ((limitingDimension / 2048) * dt) / this.zoomLevel;
|
||||||
|
|
||||||
|
let { x, y } = inputMgr.getGamepadAxes();
|
||||||
|
|
||||||
|
this.center.x += moveAmount * x * 2;
|
||||||
|
this.center.y += moveAmount * y * 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user