@rpgjs/server 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/Game/Map.d.ts +87 -8
- package/lib/Game/Map.js +99 -10
- package/lib/Game/Map.js.map +1 -1
- package/lib/Player/ElementManager.d.ts +1 -1
- package/lib/Player/Player.d.ts +65 -38
- package/lib/Player/Player.js +87 -44
- package/lib/Player/Player.js.map +1 -1
- package/lib/RpgServer.d.ts +59 -4
- package/lib/Scenes/Map.d.ts +31 -1
- package/lib/Scenes/Map.js +36 -11
- package/lib/Scenes/Map.js.map +1 -1
- package/lib/decorators/map.d.ts +4 -5
- package/lib/decorators/map.js +4 -0
- package/lib/decorators/map.js.map +1 -1
- package/lib/entry-point.js +6 -2
- package/lib/entry-point.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +3 -1
- package/lib/index.js.map +1 -1
- package/lib/server.d.ts +50 -2
- package/lib/server.js +62 -4
- package/lib/server.js.map +1 -1
- package/package.json +5 -5
package/lib/Game/Map.d.ts
CHANGED
|
@@ -1,32 +1,112 @@
|
|
|
1
|
-
import { RpgCommonMap } from '@rpgjs/common';
|
|
1
|
+
import { RpgCommonMap, RpgShape } from '@rpgjs/common';
|
|
2
2
|
import * as Kompute from 'kompute/build/Kompute';
|
|
3
3
|
import { EventOptions } from '../decorators/event';
|
|
4
4
|
import { EventMode, RpgEvent } from '../Event';
|
|
5
5
|
import { RpgPlayer } from '../Player/Player';
|
|
6
|
-
|
|
6
|
+
import { RpgServerEngine } from '../server';
|
|
7
|
+
export declare type EventPosOption = {
|
|
7
8
|
x: number;
|
|
8
9
|
y: number;
|
|
10
|
+
z?: number;
|
|
9
11
|
event: EventOptions;
|
|
10
|
-
}
|
|
12
|
+
};
|
|
13
|
+
export declare type EventOption = EventPosOption | EventOptions;
|
|
11
14
|
export declare class RpgMap extends RpgCommonMap {
|
|
12
15
|
private _server;
|
|
13
16
|
_events: EventOption[];
|
|
14
|
-
|
|
17
|
+
/**
|
|
18
|
+
* @title map id
|
|
19
|
+
* @readonly
|
|
20
|
+
* @prop {string} [id]
|
|
21
|
+
* @memberof Map
|
|
22
|
+
* */
|
|
23
|
+
readonly id: string;
|
|
15
24
|
file: any;
|
|
25
|
+
/**
|
|
26
|
+
* @title event list
|
|
27
|
+
* @prop { { [eventId: string]: RpgEvent } } [events]
|
|
28
|
+
* @memberof Map
|
|
29
|
+
* */
|
|
16
30
|
events: {
|
|
17
31
|
[eventId: string]: RpgEvent;
|
|
18
32
|
};
|
|
19
33
|
kWorld: Kompute;
|
|
20
34
|
entityManager: any;
|
|
21
|
-
constructor(_server:
|
|
35
|
+
constructor(_server: RpgServerEngine);
|
|
22
36
|
load(): Promise<void>;
|
|
23
37
|
get game(): any;
|
|
24
38
|
onLoad(): void;
|
|
25
39
|
onJoin(player: RpgPlayer): void;
|
|
26
40
|
onLeave(player: RpgPlayer): void;
|
|
27
41
|
autoLoadEvent(): void;
|
|
28
|
-
|
|
29
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Edit a tile on the map. All players on the map will see the modified tile
|
|
44
|
+
*
|
|
45
|
+
*
|
|
46
|
+
* @title Change Tile in map
|
|
47
|
+
* @since 3.0.0-beta.4
|
|
48
|
+
* @method map.setTile(x,y,layer,tileInfo)
|
|
49
|
+
* @param {number} x Position X
|
|
50
|
+
* @param {number} y Position Y
|
|
51
|
+
* @param {string | ((layer: any) => boolean)} layer Name of the layer where you want to put a tile. OYou can also put a function that will act as a filter. The first parameter is the layer and you return a boolean to indicate if you modify the tile of this layer or not
|
|
52
|
+
* @param {object} tileInfo Object with the following properties:
|
|
53
|
+
* - {number} gid: The tile number in tileset (from 1)
|
|
54
|
+
* - {object} properties Property of the tile. You own object. To set a collision, set the `collision:true` property
|
|
55
|
+
* @example
|
|
56
|
+
* ```ts
|
|
57
|
+
* map.setTile(15, 18, 'mylayer', { gid: 2 })
|
|
58
|
+
* ```
|
|
59
|
+
* @returns {void}
|
|
60
|
+
* @memberof Map
|
|
61
|
+
*/
|
|
62
|
+
setTile(x: number, y: number, layerFilter: string | ((layer: any) => boolean), tileInfo: {
|
|
63
|
+
gid: number;
|
|
64
|
+
properties?: object;
|
|
65
|
+
}): any;
|
|
66
|
+
getEventShape(eventName: string): RpgShape | undefined;
|
|
67
|
+
/**
|
|
68
|
+
* Dynamically create an event in Shared mode
|
|
69
|
+
*
|
|
70
|
+
* ```ts
|
|
71
|
+
* @EventData({
|
|
72
|
+
* name: 'EV-1'
|
|
73
|
+
* })
|
|
74
|
+
* class MyEvent extends RpgEvent {
|
|
75
|
+
* onAction() {
|
|
76
|
+
* console.log('ok')
|
|
77
|
+
* }
|
|
78
|
+
* }
|
|
79
|
+
*
|
|
80
|
+
* map.createDynamicEvent({
|
|
81
|
+
* x: 100,
|
|
82
|
+
* y: 100,
|
|
83
|
+
* event: MyEvent
|
|
84
|
+
* })
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* You can also put an array of objects to create several events at once
|
|
88
|
+
*
|
|
89
|
+
* @title Create Dynamic Event
|
|
90
|
+
* @since 3.0.0-beta.4
|
|
91
|
+
* @method map.createDynamicEvent(eventObj|eventObj[])
|
|
92
|
+
* @param { { x: number, y: number, z?: number, event: eventClass } } eventsList
|
|
93
|
+
* @returns { { [eventId: string]: RpgEvent } }
|
|
94
|
+
* @memberof Map
|
|
95
|
+
*/
|
|
96
|
+
createDynamicEvent(eventsList: EventPosOption | EventPosOption[]): {
|
|
97
|
+
[eventId: string]: RpgEvent;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Removes an event from the map. Returns false if the event is not found
|
|
101
|
+
* @title Remove Event
|
|
102
|
+
* @since 3.0.0-beta.4
|
|
103
|
+
* @method map.removeEvent(eventId)
|
|
104
|
+
* @param {string} eventId Event Name
|
|
105
|
+
* @returns {boolean}
|
|
106
|
+
* @memberof Map
|
|
107
|
+
*/
|
|
108
|
+
removeEvent(eventId: string): boolean;
|
|
109
|
+
createEvent(obj: EventPosOption, mode: EventMode, shape?: any): RpgEvent | null;
|
|
30
110
|
createEvents(eventsList: EventOption[], mode: EventMode): {
|
|
31
111
|
[eventId: string]: RpgEvent;
|
|
32
112
|
};
|
|
@@ -37,4 +117,3 @@ export interface RpgMap {
|
|
|
37
117
|
sounds: string[];
|
|
38
118
|
$setSchema: (schema: any) => void;
|
|
39
119
|
}
|
|
40
|
-
export {};
|
package/lib/Game/Map.js
CHANGED
|
@@ -72,6 +72,11 @@ class RpgMap extends common_1.RpgCommonMap {
|
|
|
72
72
|
constructor(_server) {
|
|
73
73
|
super();
|
|
74
74
|
this._server = _server;
|
|
75
|
+
/**
|
|
76
|
+
* @title event list
|
|
77
|
+
* @prop { { [eventId: string]: RpgEvent } } [events]
|
|
78
|
+
* @memberof Map
|
|
79
|
+
* */
|
|
75
80
|
this.events = {};
|
|
76
81
|
this.entityManager = new YUKA.EntityManager();
|
|
77
82
|
}
|
|
@@ -86,13 +91,7 @@ class RpgMap extends common_1.RpgCommonMap {
|
|
|
86
91
|
const data = yield this.parseFile();
|
|
87
92
|
_super.load.call(this, data);
|
|
88
93
|
common_1.RpgCommonMap.buffer.set(this.id, this);
|
|
89
|
-
|
|
90
|
-
this.events = this.createEvents(this._events, Event_1.EventMode.Shared);
|
|
91
|
-
// TODO
|
|
92
|
-
// this.autoLoadEvent()
|
|
93
|
-
for (let key in this.events) {
|
|
94
|
-
this.events[key].execMethod('onInit');
|
|
95
|
-
}
|
|
94
|
+
this.createDynamicEvent(this._events);
|
|
96
95
|
this.onLoad();
|
|
97
96
|
});
|
|
98
97
|
}
|
|
@@ -107,6 +106,11 @@ class RpgMap extends common_1.RpgCommonMap {
|
|
|
107
106
|
player.stopBehavior();
|
|
108
107
|
this.entityManager.remove(player.steerable);
|
|
109
108
|
this.getShapes().forEach(shape => shape.out(player));
|
|
109
|
+
const events = this.game.world.getObjectsOfGroup(this.id, player);
|
|
110
|
+
for (let event of events) {
|
|
111
|
+
player.getShapes().forEach(shape => shape.out(event));
|
|
112
|
+
event.getShapes().forEach(shape => shape.out(player));
|
|
113
|
+
}
|
|
110
114
|
}
|
|
111
115
|
autoLoadEvent() {
|
|
112
116
|
this.getShapes().forEach(shape => {
|
|
@@ -130,19 +134,104 @@ class RpgMap extends common_1.RpgCommonMap {
|
|
|
130
134
|
}
|
|
131
135
|
});
|
|
132
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Edit a tile on the map. All players on the map will see the modified tile
|
|
139
|
+
*
|
|
140
|
+
*
|
|
141
|
+
* @title Change Tile in map
|
|
142
|
+
* @since 3.0.0-beta.4
|
|
143
|
+
* @method map.setTile(x,y,layer,tileInfo)
|
|
144
|
+
* @param {number} x Position X
|
|
145
|
+
* @param {number} y Position Y
|
|
146
|
+
* @param {string | ((layer: any) => boolean)} layer Name of the layer where you want to put a tile. OYou can also put a function that will act as a filter. The first parameter is the layer and you return a boolean to indicate if you modify the tile of this layer or not
|
|
147
|
+
* @param {object} tileInfo Object with the following properties:
|
|
148
|
+
* - {number} gid: The tile number in tileset (from 1)
|
|
149
|
+
* - {object} properties Property of the tile. You own object. To set a collision, set the `collision:true` property
|
|
150
|
+
* @example
|
|
151
|
+
* ```ts
|
|
152
|
+
* map.setTile(15, 18, 'mylayer', { gid: 2 })
|
|
153
|
+
* ```
|
|
154
|
+
* @returns {void}
|
|
155
|
+
* @memberof Map
|
|
156
|
+
*/
|
|
157
|
+
setTile(x, y, layerFilter, tileInfo) {
|
|
158
|
+
const tiles = super.setTile(x, y, layerFilter, tileInfo);
|
|
159
|
+
const players = Object.values(this['users']);
|
|
160
|
+
for (let player of players) {
|
|
161
|
+
player.emit('changeTile', tiles);
|
|
162
|
+
}
|
|
163
|
+
return tiles;
|
|
164
|
+
}
|
|
133
165
|
// TODO: return type
|
|
134
166
|
getEventShape(eventName) {
|
|
135
167
|
return this.getShapes().find(shape => shape.name == eventName);
|
|
136
168
|
}
|
|
169
|
+
/**
|
|
170
|
+
* Dynamically create an event in Shared mode
|
|
171
|
+
*
|
|
172
|
+
* ```ts
|
|
173
|
+
* @EventData({
|
|
174
|
+
* name: 'EV-1'
|
|
175
|
+
* })
|
|
176
|
+
* class MyEvent extends RpgEvent {
|
|
177
|
+
* onAction() {
|
|
178
|
+
* console.log('ok')
|
|
179
|
+
* }
|
|
180
|
+
* }
|
|
181
|
+
*
|
|
182
|
+
* map.createDynamicEvent({
|
|
183
|
+
* x: 100,
|
|
184
|
+
* y: 100,
|
|
185
|
+
* event: MyEvent
|
|
186
|
+
* })
|
|
187
|
+
* ```
|
|
188
|
+
*
|
|
189
|
+
* You can also put an array of objects to create several events at once
|
|
190
|
+
*
|
|
191
|
+
* @title Create Dynamic Event
|
|
192
|
+
* @since 3.0.0-beta.4
|
|
193
|
+
* @method map.createDynamicEvent(eventObj|eventObj[])
|
|
194
|
+
* @param { { x: number, y: number, z?: number, event: eventClass } } eventsList
|
|
195
|
+
* @returns { { [eventId: string]: RpgEvent } }
|
|
196
|
+
* @memberof Map
|
|
197
|
+
*/
|
|
198
|
+
createDynamicEvent(eventsList) {
|
|
199
|
+
if (!eventsList)
|
|
200
|
+
return {};
|
|
201
|
+
if (!common_1.Utils.isArray(eventsList)) {
|
|
202
|
+
eventsList = [eventsList];
|
|
203
|
+
}
|
|
204
|
+
const events = this.createEvents(eventsList, Event_1.EventMode.Shared);
|
|
205
|
+
for (let key in events) {
|
|
206
|
+
this.events[key] = events[key];
|
|
207
|
+
this.events[key].execMethod('onInit');
|
|
208
|
+
}
|
|
209
|
+
return events;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Removes an event from the map. Returns false if the event is not found
|
|
213
|
+
* @title Remove Event
|
|
214
|
+
* @since 3.0.0-beta.4
|
|
215
|
+
* @method map.removeEvent(eventId)
|
|
216
|
+
* @param {string} eventId Event Name
|
|
217
|
+
* @returns {boolean}
|
|
218
|
+
* @memberof Map
|
|
219
|
+
*/
|
|
220
|
+
removeEvent(eventId) {
|
|
221
|
+
if (!this.events[eventId])
|
|
222
|
+
return false;
|
|
223
|
+
delete this.events[eventId];
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
137
226
|
createEvent(obj, mode, shape) {
|
|
138
227
|
let event, position;
|
|
139
228
|
// We retrieve the information of the event ([Event] or [{event: Event, x: number, y: number}])
|
|
140
|
-
if (obj
|
|
229
|
+
if (obj.x === undefined) {
|
|
141
230
|
event = obj;
|
|
142
231
|
}
|
|
143
232
|
else {
|
|
144
|
-
event = obj
|
|
145
|
-
position = { x: obj
|
|
233
|
+
event = obj.event;
|
|
234
|
+
position = { x: obj.x, y: obj.y, z: 0 };
|
|
146
235
|
}
|
|
147
236
|
// The event is ignored if the mode is different.
|
|
148
237
|
if (event.mode != mode) {
|
package/lib/Game/Map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Map.js","sourceRoot":"","sources":["../../src/Game/Map.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"Map.js","sourceRoot":"","sources":["../../src/Game/Map.ts"],"names":[],"mappings":"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"}
|
|
@@ -93,7 +93,7 @@ export declare class ElementManager extends ItemFixture {
|
|
|
93
93
|
* @readonly
|
|
94
94
|
* @memberof ElementManager
|
|
95
95
|
* */
|
|
96
|
-
get elements():
|
|
96
|
+
get elements(): any[];
|
|
97
97
|
coefficientElements(otherPlayer: RpgPlayer): number;
|
|
98
98
|
}
|
|
99
99
|
export interface ElementManager {
|
package/lib/Player/Player.d.ts
CHANGED
|
@@ -13,11 +13,13 @@ import { VariableManager } from './VariableManager';
|
|
|
13
13
|
import { MoveManager } from './MoveManager';
|
|
14
14
|
import { BattleManager } from './BattleManager';
|
|
15
15
|
import { BehaviorManager } from './BehaviorManager';
|
|
16
|
-
|
|
16
|
+
import { EventPosOption } from '../Game/Map';
|
|
17
|
+
import { RpgEvent } from '..';
|
|
18
|
+
export interface Position {
|
|
17
19
|
x: number;
|
|
18
20
|
y: number;
|
|
19
21
|
z: number;
|
|
20
|
-
}
|
|
22
|
+
}
|
|
21
23
|
export declare class RpgPlayer extends RpgCommonPlayer {
|
|
22
24
|
readonly type: string;
|
|
23
25
|
static schemas: {
|
|
@@ -157,9 +159,10 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
157
159
|
hHitbox: NumberConstructor;
|
|
158
160
|
};
|
|
159
161
|
private _name;
|
|
160
|
-
events: any
|
|
162
|
+
events: any;
|
|
161
163
|
param: any;
|
|
162
164
|
_rooms: never[];
|
|
165
|
+
prevMap: string;
|
|
163
166
|
constructor(gameEngine?: any, playerId?: any);
|
|
164
167
|
teleported: number;
|
|
165
168
|
initialize(): void;
|
|
@@ -186,36 +189,6 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
186
189
|
* @memberof Player
|
|
187
190
|
*/
|
|
188
191
|
setGraphic(graphic: string): void;
|
|
189
|
-
/**
|
|
190
|
-
* Define a vision for the event.
|
|
191
|
-
*
|
|
192
|
-
* The object in parameter
|
|
193
|
-
* - type: `box`
|
|
194
|
-
* - height: Height
|
|
195
|
-
* - width: Width
|
|
196
|
-
*
|
|
197
|
-
* the `onInVision()` and `onOutVision()` methods are triggered on the `RpgPlayer` class
|
|
198
|
-
*
|
|
199
|
-
* ```ts
|
|
200
|
-
* player.setVision({
|
|
201
|
-
* type: 'box',
|
|
202
|
-
* width: 100,
|
|
203
|
-
* height: 100
|
|
204
|
-
* })
|
|
205
|
-
* ```
|
|
206
|
-
*
|
|
207
|
-
* @title Set Vision
|
|
208
|
-
* @todo
|
|
209
|
-
* @method player.setVision(obj)
|
|
210
|
-
* @param {object} obj
|
|
211
|
-
* @memberof Player
|
|
212
|
-
*/
|
|
213
|
-
setVision(obj: {
|
|
214
|
-
ellipse?: boolean;
|
|
215
|
-
height: number;
|
|
216
|
-
width: number;
|
|
217
|
-
type: string;
|
|
218
|
-
}): void;
|
|
219
192
|
/**
|
|
220
193
|
* Change your map. Indicate the positions to put the player at a place on the map
|
|
221
194
|
*
|
|
@@ -231,6 +204,48 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
231
204
|
* @memberof Player
|
|
232
205
|
*/
|
|
233
206
|
changeMap(mapId: string, positions?: any): Promise<RpgMap>;
|
|
207
|
+
/**
|
|
208
|
+
* Dynamically create an event in Scenario mode on the current map
|
|
209
|
+
*
|
|
210
|
+
* ```ts
|
|
211
|
+
* @EventData({
|
|
212
|
+
* name: 'EV-1'
|
|
213
|
+
* })
|
|
214
|
+
* class MyEvent extends RpgEvent {
|
|
215
|
+
* onAction() {
|
|
216
|
+
* console.log('ok')
|
|
217
|
+
* }
|
|
218
|
+
* }
|
|
219
|
+
*
|
|
220
|
+
* player.createDynamicEvent({
|
|
221
|
+
* x: 100,
|
|
222
|
+
* y: 100,
|
|
223
|
+
* event: MyEvent
|
|
224
|
+
* })
|
|
225
|
+
* ```
|
|
226
|
+
*
|
|
227
|
+
* You can also put an array of objects to create several events at once
|
|
228
|
+
*
|
|
229
|
+
* @title Create Dynamic Event
|
|
230
|
+
* @since 3.0.0-beta.4
|
|
231
|
+
* @method player.createDynamicEvent(eventObj | eventObj[])
|
|
232
|
+
* @param { { x: number, y: number, z?: number, event: eventClass } } [eventsList]
|
|
233
|
+
* @returns { { [eventId: string]: RpgEvent } }
|
|
234
|
+
* @memberof Player
|
|
235
|
+
*/
|
|
236
|
+
createDynamicEvent(eventsList: EventPosOption | EventPosOption[], forceMode?: boolean): {
|
|
237
|
+
[eventId: string]: RpgEvent;
|
|
238
|
+
};
|
|
239
|
+
/**
|
|
240
|
+
* Removes an event from the map (Scenario Mode). Returns false if the event is not found
|
|
241
|
+
* @title Remove Event
|
|
242
|
+
* @since 3.0.0-beta.4
|
|
243
|
+
* @method player.removeEvent(eventId)
|
|
244
|
+
* @param {string} eventId Event Name
|
|
245
|
+
* @returns {boolean}
|
|
246
|
+
* @memberof Player
|
|
247
|
+
*/
|
|
248
|
+
removeEvent(eventId: string): boolean;
|
|
234
249
|
/**
|
|
235
250
|
* Allows to change the positions of the player on the current map.
|
|
236
251
|
* You can put the X and Y positions or the name of the created shape on Tiled Map Editor.
|
|
@@ -258,7 +273,11 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
258
273
|
* @returns { {x: number, y: number, z: number} }
|
|
259
274
|
* @memberof Player
|
|
260
275
|
*/
|
|
261
|
-
teleport(positions?:
|
|
276
|
+
teleport(positions?: {
|
|
277
|
+
x: number;
|
|
278
|
+
y: number;
|
|
279
|
+
z?: number;
|
|
280
|
+
} | string): Position;
|
|
262
281
|
startBattle(enemies: {
|
|
263
282
|
enemy: any;
|
|
264
283
|
level: number;
|
|
@@ -319,10 +338,6 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
319
338
|
loadScene(name: string, data: any): void;
|
|
320
339
|
private _getMap;
|
|
321
340
|
showEffect(): void;
|
|
322
|
-
/**
|
|
323
|
-
* @todo
|
|
324
|
-
*/
|
|
325
|
-
createDynamicEvent(obj: any, mode: any): RpgPlayer | null;
|
|
326
341
|
/**
|
|
327
342
|
* Calls the showAnimation() method on the client side to display an animation on the player
|
|
328
343
|
* You must remember to create the spritesheet beforehand
|
|
@@ -378,6 +393,17 @@ export declare class RpgPlayer extends RpgCommonPlayer {
|
|
|
378
393
|
* @memberof Player
|
|
379
394
|
*/
|
|
380
395
|
emit(key: string, value: any): void;
|
|
396
|
+
/**
|
|
397
|
+
* Listen to the data (socket) sent by the client
|
|
398
|
+
*
|
|
399
|
+
* @title Listen to data from the client
|
|
400
|
+
* @method player.on(key,cb)
|
|
401
|
+
* @param {string} key
|
|
402
|
+
* @param {function} cb
|
|
403
|
+
* @returns {void}
|
|
404
|
+
* @memberof Player
|
|
405
|
+
*/
|
|
406
|
+
on(key: string, cb: Function): void;
|
|
381
407
|
emitToMap(key: string, value: any): void;
|
|
382
408
|
execMethod(methodName: string, methodData?: never[]): Promise<any[]>;
|
|
383
409
|
_triggerHook(name: any, val?: any): void;
|
|
@@ -424,4 +450,5 @@ export interface RpgPlayer extends ItemManager, GoldManager, StateManager, Skill
|
|
|
424
450
|
server: any;
|
|
425
451
|
vision: any;
|
|
426
452
|
steerable: Kompute;
|
|
453
|
+
attachShape: any;
|
|
427
454
|
}
|
package/lib/Player/Player.js
CHANGED
|
@@ -50,6 +50,7 @@ const MoveManager_1 = require("./MoveManager");
|
|
|
50
50
|
const BattleManager_1 = require("./BattleManager");
|
|
51
51
|
const presets_1 = require("../presets");
|
|
52
52
|
const BehaviorManager_1 = require("./BehaviorManager");
|
|
53
|
+
const __1 = require("..");
|
|
53
54
|
const { isPromise, applyMixins, isString } = common_1.Utils;
|
|
54
55
|
const itemSchemas = {
|
|
55
56
|
name: String,
|
|
@@ -102,8 +103,9 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
102
103
|
constructor(gameEngine, playerId) {
|
|
103
104
|
super(gameEngine, playerId);
|
|
104
105
|
this.type = 'player';
|
|
105
|
-
this.events =
|
|
106
|
+
this.events = {};
|
|
106
107
|
this._rooms = [];
|
|
108
|
+
this.prevMap = '';
|
|
107
109
|
// As soon as a teleport has been made, the value is changed to force the client to change the positions on the map without making a move.
|
|
108
110
|
this.teleported = 0;
|
|
109
111
|
this.initialize();
|
|
@@ -184,36 +186,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
184
186
|
setGraphic(graphic) {
|
|
185
187
|
this.graphic = graphic;
|
|
186
188
|
}
|
|
187
|
-
/**
|
|
188
|
-
* Define a vision for the event.
|
|
189
|
-
*
|
|
190
|
-
* The object in parameter
|
|
191
|
-
* - type: `box`
|
|
192
|
-
* - height: Height
|
|
193
|
-
* - width: Width
|
|
194
|
-
*
|
|
195
|
-
* the `onInVision()` and `onOutVision()` methods are triggered on the `RpgPlayer` class
|
|
196
|
-
*
|
|
197
|
-
* ```ts
|
|
198
|
-
* player.setVision({
|
|
199
|
-
* type: 'box',
|
|
200
|
-
* width: 100,
|
|
201
|
-
* height: 100
|
|
202
|
-
* })
|
|
203
|
-
* ```
|
|
204
|
-
*
|
|
205
|
-
* @title Set Vision
|
|
206
|
-
* @todo
|
|
207
|
-
* @method player.setVision(obj)
|
|
208
|
-
* @param {object} obj
|
|
209
|
-
* @memberof Player
|
|
210
|
-
*/
|
|
211
|
-
setVision(obj) {
|
|
212
|
-
if (!this.hitbox) {
|
|
213
|
-
throw 'Please define hitbox property before';
|
|
214
|
-
}
|
|
215
|
-
this.vision = obj;
|
|
216
|
-
}
|
|
217
189
|
/**
|
|
218
190
|
* Change your map. Indicate the positions to put the player at a place on the map
|
|
219
191
|
*
|
|
@@ -231,6 +203,74 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
231
203
|
changeMap(mapId, positions) {
|
|
232
204
|
return this.server.getScene('map').changeMap(mapId, this, positions);
|
|
233
205
|
}
|
|
206
|
+
/**
|
|
207
|
+
* Dynamically create an event in Scenario mode on the current map
|
|
208
|
+
*
|
|
209
|
+
* ```ts
|
|
210
|
+
* @EventData({
|
|
211
|
+
* name: 'EV-1'
|
|
212
|
+
* })
|
|
213
|
+
* class MyEvent extends RpgEvent {
|
|
214
|
+
* onAction() {
|
|
215
|
+
* console.log('ok')
|
|
216
|
+
* }
|
|
217
|
+
* }
|
|
218
|
+
*
|
|
219
|
+
* player.createDynamicEvent({
|
|
220
|
+
* x: 100,
|
|
221
|
+
* y: 100,
|
|
222
|
+
* event: MyEvent
|
|
223
|
+
* })
|
|
224
|
+
* ```
|
|
225
|
+
*
|
|
226
|
+
* You can also put an array of objects to create several events at once
|
|
227
|
+
*
|
|
228
|
+
* @title Create Dynamic Event
|
|
229
|
+
* @since 3.0.0-beta.4
|
|
230
|
+
* @method player.createDynamicEvent(eventObj | eventObj[])
|
|
231
|
+
* @param { { x: number, y: number, z?: number, event: eventClass } } [eventsList]
|
|
232
|
+
* @returns { { [eventId: string]: RpgEvent } }
|
|
233
|
+
* @memberof Player
|
|
234
|
+
*/
|
|
235
|
+
createDynamicEvent(eventsList, forceMode = true) {
|
|
236
|
+
if (!eventsList)
|
|
237
|
+
return {};
|
|
238
|
+
const mapInstance = this.getCurrentMap();
|
|
239
|
+
if (!mapInstance) {
|
|
240
|
+
throw 'The player is not assigned to any map';
|
|
241
|
+
}
|
|
242
|
+
if (!common_1.Utils.isArray(eventsList)) {
|
|
243
|
+
eventsList = [eventsList];
|
|
244
|
+
}
|
|
245
|
+
let eventsListMode = eventsList;
|
|
246
|
+
if (forceMode) {
|
|
247
|
+
eventsListMode = eventsList.map(event => {
|
|
248
|
+
event.event.mode = __1.EventMode.Scenario;
|
|
249
|
+
return event;
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
const events = mapInstance.createEvents(eventsListMode, __1.EventMode.Scenario);
|
|
253
|
+
for (let key in events) {
|
|
254
|
+
this.events[key] = events[key];
|
|
255
|
+
this.events[key].execMethod('onInit', [this]);
|
|
256
|
+
}
|
|
257
|
+
return events;
|
|
258
|
+
}
|
|
259
|
+
/**
|
|
260
|
+
* Removes an event from the map (Scenario Mode). Returns false if the event is not found
|
|
261
|
+
* @title Remove Event
|
|
262
|
+
* @since 3.0.0-beta.4
|
|
263
|
+
* @method player.removeEvent(eventId)
|
|
264
|
+
* @param {string} eventId Event Name
|
|
265
|
+
* @returns {boolean}
|
|
266
|
+
* @memberof Player
|
|
267
|
+
*/
|
|
268
|
+
removeEvent(eventId) {
|
|
269
|
+
if (!this.events[eventId])
|
|
270
|
+
return false;
|
|
271
|
+
delete this.events[eventId];
|
|
272
|
+
return true;
|
|
273
|
+
}
|
|
234
274
|
/**
|
|
235
275
|
* Allows to change the positions of the player on the current map.
|
|
236
276
|
* You can put the X and Y positions or the name of the created shape on Tiled Map Editor.
|
|
@@ -267,6 +307,8 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
267
307
|
positions.z = 0;
|
|
268
308
|
this.teleported++;
|
|
269
309
|
this.position = positions;
|
|
310
|
+
// force interaction with event or shape
|
|
311
|
+
this.isCollided(this.position);
|
|
270
312
|
return positions;
|
|
271
313
|
}
|
|
272
314
|
startBattle(enemies) {
|
|
@@ -331,7 +373,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
331
373
|
toJSON() {
|
|
332
374
|
const obj = {};
|
|
333
375
|
const props = [
|
|
334
|
-
'id',
|
|
335
376
|
'hp',
|
|
336
377
|
'sp',
|
|
337
378
|
'gold',
|
|
@@ -411,18 +452,6 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
411
452
|
params: []
|
|
412
453
|
});
|
|
413
454
|
}
|
|
414
|
-
/**
|
|
415
|
-
* @todo
|
|
416
|
-
*/
|
|
417
|
-
createDynamicEvent(obj, mode) {
|
|
418
|
-
const map = this.mapInstance;
|
|
419
|
-
const event = map.createEvent(obj, mode);
|
|
420
|
-
if (event) {
|
|
421
|
-
map.events[event.name] = event;
|
|
422
|
-
event.execMethod('onInit');
|
|
423
|
-
}
|
|
424
|
-
return event;
|
|
425
|
-
}
|
|
426
455
|
/**
|
|
427
456
|
* Calls the showAnimation() method on the client side to display an animation on the player
|
|
428
457
|
* You must remember to create the spritesheet beforehand
|
|
@@ -487,6 +516,20 @@ class RpgPlayer extends common_1.RpgCommonPlayer {
|
|
|
487
516
|
if (this._socket)
|
|
488
517
|
this._socket.emit(key, value);
|
|
489
518
|
}
|
|
519
|
+
/**
|
|
520
|
+
* Listen to the data (socket) sent by the client
|
|
521
|
+
*
|
|
522
|
+
* @title Listen to data from the client
|
|
523
|
+
* @method player.on(key,cb)
|
|
524
|
+
* @param {string} key
|
|
525
|
+
* @param {function} cb
|
|
526
|
+
* @returns {void}
|
|
527
|
+
* @memberof Player
|
|
528
|
+
*/
|
|
529
|
+
on(key, cb) {
|
|
530
|
+
if (this._socket)
|
|
531
|
+
this._socket.on(key, cb);
|
|
532
|
+
}
|
|
490
533
|
emitToMap(key, value) {
|
|
491
534
|
Query_1.Query.getPlayersOfMap(this.map).forEach(player => player.emit(key, value));
|
|
492
535
|
}
|