Mesh and Plane now support setInteractive. Fix #6394

This commit is contained in:
Richard Davey 2023-03-24 00:07:11 +00:00
parent 01f06cddd8
commit d9e98a7e85
2 changed files with 13 additions and 45 deletions

View file

@ -364,6 +364,7 @@ var Mesh = new Class({
*/ */
this.fov; this.fov;
// Set these to allow setInteractive to work
this.displayOriginX = 0; this.displayOriginX = 0;
this.displayOriginY = 0; this.displayOriginY = 0;
@ -1163,55 +1164,26 @@ var Mesh = new Class({
* @return {this} This GameObject. * @return {this} This GameObject.
*/ */
setInteractive: function () setInteractive: function ()
{
this.scene.sys.input.enable(this, this.hitAreaCallback.bind(this));
return this;
},
/**
* The internal hit area callback for this Mesh.
*
* @method Phaser.GameObjects.Mesh#hitAreaCallback
* @since 3.60.0
*
* @return {this} This GameObject.
*/
hitAreaCallback: function (area, x, y)
{ {
var faces = this.faces; var faces = this.faces;
for (var i = 0; i < faces.length; i++) var hitAreaCallback = function (area, x, y)
{ {
var face = faces[i]; for (var i = 0; i < faces.length; i++)
// Don't pass a calcMatrix, as the x/y are already transformed
if (face.contains(x, y))
{ {
return true; var face = faces[i];
// Don't pass a calcMatrix, as the x/y are already transformed
if (face.contains(x, y))
{
return true;
}
} }
}
return false; return false;
}, };
/** this.scene.sys.input.enable(this, hitAreaCallback);
* If this Mesh Game Object has previously been enabled for input, this will disable it.
*
* An object that is disabled for input stops processing or being considered for
* input events, but can be turned back on again at any time by simply calling
* `setInteractive()` with no arguments provided.
*
* If want to completely remove interaction from this Game Object then use `removeInteractive` instead.
*
* @method Phaser.GameObjects.Mesh#disableInteractive
* @since 3.60.0
*
* @return {this} This GameObject.
*/
disableInteractive: function ()
{
this.scene.sys.input.disable(this);
return this; return this;
}, },

View file

@ -36,10 +36,6 @@ var UUID = require('../../utils/string/UUID');
* The Plane Game Object also has the Animation component, allowing you to play animations * The Plane Game Object also has the Animation component, allowing you to play animations
* across the Plane just as you would with a Sprite. * across the Plane just as you would with a Sprite.
* *
* While a Plane cannot be enabled for input it does have the methods `hasFaceAt` and
* `getFaceAt` which can be used with Pointer coordinates to detect if they have clicked
* on Plane face, or not.
*
* Note that the Plane object is WebGL only and does not have a Canvas counterpart. * Note that the Plane object is WebGL only and does not have a Canvas counterpart.
* *
* The Plane origin is always 0.5 x 0.5 and cannot be changed. * The Plane origin is always 0.5 x 0.5 and cannot be changed.