@kbve/laser 0.0.6
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/README.md +11 -0
- package/package.json +43 -0
- package/src/index.d.ts +17 -0
- package/src/index.js +34 -0
- package/src/index.js.map +1 -0
- package/src/lib/animations/TypewriterComponent.d.ts +8 -0
- package/src/lib/animations/TypewriterComponent.js +53 -0
- package/src/lib/animations/TypewriterComponent.js.map +1 -0
- package/src/lib/eventhandler.d.ts +31 -0
- package/src/lib/eventhandler.js +45 -0
- package/src/lib/eventhandler.js.map +1 -0
- package/src/lib/icon/CollapseIcon.d.ts +4 -0
- package/src/lib/icon/CollapseIcon.js +10 -0
- package/src/lib/icon/CollapseIcon.js.map +1 -0
- package/src/lib/icon/ExpandIcon.d.ts +4 -0
- package/src/lib/icon/ExpandIcon.js +10 -0
- package/src/lib/icon/ExpandIcon.js.map +1 -0
- package/src/lib/laser.d.ts +1 -0
- package/src/lib/laser.js +8 -0
- package/src/lib/laser.js.map +1 -0
- package/src/lib/localdb.d.ts +55 -0
- package/src/lib/localdb.js +591 -0
- package/src/lib/localdb.js.map +1 -0
- package/src/lib/minigame/dice/MinigameDice.d.ts +4 -0
- package/src/lib/minigame/dice/MinigameDice.js +85 -0
- package/src/lib/minigame/dice/MinigameDice.js.map +1 -0
- package/src/lib/phaser/monster/bird.d.ts +7 -0
- package/src/lib/phaser/monster/bird.js +44 -0
- package/src/lib/phaser/monster/bird.js.map +1 -0
- package/src/lib/phaser/npc/chatbubble.d.ts +10 -0
- package/src/lib/phaser/npc/chatbubble.js +78 -0
- package/src/lib/phaser/npc/chatbubble.js.map +1 -0
- package/src/lib/phaser/npc/npcdatabase.d.ts +56 -0
- package/src/lib/phaser/npc/npcdatabase.js +497 -0
- package/src/lib/phaser/npc/npcdatabase.js.map +1 -0
- package/src/lib/phaser/npc/npchandler.d.ts +20 -0
- package/src/lib/phaser/npc/npchandler.js +114 -0
- package/src/lib/phaser/npc/npchandler.js.map +1 -0
- package/src/lib/phaser/npc/tooltipmenu.d.ts +17 -0
- package/src/lib/phaser/npc/tooltipmenu.js +68 -0
- package/src/lib/phaser/npc/tooltipmenu.js.map +1 -0
- package/src/lib/phaser/player/playercontroller.d.ts +24 -0
- package/src/lib/phaser/player/playercontroller.js +219 -0
- package/src/lib/phaser/player/playercontroller.js.map +1 -0
- package/src/lib/quadtree.d.ts +37 -0
- package/src/lib/quadtree.js +123 -0
- package/src/lib/quadtree.js.map +1 -0
- package/src/lib/utils/debug.d.ts +8 -0
- package/src/lib/utils/debug.js +46 -0
- package/src/lib/utils/debug.js.map +1 -0
- package/src/lib/utils/ulid.d.ts +1 -0
- package/src/lib/utils/ulid.js +38 -0
- package/src/lib/utils/ulid.js.map +1 -0
- package/src/types.d.ts +355 -0
- package/src/types.js +9 -0
- package/src/types.js.map +1 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
// MinigameDice.tsx
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const fiber_1 = require("@react-three/fiber");
|
|
8
|
+
const react_2 = require("@nanostores/react");
|
|
9
|
+
const eventhandler_1 = require("../../eventhandler");
|
|
10
|
+
const localdb_1 = require("../../localdb");
|
|
11
|
+
const types_1 = require("../../../types");
|
|
12
|
+
const THREE = tslib_1.__importStar(require("three"));
|
|
13
|
+
const diceOrientations = [
|
|
14
|
+
new THREE.Euler(-Math.PI / 2, -Math.PI / 2, -Math.PI / 2), // 1
|
|
15
|
+
new THREE.Euler(0, Math.PI / 2, 0), // 2
|
|
16
|
+
new THREE.Euler(0, -Math.PI / 2, -Math.PI / 2), // 3
|
|
17
|
+
new THREE.Euler(Math.PI / 2, Math.PI, Math.PI), // 4
|
|
18
|
+
new THREE.Euler(0, 0, -Math.PI / 2), // 5
|
|
19
|
+
new THREE.Euler(Math.PI, 0, 0) // 6
|
|
20
|
+
];
|
|
21
|
+
const PixelatedDice = ({ diceValues, isRolling, textures }) => {
|
|
22
|
+
const diceRefs = (0, react_1.useRef)([]);
|
|
23
|
+
const materialsRef = (0, react_1.useRef)([]);
|
|
24
|
+
(0, react_1.useEffect)(() => {
|
|
25
|
+
const loader = new THREE.TextureLoader();
|
|
26
|
+
//const yellowTint = new THREE.Color(0xffff00);
|
|
27
|
+
const yellowTint = new THREE.Color(0xFFD700);
|
|
28
|
+
materialsRef.current = [
|
|
29
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side1), color: yellowTint }),
|
|
30
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side2), color: yellowTint }),
|
|
31
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side3), color: yellowTint }),
|
|
32
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side4), color: yellowTint }),
|
|
33
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side5), color: yellowTint }),
|
|
34
|
+
new THREE.MeshStandardMaterial({ map: loader.load(textures.side6), color: yellowTint }),
|
|
35
|
+
];
|
|
36
|
+
diceRefs.current.forEach((dice) => {
|
|
37
|
+
if (dice) {
|
|
38
|
+
dice.material = materialsRef.current;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}, [textures]);
|
|
42
|
+
(0, fiber_1.useFrame)(() => {
|
|
43
|
+
diceRefs.current.forEach((dice, index) => {
|
|
44
|
+
if (dice) {
|
|
45
|
+
if (isRolling) {
|
|
46
|
+
dice.rotation.x += 0.2;
|
|
47
|
+
dice.rotation.y += 0.2;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
const targetRotation = diceOrientations[diceValues[index] - 1];
|
|
51
|
+
dice.rotation.x = THREE.MathUtils.lerp(dice.rotation.x, targetRotation.x, 0.1);
|
|
52
|
+
dice.rotation.y = THREE.MathUtils.lerp(dice.rotation.y, targetRotation.y, 0.1);
|
|
53
|
+
dice.rotation.z = THREE.MathUtils.lerp(dice.rotation.z, targetRotation.z, 0.1);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: diceValues.map((value, index) => ((0, jsx_runtime_1.jsxs)("mesh", { ref: el => diceRefs.current[index] = el, position: [index * 2 - (diceValues.length - 1), 0, 0], children: [(0, jsx_runtime_1.jsx)("boxGeometry", { args: [1, 1, 1] }), materialsRef.current.length === 6 && materialsRef.current.map((material, i) => ((0, jsx_runtime_1.jsx)("meshStandardMaterial", Object.assign({ attach: `material-${i}` }, material), i)))] }, index))) }));
|
|
59
|
+
};
|
|
60
|
+
const MinigameDice = ({ styleClass, textures, diceCount }) => {
|
|
61
|
+
const state = (0, react_2.useStore)(localdb_1.minigameState);
|
|
62
|
+
(0, react_1.useEffect)(() => {
|
|
63
|
+
(0, localdb_1.setGameMode)('Dice');
|
|
64
|
+
(0, localdb_1.setTextures)(textures);
|
|
65
|
+
(0, localdb_1.setAction)({
|
|
66
|
+
type: 'ROLL_DICE',
|
|
67
|
+
diceValues: Array(diceCount).fill(1),
|
|
68
|
+
isRolling: false,
|
|
69
|
+
});
|
|
70
|
+
}, [textures, diceCount]);
|
|
71
|
+
const rollDice = () => {
|
|
72
|
+
(0, localdb_1.setRollingStatus)(true);
|
|
73
|
+
setTimeout(() => {
|
|
74
|
+
const newValues = Array.from({ length: diceCount }, () => Math.floor(Math.random() * 6) + 1);
|
|
75
|
+
(0, localdb_1.updateDiceValues)(newValues);
|
|
76
|
+
(0, localdb_1.setRollingStatus)(false);
|
|
77
|
+
// Emit the roll result
|
|
78
|
+
const rollResult = { diceValues: newValues };
|
|
79
|
+
eventhandler_1.EventEmitter.emit('diceRollResult', rollResult);
|
|
80
|
+
}, 2000); // Duration matches the animation
|
|
81
|
+
};
|
|
82
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: `flex flex-col items-center justify-center p-4 ${styleClass}`, children: [(0, jsx_runtime_1.jsx)("h1", { className: "text-2xl font-bold mb-4", children: "Dice Roller" }), (0, jsx_runtime_1.jsxs)(fiber_1.Canvas, { className: "w-full h-full", camera: { position: [0, 0, 5] }, children: [(0, jsx_runtime_1.jsx)("ambientLight", { intensity: 2.5 }), (0, jsx_runtime_1.jsx)("pointLight", { position: [10, 10, 10] }), (0, types_1.isDiceAction)(state.action) && ((0, jsx_runtime_1.jsx)(PixelatedDice, { diceValues: state.action.diceValues, isRolling: state.action.isRolling, textures: state.textures }))] }), (0, types_1.isDiceAction)(state.action) && ((0, jsx_runtime_1.jsx)("button", { onClick: rollDice, className: `mt-4 p-2 border border-yellow-300 rounded text-yellow-400 hover:scale-110 ${state.action.isRolling ? 'opacity-50' : ''}`, disabled: state.action.isRolling, children: "Roll Dice" }))] }));
|
|
83
|
+
};
|
|
84
|
+
exports.default = MinigameDice;
|
|
85
|
+
//# sourceMappingURL=MinigameDice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MinigameDice.js","sourceRoot":"","sources":["../../../../../../../packages/laser/src/lib/minigame/dice/MinigameDice.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Scene } from 'phaser';
|
|
2
|
+
export declare function getBirdNum(charId: string): number;
|
|
3
|
+
export declare function isBird(charId: string): boolean;
|
|
4
|
+
export declare function createCroppedSprites(scene: Scene, x: number, y: number, width: number, height: number): Phaser.GameObjects.Sprite[];
|
|
5
|
+
export declare function createBirdSprites(scene: Scene): Phaser.GameObjects.Sprite[];
|
|
6
|
+
export declare function createShadowSprites(scene: Scene): Phaser.GameObjects.Sprite[];
|
|
7
|
+
export declare function createBirdAnimation(scene: Scene): void;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createBirdAnimation = exports.createShadowSprites = exports.createBirdSprites = exports.createCroppedSprites = exports.isBird = exports.getBirdNum = void 0;
|
|
4
|
+
function getBirdNum(charId) {
|
|
5
|
+
return +charId[charId.length - 1];
|
|
6
|
+
}
|
|
7
|
+
exports.getBirdNum = getBirdNum;
|
|
8
|
+
function isBird(charId) {
|
|
9
|
+
return charId.startsWith('monster_bird_') && !charId.startsWith('monster_bird_shadow');
|
|
10
|
+
}
|
|
11
|
+
exports.isBird = isBird;
|
|
12
|
+
function createCroppedSprites(scene, x, y, width, height) {
|
|
13
|
+
const croppedSprites = [];
|
|
14
|
+
for (let i = 0; i < 10; i++) {
|
|
15
|
+
const monsterBirdSprite = scene.add.sprite(0, 0, "monster_bird");
|
|
16
|
+
monsterBirdSprite.setCrop(x, y, width, height);
|
|
17
|
+
monsterBirdSprite.scale = 3;
|
|
18
|
+
croppedSprites.push(monsterBirdSprite);
|
|
19
|
+
}
|
|
20
|
+
return croppedSprites;
|
|
21
|
+
}
|
|
22
|
+
exports.createCroppedSprites = createCroppedSprites;
|
|
23
|
+
function createBirdSprites(scene) {
|
|
24
|
+
return createCroppedSprites(scene, 0, 0, 61, 47);
|
|
25
|
+
}
|
|
26
|
+
exports.createBirdSprites = createBirdSprites;
|
|
27
|
+
function createShadowSprites(scene) {
|
|
28
|
+
return createCroppedSprites(scene, 22, 47, 16, 10);
|
|
29
|
+
}
|
|
30
|
+
exports.createShadowSprites = createShadowSprites;
|
|
31
|
+
function createBirdAnimation(scene) {
|
|
32
|
+
scene.anims.create({
|
|
33
|
+
key: "bird",
|
|
34
|
+
frames: scene.anims.generateFrameNumbers("monster_bird", {
|
|
35
|
+
start: 0,
|
|
36
|
+
end: 2,
|
|
37
|
+
}),
|
|
38
|
+
frameRate: 10,
|
|
39
|
+
repeat: -1,
|
|
40
|
+
yoyo: true,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
exports.createBirdAnimation = createBirdAnimation;
|
|
44
|
+
//# sourceMappingURL=bird.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bird.js","sourceRoot":"","sources":["../../../../../../../packages/laser/src/lib/phaser/monster/bird.ts"],"names":[],"mappings":";;;AAEA,SAAgB,UAAU,CAAC,MAAc;IACvC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACpC,CAAC;AAFD,gCAEC;AAED,SAAgB,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;AACzF,CAAC;AAFD,wBAEC;AAED,SAAgB,oBAAoB,CAAC,KAAY,EAAE,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc;IACpG,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,MAAM,iBAAiB,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;QACjE,iBAAiB,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAC/C,iBAAiB,CAAC,KAAK,GAAG,CAAC,CAAC;QAC5B,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AATD,oDASC;AAED,SAAgB,iBAAiB,CAAC,KAAY;IAC5C,OAAO,oBAAoB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC;AAFD,8CAEC;AAED,SAAgB,mBAAmB,CAAC,KAAY;IAC9C,OAAO,oBAAoB,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC;AAFD,kDAEC;AAED,SAAgB,mBAAmB,CAAC,KAAY;IAC9C,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;QACjB,GAAG,EAAE,MAAM;QACX,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,cAAc,EAAE;YACvD,KAAK,EAAE,CAAC;YACR,GAAG,EAAE,CAAC;SACP,CAAC;QACF,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,CAAC,CAAC;QACV,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAXD,kDAWC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Scene } from 'phaser';
|
|
2
|
+
declare class ExtendedSprite extends Phaser.GameObjects.Sprite {
|
|
3
|
+
textBubble?: Phaser.GameObjects.Container;
|
|
4
|
+
messageBubble?: Phaser.GameObjects.Container;
|
|
5
|
+
}
|
|
6
|
+
export declare function createMessageBubble(scene: Scene, sprite: ExtendedSprite, text: string | string[], duration: number): Phaser.GameObjects.Container;
|
|
7
|
+
export declare function createTextBubble(scene: Scene, sprite: ExtendedSprite, text: string | string[]): Phaser.GameObjects.Container;
|
|
8
|
+
export declare function updateTextBubblePosition(sprite: ExtendedSprite): void;
|
|
9
|
+
export declare function updateMessageBubblePosition(sprite: ExtendedSprite): void;
|
|
10
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.updateMessageBubblePosition = exports.updateTextBubblePosition = exports.createTextBubble = exports.createMessageBubble = void 0;
|
|
4
|
+
class ExtendedSprite extends Phaser.GameObjects.Sprite {
|
|
5
|
+
}
|
|
6
|
+
function createMessageBubble(scene, sprite, text, duration) {
|
|
7
|
+
const bubbleWidth = 200;
|
|
8
|
+
const bubbleHeight = 60;
|
|
9
|
+
const bubblePadding = 10;
|
|
10
|
+
const bubble = scene.add.graphics();
|
|
11
|
+
bubble.fillStyle(0xffffff, 1);
|
|
12
|
+
bubble.fillRoundedRect(0, 0, bubbleWidth, bubbleHeight, 16);
|
|
13
|
+
bubble.setDepth(99);
|
|
14
|
+
const content = scene.add.text(100, 30, text, {
|
|
15
|
+
fontFamily: 'Arial',
|
|
16
|
+
fontSize: 16,
|
|
17
|
+
color: '#000000',
|
|
18
|
+
});
|
|
19
|
+
content.setOrigin(0.5);
|
|
20
|
+
content.setWordWrapWidth(bubbleWidth - bubblePadding * 2);
|
|
21
|
+
content.setDepth(100);
|
|
22
|
+
const container = scene.add.container(0, 0, [bubble, content]);
|
|
23
|
+
container.setDepth(100);
|
|
24
|
+
sprite.messageBubble = container;
|
|
25
|
+
updateMessageBubblePosition(sprite);
|
|
26
|
+
scene.time.addEvent({
|
|
27
|
+
delay: duration,
|
|
28
|
+
callback: () => {
|
|
29
|
+
container.destroy();
|
|
30
|
+
if (sprite.messageBubble === container) {
|
|
31
|
+
sprite.messageBubble = undefined;
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
callbackScope: scene
|
|
35
|
+
});
|
|
36
|
+
return container;
|
|
37
|
+
}
|
|
38
|
+
exports.createMessageBubble = createMessageBubble;
|
|
39
|
+
function createTextBubble(scene, sprite, text) {
|
|
40
|
+
const bubbleWidth = 200;
|
|
41
|
+
const bubbleHeight = 60;
|
|
42
|
+
const bubblePadding = 10;
|
|
43
|
+
const bubble = scene.add.graphics();
|
|
44
|
+
bubble.fillStyle(0xffffff, 1);
|
|
45
|
+
bubble.fillRoundedRect(0, 0, bubbleWidth, bubbleHeight, 16);
|
|
46
|
+
bubble.setDepth(99);
|
|
47
|
+
const content = scene.add.text(100, 30, text, {
|
|
48
|
+
fontFamily: 'Arial',
|
|
49
|
+
fontSize: 16,
|
|
50
|
+
color: '#000000',
|
|
51
|
+
});
|
|
52
|
+
content.setOrigin(0.5);
|
|
53
|
+
content.setWordWrapWidth(bubbleWidth - bubblePadding * 2);
|
|
54
|
+
content.setDepth(100);
|
|
55
|
+
const container = scene.add.container(0, 0, [bubble, content]);
|
|
56
|
+
container.setDepth(100);
|
|
57
|
+
sprite.textBubble = container;
|
|
58
|
+
updateTextBubblePosition(sprite);
|
|
59
|
+
return container;
|
|
60
|
+
}
|
|
61
|
+
exports.createTextBubble = createTextBubble;
|
|
62
|
+
function updateTextBubblePosition(sprite) {
|
|
63
|
+
const container = sprite.textBubble;
|
|
64
|
+
if (container) {
|
|
65
|
+
container.x = sprite.x;
|
|
66
|
+
container.y = sprite.y - sprite.height - container.height / 2;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.updateTextBubblePosition = updateTextBubblePosition;
|
|
70
|
+
function updateMessageBubblePosition(sprite) {
|
|
71
|
+
const container = sprite.messageBubble;
|
|
72
|
+
if (container) {
|
|
73
|
+
container.x = sprite.x;
|
|
74
|
+
container.y = sprite.y - sprite.height - container.height / 2;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.updateMessageBubblePosition = updateMessageBubblePosition;
|
|
78
|
+
//# sourceMappingURL=chatbubble.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatbubble.js","sourceRoot":"","sources":["../../../../../../../packages/laser/src/lib/phaser/npc/chatbubble.ts"],"names":[],"mappings":";;;AAEA,MAAM,cAAe,SAAQ,MAAM,CAAC,WAAW,CAAC,MAAM;CAGrD;AAED,SAAgB,mBAAmB,CAAC,KAAY,EAAE,MAAsB,EAAE,IAAuB,EAAE,QAAgB;IACjH,MAAM,WAAW,GAAG,GAAG,CAAC;IACxB,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;QAC5C,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,gBAAgB,CAAC,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAExB,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;IACjC,2BAA2B,CAAC,MAAM,CAAC,CAAC;IAEpC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QAClB,KAAK,EAAE,QAAQ;QACf,QAAQ,EAAE,GAAG,EAAE;YACb,SAAS,CAAC,OAAO,EAAE,CAAC;YACpB,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;gBACvC,MAAM,CAAC,aAAa,GAAG,SAAS,CAAC;YACnC,CAAC;QACH,CAAC;QACD,aAAa,EAAE,KAAK;KACrB,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC;AACnB,CAAC;AArCD,kDAqCC;AAED,SAAgB,gBAAgB,CAAC,KAAY,EAAE,MAAsB,EAAE,IAAuB;IAC5F,MAAM,WAAW,GAAG,GAAG,CAAC;IACxB,MAAM,YAAY,GAAG,EAAE,CAAC;IACxB,MAAM,aAAa,GAAG,EAAE,CAAC;IAEzB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IACpC,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAEpB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE;QAC5C,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACvB,OAAO,CAAC,gBAAgB,CAAC,WAAW,GAAG,aAAa,GAAG,CAAC,CAAC,CAAC;IAC1D,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAEtB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/D,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAExB,MAAM,CAAC,UAAU,GAAG,SAAS,CAAC;IAC9B,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEjC,OAAO,SAAS,CAAC;AACnB,CAAC;AA1BD,4CA0BC;AAED,SAAgB,wBAAwB,CAAC,MAAsB;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC;IACpC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACvB,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAND,4DAMC;AAED,SAAgB,2BAA2B,CAAC,MAAsB;IAChE,MAAM,SAAS,GAAG,MAAM,CAAC,aAAa,CAAC;IACvC,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QACvB,SAAS,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAChE,CAAC;AACH,CAAC;AAND,kEAMC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import Dexie from 'dexie';
|
|
2
|
+
import { WritableAtom } from 'nanostores';
|
|
3
|
+
import { INPCData, ISprite, IAvatar, IDialogueObject } from '../../../types';
|
|
4
|
+
import { Scene } from 'phaser';
|
|
5
|
+
interface ExtendedScene extends Scene {
|
|
6
|
+
gridEngine: any;
|
|
7
|
+
}
|
|
8
|
+
declare class NPCDatabase extends Dexie {
|
|
9
|
+
npcs: Dexie.Table<INPCData, string>;
|
|
10
|
+
sprites: Dexie.Table<ISprite, string>;
|
|
11
|
+
avatars: Dexie.Table<IAvatar, string>;
|
|
12
|
+
dialogues: Dexie.Table<IDialogueObject, string>;
|
|
13
|
+
constructor();
|
|
14
|
+
addNPC(npcData: INPCData): Promise<void>;
|
|
15
|
+
getNPC(id: string): Promise<INPCData | undefined>;
|
|
16
|
+
getNPCByName(name: string): Promise<INPCData | undefined>;
|
|
17
|
+
getAllNPCs(): Promise<INPCData[]>;
|
|
18
|
+
exportNPCs(): Promise<string>;
|
|
19
|
+
importNPCs(jsonData: string): Promise<void>;
|
|
20
|
+
fetchNPCData(url: string): Promise<INPCData | undefined>;
|
|
21
|
+
addSprite(sprite: ISprite): Promise<void>;
|
|
22
|
+
getSprite(id: string): Promise<ISprite | undefined>;
|
|
23
|
+
getAllSprites(): Promise<ISprite[]>;
|
|
24
|
+
addAvatar(avatar: IAvatar): Promise<void>;
|
|
25
|
+
getAvatar(id: string): Promise<IAvatar | undefined>;
|
|
26
|
+
getAllAvatars(): Promise<IAvatar[]>;
|
|
27
|
+
urlToBlob(url: string): Promise<Blob | undefined>;
|
|
28
|
+
addNewSprite(url: string, spriteDetails: Omit<ISprite, 'spriteData'>): Promise<string | undefined>;
|
|
29
|
+
addNewNPC(npcDetails: Omit<INPCData, 'spriteImageId' | 'avatarImageId'>, spriteImageId: string, avatarImageId: string): Promise<void>;
|
|
30
|
+
addNewAvatar(url: string, avatarDetails: Omit<IAvatar, 'avatarData'>): Promise<string | undefined>;
|
|
31
|
+
fetchAvatars(url: string): Promise<void>;
|
|
32
|
+
fetchSprites(url: string): Promise<void>;
|
|
33
|
+
fetchNPCs(url: string): Promise<void>;
|
|
34
|
+
initializeDatabase(baseURL?: string): Promise<void>;
|
|
35
|
+
loadNPC(scene: ExtendedScene, npcName: string, x?: number, y?: number): Promise<void>;
|
|
36
|
+
loadCharacter(scene: ExtendedScene, npcId: string, x?: number, y?: number): Promise<void>;
|
|
37
|
+
addNPCToScene(scene: ExtendedScene, npcData: INPCData, x?: number, y?: number): void;
|
|
38
|
+
addDialogue(dialogue: IDialogueObject): Promise<void>;
|
|
39
|
+
getDialogue(id: string): Promise<IDialogueObject | undefined>;
|
|
40
|
+
getAllDialogues(): Promise<IDialogueObject[]>;
|
|
41
|
+
getDialoguesForNPC(npcId: string): Promise<IDialogueObject[]>;
|
|
42
|
+
markDialogueAsRead(npcId: string, dialogueId: string): Promise<void>;
|
|
43
|
+
fetchDialogues(url: string): Promise<void>;
|
|
44
|
+
getPrioritizedDialoguesForNPC(npcId: string): Promise<(IDialogueObject & {
|
|
45
|
+
priority: number;
|
|
46
|
+
read: boolean;
|
|
47
|
+
})[]>;
|
|
48
|
+
getNPCNameById(npcId: string): Promise<string | undefined>;
|
|
49
|
+
getNPCAvatarById(npcId: string): Promise<Blob | undefined>;
|
|
50
|
+
getNPCSlugById(npcId: string): Promise<string | undefined>;
|
|
51
|
+
getNPCHealthById(npcId: string): Promise<string | undefined>;
|
|
52
|
+
getNPCManaById(npcId: string): Promise<string | undefined>;
|
|
53
|
+
createNPCSession(SessionAtom: WritableAtom<Record<string, string>>, npcId: string): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
export { NPCDatabase };
|
|
56
|
+
export declare const npcDatabase: NPCDatabase;
|