Yes, here it is:
var Gamepad = pc.createScript('gamepad');
Gamepad.attributes.add("leftButton", {type: "entity", default: "", title: "Left Button"});
Gamepad.attributes.add("rightButton", {type: "entity", default: "", title: "Right Button"});
Gamepad.attributes.add("upButton", {type: "entity", default: "", title: "Up Button"});
Gamepad.attributes.add("downButton", {type: "entity", default: "", title: "Down Button"});
Gamepad.attributes.add("jumpButton", {type: "entity", default: "", title: "Jump Button"});
Gamepad.attributes.add("leftDirection", {type: "vec3", default: [0,0,0], title: "Direction to move left"});
Gamepad.attributes.add("rightDirection", {type: "vec3", default: [0,0,0], title: "Direction to move right"});
Gamepad.attributes.add("upDirection", {type: "vec3", default: [0,0,0], title: "Direction to move up"});
Gamepad.attributes.add("downDirection", {type: "vec3", default: [0,0,0], title: "Direction to move down"});
Gamepad.attributes.add("jetpackSpeed", {type: "number", default: 1, title: "Jetpack speed"});
Gamepad.attributes.add("player", {type: "entity", default: "", title: "Player"});
var isLeftButtonPressed = false;
var isRightButtonPressed = false;
var isUpButtonPressed = false;
var isDownButtonPressed = false;
var isJumpButtonPressed = false;
var force;
// initialize code called once per entity
Gamepad.prototype.initialize = function() {
this.leftButton.element.on('mousedown', this.onLeftPress, this);
this.leftButton.element.on('mouseup', this.onLeftRelease, this);
this.leftButton.element.on('touchstart', this.onLeftPress, this);
this.leftButton.element.on('touchend', this.onLeftRelease, this);
this.rightButton.element.on('mousedown', this.onRightPress, this);
this.rightButton.element.on('mouseup', this.onRightRelease, this);
this.rightButton.element.on('touchstart', this.onRightPress, this);
this.rightButton.element.on('touchend', this.onRightRelease, this);
this.upButton.element.on('mousedown', this.onUpPress, this);
this.upButton.element.on('mouseup', this.onUpRelease, this);
this.upButton.element.on('touchstart', this.onUpPress, this);
this.upButton.element.on('touchend', this.onUpRelease, this);
this.downButton.element.on('mousedown', this.onDownPress, this);
this.downButton.element.on('mouseup', this.onDownRelease, this);
this.downButton.element.on('touchstart', this.onDownPress, this);
this.downButton.element.on('touchend', this.onDownRelease, this);
this.jumpButton.element.on('mousedown', this.onJumpPress, this);
this.jumpButton.element.on('mouseup', this.onJumpRelease, this);
this.jumpButton.element.on('touchstart', this.onJumpPress, this);
this.jumpButton.element.on('touchend', this.onJumpRelease, this);
this.force = new pc.Vec3();
};
// update code called every frame
Gamepad.prototype.update = function(dt) {
var rb = this.player.rigidbody;
if (isLeftButtonPressed) {
rb.applyForce(this.leftDirection);
console.log(this.player);
this.player.setLocalEulerAngles( 30, 90, 60);
}
if (isRightButtonPressed) {
rb.applyForce(this.rightDirection);
}
if (isUpButtonPressed) {
rb.applyForce(this.upDirection);
}
if (isDownButtonPressed) {
rb.applyForce(this.downDirection);
}
if (isJumpButtonPressed) {
this.force.copy(this.player.up).scale(this.jetpackSpeed);
rb.applyForce(this.force);
}
};
Gamepad.prototype.onLeftPress = function (event) {
isLeftButtonPressed = true;
};
Gamepad.prototype.onLeftRelease = function (event) {
isLeftButtonPressed = false;
};
Gamepad.prototype.onRightPress = function (event) {
isRightButtonPressed = true;
};
Gamepad.prototype.onRightRelease = function (event) {
isRightButtonPressed = false;
};
Gamepad.prototype.onUpPress = function (event) {
isUpButtonPressed = true;
};
Gamepad.prototype.onUpRelease = function (event) {
isUpButtonPressed = false;
};
Gamepad.prototype.onDownPress = function (event) {
isDownButtonPressed = true;
};
Gamepad.prototype.onDownRelease = function (event) {
isDownButtonPressed = false;
};
Gamepad.prototype.onJumpPress = function (event) {
isJumpButtonPressed = true;
};
Gamepad.prototype.onJumpRelease = function (event) {
isJumpButtonPressed = false;
};