define([ 'js/rendering/renderer', 'js/system/events', 'js/misc/physics', 'js/sound/sound' ], function ( renderer, events, physics, sound ) { let scale = 40; return { type: 'player', oldPos: { x: 0, y: 0 }, init: function () { this.obj.addComponent('keyboardMover'); this.obj.addComponent('mouseMover'); this.obj.addComponent('serverActions'); this.obj.addComponent('pather'); events.emit('onGetPortrait', this.obj.portrait); }, update: function () { let obj = this.obj; let oldPos = this.oldPos; if ((oldPos.x == obj.x) && (oldPos.y == obj.y)) return; let dx = obj.x - oldPos.x; let dy = obj.y - oldPos.y; let instant = false; if ((dx > 5) || (dy > 5)) instant = true; if (dx != 0) dx = dx / Math.abs(dx); if (dy != 0) dy = dy / Math.abs(dy); this.oldPos.x = this.obj.x; this.oldPos.y = this.obj.y; this.canvasFollow({ x: dx, y: dy }, instant); sound.update(obj.x, obj.y); }, extend: function (blueprint) { if (blueprint.collisionChanges) { blueprint.collisionChanges.forEach(function (c) { physics.setCollision(c.x, c.y, c.collides); }); delete blueprint.collisionChanges; } }, canvasFollow: function (delta, instant) { let obj = this.obj; delta = delta || { x: 0, y: 0 }; renderer.setPosition({ x: (obj.x - (renderer.width / (scale * 2))) * scale, y: (obj.y - (renderer.height / (scale * 2))) * scale }, instant); } }; });