@rpgjs/common 3.0.0-beta → 3.0.0-beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/EventEmitter.d.ts +1 -0
- package/lib/EventEmitter.js +4 -0
- package/lib/EventEmitter.js.map +1 -1
- package/lib/Game.d.ts +5 -1
- package/lib/Game.js +3 -1
- package/lib/Game.js.map +1 -1
- package/lib/Hit.d.ts +9 -9
- package/lib/Map.d.ts +208 -11
- package/lib/Map.js +232 -9
- package/lib/Map.js.map +1 -1
- package/lib/Player.d.ts +127 -18
- package/lib/Player.js +175 -74
- package/lib/Player.js.map +1 -1
- package/lib/Plugin.d.ts +5 -4
- package/lib/Plugin.js +3 -2
- package/lib/Plugin.js.map +1 -1
- package/lib/Shape.d.ts +70 -3
- package/lib/Shape.js +113 -4
- package/lib/Shape.js.map +1 -1
- package/lib/Utils.d.ts +8 -4
- package/lib/Utils.js +13 -2
- package/lib/Utils.js.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -1
- package/lib/index.js.map +1 -1
- package/package.json +2 -2
package/lib/EventEmitter.d.ts
CHANGED
package/lib/EventEmitter.js
CHANGED
package/lib/EventEmitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAEnC,MAAa,YAAY;IAAzB;QACY,cAAS,GAEb,EAAE,CAAA;QAEE,kBAAa,GAEjB,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"EventEmitter.js","sourceRoot":"","sources":["../src/EventEmitter.ts"],"names":[],"mappings":";;;AAAA,mCAAmC;AAEnC,MAAa,YAAY;IAAzB;QACY,cAAS,GAEb,EAAE,CAAA;QAEE,kBAAa,GAEjB,EAAE,CAAA;IA0CV,CAAC;IAxCG,IAAI,CAAC,IAAY,EAAE,EAAY;QAC3B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,EAAE,CAAC,IAAY,EAAE,EAAY;QACzB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;QACpD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACf,CAAC;IAED,IAAI,CAAC,IAAY,EAAE,IAAU,EAAE,OAAgB,KAAK;QAChD,MAAM,GAAG,GAAQ,EAAE,CAAA;QACnB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACtB,KAAK,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;gBACvC,IAAI,IAAI;oBAAE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;oBAChC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAA;aAChC;SACJ;aACI,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;YAC/B,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAA;;gBAChD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;SAChD;QACD,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC7B,IAAI,CAAC,iBAAS,CAAC,GAAG,CAAC,EAAE;gBACjB,OAAO,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;aAC9B;YACD,OAAO,GAAG,CAAA;QACd,CAAC,CAAC,CAAC,CAAA;IACP,CAAC;IAED,GAAG,CAAC,IAAY;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAED,KAAK;QACD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAA;QACnB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAA;IAC3B,CAAC;CACJ;AAjDD,oCAiDC"}
|
package/lib/Game.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from './EventEmitter';
|
|
2
|
+
import { Direction } from './Player';
|
|
3
|
+
import { Control } from './Input';
|
|
2
4
|
export default class Game extends EventEmitter {
|
|
3
5
|
private side;
|
|
4
6
|
events: any;
|
|
@@ -8,5 +10,7 @@ export default class Game extends EventEmitter {
|
|
|
8
10
|
addObject(_class: any, playerId?: any): any;
|
|
9
11
|
addPlayer(playerClass: any, playerId: any): any;
|
|
10
12
|
addEvent(eventClass: any): any;
|
|
11
|
-
processInput(inputData:
|
|
13
|
+
processInput(inputData: {
|
|
14
|
+
input: Control | Direction;
|
|
15
|
+
}, playerId: string): void;
|
|
12
16
|
}
|
package/lib/Game.js
CHANGED
|
@@ -37,6 +37,7 @@ class Game extends EventEmitter_1.EventEmitter {
|
|
|
37
37
|
processInput(inputData, playerId) {
|
|
38
38
|
const player = this.world.getObject(playerId);
|
|
39
39
|
const { input } = inputData;
|
|
40
|
+
let moving = false;
|
|
40
41
|
if (!player)
|
|
41
42
|
return;
|
|
42
43
|
if (!player.canMove)
|
|
@@ -48,10 +49,11 @@ class Game extends EventEmitter_1.EventEmitter {
|
|
|
48
49
|
input == Player_1.Direction.Right ||
|
|
49
50
|
input == Player_1.Direction.Up ||
|
|
50
51
|
input == Player_1.Direction.Down) {
|
|
52
|
+
moving = true;
|
|
51
53
|
player.moveByDirection(input);
|
|
52
54
|
}
|
|
53
55
|
if (this.side == 'server')
|
|
54
|
-
Plugin_1.RpgPlugin.emit('Server.onInput', [player, inputData], true);
|
|
56
|
+
Plugin_1.RpgPlugin.emit('Server.onInput', [player, Object.assign(Object.assign({}, inputData), { moving })], true);
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
59
|
exports.default = Game;
|
package/lib/Game.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Game.js","sourceRoot":"","sources":["../src/Game.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AACrC,iDAA6C;AAC7C,qCAAqD;AACrD,mCAAiC;AACjC,qCAAoC;AAEpC,MAAqB,IAAK,SAAQ,2BAAY;IAK1C,YAAoB,IAAY;QAC5B,KAAK,EAAE,CAAA;QADS,SAAI,GAAJ,IAAI,CAAQ;QAE5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA,CAAC,+BAA+B;IACpD,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,SAAS,CAAC,MAAM,EAAE,QAAS;QACvB,IAAI,KAAK,CAAA;QACT,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,mBAAW,EAAE,CAAA;QACvC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,EAAE;YACvC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SACrC;aACI;YACD,KAAK,GAAG,MAAM,CAAA;SACjB;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,SAAS,CAAC,WAAW,EAAE,QAAQ;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACpD,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,QAAQ,CAAC,UAAU;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,YAAY,CAAC,
|
|
1
|
+
{"version":3,"file":"Game.js","sourceRoot":"","sources":["../src/Game.ts"],"names":[],"mappings":";;AAAA,mCAAqC;AACrC,iDAA6C;AAC7C,qCAAqD;AACrD,mCAAiC;AACjC,qCAAoC;AAEpC,MAAqB,IAAK,SAAQ,2BAAY;IAK1C,YAAoB,IAAY;QAC5B,KAAK,EAAE,CAAA;QADS,SAAI,GAAJ,IAAI,CAAQ;QAE5B,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA,CAAC,+BAA+B;IACpD,CAAC;IAED,KAAK,CAAC,KAAK;QACP,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACtB,CAAC;IAED,SAAS,CAAC,MAAM,EAAE,QAAS;QACvB,IAAI,KAAK,CAAA;QACT,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,mBAAW,EAAE,CAAA;QACvC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,IAAI,UAAU,EAAE;YACvC,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;SACrC;aACI;YACD,KAAK,GAAG,MAAM,CAAA;SACjB;QACD,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,SAAS,CAAC,WAAW,EAAE,QAAQ;QAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAA;QACpD,OAAO,MAAM,CAAA;IACjB,CAAC;IAED,QAAQ,CAAC,UAAU;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAA;QACxC,OAAO,KAAK,CAAA;IAChB,CAAC;IAED,YAAY,CAAC,SAAyC,EAAE,QAAgB;QACpE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC7C,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAA;QAC3B,IAAI,MAAM,GAAG,KAAK,CAAA;QAElB,IAAI,CAAC,MAAM;YAAE,OAAM;QACnB,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAM;QAE3B,IAAI,KAAK,IAAI,eAAO,CAAC,MAAM,EAAE;YACzB,MAAM,CAAC,oBAAoB,CAAC,wBAAe,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;SAC9D;aACI,IACD,KAAK,IAAI,kBAAS,CAAC,IAAI;YACvB,KAAK,IAAI,kBAAS,CAAC,KAAK;YACxB,KAAK,IAAI,kBAAS,CAAC,EAAE;YACrB,KAAK,IAAI,kBAAS,CAAC,IAAI,EACrB;YACF,MAAM,GAAG,IAAI,CAAA;YACb,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAA;SAChC;QACD,IAAI,IAAI,CAAC,IAAI,IAAI,QAAQ;YAAE,kBAAS,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,MAAM,kCAC5D,SAAS,KACZ,MAAM,IACR,EAAE,IAAI,CAAC,CAAA;IACb,CAAC;CACJ;AA7DD,uBA6DC"}
|
package/lib/Hit.d.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import SAT from 'sat';
|
|
2
2
|
export interface HitObject {
|
|
3
|
-
ellipse
|
|
4
|
-
gid
|
|
3
|
+
ellipse?: boolean;
|
|
4
|
+
gid?: number;
|
|
5
5
|
height: number;
|
|
6
|
-
polygon
|
|
7
|
-
polyline
|
|
8
|
-
properties
|
|
9
|
-
rotation
|
|
10
|
-
visible
|
|
6
|
+
polygon?: any[];
|
|
7
|
+
polyline?: any[];
|
|
8
|
+
properties?: object;
|
|
9
|
+
rotation?: number;
|
|
10
|
+
visible?: boolean;
|
|
11
11
|
width: number;
|
|
12
12
|
x: number;
|
|
13
13
|
y: number;
|
|
@@ -15,12 +15,12 @@ export interface HitObject {
|
|
|
15
15
|
name?: string;
|
|
16
16
|
}
|
|
17
17
|
declare class HitClass {
|
|
18
|
-
createObjectHitbox(x: number, y: number, z: number, w: number, h: number):
|
|
18
|
+
createObjectHitbox(x: number, y: number, z: number, w: number, h: number): SAT.Box;
|
|
19
19
|
getHitbox(obj: HitObject, offset?: {
|
|
20
20
|
x: number;
|
|
21
21
|
y: number;
|
|
22
22
|
}): {
|
|
23
|
-
properties: object;
|
|
23
|
+
properties: object | undefined;
|
|
24
24
|
hitbox: any;
|
|
25
25
|
type: any;
|
|
26
26
|
name: string | undefined;
|
package/lib/Map.d.ts
CHANGED
|
@@ -1,40 +1,237 @@
|
|
|
1
1
|
import { HitObject } from './Hit';
|
|
2
|
-
import {
|
|
3
|
-
interface TileInfo {
|
|
2
|
+
import { RpgShape } from './Shape';
|
|
3
|
+
export interface TileInfo {
|
|
4
4
|
tiles: any[];
|
|
5
5
|
hasCollision: boolean;
|
|
6
6
|
isClimbable?: boolean;
|
|
7
7
|
isOverlay: boolean;
|
|
8
8
|
objectGroups: HitObject[];
|
|
9
|
+
tileIndex: number;
|
|
10
|
+
}
|
|
11
|
+
export interface LayerInfo {
|
|
12
|
+
type: string;
|
|
13
|
+
name: string;
|
|
14
|
+
opacity: number;
|
|
15
|
+
visible: boolean;
|
|
16
|
+
properties: any;
|
|
17
|
+
objects: HitObject[];
|
|
18
|
+
tiles: any[];
|
|
9
19
|
}
|
|
10
20
|
export default class RpgCommonMap {
|
|
21
|
+
/**
|
|
22
|
+
* @title Data of map
|
|
23
|
+
* @prop {object} [data]
|
|
24
|
+
* @readonly
|
|
25
|
+
* @memberof Map
|
|
26
|
+
* @memberof RpgSceneMap
|
|
27
|
+
* */
|
|
11
28
|
data: any;
|
|
12
29
|
width: number;
|
|
13
30
|
height: number;
|
|
31
|
+
/**
|
|
32
|
+
* @title Width of a tile
|
|
33
|
+
* @prop {number} [tileWidth]
|
|
34
|
+
* @readonly
|
|
35
|
+
* @memberof Map
|
|
36
|
+
* @memberof RpgSceneMap
|
|
37
|
+
* */
|
|
14
38
|
tileWidth: number;
|
|
39
|
+
/**
|
|
40
|
+
* @title Height of a tile
|
|
41
|
+
* @prop {number} [tileHeight]
|
|
42
|
+
* @readonly
|
|
43
|
+
* @memberof Map
|
|
44
|
+
* @memberof RpgSceneMap
|
|
45
|
+
* */
|
|
15
46
|
tileHeight: number;
|
|
16
|
-
|
|
47
|
+
/**
|
|
48
|
+
* @title Layers of map
|
|
49
|
+
* @prop {object[]} [layers]
|
|
50
|
+
* @readonly
|
|
51
|
+
* @memberof Map
|
|
52
|
+
* @memberof RpgSceneMap
|
|
53
|
+
* */
|
|
54
|
+
layers: LayerInfo[];
|
|
17
55
|
private shapes;
|
|
18
56
|
static get buffer(): Map<any, any>;
|
|
19
57
|
load(data: any): void;
|
|
58
|
+
/**
|
|
59
|
+
* @title Width of the map in pixels
|
|
60
|
+
* @prop {number} [widthPx]
|
|
61
|
+
* @readonly
|
|
62
|
+
* @memberof Map
|
|
63
|
+
* @memberof RpgSceneMap
|
|
64
|
+
* */
|
|
20
65
|
get widthPx(): number;
|
|
66
|
+
/**
|
|
67
|
+
* @title Height of the map in pixels
|
|
68
|
+
* @prop {number} [heightPx]
|
|
69
|
+
* @readonly
|
|
70
|
+
* @memberof Map
|
|
71
|
+
* @memberof RpgSceneMap
|
|
72
|
+
* */
|
|
21
73
|
get heightPx(): number;
|
|
74
|
+
/**
|
|
75
|
+
* @title The depth of the map in pixels (this is the height of a tile ;))
|
|
76
|
+
* @prop {number} map.zTileHeight
|
|
77
|
+
* @readonly
|
|
78
|
+
* @memberof Map
|
|
79
|
+
* @memberof RpgSceneMap
|
|
80
|
+
* */
|
|
22
81
|
get zTileHeight(): number;
|
|
23
82
|
_extractShapes(): void;
|
|
24
|
-
|
|
83
|
+
/**
|
|
84
|
+
* Find a layer by name. Returns `undefined` is the layer is not found
|
|
85
|
+
|
|
86
|
+
* @title Get Layer by name
|
|
87
|
+
* @method map.getLayerByName(name)
|
|
88
|
+
* @param {string} name layer name
|
|
89
|
+
* @returns {LayerInfo | undefined}
|
|
90
|
+
* @example
|
|
91
|
+
* ```ts
|
|
92
|
+
* const tiles = map.getLayerByName(0, 0)
|
|
93
|
+
* ```
|
|
94
|
+
* @memberof Map
|
|
95
|
+
* @memberof RpgSceneMap
|
|
96
|
+
*/
|
|
97
|
+
getLayerByName(name: string): LayerInfo | undefined;
|
|
98
|
+
/**
|
|
99
|
+
* Create a shape dynamically on the map
|
|
100
|
+
*
|
|
101
|
+
* Object:
|
|
102
|
+
* - (number) x: Position X
|
|
103
|
+
* - (number) y: Position Y
|
|
104
|
+
* - (number) width: Width
|
|
105
|
+
* - (number) height: Height
|
|
106
|
+
* - (object) properties (optionnal):
|
|
107
|
+
* - (number) z: Position Z
|
|
108
|
+
* - (hexadecimal) color: Color (shared with client)
|
|
109
|
+
* - (boolean) collision
|
|
110
|
+
* - You can your own properties
|
|
111
|
+
*
|
|
112
|
+
* @title Create Shape
|
|
113
|
+
* @since 3.0.0-beta.3
|
|
114
|
+
* @method map.createShape(obj)
|
|
115
|
+
* @param {object} obj
|
|
116
|
+
* @returns {RpgShape}
|
|
117
|
+
* @memberof Map
|
|
118
|
+
*/
|
|
119
|
+
createShape(obj: HitObject): RpgShape;
|
|
120
|
+
/**
|
|
121
|
+
* Delete a shape
|
|
122
|
+
*
|
|
123
|
+
* @title Get Shapes
|
|
124
|
+
* @method map.removeShape(name)
|
|
125
|
+
* @param {string} name Name of shape
|
|
126
|
+
* @returns {void}
|
|
127
|
+
* @memberof Map
|
|
128
|
+
*/
|
|
25
129
|
removeShape(name: string): void;
|
|
26
|
-
|
|
27
|
-
|
|
130
|
+
/**
|
|
131
|
+
* Return all shapes on the map
|
|
132
|
+
*
|
|
133
|
+
* @title Get Shapes
|
|
134
|
+
* @method map.getShapes()
|
|
135
|
+
* @returns {RpgShape[]}
|
|
136
|
+
* @memberof Map
|
|
137
|
+
* @memberof RpgSceneMap
|
|
138
|
+
*/
|
|
139
|
+
getShapes(): RpgShape[];
|
|
140
|
+
/**
|
|
141
|
+
* Returns a shape by its name. Returns undefined is nothing is found
|
|
142
|
+
*
|
|
143
|
+
* @title Get Shape by name
|
|
144
|
+
* @method map.getShape(name)
|
|
145
|
+
* @param {string} name Name of shape
|
|
146
|
+
* @returns {RpgShape[] | undefined}
|
|
147
|
+
* @memberof Map
|
|
148
|
+
* @memberof RpgSceneMap
|
|
149
|
+
*/
|
|
150
|
+
getShape(name: string): RpgShape | undefined;
|
|
151
|
+
getPositionByShape(filter: (shape: RpgShape) => {}): {
|
|
28
152
|
x: number;
|
|
29
153
|
y: number;
|
|
30
154
|
z: number;
|
|
31
155
|
} | null;
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
156
|
+
setTile(x: number, y: number, layerFilter: string | ((layer: any) => boolean), tileInfo: any): {
|
|
157
|
+
x: number;
|
|
158
|
+
y: number;
|
|
159
|
+
tiles: {
|
|
160
|
+
[tileIndex: number]: object;
|
|
161
|
+
};
|
|
162
|
+
};
|
|
163
|
+
/**
|
|
164
|
+
* Get the tile index on the tileset
|
|
165
|
+
*
|
|
166
|
+
* @title Get index of tile
|
|
167
|
+
* @method map.getTileIndex(x,y)
|
|
168
|
+
* @param {number} x Position X
|
|
169
|
+
* @param {number} x Position Y
|
|
170
|
+
* @returns {number}
|
|
171
|
+
* @memberof Map
|
|
172
|
+
* @memberof RpgSceneMap
|
|
173
|
+
*/
|
|
174
|
+
getTileIndex(x: number, y: number, [z]?: [number]): number;
|
|
175
|
+
/**
|
|
176
|
+
* Retrieves tiles according to its index
|
|
177
|
+
|
|
178
|
+
* @title Get tile by index
|
|
179
|
+
* @method map.getTileByIndex(tileIndex)
|
|
180
|
+
* @param {number} tileIndex tile index
|
|
181
|
+
* @returns {TileInfo}
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* const index = map.getTileIndex(0, 0)
|
|
185
|
+
* const tiles = map.getTileByIndex(index)
|
|
186
|
+
* ```
|
|
187
|
+
* @memberof Map
|
|
188
|
+
* @memberof RpgSceneMap
|
|
189
|
+
*/
|
|
190
|
+
getTileByIndex(tileIndex: number, zPlayer?: [number, number]): TileInfo;
|
|
191
|
+
/**
|
|
192
|
+
* Find the point of origin (top left) of a tile. Of course, its position depends on the size of the tile
|
|
193
|
+
|
|
194
|
+
* @title Get origin position of tile
|
|
195
|
+
* @method map.getTileOriginPosition(x,y)
|
|
196
|
+
* @param {number} x Position X
|
|
197
|
+
* @param {number} x Position Y
|
|
198
|
+
* @returns { {x: number, y: number }}
|
|
199
|
+
* @example
|
|
200
|
+
* ```ts
|
|
201
|
+
* // If the size of a tile is 32x32px
|
|
202
|
+
* const position = map.getTileOriginPosition(35, 12)
|
|
203
|
+
* console.log(position) // { x: 32, y: 0 }
|
|
204
|
+
* ```
|
|
205
|
+
* @memberof Map
|
|
206
|
+
* @memberof RpgSceneMap
|
|
207
|
+
*/
|
|
208
|
+
getTileOriginPosition(x: number, y: number): {
|
|
35
209
|
x: number;
|
|
36
210
|
y: number;
|
|
37
211
|
};
|
|
38
|
-
|
|
212
|
+
/**
|
|
213
|
+
* Recover tiles according to a position
|
|
214
|
+
|
|
215
|
+
* @title Get tile by position
|
|
216
|
+
* @method map.getTileByPosition(x,y)
|
|
217
|
+
* @param {number} x Position X
|
|
218
|
+
* @param {number} x Position Y
|
|
219
|
+
* @returns {TileInfo}
|
|
220
|
+
* @example
|
|
221
|
+
* ```ts
|
|
222
|
+
* const tiles = map.getTileByPosition(0, 0)
|
|
223
|
+
* ```
|
|
224
|
+
* @memberof Map
|
|
225
|
+
* @memberof RpgSceneMap
|
|
226
|
+
*/
|
|
227
|
+
getTileByPosition(x: number, y: number, z?: [number, number]): TileInfo;
|
|
228
|
+
/**
|
|
229
|
+
* Get tile and verify collision with hitbox
|
|
230
|
+
* @param hitbox
|
|
231
|
+
* @param x
|
|
232
|
+
* @param y
|
|
233
|
+
* @param z
|
|
234
|
+
* @returns TileInfo
|
|
235
|
+
*/
|
|
236
|
+
getTile(hitbox: any, x: number, y: number, z?: [number, number]): TileInfo;
|
|
39
237
|
}
|
|
40
|
-
export {};
|
package/lib/Map.js
CHANGED
|
@@ -2,13 +2,35 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const Utils_1 = require("./Utils");
|
|
4
4
|
const Shape_1 = require("./Shape");
|
|
5
|
+
const Hit_1 = require("./Hit");
|
|
5
6
|
const buffer = new Map();
|
|
6
7
|
class RpgCommonMap {
|
|
7
8
|
constructor() {
|
|
8
9
|
this.width = 0;
|
|
9
10
|
this.height = 0;
|
|
11
|
+
/**
|
|
12
|
+
* @title Width of a tile
|
|
13
|
+
* @prop {number} [tileWidth]
|
|
14
|
+
* @readonly
|
|
15
|
+
* @memberof Map
|
|
16
|
+
* @memberof RpgSceneMap
|
|
17
|
+
* */
|
|
10
18
|
this.tileWidth = 0;
|
|
19
|
+
/**
|
|
20
|
+
* @title Height of a tile
|
|
21
|
+
* @prop {number} [tileHeight]
|
|
22
|
+
* @readonly
|
|
23
|
+
* @memberof Map
|
|
24
|
+
* @memberof RpgSceneMap
|
|
25
|
+
* */
|
|
11
26
|
this.tileHeight = 0;
|
|
27
|
+
/**
|
|
28
|
+
* @title Layers of map
|
|
29
|
+
* @prop {object[]} [layers]
|
|
30
|
+
* @readonly
|
|
31
|
+
* @memberof Map
|
|
32
|
+
* @memberof RpgSceneMap
|
|
33
|
+
* */
|
|
12
34
|
this.layers = [];
|
|
13
35
|
this.shapes = [];
|
|
14
36
|
}
|
|
@@ -24,12 +46,33 @@ class RpgCommonMap {
|
|
|
24
46
|
this.layers = data.layers;
|
|
25
47
|
this._extractShapes();
|
|
26
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* @title Width of the map in pixels
|
|
51
|
+
* @prop {number} [widthPx]
|
|
52
|
+
* @readonly
|
|
53
|
+
* @memberof Map
|
|
54
|
+
* @memberof RpgSceneMap
|
|
55
|
+
* */
|
|
27
56
|
get widthPx() {
|
|
28
57
|
return this.width * this.tileWidth;
|
|
29
58
|
}
|
|
59
|
+
/**
|
|
60
|
+
* @title Height of the map in pixels
|
|
61
|
+
* @prop {number} [heightPx]
|
|
62
|
+
* @readonly
|
|
63
|
+
* @memberof Map
|
|
64
|
+
* @memberof RpgSceneMap
|
|
65
|
+
* */
|
|
30
66
|
get heightPx() {
|
|
31
67
|
return this.height * this.tileHeight;
|
|
32
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* @title The depth of the map in pixels (this is the height of a tile ;))
|
|
71
|
+
* @prop {number} map.zTileHeight
|
|
72
|
+
* @readonly
|
|
73
|
+
* @memberof Map
|
|
74
|
+
* @memberof RpgSceneMap
|
|
75
|
+
* */
|
|
33
76
|
get zTileHeight() {
|
|
34
77
|
return this.tileHeight;
|
|
35
78
|
}
|
|
@@ -42,19 +85,90 @@ class RpgCommonMap {
|
|
|
42
85
|
}
|
|
43
86
|
}
|
|
44
87
|
}
|
|
88
|
+
/**
|
|
89
|
+
* Find a layer by name. Returns `undefined` is the layer is not found
|
|
90
|
+
|
|
91
|
+
* @title Get Layer by name
|
|
92
|
+
* @method map.getLayerByName(name)
|
|
93
|
+
* @param {string} name layer name
|
|
94
|
+
* @returns {LayerInfo | undefined}
|
|
95
|
+
* @example
|
|
96
|
+
* ```ts
|
|
97
|
+
* const tiles = map.getLayerByName(0, 0)
|
|
98
|
+
* ```
|
|
99
|
+
* @memberof Map
|
|
100
|
+
* @memberof RpgSceneMap
|
|
101
|
+
*/
|
|
102
|
+
getLayerByName(name) {
|
|
103
|
+
return this.layers.find(layer => layer.name == name);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Create a shape dynamically on the map
|
|
107
|
+
*
|
|
108
|
+
* Object:
|
|
109
|
+
* - (number) x: Position X
|
|
110
|
+
* - (number) y: Position Y
|
|
111
|
+
* - (number) width: Width
|
|
112
|
+
* - (number) height: Height
|
|
113
|
+
* - (object) properties (optionnal):
|
|
114
|
+
* - (number) z: Position Z
|
|
115
|
+
* - (hexadecimal) color: Color (shared with client)
|
|
116
|
+
* - (boolean) collision
|
|
117
|
+
* - You can your own properties
|
|
118
|
+
*
|
|
119
|
+
* @title Create Shape
|
|
120
|
+
* @since 3.0.0-beta.3
|
|
121
|
+
* @method map.createShape(obj)
|
|
122
|
+
* @param {object} obj
|
|
123
|
+
* @returns {RpgShape}
|
|
124
|
+
* @memberof Map
|
|
125
|
+
*/
|
|
45
126
|
createShape(obj) {
|
|
46
127
|
obj.name = (obj.name || Utils_1.generateUID());
|
|
47
|
-
|
|
128
|
+
obj.properties = obj.properties || {};
|
|
129
|
+
const shape = new Shape_1.RpgShape(obj);
|
|
48
130
|
this.shapes.push(shape);
|
|
49
|
-
|
|
131
|
+
// trick to sync with client
|
|
132
|
+
return this.shapes[this.shapes.length - 1];
|
|
50
133
|
}
|
|
134
|
+
/**
|
|
135
|
+
* Delete a shape
|
|
136
|
+
*
|
|
137
|
+
* @title Get Shapes
|
|
138
|
+
* @method map.removeShape(name)
|
|
139
|
+
* @param {string} name Name of shape
|
|
140
|
+
* @returns {void}
|
|
141
|
+
* @memberof Map
|
|
142
|
+
*/
|
|
51
143
|
removeShape(name) {
|
|
52
144
|
// TODO: out players after delete shape
|
|
53
145
|
this.shapes = this.shapes.filter(shape => shape.name != name);
|
|
54
146
|
}
|
|
147
|
+
/**
|
|
148
|
+
* Return all shapes on the map
|
|
149
|
+
*
|
|
150
|
+
* @title Get Shapes
|
|
151
|
+
* @method map.getShapes()
|
|
152
|
+
* @returns {RpgShape[]}
|
|
153
|
+
* @memberof Map
|
|
154
|
+
* @memberof RpgSceneMap
|
|
155
|
+
*/
|
|
55
156
|
getShapes() {
|
|
56
157
|
return this.shapes;
|
|
57
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Returns a shape by its name. Returns undefined is nothing is found
|
|
161
|
+
*
|
|
162
|
+
* @title Get Shape by name
|
|
163
|
+
* @method map.getShape(name)
|
|
164
|
+
* @param {string} name Name of shape
|
|
165
|
+
* @returns {RpgShape[] | undefined}
|
|
166
|
+
* @memberof Map
|
|
167
|
+
* @memberof RpgSceneMap
|
|
168
|
+
*/
|
|
169
|
+
getShape(name) {
|
|
170
|
+
return this.shapes.find(shape => shape.name == name);
|
|
171
|
+
}
|
|
58
172
|
getPositionByShape(filter) {
|
|
59
173
|
const startsFind = this.getShapes().filter(filter);
|
|
60
174
|
if (startsFind.length) {
|
|
@@ -63,10 +177,58 @@ class RpgCommonMap {
|
|
|
63
177
|
}
|
|
64
178
|
return null;
|
|
65
179
|
}
|
|
66
|
-
|
|
180
|
+
setTile(x, y, layerFilter, tileInfo) {
|
|
181
|
+
const tileIndex = this.getTileIndex(x, y);
|
|
182
|
+
let fnFilter;
|
|
183
|
+
let tilesEdited = {};
|
|
184
|
+
if (Utils_1.isString(layerFilter)) {
|
|
185
|
+
fnFilter = (layer) => layer.name == layerFilter;
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
fnFilter = layerFilter;
|
|
189
|
+
}
|
|
190
|
+
for (let layer of this.layers) {
|
|
191
|
+
if (!fnFilter(layer))
|
|
192
|
+
continue;
|
|
193
|
+
tilesEdited[layer.name] = tileInfo;
|
|
194
|
+
layer.tiles[tileIndex] = tilesEdited[layer.name];
|
|
195
|
+
}
|
|
196
|
+
return {
|
|
197
|
+
x,
|
|
198
|
+
y,
|
|
199
|
+
tiles: tilesEdited
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Get the tile index on the tileset
|
|
204
|
+
*
|
|
205
|
+
* @title Get index of tile
|
|
206
|
+
* @method map.getTileIndex(x,y)
|
|
207
|
+
* @param {number} x Position X
|
|
208
|
+
* @param {number} x Position Y
|
|
209
|
+
* @returns {number}
|
|
210
|
+
* @memberof Map
|
|
211
|
+
* @memberof RpgSceneMap
|
|
212
|
+
*/
|
|
213
|
+
getTileIndex(x, y, [z] = [0]) {
|
|
67
214
|
return this.width * Math.floor((y - z) / this.tileHeight) + Math.floor(x / this.tileWidth);
|
|
68
215
|
}
|
|
69
|
-
|
|
216
|
+
/**
|
|
217
|
+
* Retrieves tiles according to its index
|
|
218
|
+
|
|
219
|
+
* @title Get tile by index
|
|
220
|
+
* @method map.getTileByIndex(tileIndex)
|
|
221
|
+
* @param {number} tileIndex tile index
|
|
222
|
+
* @returns {TileInfo}
|
|
223
|
+
* @example
|
|
224
|
+
* ```ts
|
|
225
|
+
* const index = map.getTileIndex(0, 0)
|
|
226
|
+
* const tiles = map.getTileByIndex(index)
|
|
227
|
+
* ```
|
|
228
|
+
* @memberof Map
|
|
229
|
+
* @memberof RpgSceneMap
|
|
230
|
+
*/
|
|
231
|
+
getTileByIndex(tileIndex, zPlayer = [0, 0]) {
|
|
70
232
|
const tiles = [];
|
|
71
233
|
for (let layer of this.layers) {
|
|
72
234
|
if (layer.type != 'tile') {
|
|
@@ -76,7 +238,9 @@ class RpgCommonMap {
|
|
|
76
238
|
if (!_tiles) {
|
|
77
239
|
continue;
|
|
78
240
|
}
|
|
79
|
-
|
|
241
|
+
if (!_tiles.properties)
|
|
242
|
+
_tiles.properties = {};
|
|
243
|
+
const zLayer = layer.properties ? layer.properties.z : 0;
|
|
80
244
|
const zTile = _tiles.properties.z;
|
|
81
245
|
let z, zIntersection;
|
|
82
246
|
if (zLayer !== undefined) {
|
|
@@ -103,7 +267,8 @@ class RpgCommonMap {
|
|
|
103
267
|
tiles,
|
|
104
268
|
hasCollision: true,
|
|
105
269
|
isOverlay: false,
|
|
106
|
-
objectGroups: []
|
|
270
|
+
objectGroups: [],
|
|
271
|
+
tileIndex
|
|
107
272
|
};
|
|
108
273
|
}
|
|
109
274
|
const hasCollision = getLastTile.properties.collision;
|
|
@@ -115,19 +280,77 @@ class RpgCommonMap {
|
|
|
115
280
|
hasCollision,
|
|
116
281
|
isOverlay,
|
|
117
282
|
objectGroups,
|
|
118
|
-
isClimbable
|
|
283
|
+
isClimbable,
|
|
284
|
+
tileIndex
|
|
119
285
|
};
|
|
120
286
|
}
|
|
287
|
+
/**
|
|
288
|
+
* Find the point of origin (top left) of a tile. Of course, its position depends on the size of the tile
|
|
289
|
+
|
|
290
|
+
* @title Get origin position of tile
|
|
291
|
+
* @method map.getTileOriginPosition(x,y)
|
|
292
|
+
* @param {number} x Position X
|
|
293
|
+
* @param {number} x Position Y
|
|
294
|
+
* @returns { {x: number, y: number }}
|
|
295
|
+
* @example
|
|
296
|
+
* ```ts
|
|
297
|
+
* // If the size of a tile is 32x32px
|
|
298
|
+
* const position = map.getTileOriginPosition(35, 12)
|
|
299
|
+
* console.log(position) // { x: 32, y: 0 }
|
|
300
|
+
* ```
|
|
301
|
+
* @memberof Map
|
|
302
|
+
* @memberof RpgSceneMap
|
|
303
|
+
*/
|
|
121
304
|
getTileOriginPosition(x, y) {
|
|
122
305
|
return {
|
|
123
306
|
x: Math.floor(x / this.tileWidth) * this.tileWidth,
|
|
124
307
|
y: Math.floor(y / this.tileHeight) * this.tileHeight
|
|
125
308
|
};
|
|
126
309
|
}
|
|
127
|
-
|
|
128
|
-
|
|
310
|
+
/**
|
|
311
|
+
* Recover tiles according to a position
|
|
312
|
+
|
|
313
|
+
* @title Get tile by position
|
|
314
|
+
* @method map.getTileByPosition(x,y)
|
|
315
|
+
* @param {number} x Position X
|
|
316
|
+
* @param {number} x Position Y
|
|
317
|
+
* @returns {TileInfo}
|
|
318
|
+
* @example
|
|
319
|
+
* ```ts
|
|
320
|
+
* const tiles = map.getTileByPosition(0, 0)
|
|
321
|
+
* ```
|
|
322
|
+
* @memberof Map
|
|
323
|
+
* @memberof RpgSceneMap
|
|
324
|
+
*/
|
|
325
|
+
getTileByPosition(x, y, z = [0, 0]) {
|
|
326
|
+
const tileIndex = this.getTileIndex(x, y, [z[0]]);
|
|
129
327
|
return this.getTileByIndex(tileIndex, z);
|
|
130
328
|
}
|
|
329
|
+
/**
|
|
330
|
+
* Get tile and verify collision with hitbox
|
|
331
|
+
* @param hitbox
|
|
332
|
+
* @param x
|
|
333
|
+
* @param y
|
|
334
|
+
* @param z
|
|
335
|
+
* @returns TileInfo
|
|
336
|
+
*/
|
|
337
|
+
getTile(hitbox, x, y, z = [0, 0]) {
|
|
338
|
+
const tile = this.getTileByPosition(x, y, z);
|
|
339
|
+
const tilePos = this.getTileOriginPosition(x, y);
|
|
340
|
+
if (tile.objectGroups) {
|
|
341
|
+
for (let object of tile.objectGroups) {
|
|
342
|
+
const hit = Hit_1.Hit.getHitbox(object, {
|
|
343
|
+
x: tilePos.x,
|
|
344
|
+
y: tilePos.y
|
|
345
|
+
});
|
|
346
|
+
const collided = Hit_1.Hit.testPolyCollision(hit.type, hit.hitbox, hitbox);
|
|
347
|
+
if (collided) {
|
|
348
|
+
tile.hasCollision = true;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return tile;
|
|
353
|
+
}
|
|
131
354
|
}
|
|
132
355
|
exports.default = RpgCommonMap;
|
|
133
356
|
//# sourceMappingURL=Map.js.map
|