|
- define([
- 'js/system/client',
- 'js/system/events',
- 'js/misc/physics'
- ], function (
- client,
- events,
- physics
- ) {
- return {
- type: 'gatherer',
- effect: null,
-
- init: function () {
- this.obj.on('onKeyDown', this.onKeyDown.bind(this));
- this.hookEvent('onRezone', this.onRezone.bind(this));
- },
-
- extend: function (msg) {
- if ((msg.width) && (msg.progress !== 100)) {
- if (this.effect)
- this.effect.destroyed = true;
-
- let x = 0;
- let y = 0;
- do {
- x = msg.x + ~~(Math.random() * msg.width);
- y = msg.y + ~~(Math.random() * msg.height);
- } while (!physics.isTileBlocking(x, y) || Math.max(Math.abs(x - this.obj.x), Math.abs(y - this.obj.y)) <= 2);
-
- this.obj.flipX = (x < this.obj.x);
- this.obj.setSpritePosition();
-
- this.effect = this.obj.addComponent('lightningEffect', {
- new: true,
- toX: x,
- toY: y,
- ttl: -1,
- divisions: 4,
- cdMax: 12,
- colors: [0xc0c3cf, 0xc0c3cf, 0x929398],
- maxDeviate: 5,
- lineGrow: true,
- lineShrink: true
- });
- } else {
- if ((msg.progress === 100) && (this.effect)) {
- this.effect.destroyed = true;
- this.effect = null;
- }
-
- events.emit('onShowProgress', (msg.action || 'Gathering') + '...', msg.progress);
- }
- },
-
- onRezone: function () {
- this.extend({
- progress: 100,
- action: 'Fishing'
- });
- },
-
- onKeyDown: function (key) {
- if (key !== 'g')
- return;
-
- client.request({
- cpn: 'player',
- method: 'performAction',
- data: {
- cpn: 'gatherer',
- method: 'gather'
- }
- });
- },
-
- destroy: function () {
- this.unhookEvents();
- }
- };
- });
|