@rpgjs/common 4.2.1 → 5.0.0-alpha.0

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.
Files changed (148) hide show
  1. package/dist/Physic.d.ts +619 -0
  2. package/dist/Player.d.ts +198 -0
  3. package/{lib → dist}/Utils.d.ts +19 -2
  4. package/dist/database/Item.d.ts +10 -0
  5. package/dist/database/index.d.ts +1 -0
  6. package/dist/index.d.ts +9 -0
  7. package/dist/index.js +16741 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/modules.d.ts +92 -0
  10. package/dist/movement/MovementManager.d.ts +84 -0
  11. package/dist/movement/MovementStrategy.d.ts +39 -0
  12. package/dist/movement/index.d.ts +12 -0
  13. package/dist/movement/strategies/CompositeMovement.d.ts +76 -0
  14. package/dist/movement/strategies/Dash.d.ts +52 -0
  15. package/dist/movement/strategies/IceMovement.d.ts +87 -0
  16. package/dist/movement/strategies/Knockback.d.ts +50 -0
  17. package/dist/movement/strategies/LinearMove.d.ts +43 -0
  18. package/dist/movement/strategies/LinearRepulsion.d.ts +55 -0
  19. package/dist/movement/strategies/Oscillate.d.ts +60 -0
  20. package/dist/movement/strategies/PathFollow.d.ts +78 -0
  21. package/dist/movement/strategies/ProjectileMovement.d.ts +138 -0
  22. package/dist/movement/strategies/SeekAvoid.d.ts +27 -0
  23. package/dist/rooms/Map.d.ts +109 -0
  24. package/dist/services/updateMap.d.ts +7 -0
  25. package/package.json +17 -17
  26. package/src/Physic.ts +1644 -0
  27. package/src/Player.ts +262 -26
  28. package/src/{gui/PrebuiltGui.ts → PrebuiltGui.ts} +1 -1
  29. package/src/Utils.ts +184 -123
  30. package/src/database/Item.ts +19 -0
  31. package/src/database/index.ts +1 -0
  32. package/src/index.ts +9 -25
  33. package/src/modules.ts +230 -0
  34. package/src/movement/MovementManager.ts +142 -0
  35. package/src/movement/MovementStrategy.ts +42 -0
  36. package/src/movement/index.ts +15 -0
  37. package/src/movement/strategies/CompositeMovement.ts +173 -0
  38. package/src/movement/strategies/Dash.ts +82 -0
  39. package/src/movement/strategies/IceMovement.ts +158 -0
  40. package/src/movement/strategies/Knockback.ts +81 -0
  41. package/src/movement/strategies/LinearMove.ts +58 -0
  42. package/src/movement/strategies/LinearRepulsion.ts +128 -0
  43. package/src/movement/strategies/Oscillate.ts +144 -0
  44. package/src/movement/strategies/PathFollow.ts +156 -0
  45. package/src/movement/strategies/ProjectileMovement.ts +322 -0
  46. package/src/movement/strategies/SeekAvoid.ts +123 -0
  47. package/src/rooms/Map.ts +272 -0
  48. package/src/services/updateMap.ts +9 -0
  49. package/tests/physic.spec.ts +454 -0
  50. package/tsconfig.json +8 -3
  51. package/vite.config.ts +21 -0
  52. package/CHANGELOG.md +0 -152
  53. package/LICENSE +0 -19
  54. package/browser/manifest.json +0 -7
  55. package/browser/rpg.common.js +0 -11357
  56. package/browser/rpg.common.umd.cjs +0 -11358
  57. package/lib/AbstractObject.d.ts +0 -322
  58. package/lib/AbstractObject.js +0 -872
  59. package/lib/AbstractObject.js.map +0 -1
  60. package/lib/Color.d.ts +0 -1
  61. package/lib/Color.js +0 -25
  62. package/lib/Color.js.map +0 -1
  63. package/lib/DefaultInput.d.ts +0 -2
  64. package/lib/DefaultInput.js +0 -26
  65. package/lib/DefaultInput.js.map +0 -1
  66. package/lib/Event.d.ts +0 -3
  67. package/lib/Event.js +0 -4
  68. package/lib/Event.js.map +0 -1
  69. package/lib/EventEmitter.d.ts +0 -10
  70. package/lib/EventEmitter.js +0 -61
  71. package/lib/EventEmitter.js.map +0 -1
  72. package/lib/Game.d.ts +0 -28
  73. package/lib/Game.js +0 -127
  74. package/lib/Game.js.map +0 -1
  75. package/lib/Hit.d.ts +0 -16
  76. package/lib/Hit.js +0 -65
  77. package/lib/Hit.js.map +0 -1
  78. package/lib/Inject.d.ts +0 -9
  79. package/lib/Inject.js +0 -17
  80. package/lib/Inject.js.map +0 -1
  81. package/lib/Logger.d.ts +0 -2
  82. package/lib/Logger.js +0 -7
  83. package/lib/Logger.js.map +0 -1
  84. package/lib/Map.d.ts +0 -174
  85. package/lib/Map.js +0 -263
  86. package/lib/Map.js.map +0 -1
  87. package/lib/Module.d.ts +0 -16
  88. package/lib/Module.js +0 -139
  89. package/lib/Module.js.map +0 -1
  90. package/lib/Player.d.ts +0 -26
  91. package/lib/Player.js +0 -19
  92. package/lib/Player.js.map +0 -1
  93. package/lib/Plugin.d.ts +0 -67
  94. package/lib/Plugin.js +0 -92
  95. package/lib/Plugin.js.map +0 -1
  96. package/lib/Scheduler.d.ts +0 -26
  97. package/lib/Scheduler.js +0 -90
  98. package/lib/Scheduler.js.map +0 -1
  99. package/lib/Shape.d.ts +0 -127
  100. package/lib/Shape.js +0 -261
  101. package/lib/Shape.js.map +0 -1
  102. package/lib/Utils.js +0 -181
  103. package/lib/Utils.js.map +0 -1
  104. package/lib/Vector2d.d.ts +0 -20
  105. package/lib/Vector2d.js +0 -63
  106. package/lib/Vector2d.js.map +0 -1
  107. package/lib/VirtualGrid.d.ts +0 -26
  108. package/lib/VirtualGrid.js +0 -68
  109. package/lib/VirtualGrid.js.map +0 -1
  110. package/lib/Worker.d.ts +0 -7
  111. package/lib/Worker.js +0 -13
  112. package/lib/Worker.js.map +0 -1
  113. package/lib/WorldMaps.d.ts +0 -105
  114. package/lib/WorldMaps.js +0 -184
  115. package/lib/WorldMaps.js.map +0 -1
  116. package/lib/gui/PrebuiltGui.js +0 -29
  117. package/lib/gui/PrebuiltGui.js.map +0 -1
  118. package/lib/index.d.ts +0 -25
  119. package/lib/index.js +0 -26
  120. package/lib/index.js.map +0 -1
  121. package/lib/transports/io.d.ts +0 -22
  122. package/lib/transports/io.js +0 -82
  123. package/lib/transports/io.js.map +0 -1
  124. package/lib/workers/move.d.ts +0 -1
  125. package/lib/workers/move.js +0 -57
  126. package/lib/workers/move.js.map +0 -1
  127. package/rpg.toml +0 -11
  128. package/src/AbstractObject.ts +0 -973
  129. package/src/Color.ts +0 -29
  130. package/src/DefaultInput.ts +0 -26
  131. package/src/Event.ts +0 -3
  132. package/src/EventEmitter.ts +0 -65
  133. package/src/Game.ts +0 -159
  134. package/src/Hit.ts +0 -70
  135. package/src/Inject.ts +0 -22
  136. package/src/Logger.ts +0 -7
  137. package/src/Map.ts +0 -335
  138. package/src/Module.ts +0 -144
  139. package/src/Plugin.ts +0 -100
  140. package/src/Scheduler.ts +0 -95
  141. package/src/Shape.ts +0 -302
  142. package/src/Vector2d.ts +0 -70
  143. package/src/VirtualGrid.ts +0 -78
  144. package/src/Worker.ts +0 -17
  145. package/src/WorldMaps.ts +0 -204
  146. package/src/transports/io.ts +0 -91
  147. package/src/workers/move.ts +0 -61
  148. /package/{lib/gui → dist}/PrebuiltGui.d.ts +0 -0
package/src/Color.ts DELETED
@@ -1,29 +0,0 @@
1
- type RGB = [number, number, number];
2
-
3
- function hexToRGB(hex: string): RGB {
4
- let r = parseInt(hex.substring(0, 2), 16);
5
- let g = parseInt(hex.substring(2, 4), 16);
6
- let b = parseInt(hex.substring(4, 6), 16);
7
- return [r, g, b];
8
- }
9
-
10
- function RGBToHex(rgb: RGB): string {
11
- let r = rgb[0].toString(16).padStart(2, '0');
12
- let g = rgb[1].toString(16).padStart(2, '0');
13
- let b = rgb[2].toString(16).padStart(2, '0');
14
- return r + g + b;
15
- }
16
-
17
- export function transitionColor(startColor: string, endColor: string, steps: number): string[] {
18
- let startRGB = hexToRGB(startColor.replace('#', ''));
19
- let endRGB = hexToRGB(endColor.replace('#', ''));
20
- let deltaRGB = [(endRGB[0] - startRGB[0]) / steps, (endRGB[1] - startRGB[1]) / steps, (endRGB[2] - startRGB[2]) / steps];
21
-
22
- let colors: string[] = [];
23
- for (let i = 0; i < steps; i++) {
24
- let color = [startRGB[0] + deltaRGB[0] * i, startRGB[1] + deltaRGB[1] * i, startRGB[2] + deltaRGB[2] * i];
25
- colors.push(RGBToHex(color as any));
26
- }
27
- colors.push(endColor.replace('#', ''));
28
- return colors;
29
- }
@@ -1,26 +0,0 @@
1
- import { Controls, Input, Control } from '@rpgjs/types'
2
-
3
- export const DefaultInput: Controls = {
4
- [Control.Up]: {
5
- repeat: true,
6
- bind: Input.Up
7
- },
8
- [Control.Down]: {
9
- repeat: true,
10
- bind: Input.Down
11
- },
12
- [Control.Right]: {
13
- repeat: true,
14
- bind: Input.Right
15
- },
16
- [Control.Left]: {
17
- repeat: true,
18
- bind: Input.Left
19
- },
20
- [Control.Action]: {
21
- bind: [Input.Space, Input.Enter]
22
- },
23
- [Control.Back]: {
24
- bind: Input.Escape
25
- }
26
- }
package/src/Event.ts DELETED
@@ -1,3 +0,0 @@
1
- import { RpgCommonPlayer } from './Player'
2
-
3
- export class RpgCommonEvent extends RpgCommonPlayer {}
@@ -1,65 +0,0 @@
1
- import { isPromise } from './Utils'
2
-
3
- export class EventEmitter {
4
- private listeners: {
5
- [eventName: string]: Function[]
6
- } = {}
7
-
8
- private listenersOnce: {
9
- [eventName: string]: Function
10
- } = {}
11
-
12
- has(name: string): boolean {
13
- return !!this.listeners[name] || !!this.listenersOnce[name]
14
- }
15
-
16
- once(name: string, cb: Function): EventEmitter {
17
- this.listenersOnce[name] = cb
18
- return this
19
- }
20
-
21
- on(name: string, cb: Function): EventEmitter {
22
- if (!this.listeners[name]) this.listeners[name] = []
23
- this.listeners[name].push(cb)
24
- return this
25
- }
26
-
27
- emit(name: string, data?: any, rest: boolean = false): Promise<any[]> {
28
- const ret: any = []
29
- if (this.listeners[name]) {
30
- for (let listener of this.listeners[name]) {
31
- if (rest) ret.push(listener(...data))
32
- else ret.push(listener(data))
33
- }
34
- }
35
- if (this.listenersOnce[name]) {
36
- if (rest) ret.push(this.listenersOnce[name](...data))
37
- else ret.push(this.listenersOnce[name](data))
38
- }
39
- return Promise.all(ret.map(val => {
40
- if (!isPromise(val)) {
41
- return Promise.resolve(val)
42
- }
43
- return val
44
- }))
45
- }
46
-
47
- off(name: string, listener?: Function) {
48
- if (!listener) {
49
- delete this.listeners[name]
50
- delete this.listenersOnce[name]
51
- return
52
- }
53
- if (this.listeners[name]) {
54
- const index = this.listeners[name].indexOf(listener)
55
- if (index !== -1) {
56
- this.listeners[name].splice(index, 1)
57
- }
58
- }
59
- }
60
-
61
- clear() {
62
- this.listeners = {}
63
- this.listenersOnce = {}
64
- }
65
- }
package/src/Game.ts DELETED
@@ -1,159 +0,0 @@
1
- import Utils, { generateUID, isClass } from './Utils'
2
- import { EventEmitter } from './EventEmitter'
3
- import { RpgCommonPlayer } from './Player'
4
- import { constructor, Control, Controls, Direction } from '@rpgjs/types'
5
- import { RpgPlugin } from './Plugin'
6
- import { GameWorker } from './Worker'
7
- import { HitObject } from './Hit'
8
- import { RpgShape } from './Shape'
9
- import { TiledObjectClass } from '@rpgjs/tiled'
10
- import { InjectContext } from './Inject'
11
-
12
- export enum GameSide {
13
- Server = 'server',
14
- Client = 'client',
15
- Worker = 'worker'
16
- }
17
-
18
- export class RpgCommonGame extends EventEmitter {
19
- events: any
20
- world: any
21
- side: GameSide
22
-
23
- initialize(side: GameSide) {
24
- this.side = side
25
- this.events = {} // events for all player in map
26
- }
27
-
28
- get isWorker() {
29
- return this.side == 'worker'
30
- }
31
-
32
- start(world) {
33
- this.world = world
34
- }
35
-
36
- createWorkers(options: any) {
37
- return new GameWorker(options)
38
- }
39
-
40
- addObject(_class, playerId?: string) {
41
- let event
42
- if (!playerId) playerId = generateUID()
43
- if (isClass(_class)) {
44
- if (this.side == GameSide.Client) {
45
- event = new _class(this, playerId)
46
- }
47
- else {
48
- event = new _class(playerId)
49
- }
50
- }
51
- else {
52
- event = _class
53
- }
54
- return event
55
- }
56
-
57
- addPlayer(playerClass, playerId?: string) {
58
- const player = this.addObject(playerClass, playerId)
59
- return player
60
- }
61
-
62
- addEvent<T>(eventClass: constructor<T>, eventId?: string): T {
63
- const event = this.addObject(eventClass, eventId)
64
- return event
65
- }
66
-
67
- addShape(obj: HitObject): RpgShape {
68
- const id = obj.name = (obj.name || generateUID()) as string
69
- const shape = new RpgShape(obj as TiledObjectClass)
70
- shape.name = id
71
- return shape
72
- }
73
-
74
- async processInput<RpgPlayer extends RpgCommonPlayer>(playerId: string, controls?: Controls): Promise<{
75
- player: RpgPlayer,
76
- inputs: string[]
77
- }> {
78
- const player: RpgPlayer = this.world.getObject(playerId)
79
- const inputs: string[] = []
80
-
81
- if (!player) return {
82
- player,
83
- inputs
84
- }
85
-
86
- const routesMove: any = []
87
-
88
- while (player.pendingMove.length > 0) {
89
- const inputData = player.pendingMove.shift()
90
-
91
- let { input, deltaTimeInt } = inputData as any
92
- let moving = false
93
-
94
- if (controls && controls[input]) {
95
- const control = controls[input]
96
- const now = Date.now()
97
- const inputTime = player.inputsTimestamp[input] || 0
98
-
99
- if (inputTime >= now) {
100
- continue
101
- }
102
-
103
- if (control.delay) {
104
- let duration: number
105
- let otherControls: (string | Control)[] = []
106
-
107
- if (typeof control.delay == 'number') {
108
- duration = control.delay
109
- }
110
- else {
111
- duration = control.delay.duration
112
- if (control.delay.otherControls) {
113
- otherControls = control.delay.otherControls
114
- }
115
- }
116
-
117
- player.inputsTimestamp[input] = now + duration
118
-
119
- for (let control of otherControls) {
120
- player.inputsTimestamp[control] = now + duration
121
- }
122
- }
123
- }
124
-
125
- if (input == Control.Action) {
126
- await player.triggerCollisionWith(RpgCommonPlayer.ACTIONS.ACTION)
127
- }
128
- else if (
129
- input == Direction.Left ||
130
- input == Direction.Right ||
131
- input == Direction.Up ||
132
- input == Direction.Down
133
- ) {
134
- player.moving = true
135
- moving = true
136
- const isMove = await player.moveByDirection(+input, deltaTimeInt || 1)
137
- if (isMove) {
138
- routesMove.push(inputData)
139
- }
140
- }
141
- // TODO, is Worker
142
- // verify if is server because, rpg mode causes a bug (see #184)
143
- if (this.side == GameSide.Server) {
144
- await RpgPlugin.emit('Server.onInput', [player, {
145
- ...inputData,
146
- moving
147
- }], true)
148
- }
149
-
150
- inputs.push(input)
151
- }
152
-
153
-
154
- return {
155
- player,
156
- inputs
157
- }
158
- }
159
- }
package/src/Hit.ts DELETED
@@ -1,70 +0,0 @@
1
- import { HitEllipse, HitObject, HitType } from '@rpgjs/types'
2
- import SAT from 'sat'
3
- import { isInstanceOf } from './Utils'
4
- export { HitType, HitObject } from '@rpgjs/types'
5
-
6
- class HitClass {
7
-
8
- createObjectHitbox(x: number, y: number, z: number, w: number, h: number): SAT.Box {
9
- return new SAT.Box(new SAT.Vector(x, y - z), w, h)
10
- }
11
-
12
- getHitbox(obj: HitObject, offset?: { x: number, y: number }): {
13
- hitbox: SAT,
14
- type?: string,
15
- name?: string
16
- } {
17
- let hitbox: SAT, type: string | undefined
18
- if (!offset) offset = { x: 0, y: 0 }
19
- const x = obj.x + offset.x
20
- const y = obj.y + offset.y
21
- if ('ellipse' in obj || obj.type == HitType.Circle) {
22
- type = HitType.Circle
23
- const radius = (<HitEllipse>obj).width / 2
24
- hitbox = new SAT.Circle(new SAT.Vector(x + radius, y + radius), radius)
25
- }
26
- else if ('polygon' in obj) {
27
- type = HitType.Polygon
28
- hitbox = new SAT.Polygon(new SAT.Vector(x, y), obj.polygon.map(pos => new SAT.Vector(+pos.x, +pos.y)))
29
- }
30
- else if (!('polygon' in obj) && ('width' in obj) && ('height' in obj)) {
31
- type = HitType.Box
32
- hitbox = new SAT.Box(new SAT.Vector(x, y), obj.width, obj.height)
33
- }
34
- else {
35
- hitbox = new SAT.Vector(x, y)
36
- type = obj.type
37
- }
38
- return {
39
- hitbox,
40
- type,
41
- name: obj.name
42
- }
43
- }
44
-
45
- testPolyCollision(type: string, hit1: SAT, hit2: SAT): boolean {
46
- let collided = false
47
- if (type == HitType.Box) {
48
- if (hit1.pos.x <= hit2.pos.x + hit2.w &&
49
- hit1.pos.x + hit1.w >= hit2.pos.x &&
50
- hit1.pos.y <= hit2.pos.y + hit2.h &&
51
- hit1.h + hit1.pos.y >= hit2.pos.y) {
52
- return true
53
- }
54
- return false
55
- }
56
- if (isInstanceOf(hit1, SAT.Box)) hit1 = hit1.toPolygon()
57
- if (isInstanceOf(hit2, SAT.Box)) hit2 = hit2.toPolygon()
58
- switch (type) {
59
- case HitType.Circle:
60
- collided = SAT.testPolygonCircle(hit1, hit2)
61
- break
62
- case HitType.Polygon:
63
- collided = SAT.testPolygonPolygon(hit1, hit2)
64
- break
65
- }
66
- return collided
67
- }
68
- }
69
-
70
- export const Hit = new HitClass()
package/src/Inject.ts DELETED
@@ -1,22 +0,0 @@
1
- type Constructor<T> = new (...args: any[]) => T;
2
- type ServiceIdentifier<T> = string;
3
-
4
- export class InjectContext {
5
- private instances = new Map<ServiceIdentifier<any>, any>();
6
-
7
- inject<T>(constructor: Constructor<T>, args: any[] = []): T {
8
- const serviceName = constructor.name;
9
- if (!this.instances.has(serviceName)) {
10
- const instance = new constructor(this, ...args);
11
- if (instance['initialize']) {
12
- instance['initialize'](...args);
13
- }
14
- this.instances.set(serviceName, instance);
15
- }
16
- return this.instances.get(serviceName);
17
- }
18
- }
19
-
20
- export interface InjectInit {
21
- initialize(...args: any[]): any
22
- }
package/src/Logger.ts DELETED
@@ -1,7 +0,0 @@
1
- export function log(message) {
2
- return new Error(`[RPGJS] - ${message}`)
3
- }
4
-
5
- export function warning(...message) {
6
- console.warn('[RPGJS Warning]', ...message)
7
- }