phaser/v3/merge/plugins/weapon/Bullet.js

102 lines
2.9 KiB
JavaScript
Raw Normal View History

2016-06-03 15:45:38 +00:00
/**
* @author Richard Davey <rich@photonstorm.com>
* @copyright 2016 Photon Storm Ltd.
* @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License}
*/
/**
* Create a new `Bullet` object. Bullets are used by the `Phaser.Weapon` class, and are normal Sprites,
* with a few extra properties in the data object to handle Weapon specific features.
*
* @class Phaser.Bullet
* @constructor
* @extends Phaser.Sprite
* @param {Phaser.Game} game - A reference to the currently running game.
* @param {number} x - The x coordinate (in world space) to position the Particle at.
* @param {number} y - The y coordinate (in world space) to position the Particle at.
* @param {string|Phaser.RenderTexture|Phaser.BitmapData|PIXI.Texture} key - This is the image or texture used by the Particle during rendering. It can be a string which is a reference to the Cache entry, or an instance of a RenderTexture or PIXI.Texture.
* @param {string|number} frame - If this Particle is using part of a sprite sheet or texture atlas you can specify the exact frame to use by giving a string or numeric index.
*/
2016-06-03 12:00:39 +00:00
Phaser.Bullet = function (game, x, y, key, frame) {
Phaser.GameObject.Sprite.call(this, game, x, y, key, frame);
2016-06-03 12:00:39 +00:00
this.anchor.set(0.5);
this.data = {
bulletManager: null,
fromX: 0,
fromY: 0,
bodyDirty: true,
rotateToVelocity: false,
killType: 0,
killDistance: 0
};
};
Phaser.Bullet.prototype = Object.create(Phaser.GameObject.Sprite.prototype);
2016-06-03 12:00:39 +00:00
Phaser.Bullet.prototype.constructor = Phaser.Bullet;
2016-06-03 15:45:38 +00:00
/**
* Kills the Bullet, freeing it up for re-use by the Weapon bullet pool.
* Also dispatches the `Weapon.onKill` signal.
*
* @method Phaser.Bullet#kill
* @memberof Phaser.Bullet
*/
2016-06-03 12:00:39 +00:00
Phaser.Bullet.prototype.kill = function () {
this.alive = false;
this.exists = false;
this.visible = false;
this.data.bulletManager.onKill.dispatch(this);
return this;
};
2016-06-03 15:45:38 +00:00
/**
* Updates the Bullet, killing as required.
*
* @method Phaser.Bullet#kill
* @memberof Phaser.Bullet
*/
2016-06-03 12:00:39 +00:00
Phaser.Bullet.prototype.update = function () {
if (!this.exists)
{
return;
}
if (this.data.killType > Phaser.Weapon.KILL_LIFESPAN)
{
if (this.data.killType === Phaser.Weapon.KILL_DISTANCE)
{
if (this.game.physics.arcade.distanceToXY(this, this.data.fromX, this.data.fromY, true) > this.data.killDistance)
{
this.kill();
}
}
else
{
if (!this.data.bulletManager.bulletBounds.intersects(this))
{
this.kill();
}
}
}
if (this.data.rotateToVelocity)
{
this.rotation = Math.atan2(this.body.velocity.y, this.body.velocity.x);
}
if (this.data.bulletManager.bulletWorldWrap)
{
this.game.world.wrap(this, this.data.bulletManager.bulletWorldWrapPadding);
}
};