forked from phaserjs/phaser
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShiftPosition.js
More file actions
115 lines (92 loc) · 2.85 KB
/
Copy pathShiftPosition.js
File metadata and controls
115 lines (92 loc) · 2.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
var Vector2 = require('../math/Vector2');
// Iterate through items changing the position of each element to
// be that of the element that came before it in the array (or after it if direction = 1)
// The first items position is set to x/y.
// The final x/y coords are returned
/**
* [description]
*
* @function Phaser.Actions.ShiftPosition
* @since 3.0.0
*
* @param {array} items - An array of Game Objects. The contents of this array are updated by this Action.
* @param {number} x - [description]
* @param {number} y - [description]
* @param {integer} [direction=0] - [description]
* @param {Phaser.Math.Vector2|object} [output] - [description]
*
* @return {array} The array of Game Objects that was passed to this Action.
*/
var ShiftPosition = function (items, x, y, direction, output)
{
if (direction === undefined) { direction = 0; }
if (output === undefined) { output = new Vector2(); }
var px;
var py;
if (items.length > 1)
{
var i;
var cx;
var cy;
var cur;
if (direction === 0)
{
// Bottom to Top
var len = items.length - 1;
px = items[len].x;
py = items[len].y;
for (i = len - 1; i >= 0; i--)
{
// Current item
cur = items[i];
// Get current item x/y, to be passed to the next item in the list
cx = cur.x;
cy = cur.y;
// Set current item to the previous items x/y
cur.x = px;
cur.y = py;
// Set current as previous
px = cx;
py = cy;
}
// Update the head item to the new x/y coordinates
items[len].x = x;
items[len].y = y;
}
else
{
// Top to Bottom
px = items[0].x;
py = items[0].y;
for (i = 1; i < items.length; i++)
{
// Current item
cur = items[i];
// Get current item x/y, to be passed to the next item in the list
cx = cur.x;
cy = cur.y;
// Set current item to the previous items x/y
cur.x = px;
cur.y = py;
// Set current as previous
px = cx;
py = cy;
}
// Update the head item to the new x/y coordinates
items[0].x = x;
items[0].y = y;
}
}
else
{
px = items[0].x;
py = items[0].y;
items[0].x = x;
items[0].y = y;
}
// Return the final set of coordinates as they're effectively lost from the shift and may be needed
output.x = px;
output.y = py;
return output;
};
module.exports = ShiftPosition;