|
4 | 4 | * @license {@link https://github.com/photonstorm/phaser/blob/master/license.txt|MIT License} |
5 | 5 | */ |
6 | 6 |
|
| 7 | +var CenterOn = require('../../geom/rectangle/CenterOn'); |
7 | 8 | var Clamp = require('../../math/Clamp'); |
8 | 9 | var Class = require('../../utils/Class'); |
9 | 10 | var DegToRad = require('../../math/DegToRad'); |
@@ -344,6 +345,28 @@ var Camera = new Class({ |
344 | 345 | */ |
345 | 346 | this.followOffset = new Vector2(); |
346 | 347 |
|
| 348 | + /** |
| 349 | + * The mid-point of the Camera in 'world' coordinates. |
| 350 | + * |
| 351 | + * This value is updated in the preRender method, after the scroll values and follower |
| 352 | + * update have been calculated. |
| 353 | + * |
| 354 | + * @name Phaser.Cameras.Scene2D.Camera#midPoint |
| 355 | + * @type {Phaser.Math.Vector2} |
| 356 | + * @readOnly |
| 357 | + * @since 3.11.0 |
| 358 | + */ |
| 359 | + this.midPoint = new Vector2(width / 2, height / 2); |
| 360 | + |
| 361 | + /** |
| 362 | + * Camera dead zone. |
| 363 | + * |
| 364 | + * @name Phaser.Cameras.Scene2D.Camera#deadzone |
| 365 | + * @type {?Phaser.Geom.Rectangle} |
| 366 | + * @since 3.11.0 |
| 367 | + */ |
| 368 | + this.deadzone = null; |
| 369 | + |
347 | 370 | /** |
348 | 371 | * Internal follow target reference. |
349 | 372 | * |
@@ -726,11 +749,45 @@ var Camera = new Class({ |
726 | 749 | var originX = width / 2; |
727 | 750 | var originY = height / 2; |
728 | 751 | var follow = this._follow; |
| 752 | + var deadzone = this.deadzone; |
729 | 753 |
|
730 | 754 | if (follow) |
731 | 755 | { |
732 | | - this.scrollX = Linear(this.scrollX, (follow.x - this.followOffset.x) - originX, this.lerp.x) / zoom; |
733 | | - this.scrollY = Linear(this.scrollY, (follow.y - this.followOffset.y) - originY, this.lerp.y) / zoom; |
| 756 | + var fx = (follow.x - this.followOffset.x); |
| 757 | + var fy = (follow.y - this.followOffset.y); |
| 758 | + |
| 759 | + this._fx = fx; |
| 760 | + this._fy = fy; |
| 761 | + |
| 762 | + if (deadzone) |
| 763 | + { |
| 764 | + CenterOn(deadzone, this.midPoint.x, this.midPoint.y); |
| 765 | + |
| 766 | + if (fx <= deadzone.x) |
| 767 | + { |
| 768 | + this.scrollX = Linear(fx, deadzone.x, this.lerp.x) / zoom; |
| 769 | + this.scrollX -= deadzone.x; |
| 770 | + console.log(this.scrollX); |
| 771 | + // debugger; |
| 772 | + } |
| 773 | + else if (fx >= deadzone.right) |
| 774 | + { |
| 775 | + this.scrollX = Linear(fx, deadzone.right, this.lerp.x) / zoom; |
| 776 | + this.scrollX -= deadzone.right; |
| 777 | + console.log(this.scrollX); |
| 778 | + // debugger; |
| 779 | + } |
| 780 | + |
| 781 | + // if (fy < deadzone.y || fy > deadzone.bottom) |
| 782 | + // { |
| 783 | + // this.scrollY = Linear(this.scrollY, fy - originY, this.lerp.y) / zoom; |
| 784 | + // } |
| 785 | + } |
| 786 | + else |
| 787 | + { |
| 788 | + this.scrollX = Linear(this.scrollX, fx, this.lerp.x) / zoom; |
| 789 | + this.scrollY = Linear(this.scrollY, fy, this.lerp.y) / zoom; |
| 790 | + } |
734 | 791 | } |
735 | 792 |
|
736 | 793 | if (this.useBounds) |
@@ -765,6 +822,8 @@ var Camera = new Class({ |
765 | 822 | this.scrollY = Math.round(this.scrollY); |
766 | 823 | } |
767 | 824 |
|
| 825 | + this.midPoint.set(this.scrollX + originX, this.scrollY + originY); |
| 826 | + |
768 | 827 | matrix.loadIdentity(); |
769 | 828 | matrix.scale(resolution, resolution); |
770 | 829 | matrix.translate(this.x + originX, this.y + originY); |
|
0 commit comments