@rpgjs/client 4.2.2 → 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.
- package/dist/Game/EffectManager.d.ts +5 -0
- package/dist/Game/Event.d.ts +4 -0
- package/dist/Game/Map.d.ts +7 -0
- package/dist/Game/Player.d.ts +4 -0
- package/dist/Gui/Gui.d.ts +23 -0
- package/{lib → dist}/RpgClient.d.ts +9 -6
- package/dist/RpgClientEngine.d.ts +43 -0
- package/dist/components/effects/index.d.ts +4 -0
- package/dist/components/gui/index.d.ts +3 -0
- package/dist/components/index.d.ts +2 -0
- package/dist/core/inject.d.ts +5 -0
- package/dist/core/setup.d.ts +6 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -0
- package/dist/index10.js +8 -0
- package/dist/index10.js.map +1 -0
- package/dist/index11.js +10 -0
- package/dist/index11.js.map +1 -0
- package/dist/index12.js +8 -0
- package/dist/index12.js.map +1 -0
- package/dist/index13.js +17 -0
- package/dist/index13.js.map +1 -0
- package/dist/index14.js +50 -0
- package/dist/index14.js.map +1 -0
- package/dist/index15.js +191 -0
- package/dist/index15.js.map +1 -0
- package/dist/index16.js +9 -0
- package/dist/index16.js.map +1 -0
- package/dist/index17.js +387 -0
- package/dist/index17.js.map +1 -0
- package/dist/index18.js +31 -0
- package/dist/index18.js.map +1 -0
- package/dist/index19.js +24 -0
- package/dist/index19.js.map +1 -0
- package/dist/index2.js +112 -0
- package/dist/index2.js.map +1 -0
- package/dist/index20.js +2421 -0
- package/dist/index20.js.map +1 -0
- package/dist/index21.js +114 -0
- package/dist/index21.js.map +1 -0
- package/dist/index22.js +109 -0
- package/dist/index22.js.map +1 -0
- package/dist/index23.js +71 -0
- package/dist/index23.js.map +1 -0
- package/dist/index24.js +21 -0
- package/dist/index24.js.map +1 -0
- package/dist/index25.js +41 -0
- package/dist/index25.js.map +1 -0
- package/dist/index26.js +5 -0
- package/dist/index26.js.map +1 -0
- package/dist/index27.js +322 -0
- package/dist/index27.js.map +1 -0
- package/dist/index28.js +25 -0
- package/dist/index28.js.map +1 -0
- package/dist/index29.js +11 -0
- package/dist/index29.js.map +1 -0
- package/dist/index3.js +87 -0
- package/dist/index3.js.map +1 -0
- package/dist/index30.js +11 -0
- package/dist/index30.js.map +1 -0
- package/dist/index31.js +174 -0
- package/dist/index31.js.map +1 -0
- package/dist/index32.js +501 -0
- package/dist/index32.js.map +1 -0
- package/dist/index33.js +12 -0
- package/dist/index33.js.map +1 -0
- package/dist/index34.js +4403 -0
- package/dist/index34.js.map +1 -0
- package/dist/index35.js +91 -0
- package/dist/index35.js.map +1 -0
- package/dist/index36.js +61 -0
- package/dist/index36.js.map +1 -0
- package/dist/index37.js +20 -0
- package/dist/index37.js.map +1 -0
- package/dist/index38.js +20 -0
- package/dist/index38.js.map +1 -0
- package/dist/index4.js +54 -0
- package/dist/index4.js.map +1 -0
- package/dist/index5.js +15 -0
- package/dist/index5.js.map +1 -0
- package/dist/index6.js +17 -0
- package/dist/index6.js.map +1 -0
- package/dist/index7.js +31 -0
- package/dist/index7.js.map +1 -0
- package/dist/index8.js +90 -0
- package/dist/index8.js.map +1 -0
- package/dist/index9.js +76 -0
- package/dist/index9.js.map +1 -0
- package/dist/module.d.ts +14 -0
- package/dist/presets/index.d.ts +22 -0
- package/{lib/Presets/AnimationSpritesheet.d.ts → dist/presets/rmspritesheet.d.ts} +6 -2
- package/dist/services/AbstractSocket.d.ts +15 -0
- package/dist/services/loadMap.d.ts +14 -0
- package/dist/services/mmorpg.d.ts +32 -0
- package/dist/services/standalone.d.ts +34 -0
- package/package.json +25 -42
- package/src/Game/EffectManager.ts +20 -0
- package/src/Game/Event.ts +5 -0
- package/src/Game/Map.ts +10 -0
- package/src/Game/Object.ts +16 -0
- package/src/Game/Player.ts +5 -0
- package/src/Gui/Gui.ts +80 -534
- package/src/RpgClient.ts +9 -5
- package/src/RpgClientEngine.ts +135 -815
- package/src/components/character.ce +104 -0
- package/src/components/effects/animation.ce +19 -0
- package/src/components/effects/hit.ce +87 -0
- package/src/components/effects/index.ts +7 -0
- package/src/components/gui/dialogbox/index.ce +194 -0
- package/src/components/gui/dialogbox/itemMenu.ce +23 -0
- package/src/components/gui/dialogbox/selection.ce +67 -0
- package/src/components/gui/index.ts +5 -0
- package/src/components/index.ts +3 -0
- package/src/components/scenes/canvas.ce +51 -0
- package/src/components/scenes/draw-map.ce +56 -0
- package/src/components/scenes/element-map.ce +23 -0
- package/src/components/scenes/event-layer.ce +20 -0
- package/src/core/inject.ts +17 -0
- package/src/core/setup.ts +18 -0
- package/src/index.ts +13 -29
- package/src/module.ts +93 -0
- package/src/presets/index.ts +5 -0
- package/src/{Presets/AnimationSpritesheet.ts → presets/rmspritesheet.ts} +4 -5
- package/src/services/AbstractSocket.ts +14 -0
- package/src/services/loadMap.ts +33 -0
- package/src/services/mmorpg.ts +64 -0
- package/src/services/standalone.ts +101 -0
- package/src/types/canvas-engine.d.ts +26 -0
- package/tsconfig.json +8 -3
- package/vite.config.ts +34 -0
- package/CHANGELOG.md +0 -177
- package/LICENSE +0 -19
- package/browser/React-f6f9b1de.js +0 -157
- package/browser/index-e74a289f.js +0 -44225
- package/browser/manifest.json +0 -21
- package/browser/rpg.client.js +0 -40
- package/browser/rpg.client.umd.cjs +0 -44414
- package/lib/Components/AbstractComponent.d.ts +0 -32
- package/lib/Components/AbstractComponent.js +0 -93
- package/lib/Components/AbstractComponent.js.map +0 -1
- package/lib/Components/BarComponent.d.ts +0 -21
- package/lib/Components/BarComponent.js +0 -169
- package/lib/Components/BarComponent.js.map +0 -1
- package/lib/Components/Component.d.ts +0 -124
- package/lib/Components/Component.js +0 -425
- package/lib/Components/Component.js.map +0 -1
- package/lib/Components/DebugComponent.d.ts +0 -11
- package/lib/Components/DebugComponent.js +0 -32
- package/lib/Components/DebugComponent.js.map +0 -1
- package/lib/Components/ImageComponent.d.ts +0 -11
- package/lib/Components/ImageComponent.js +0 -30
- package/lib/Components/ImageComponent.js.map +0 -1
- package/lib/Components/ShapeComponent.d.ts +0 -11
- package/lib/Components/ShapeComponent.js +0 -57
- package/lib/Components/ShapeComponent.js.map +0 -1
- package/lib/Components/TextComponent.d.ts +0 -11
- package/lib/Components/TextComponent.js +0 -35
- package/lib/Components/TextComponent.js.map +0 -1
- package/lib/Components/TileComponent.d.ts +0 -10
- package/lib/Components/TileComponent.js +0 -40
- package/lib/Components/TileComponent.js.map +0 -1
- package/lib/Effects/Animation.d.ts +0 -55
- package/lib/Effects/Animation.js +0 -233
- package/lib/Effects/Animation.js.map +0 -1
- package/lib/Effects/AnimationCharacter.d.ts +0 -7
- package/lib/Effects/AnimationCharacter.js +0 -9
- package/lib/Effects/AnimationCharacter.js.map +0 -1
- package/lib/Effects/Spinner.d.ts +0 -7
- package/lib/Effects/Spinner.js +0 -18
- package/lib/Effects/Spinner.js.map +0 -1
- package/lib/Effects/Timeline.d.ts +0 -151
- package/lib/Effects/Timeline.js +0 -369
- package/lib/Effects/Timeline.js.map +0 -1
- package/lib/Effects/TransitionScene.d.ts +0 -18
- package/lib/Effects/TransitionScene.js +0 -50
- package/lib/Effects/TransitionScene.js.map +0 -1
- package/lib/GameEngine.d.ts +0 -68
- package/lib/GameEngine.js +0 -254
- package/lib/GameEngine.js.map +0 -1
- package/lib/Gui/Gui.d.ts +0 -110
- package/lib/Gui/Gui.js +0 -490
- package/lib/Gui/Gui.js.map +0 -1
- package/lib/Gui/React.d.ts +0 -15
- package/lib/Gui/React.js +0 -113
- package/lib/Gui/React.js.map +0 -1
- package/lib/Gui/Vue.d.ts +0 -13
- package/lib/Gui/Vue.js +0 -114
- package/lib/Gui/Vue.js.map +0 -1
- package/lib/Interfaces/Character.d.ts +0 -6
- package/lib/Interfaces/Character.js +0 -2
- package/lib/Interfaces/Character.js.map +0 -1
- package/lib/Interfaces/Scene.d.ts +0 -10
- package/lib/Interfaces/Scene.js +0 -2
- package/lib/Interfaces/Scene.js.map +0 -1
- package/lib/KeyboardControls.d.ts +0 -367
- package/lib/KeyboardControls.js +0 -714
- package/lib/KeyboardControls.js.map +0 -1
- package/lib/Logger.d.ts +0 -1
- package/lib/Logger.js +0 -4
- package/lib/Logger.js.map +0 -1
- package/lib/Presets/AnimationSpritesheet.js +0 -39
- package/lib/Presets/AnimationSpritesheet.js.map +0 -1
- package/lib/Presets/Scene.d.ts +0 -3
- package/lib/Presets/Scene.js +0 -5
- package/lib/Presets/Scene.js.map +0 -1
- package/lib/Renderer.d.ts +0 -62
- package/lib/Renderer.js +0 -300
- package/lib/Renderer.js.map +0 -1
- package/lib/Resources.d.ts +0 -22
- package/lib/Resources.js +0 -38
- package/lib/Resources.js.map +0 -1
- package/lib/RpgClient.js +0 -2
- package/lib/RpgClient.js.map +0 -1
- package/lib/RpgClientEngine.d.ts +0 -257
- package/lib/RpgClientEngine.js +0 -674
- package/lib/RpgClientEngine.js.map +0 -1
- package/lib/Scene/EventLayer.d.ts +0 -4
- package/lib/Scene/EventLayer.js +0 -8
- package/lib/Scene/EventLayer.js.map +0 -1
- package/lib/Scene/Map.d.ts +0 -109
- package/lib/Scene/Map.js +0 -319
- package/lib/Scene/Map.js.map +0 -1
- package/lib/Scene/Scene.d.ts +0 -184
- package/lib/Scene/Scene.js +0 -250
- package/lib/Scene/Scene.js.map +0 -1
- package/lib/Scene/SceneData.d.ts +0 -4
- package/lib/Scene/SceneData.js +0 -8
- package/lib/Scene/SceneData.js.map +0 -1
- package/lib/Sound/RpgSound.d.ts +0 -11
- package/lib/Sound/RpgSound.js +0 -46
- package/lib/Sound/RpgSound.js.map +0 -1
- package/lib/Sound/Sound.d.ts +0 -78
- package/lib/Sound/Sound.js +0 -12
- package/lib/Sound/Sound.js.map +0 -1
- package/lib/Sound/Sounds.d.ts +0 -2
- package/lib/Sound/Sounds.js +0 -6
- package/lib/Sound/Sounds.js.map +0 -1
- package/lib/Sprite/Character.d.ts +0 -18
- package/lib/Sprite/Character.js +0 -131
- package/lib/Sprite/Character.js.map +0 -1
- package/lib/Sprite/Player.d.ts +0 -3
- package/lib/Sprite/Player.js +0 -4
- package/lib/Sprite/Player.js.map +0 -1
- package/lib/Sprite/Spritesheet.d.ts +0 -365
- package/lib/Sprite/Spritesheet.js +0 -13
- package/lib/Sprite/Spritesheet.js.map +0 -1
- package/lib/Sprite/Spritesheets.d.ts +0 -3
- package/lib/Sprite/Spritesheets.js +0 -6
- package/lib/Sprite/Spritesheets.js.map +0 -1
- package/lib/Tilemap/CommonLayer.d.ts +0 -10
- package/lib/Tilemap/CommonLayer.js +0 -17
- package/lib/Tilemap/CommonLayer.js.map +0 -1
- package/lib/Tilemap/ImageLayer.d.ts +0 -4
- package/lib/Tilemap/ImageLayer.js +0 -16
- package/lib/Tilemap/ImageLayer.js.map +0 -1
- package/lib/Tilemap/Tile.d.ts +0 -21
- package/lib/Tilemap/Tile.js +0 -67
- package/lib/Tilemap/Tile.js.map +0 -1
- package/lib/Tilemap/TileLayer.d.ts +0 -13
- package/lib/Tilemap/TileLayer.js +0 -122
- package/lib/Tilemap/TileLayer.js.map +0 -1
- package/lib/Tilemap/TileSet.d.ts +0 -7
- package/lib/Tilemap/TileSet.js +0 -24
- package/lib/Tilemap/TileSet.js.map +0 -1
- package/lib/Tilemap/index.d.ts +0 -28
- package/lib/Tilemap/index.js +0 -151
- package/lib/Tilemap/index.js.map +0 -1
- package/lib/clientEntryPoint.d.ts +0 -89
- package/lib/clientEntryPoint.js +0 -48
- package/lib/clientEntryPoint.js.map +0 -1
- package/lib/index.d.ts +0 -26
- package/lib/index.js +0 -27
- package/lib/index.js.map +0 -1
- package/lib/inject.d.ts +0 -23
- package/lib/inject.js +0 -30
- package/lib/inject.js.map +0 -1
- package/rpg.toml +0 -14
- package/src/Components/AbstractComponent.ts +0 -120
- package/src/Components/BarComponent.ts +0 -181
- package/src/Components/Component.ts +0 -515
- package/src/Components/DebugComponent.ts +0 -36
- package/src/Components/ImageComponent.ts +0 -30
- package/src/Components/ShapeComponent.ts +0 -64
- package/src/Components/TextComponent.ts +0 -33
- package/src/Components/TileComponent.ts +0 -43
- package/src/Effects/Animation.ts +0 -310
- package/src/Effects/AnimationCharacter.ts +0 -7
- package/src/Effects/Spinner.ts +0 -19
- package/src/Effects/Timeline.ts +0 -378
- package/src/Effects/TransitionScene.ts +0 -59
- package/src/GameEngine.ts +0 -289
- package/src/Gui/React.ts +0 -145
- package/src/Gui/Vue.ts +0 -154
- package/src/Interfaces/Character.ts +0 -7
- package/src/Interfaces/Scene.ts +0 -9
- package/src/KeyboardControls.ts +0 -748
- package/src/Logger.ts +0 -3
- package/src/Presets/Scene.ts +0 -3
- package/src/Renderer.ts +0 -334
- package/src/Resources.ts +0 -39
- package/src/Scene/EventLayer.ts +0 -9
- package/src/Scene/Map.ts +0 -402
- package/src/Scene/Scene.ts +0 -305
- package/src/Scene/SceneData.ts +0 -13
- package/src/Sound/RpgSound.ts +0 -50
- package/src/Sound/Sound.ts +0 -91
- package/src/Sound/Sounds.ts +0 -7
- package/src/Sprite/Character.ts +0 -157
- package/src/Sprite/Player.ts +0 -3
- package/src/Sprite/Spritesheet.ts +0 -392
- package/src/Sprite/Spritesheets.ts +0 -8
- package/src/Tilemap/CommonLayer.ts +0 -20
- package/src/Tilemap/ImageLayer.ts +0 -20
- package/src/Tilemap/Tile.ts +0 -80
- package/src/Tilemap/TileLayer.ts +0 -142
- package/src/Tilemap/TileSet.ts +0 -40
- package/src/Tilemap/index.ts +0 -175
- package/src/clientEntryPoint.ts +0 -150
- package/src/inject.ts +0 -34
- package/src/types/howler.d.ts +0 -73
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Context, FactoryProvider, findProvider, findProviders, inject, injector, Providers } from "@signe/di";
|
|
2
|
+
import { RpgClientEngine } from "../RpgClientEngine";
|
|
3
|
+
import { setInject } from "./inject";
|
|
4
|
+
|
|
5
|
+
interface SetupOptions {
|
|
6
|
+
providers: Providers;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export async function startGame(options: SetupOptions) {
|
|
10
|
+
const context = new Context();
|
|
11
|
+
setInject(context);
|
|
12
|
+
|
|
13
|
+
await injector(context, options.providers);
|
|
14
|
+
|
|
15
|
+
const engine = inject(context, RpgClientEngine);
|
|
16
|
+
await engine.start();
|
|
17
|
+
return context;
|
|
18
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,29 +1,13 @@
|
|
|
1
|
-
export
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export
|
|
10
|
-
export
|
|
11
|
-
export *
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
export type { ISpriteCharacter } from './Interfaces/Character'
|
|
15
|
-
export { SceneData } from './Scene/SceneData'
|
|
16
|
-
export { SceneMap as RpgSceneMap } from './Scene/Map'
|
|
17
|
-
export { RpgGui } from './Gui/Gui';
|
|
18
|
-
export { Timeline, Ease } from './Effects/Timeline';
|
|
19
|
-
export { RpgComponent, RpgComponent as RpgSprite } from './Components/Component'
|
|
20
|
-
export { KeyboardControls } from './KeyboardControls'
|
|
21
|
-
export { World, room } from 'simple-room-client'
|
|
22
|
-
|
|
23
|
-
import { spritesheets } from './Sprite/Spritesheets'
|
|
24
|
-
import { sounds } from './Sound/Sounds'
|
|
25
|
-
export const RpgResource = {
|
|
26
|
-
spritesheets,
|
|
27
|
-
sounds
|
|
28
|
-
}
|
|
29
|
-
export { inject } from './inject'
|
|
1
|
+
export * from "./RpgClientEngine";
|
|
2
|
+
export type * from "./RpgClient";
|
|
3
|
+
export * from "./services/standalone";
|
|
4
|
+
export * from "./services/mmorpg";
|
|
5
|
+
export * from "./core/setup";
|
|
6
|
+
export * from "./core/inject";
|
|
7
|
+
export * from "./services/loadMap";
|
|
8
|
+
export * from "./module";
|
|
9
|
+
export * from "./Gui/Gui";
|
|
10
|
+
export * from "./components/gui";
|
|
11
|
+
export * from "./components/effects";
|
|
12
|
+
export * from "./presets";
|
|
13
|
+
export * from "./components";
|
package/src/module.ts
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { findModules, provideModules } from "@rpgjs/common";
|
|
2
|
+
import { RpgClientEngine } from "./RpgClientEngine";
|
|
3
|
+
import { RpgClient } from "./RpgClient";
|
|
4
|
+
import { inject } from "@signe/di";
|
|
5
|
+
import { RpgGui } from "./Gui/Gui";
|
|
6
|
+
|
|
7
|
+
export function provideClientModules(modules: RpgClient[]) {
|
|
8
|
+
return provideModules(modules, "client", (modules, context) => {
|
|
9
|
+
const mainModuleClient = findModules(context, 'Client')
|
|
10
|
+
modules = [...mainModuleClient, ...modules]
|
|
11
|
+
modules = modules.map((module) => {
|
|
12
|
+
if ('client' in module) {
|
|
13
|
+
module = module.client as any;
|
|
14
|
+
}
|
|
15
|
+
if (module.spritesheets) {
|
|
16
|
+
const spritesheets = [...module.spritesheets];
|
|
17
|
+
module.spritesheets = {
|
|
18
|
+
load: (engine: RpgClientEngine) => {
|
|
19
|
+
spritesheets.forEach((spritesheet) => {
|
|
20
|
+
engine.addSpriteSheet(spritesheet);
|
|
21
|
+
});
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
if (module.sounds) {
|
|
26
|
+
const sounds = [...module.sounds];
|
|
27
|
+
module.sounds = {
|
|
28
|
+
load: (engine: RpgClientEngine) => {
|
|
29
|
+
sounds.forEach((sound) => {
|
|
30
|
+
engine.addSound(sound);
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (module.gui) {
|
|
36
|
+
const gui = [...module.gui];
|
|
37
|
+
module.gui = {
|
|
38
|
+
load: (engine: RpgClientEngine) => {
|
|
39
|
+
const guiService = inject(engine.context, RpgGui);
|
|
40
|
+
gui.forEach((gui) => {
|
|
41
|
+
guiService.add(gui);
|
|
42
|
+
});
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
if (module.effects) {
|
|
47
|
+
const effects = [...module.effects];
|
|
48
|
+
module.effects = {
|
|
49
|
+
load: (engine: RpgClientEngine) => {
|
|
50
|
+
effects.forEach((effect) => {
|
|
51
|
+
engine.addEffect(effect);
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
if (module.particles) {
|
|
57
|
+
const particles = [...module.particles];
|
|
58
|
+
module.particles = {
|
|
59
|
+
load: (engine: RpgClientEngine) => {
|
|
60
|
+
particles.forEach((particle) => {
|
|
61
|
+
engine.addParticle(particle);
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
return module;
|
|
67
|
+
});
|
|
68
|
+
return modules
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export const GlobalConfigToken = "GlobalConfigToken";
|
|
73
|
+
|
|
74
|
+
export function provideGlobalConfig(config: any) {
|
|
75
|
+
return {
|
|
76
|
+
provide: GlobalConfigToken,
|
|
77
|
+
useValue: config ?? {},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export function provideClientGlobalConfig(config: any = {}) {
|
|
82
|
+
if (!config.keyboardControls) {
|
|
83
|
+
config.keyboardControls = {
|
|
84
|
+
up: 'up',
|
|
85
|
+
down: 'down',
|
|
86
|
+
left: 'left',
|
|
87
|
+
right: 'right',
|
|
88
|
+
action: 'space'
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return provideGlobalConfig(config)
|
|
92
|
+
}
|
|
93
|
+
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { Direction } from '@rpgjs/common'
|
|
2
|
-
import { Animation } from '../Effects/AnimationCharacter'
|
|
1
|
+
import { Direction, Animation } from '@rpgjs/common'
|
|
3
2
|
|
|
4
3
|
export const RMSpritesheet = (framesWidth: number, framesHeight: number, frameStand: number = 1) => {
|
|
5
4
|
|
|
@@ -31,13 +30,13 @@ export const RMSpritesheet = (framesWidth: number, framesHeight: number, frameSt
|
|
|
31
30
|
return {
|
|
32
31
|
textures: {
|
|
33
32
|
[Animation.Stand]: {
|
|
34
|
-
animations: direction => [stand(direction)]
|
|
33
|
+
animations: ({direction}) => [stand(direction)]
|
|
35
34
|
},
|
|
36
35
|
[Animation.Walk]: {
|
|
37
|
-
animations: direction => [walk(direction)]
|
|
36
|
+
animations: ({direction}) => [walk(direction)]
|
|
38
37
|
}
|
|
39
38
|
},
|
|
40
39
|
framesHeight,
|
|
41
40
|
framesWidth
|
|
42
41
|
}
|
|
43
|
-
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Context } from "@signe/di";
|
|
2
|
+
|
|
3
|
+
export const WebSocketToken = "websocket";
|
|
4
|
+
|
|
5
|
+
export abstract class AbstractWebsocket {
|
|
6
|
+
constructor(protected context: Context) {}
|
|
7
|
+
|
|
8
|
+
abstract connection(listeners?: (data: any) => void): Promise<void>;
|
|
9
|
+
abstract emit(event: string, data: any): void;
|
|
10
|
+
abstract on(event: string, callback: (data: any) => void): void;
|
|
11
|
+
abstract off(event: string, callback: (data: any) => void): void;
|
|
12
|
+
abstract updateProperties(params: { room: string, host?: string }): void;
|
|
13
|
+
abstract reconnect(listeners?: (data: any) => void): void;
|
|
14
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Context, inject } from "@signe/di";
|
|
2
|
+
import { UpdateMapToken, UpdateMapService } from "@rpgjs/common";
|
|
3
|
+
|
|
4
|
+
export const LoadMapToken = 'LoadMapToken'
|
|
5
|
+
|
|
6
|
+
export type LoadMapOptions = (mapId: string) => Promise<void>
|
|
7
|
+
|
|
8
|
+
export class LoadMapService {
|
|
9
|
+
private updateMapService: UpdateMapService;
|
|
10
|
+
|
|
11
|
+
constructor(private context: Context, private options: LoadMapOptions) {
|
|
12
|
+
this.updateMapService = inject(context, UpdateMapToken);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
async load(mapId: string) {
|
|
16
|
+
const map = await this.options(mapId.replace('map-', ''))
|
|
17
|
+
await this.updateMapService.update(mapId, map);
|
|
18
|
+
return map;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function provideLoadMap(options: LoadMapOptions) {
|
|
23
|
+
return [
|
|
24
|
+
{
|
|
25
|
+
provide: UpdateMapToken,
|
|
26
|
+
useFactory: (context: Context) => console.warn('UpdateMapToken is not overridden'),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
provide: LoadMapToken,
|
|
30
|
+
useFactory: (context: Context) => new LoadMapService(context, options),
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { Context } from "@signe/di";
|
|
2
|
+
import { connectionRoom } from "@signe/sync/client";
|
|
3
|
+
import { RpgGui } from "../Gui/Gui";
|
|
4
|
+
import { RpgClientEngine } from "../RpgClientEngine";
|
|
5
|
+
import { AbstractWebsocket, WebSocketToken } from "./AbstractSocket";
|
|
6
|
+
import { UpdateMapService, UpdateMapToken } from "@rpgjs/common";
|
|
7
|
+
|
|
8
|
+
interface MmorpgOptions {
|
|
9
|
+
host: string;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
class BridgeWebsocket extends AbstractWebsocket {
|
|
13
|
+
private socket: any;
|
|
14
|
+
|
|
15
|
+
constructor(protected context: Context, private options: MmorpgOptions) {
|
|
16
|
+
super(context);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async connection() {
|
|
20
|
+
// tmp
|
|
21
|
+
class Room {
|
|
22
|
+
|
|
23
|
+
}
|
|
24
|
+
const instance = new Room()
|
|
25
|
+
this.socket = await connectionRoom(this.options, instance)
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
on(key: string, callback: (data: any) => void) {
|
|
29
|
+
this.socket.on(key, callback);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
off(event: string, callback: (data: any) => void) {
|
|
33
|
+
this.socket.off(event, callback);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
emit(event: string, data: any) {
|
|
37
|
+
this.socket.emit(event, data);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
class UpdateMapStandaloneService extends UpdateMapService {
|
|
42
|
+
constructor(protected context: Context, private options: MmorpgOptions) {
|
|
43
|
+
super(context);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async update(map: any) {
|
|
47
|
+
// nothing
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export function provideMmorpg(options: MmorpgOptions) {
|
|
52
|
+
return [
|
|
53
|
+
{
|
|
54
|
+
provide: WebSocketToken,
|
|
55
|
+
useFactory: (context: Context) => new BridgeWebsocket(context, options),
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
provide: UpdateMapToken,
|
|
59
|
+
useFactory: (context: Context) => new UpdateMapStandaloneService(context, options),
|
|
60
|
+
},
|
|
61
|
+
RpgGui,
|
|
62
|
+
RpgClientEngine,
|
|
63
|
+
];
|
|
64
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { AbstractWebsocket, WebSocketToken } from "./AbstractSocket";
|
|
2
|
+
import { ClientIo, ServerIo } from "@signe/room";
|
|
3
|
+
import { Context } from "@signe/di";
|
|
4
|
+
import { RpgClientEngine } from "../RpgClientEngine";
|
|
5
|
+
import { UpdateMapService, UpdateMapToken } from "@rpgjs/common";
|
|
6
|
+
import { LoadMapToken } from "./loadMap";
|
|
7
|
+
import { RpgGui } from "../Gui/Gui";
|
|
8
|
+
|
|
9
|
+
type ServerIo = any;
|
|
10
|
+
type ClientIo = any;
|
|
11
|
+
|
|
12
|
+
class BridgeWebsocket extends AbstractWebsocket {
|
|
13
|
+
private room: ServerIo;
|
|
14
|
+
private socket: ClientIo;
|
|
15
|
+
|
|
16
|
+
constructor(protected context: Context, private server: any) {
|
|
17
|
+
super(context);
|
|
18
|
+
// fake room
|
|
19
|
+
this.room = new ServerIo("lobby-1");
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async connection(listeners?: (data: any) => void) {
|
|
23
|
+
const server = new this.server(this.room);
|
|
24
|
+
await server.onStart();
|
|
25
|
+
this.context.set('server', server)
|
|
26
|
+
this.socket = new ClientIo(server);
|
|
27
|
+
const url = new URL('http://localhost')
|
|
28
|
+
const request = new Request(url.toString(), {
|
|
29
|
+
method: 'GET',
|
|
30
|
+
headers: {
|
|
31
|
+
'Content-Type': 'application/json'
|
|
32
|
+
}
|
|
33
|
+
})
|
|
34
|
+
listeners?.(this.socket)
|
|
35
|
+
await server.onConnect(this.socket.conn as any, { request } as any);
|
|
36
|
+
this.room.clients.set(this.socket.id, this.socket);
|
|
37
|
+
return this.socket
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
on(key: string, callback: (data: any) => void) {
|
|
41
|
+
this.socket.addEventListener("message", (event) => {
|
|
42
|
+
const object = JSON.parse(event);
|
|
43
|
+
if (object.type === key) {
|
|
44
|
+
callback(object.value);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
off(event: string, callback: (data: any) => void) {
|
|
50
|
+
this.socket.removeEventListener(event, callback);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
emit(event: string, data: any) {
|
|
54
|
+
this.socket.send({
|
|
55
|
+
action: event,
|
|
56
|
+
value: data,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
updateProperties({ room }: { room: any }) {
|
|
61
|
+
this.room = new ServerIo(room);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
async reconnect(listeners?: (data: any) => void) {
|
|
65
|
+
await this.connection((socket) => {
|
|
66
|
+
listeners?.(socket)
|
|
67
|
+
})
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
class UpdateMapStandaloneService extends UpdateMapService {
|
|
72
|
+
private server: any;
|
|
73
|
+
|
|
74
|
+
async update(mapId: string, map: any) {
|
|
75
|
+
this.server = this.context.get('server')
|
|
76
|
+
const req = {
|
|
77
|
+
url: `http://localhost/parties/main/${mapId}/map/update`,
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: new Headers({}),
|
|
80
|
+
json: async () => {
|
|
81
|
+
return map;
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
await this.server.onRequest(req)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export function provideRpg(server: any) {
|
|
89
|
+
return [
|
|
90
|
+
{
|
|
91
|
+
provide: WebSocketToken,
|
|
92
|
+
useFactory: (context: Context) => new BridgeWebsocket(context, server),
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
provide: UpdateMapToken,
|
|
96
|
+
useClass: UpdateMapStandaloneService,
|
|
97
|
+
},
|
|
98
|
+
RpgGui,
|
|
99
|
+
RpgClientEngine,
|
|
100
|
+
];
|
|
101
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canvas Engine Component Type Declarations
|
|
3
|
+
*
|
|
4
|
+
* This file declares module types for Canvas Engine components (.ce files)
|
|
5
|
+
* to enable TypeScript support and proper import resolution.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
declare module "*.ce" {
|
|
9
|
+
/**
|
|
10
|
+
* Canvas Engine Component
|
|
11
|
+
*
|
|
12
|
+
* @description Represents a Canvas Engine component that can be imported
|
|
13
|
+
* and used within the application. These components combine template markup
|
|
14
|
+
* with reactive JavaScript logic.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* import MyComponent from "./components/my-component.ce";
|
|
19
|
+
*
|
|
20
|
+
* // Use the component in your application
|
|
21
|
+
* const componentInstance = MyComponent;
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
const component: any;
|
|
25
|
+
export default component;
|
|
26
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
"sourceMap": true,
|
|
10
10
|
"strictNullChecks": true,
|
|
11
11
|
"strictPropertyInitialization": false,
|
|
12
|
-
"moduleResolution": "
|
|
12
|
+
"moduleResolution": "bundler",
|
|
13
13
|
"esModuleInterop": true,
|
|
14
14
|
"removeComments": false,
|
|
15
15
|
"noUnusedParameters": false,
|
|
@@ -24,7 +24,12 @@
|
|
|
24
24
|
"skipLibCheck": true
|
|
25
25
|
},
|
|
26
26
|
"include": [
|
|
27
|
-
"src"
|
|
27
|
+
"src",
|
|
28
|
+
"src/types/**/*",
|
|
29
|
+
"node_modules/canvasengine/*"
|
|
30
|
+
],
|
|
31
|
+
"typeRoots": [
|
|
32
|
+
"node_modules/@types",
|
|
33
|
+
"src/types"
|
|
28
34
|
],
|
|
29
|
-
|
|
30
35
|
}
|
package/vite.config.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { defineConfig } from 'vite'
|
|
2
|
+
import canvasengine from '@canvasengine/compiler'
|
|
3
|
+
import dts from 'vite-plugin-dts'
|
|
4
|
+
import path from 'path'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
6
|
+
|
|
7
|
+
const dirname = path.dirname(fileURLToPath(import.meta.url))
|
|
8
|
+
|
|
9
|
+
export default defineConfig({
|
|
10
|
+
plugins: [
|
|
11
|
+
canvasengine(),
|
|
12
|
+
dts({
|
|
13
|
+
include: ['src/**/*.ts'],
|
|
14
|
+
outDir: 'dist'
|
|
15
|
+
})
|
|
16
|
+
],
|
|
17
|
+
build: {
|
|
18
|
+
target: 'esnext',
|
|
19
|
+
sourcemap: true,
|
|
20
|
+
minify: false,
|
|
21
|
+
lib: {
|
|
22
|
+
entry: 'src/index.ts',
|
|
23
|
+
formats: ['es'],
|
|
24
|
+
fileName: 'index'
|
|
25
|
+
},
|
|
26
|
+
rollupOptions: {
|
|
27
|
+
external: [/@rpgjs/, 'esbuild', 'canvasengine', '@canvasengine/presets', 'rxjs'],
|
|
28
|
+
output: {
|
|
29
|
+
preserveModules: true,
|
|
30
|
+
preserveModulesRoot: 'src'
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
})
|
package/CHANGELOG.md
DELETED
|
@@ -1,177 +0,0 @@
|
|
|
1
|
-
# Change Log
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file.
|
|
4
|
-
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
|
-
|
|
6
|
-
## [4.2.2](https://github.com/RSamaium/RPG-JS/compare/v4.2.1...v4.2.2) (2024-01-15)
|
|
7
|
-
|
|
8
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
## [4.2.1](https://github.com/RSamaium/RPG-JS/compare/v4.2.0...v4.2.1) (2024-01-12)
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
### Bug Fixes
|
|
18
|
-
|
|
19
|
-
* #community-261 ([8221085](https://github.com/RSamaium/RPG-JS/commit/8221085a962b1555aa20ba154b6790d4522da971)), closes [#community-261](https://github.com/RSamaium/RPG-JS/issues/community-261)
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
# [4.2.0](https://github.com/RSamaium/RPG-JS/compare/v4.1.3...v4.2.0) (2023-12-09)
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
### Features
|
|
29
|
-
|
|
30
|
-
* inject function ([902e62f](https://github.com/RSamaium/RPG-JS/commit/902e62ff4fdd9b5bd26ee7d5be9ccae2b051f248))
|
|
31
|
-
* propagate event directive ([edbab50](https://github.com/RSamaium/RPG-JS/commit/edbab506a2552ff64d2f638d1e088748cbc8cc86))
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
## [4.1.3](https://github.com/RSamaium/RPG-JS/compare/v4.1.2...v4.1.3) (2023-11-17)
|
|
38
|
-
|
|
39
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
## [4.1.2](https://github.com/RSamaium/RPG-JS/compare/v4.1.1...v4.1.2) (2023-10-30)
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
### Bug Fixes
|
|
49
|
-
|
|
50
|
-
* **gui:** don't propagate events ([1439e0f](https://github.com/RSamaium/RPG-JS/commit/1439e0fa4718cbdc07cd2ceb8ff4067e116cef9b))
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
## [4.1.1](https://github.com/RSamaium/RPG-JS/compare/v4.1.0...v4.1.1) (2023-10-27)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
### Bug Fixes
|
|
60
|
-
|
|
61
|
-
* **gui:** get vue instance #community-215 ([2874815](https://github.com/RSamaium/RPG-JS/commit/287481517028196f1bf8bc327b68134e8f5f63d0)), closes [#community-215](https://github.com/RSamaium/RPG-JS/issues/community-215)
|
|
62
|
-
* **scene:** click in scene map ([04d56d6](https://github.com/RSamaium/RPG-JS/commit/04d56d6e07c58e2c039732e35ae3b94fc6751fa5))
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
# [4.1.0](https://github.com/RSamaium/RPG-JS/compare/v4.0.5...v4.1.0) (2023-10-20)
|
|
69
|
-
|
|
70
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
## 4.0.5 (2023-10-18)
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
### Bug Fixes
|
|
80
|
-
|
|
81
|
-
* flickering motion of an event as it moves ([b2b8832](https://github.com/RSamaium/RPG-JS/commit/b2b8832a1582933afb64c698f40d1b0e72021780))
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
## 4.0.4 (2023-10-13)
|
|
88
|
-
|
|
89
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
## 4.0.3 (2023-10-10)
|
|
96
|
-
|
|
97
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
## 4.0.2 (2023-10-03)
|
|
104
|
-
|
|
105
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
## 4.0.1 (2023-10-03)
|
|
112
|
-
|
|
113
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
# 4.0.0-rc.13 (2023-09-09)
|
|
120
|
-
|
|
121
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
# 4.0.0-rc.12 (2023-09-08)
|
|
128
|
-
|
|
129
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
# 4.0.0-rc.11 (2023-08-30)
|
|
136
|
-
|
|
137
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
# 4.0.0-rc.10 (2023-08-28)
|
|
144
|
-
|
|
145
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
# 4.0.0-rc.9 (2023-08-25)
|
|
152
|
-
|
|
153
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
# 4.0.0-rc.8 (2023-08-23)
|
|
160
|
-
|
|
161
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
# [4.0.0-rc.6](https://github.com/RSamaium/RPG-JS/compare/v4.0.0-rc.5...v4.0.0-rc.6) (2023-08-20)
|
|
168
|
-
|
|
169
|
-
**Note:** Version bump only for package @rpgjs/client
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
# [4.0.0-rc.5](https://github.com/RSamaium/RPG-JS/compare/v4.0.0-rc.4...v4.0.0-rc.5) (2023-08-16)
|
|
176
|
-
|
|
177
|
-
**Note:** Version bump only for package @rpgjs/client
|
package/LICENSE
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
Copyright (C) 2020 by Samuel Ronce
|
|
2
|
-
|
|
3
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
5
|
-
in the Software without restriction, including without limitation the rights
|
|
6
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
7
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
8
|
-
furnished to do so, subject to the following conditions:
|
|
9
|
-
|
|
10
|
-
The above copyright notice and this permission notice shall be included in
|
|
11
|
-
all copies or substantial portions of the Software.
|
|
12
|
-
|
|
13
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
18
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
19
|
-
THE SOFTWARE.
|