@hi-ashleyj/llama 0.13.2 → 0.14.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.svelte +154 -129
- package/dist/Game.svelte.d.ts +10 -21
- package/dist/Layer.svelte +61 -46
- package/dist/Layer.svelte.d.ts +9 -20
- package/dist/audio/AudioCompressor.svelte +70 -44
- package/dist/audio/AudioCompressor.svelte.d.ts +14 -23
- package/dist/audio/AudioGain.svelte +33 -20
- package/dist/audio/AudioGain.svelte.d.ts +6 -17
- package/dist/audio/AudioListenerPosition.svelte +79 -93
- package/dist/audio/AudioListenerPosition.svelte.d.ts +6 -16
- package/dist/audio/AudioPanner.svelte +33 -20
- package/dist/audio/AudioPanner.svelte.d.ts +6 -17
- package/dist/audio/BufferedAudioSource.svelte +59 -44
- package/dist/audio/BufferedAudioSource.svelte.d.ts +8 -18
- package/dist/audio/MediaAudioSource.svelte +56 -35
- package/dist/audio/MediaAudioSource.svelte.d.ts +13 -25
- package/dist/audio/context.d.ts +1 -1
- package/dist/controllers/MouseClickable.svelte +61 -49
- package/dist/controllers/MouseClickable.svelte.d.ts +11 -20
- package/dist/controllers/MouseEventArea.svelte +71 -55
- package/dist/controllers/MouseEventArea.svelte.d.ts +13 -26
- package/dist/controllers/motions.d.ts +4 -5
- package/dist/drawables/Arc.svelte +48 -30
- package/dist/drawables/Arc.svelte.d.ts +9 -19
- package/dist/drawables/Circle.svelte +38 -24
- package/dist/drawables/Circle.svelte.d.ts +7 -17
- package/dist/drawables/DisplayImage.svelte +26 -16
- package/dist/drawables/DisplayImage.svelte.d.ts +11 -21
- package/dist/drawables/MultiLineText.svelte +75 -45
- package/dist/drawables/MultiLineText.svelte.d.ts +14 -24
- package/dist/drawables/Rectangle.svelte +35 -22
- package/dist/drawables/Rectangle.svelte.d.ts +7 -17
- package/dist/drawables/RoundedRectangle.svelte +41 -23
- package/dist/drawables/RoundedRectangle.svelte.d.ts +8 -18
- package/dist/drawables/Text.svelte +63 -40
- package/dist/drawables/Text.svelte.d.ts +13 -23
- package/dist/drawables/Tiled.svelte +79 -61
- package/dist/drawables/Tiled.svelte.d.ts +10 -20
- package/dist/extras/DefaultFontFace.svelte +35 -17
- package/dist/extras/DefaultFontFace.svelte.d.ts +15 -24
- package/dist/extras/FullScreenEventHandler.svelte +37 -23
- package/dist/extras/FullScreenEventHandler.svelte.d.ts +9 -19
- package/dist/extras/LayerPortal.svelte +36 -22
- package/dist/extras/LayerPortal.svelte.d.ts +6 -17
- package/dist/extras/SensibleDefaultStyles.svelte +8 -2
- package/dist/extras/SensibleDefaultStyles.svelte.d.ts +5 -17
- package/dist/extras/Tweened.svelte +28 -9
- package/dist/extras/Tweened.svelte.d.ts +12 -22
- package/dist/primitives/Area.svelte +46 -22
- package/dist/primitives/Area.svelte.d.ts +14 -24
- package/dist/primitives/Empty.svelte +7 -2
- package/dist/primitives/Empty.svelte.d.ts +5 -15
- package/dist/primitives/Inset.svelte +45 -26
- package/dist/primitives/Inset.svelte.d.ts +9 -20
- package/dist/primitives/Node.svelte +32 -19
- package/dist/primitives/Node.svelte.d.ts +7 -18
- package/dist/primitives/Opacity.svelte +34 -22
- package/dist/primitives/Opacity.svelte.d.ts +6 -17
- package/dist/primitives/Rotate.svelte +33 -22
- package/dist/primitives/Rotate.svelte.d.ts +11 -21
- package/dist/primitives/Translate.svelte +32 -19
- package/dist/primitives/Translate.svelte.d.ts +7 -18
- package/dist/resources/AssetPool.svelte +7 -2
- package/dist/resources/AssetPool.svelte.d.ts +5 -15
- package/dist/resources/AudioBufferedAsset.svelte +14 -6
- package/dist/resources/AudioBufferedAsset.svelte.d.ts +5 -15
- package/dist/resources/AudioMediaAsset.svelte +10 -2
- package/dist/resources/AudioMediaAsset.svelte.d.ts +5 -15
- package/dist/resources/ImageAsset.svelte +16 -9
- package/dist/resources/ImageAsset.svelte.d.ts +5 -15
- package/dist/resources/audio.d.ts +1 -1
- package/dist/resources/images.d.ts +1 -1
- package/dist/scenes/SceneSwitcher.svelte +27 -16
- package/dist/scenes/SceneSwitcher.svelte.d.ts +5 -16
- package/dist/scenes/SceneTransition.svelte +47 -36
- package/dist/scenes/SceneTransition.svelte.d.ts +6 -20
- package/package.json +10 -9
|
@@ -1,47 +1,77 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
computedFont = (style ? style + " " : "") + size + "px " + effectiveFont;
|
|
19
|
-
$:
|
|
20
|
-
splits = text?.split("\n") || [];
|
|
21
|
-
$:
|
|
22
|
-
offset = alignV === "bottom" ? ((splits?.length || 1) - 1) * size * spacing : alignV === "middle" ? ((splits?.length || 1) - 1) * size * spacing * 0.5 : 0;
|
|
23
|
-
const draw = function({ ctx }, { x, y }) {
|
|
24
|
-
if (!splits)
|
|
25
|
-
return;
|
|
26
|
-
for (let i = 0; i < splits.length; i++) {
|
|
27
|
-
const line = splits[i];
|
|
28
|
-
ctx.beginPath();
|
|
29
|
-
ctx.textAlign = alignH;
|
|
30
|
-
ctx.textBaseline = alignV;
|
|
31
|
-
ctx.font = computedFont;
|
|
32
|
-
if (fill) {
|
|
33
|
-
ctx.fillStyle = fill;
|
|
34
|
-
ctx.fillText(line, x, y + size * spacing * i - offset);
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import { setupDrawable, type DrawFunction } from "../drawable.js";
|
|
4
|
+
import { onMount } from "svelte";
|
|
5
|
+
import { getGame } from "../core-contexts.js";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
text: string;
|
|
9
|
+
size: number;
|
|
10
|
+
spacing?: number;
|
|
11
|
+
font?: string | null;
|
|
12
|
+
style?: string | undefined;
|
|
13
|
+
fill?: string | undefined;
|
|
14
|
+
stroke?: string | undefined;
|
|
15
|
+
strokeWidth?: number | null;
|
|
16
|
+
alignH?: "left" | "center" | "right";
|
|
17
|
+
alignV?: "top" | "middle" | "bottom" | "alphabetic";
|
|
35
18
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
text,
|
|
22
|
+
size,
|
|
23
|
+
spacing = 1.4,
|
|
24
|
+
font = null,
|
|
25
|
+
style = undefined,
|
|
26
|
+
fill = undefined,
|
|
27
|
+
stroke = undefined,
|
|
28
|
+
strokeWidth = null,
|
|
29
|
+
alignH = "left",
|
|
30
|
+
alignV = "top"
|
|
31
|
+
}: Props = $props();
|
|
32
|
+
|
|
33
|
+
const { defaultTextFontFace } = getGame();
|
|
34
|
+
|
|
35
|
+
let effectiveFont = $derived(font ? font : typeof $defaultTextFontFace === "string" ? $defaultTextFontFace : "sans-serif");
|
|
36
|
+
let computedFont = $derived((style ? style + " " : "") + size + "px " + effectiveFont);
|
|
37
|
+
let splits = $derived(text?.split("\n") || []);
|
|
38
|
+
|
|
39
|
+
let offset =
|
|
40
|
+
$derived(alignV === "bottom"
|
|
41
|
+
? ((splits?.length || 1) - 1) * size * spacing
|
|
42
|
+
: alignV === "middle"
|
|
43
|
+
? ((splits?.length || 1) - 1) * size * spacing * 0.5
|
|
44
|
+
: 0);
|
|
45
|
+
|
|
46
|
+
const draw: DrawFunction<{x: number, y: number, w: number, h: number}> = function (
|
|
47
|
+
{ ctx },
|
|
48
|
+
{ x, y }: { x: number; y: number; w: number; h: number }
|
|
49
|
+
) {
|
|
50
|
+
if (!splits) return;
|
|
51
|
+
|
|
52
|
+
for (let i = 0; i < splits.length; i++) {
|
|
53
|
+
const line = splits[i];
|
|
54
|
+
|
|
55
|
+
ctx.beginPath();
|
|
56
|
+
ctx.textAlign = alignH;
|
|
57
|
+
ctx.textBaseline = alignV;
|
|
58
|
+
ctx.font = computedFont;
|
|
59
|
+
|
|
60
|
+
if (fill) {
|
|
61
|
+
ctx.fillStyle = fill;
|
|
62
|
+
ctx.fillText(line, x, y + size * spacing * i - offset);
|
|
63
|
+
}
|
|
64
|
+
if (stroke && strokeWidth) {
|
|
65
|
+
ctx.strokeStyle = stroke;
|
|
66
|
+
ctx.lineWidth = strokeWidth;
|
|
67
|
+
ctx.strokeText(line, x, y + size * spacing * i - offset);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
let register = setupDrawable<{x: number, y: number, w: number, h: number}, null>({});
|
|
73
|
+
|
|
74
|
+
onMount(() => {
|
|
75
|
+
return register({ draw });
|
|
76
|
+
});
|
|
47
77
|
</script>
|
|
@@ -1,25 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
alignH?: "center" | "left" | "right" | undefined;
|
|
13
|
-
alignV?: "alphabetic" | "bottom" | "middle" | "top" | undefined;
|
|
14
|
-
};
|
|
15
|
-
events: {
|
|
16
|
-
[evt: string]: CustomEvent<any>;
|
|
17
|
-
};
|
|
18
|
-
slots: {};
|
|
19
|
-
};
|
|
20
|
-
export type MultiLineTextProps = typeof __propDef.props;
|
|
21
|
-
export type MultiLineTextEvents = typeof __propDef.events;
|
|
22
|
-
export type MultiLineTextSlots = typeof __propDef.slots;
|
|
23
|
-
export default class MultiLineText extends SvelteComponent<MultiLineTextProps, MultiLineTextEvents, MultiLineTextSlots> {
|
|
1
|
+
interface Props {
|
|
2
|
+
text: string;
|
|
3
|
+
size: number;
|
|
4
|
+
spacing?: number;
|
|
5
|
+
font?: string | null;
|
|
6
|
+
style?: string | undefined;
|
|
7
|
+
fill?: string | undefined;
|
|
8
|
+
stroke?: string | undefined;
|
|
9
|
+
strokeWidth?: number | null;
|
|
10
|
+
alignH?: "left" | "center" | "right";
|
|
11
|
+
alignV?: "top" | "middle" | "bottom" | "alphabetic";
|
|
24
12
|
}
|
|
25
|
-
|
|
13
|
+
declare const MultiLineText: import("svelte").Component<Props, {}, "">;
|
|
14
|
+
type MultiLineText = ReturnType<typeof MultiLineText>;
|
|
15
|
+
export default MultiLineText;
|
|
@@ -1,23 +1,36 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import { setupDrawable, type DrawFunction } from "../drawable.js";
|
|
4
|
+
import { onMount } from "svelte";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
fill?: string | null;
|
|
8
|
+
stroke?: string | null;
|
|
9
|
+
strokeWidth?: number | null;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
let { fill = null, stroke = null, strokeWidth = null }: Props = $props();
|
|
13
|
+
|
|
14
|
+
const draw: DrawFunction<{x: number, y: number, w: number, h: number}> = function({ ctx }, { x, y, w, h }) {
|
|
15
|
+
ctx.beginPath();
|
|
16
|
+
ctx.rect(x, y, w, h);
|
|
17
|
+
|
|
18
|
+
if (fill) {
|
|
19
|
+
ctx.fillStyle = fill;
|
|
20
|
+
ctx.fill();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (stroke && strokeWidth) {
|
|
24
|
+
ctx.strokeStyle = stroke;
|
|
25
|
+
ctx.lineWidth = strokeWidth;
|
|
26
|
+
ctx.stroke();
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
let register = setupDrawable<{x: number, y: number, w: number, h: number}, null>({});
|
|
31
|
+
|
|
32
|
+
onMount(() => {
|
|
33
|
+
return register({ draw });
|
|
34
|
+
})
|
|
35
|
+
|
|
23
36
|
</script>
|
|
@@ -1,18 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
stroke?: string | null | undefined;
|
|
6
|
-
strokeWidth?: number | null | undefined;
|
|
7
|
-
};
|
|
8
|
-
events: {
|
|
9
|
-
[evt: string]: CustomEvent<any>;
|
|
10
|
-
};
|
|
11
|
-
slots: {};
|
|
12
|
-
};
|
|
13
|
-
export type RectangleProps = typeof __propDef.props;
|
|
14
|
-
export type RectangleEvents = typeof __propDef.events;
|
|
15
|
-
export type RectangleSlots = typeof __propDef.slots;
|
|
16
|
-
export default class Rectangle extends SvelteComponent<RectangleProps, RectangleEvents, RectangleSlots> {
|
|
1
|
+
interface Props {
|
|
2
|
+
fill?: string | null;
|
|
3
|
+
stroke?: string | null;
|
|
4
|
+
strokeWidth?: number | null;
|
|
17
5
|
}
|
|
18
|
-
|
|
6
|
+
declare const Rectangle: import("svelte").Component<Props, {}, "">;
|
|
7
|
+
type Rectangle = ReturnType<typeof Rectangle>;
|
|
8
|
+
export default Rectangle;
|
|
@@ -1,24 +1,42 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import { setupDrawable, type DrawFunction } from "../drawable.js";
|
|
4
|
+
import { onMount } from "svelte";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
fill?: string | null;
|
|
8
|
+
stroke?: string | null;
|
|
9
|
+
strokeWidth?: number | null;
|
|
10
|
+
radius?: number | [ number ] | [ number, number ] | [ number, number, number ] | [ number, number, number, number ];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
let {
|
|
14
|
+
fill = null,
|
|
15
|
+
stroke = null,
|
|
16
|
+
strokeWidth = null,
|
|
17
|
+
radius = 0
|
|
18
|
+
}: Props = $props();
|
|
19
|
+
|
|
20
|
+
const draw: DrawFunction<{x: number, y: number, w: number, h: number}> = function({ ctx }, { x, y, w, h }: { x: number, y: number, w: number, h: number }) {
|
|
21
|
+
ctx.beginPath();
|
|
22
|
+
ctx.roundRect(x, y, w, h, radius);
|
|
23
|
+
|
|
24
|
+
if (fill) {
|
|
25
|
+
ctx.fillStyle = fill;
|
|
26
|
+
ctx.fill();
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (stroke && strokeWidth) {
|
|
30
|
+
ctx.strokeStyle = stroke;
|
|
31
|
+
ctx.lineWidth = strokeWidth;
|
|
32
|
+
ctx.stroke();
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
let register = setupDrawable<{x: number, y: number, w: number, h: number}, null>({});
|
|
37
|
+
|
|
38
|
+
onMount(() => {
|
|
39
|
+
return register({ draw });
|
|
40
|
+
})
|
|
41
|
+
|
|
24
42
|
</script>
|
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
strokeWidth?: number | null | undefined;
|
|
7
|
-
radius?: number | [number] | [number, number] | [number, number, number] | [number, number, number, number] | undefined;
|
|
8
|
-
};
|
|
9
|
-
events: {
|
|
10
|
-
[evt: string]: CustomEvent<any>;
|
|
11
|
-
};
|
|
12
|
-
slots: {};
|
|
13
|
-
};
|
|
14
|
-
export type RoundedRectangleProps = typeof __propDef.props;
|
|
15
|
-
export type RoundedRectangleEvents = typeof __propDef.events;
|
|
16
|
-
export type RoundedRectangleSlots = typeof __propDef.slots;
|
|
17
|
-
export default class RoundedRectangle extends SvelteComponent<RoundedRectangleProps, RoundedRectangleEvents, RoundedRectangleSlots> {
|
|
1
|
+
interface Props {
|
|
2
|
+
fill?: string | null;
|
|
3
|
+
stroke?: string | null;
|
|
4
|
+
strokeWidth?: number | null;
|
|
5
|
+
radius?: number | [number] | [number, number] | [number, number, number] | [number, number, number, number];
|
|
18
6
|
}
|
|
19
|
-
|
|
7
|
+
declare const RoundedRectangle: import("svelte").Component<Props, {}, "">;
|
|
8
|
+
type RoundedRectangle = ReturnType<typeof RoundedRectangle>;
|
|
9
|
+
export default RoundedRectangle;
|
|
@@ -1,41 +1,64 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import { setupDrawable, type DrawFunction } from "../drawable.js";
|
|
4
|
+
import { getGame } from "../core-contexts.js";
|
|
5
|
+
import { onMount } from "svelte";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
text: string;
|
|
9
|
+
size: number;
|
|
10
|
+
font?: string | null;
|
|
11
|
+
style?: string | undefined;
|
|
12
|
+
fill?: string | undefined;
|
|
13
|
+
stroke?: string | undefined;
|
|
14
|
+
strokeWidth?: number | null;
|
|
15
|
+
alignH?: "left" | "center" | "right";
|
|
16
|
+
alignV?: "top" | "middle" | "bottom" | "alphabetic";
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
let {
|
|
20
|
+
text,
|
|
21
|
+
size,
|
|
22
|
+
font = null,
|
|
23
|
+
style = undefined,
|
|
24
|
+
fill = undefined,
|
|
25
|
+
stroke = undefined,
|
|
26
|
+
strokeWidth = null,
|
|
27
|
+
alignH = "left",
|
|
28
|
+
alignV = "top"
|
|
29
|
+
}: Props = $props();
|
|
30
|
+
|
|
31
|
+
const { defaultTextFontFace } = getGame();
|
|
32
|
+
|
|
33
|
+
let effectiveFont = $derived(font ? font : typeof $defaultTextFontFace === "string" ? $defaultTextFontFace : "sans-serif");
|
|
34
|
+
let computedFont = $derived(((style) ? style + " ": "") + size + "px " + effectiveFont);
|
|
35
|
+
|
|
36
|
+
const draw: DrawFunction<{x: number, y: number, w: number, h: number}> = function({ ctx }, { x, y, w, h }: { x: number, y: number, w: number, h: number }) {
|
|
37
|
+
if (!text) return;
|
|
38
|
+
|
|
39
|
+
ctx.beginPath();
|
|
40
|
+
ctx.textAlign = alignH;
|
|
41
|
+
ctx.textBaseline = alignV;
|
|
42
|
+
ctx.font = computedFont;
|
|
43
|
+
|
|
44
|
+
let actualX = x + (alignH === "right" ? w : alignH === "center" ? w / 2 : 0);
|
|
45
|
+
let actualY = y + (alignV === "bottom" ? h : alignV === "middle" ? (h / 2) + (size * 0.10) : 0);
|
|
46
|
+
|
|
47
|
+
if (fill) {
|
|
48
|
+
ctx.fillStyle = fill;
|
|
49
|
+
ctx.fillText(text, actualX, actualY);
|
|
50
|
+
}
|
|
51
|
+
if (stroke && strokeWidth) {
|
|
52
|
+
ctx.strokeStyle = stroke;
|
|
53
|
+
ctx.lineWidth = strokeWidth;
|
|
54
|
+
ctx.strokeText(text, actualX, actualY);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
let register = setupDrawable<{x: number, y: number, w: number, h: number}, null>({});
|
|
59
|
+
|
|
60
|
+
onMount(() => {
|
|
61
|
+
return register({ draw });
|
|
62
|
+
})
|
|
63
|
+
|
|
41
64
|
</script>
|
|
@@ -1,24 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
alignH?: "center" | "left" | "right" | undefined;
|
|
12
|
-
alignV?: "alphabetic" | "bottom" | "middle" | "top" | undefined;
|
|
13
|
-
};
|
|
14
|
-
events: {
|
|
15
|
-
[evt: string]: CustomEvent<any>;
|
|
16
|
-
};
|
|
17
|
-
slots: {};
|
|
18
|
-
};
|
|
19
|
-
export type TextProps = typeof __propDef.props;
|
|
20
|
-
export type TextEvents = typeof __propDef.events;
|
|
21
|
-
export type TextSlots = typeof __propDef.slots;
|
|
22
|
-
export default class Text extends SvelteComponent<TextProps, TextEvents, TextSlots> {
|
|
1
|
+
interface Props {
|
|
2
|
+
text: string;
|
|
3
|
+
size: number;
|
|
4
|
+
font?: string | null;
|
|
5
|
+
style?: string | undefined;
|
|
6
|
+
fill?: string | undefined;
|
|
7
|
+
stroke?: string | undefined;
|
|
8
|
+
strokeWidth?: number | null;
|
|
9
|
+
alignH?: "left" | "center" | "right";
|
|
10
|
+
alignV?: "top" | "middle" | "bottom" | "alphabetic";
|
|
23
11
|
}
|
|
24
|
-
|
|
12
|
+
declare const Text: import("svelte").Component<Props, {}, "">;
|
|
13
|
+
type Text = ReturnType<typeof Text>;
|
|
14
|
+
export default Text;
|
|
@@ -1,63 +1,81 @@
|
|
|
1
|
-
<script
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
if (!map)
|
|
15
|
-
return;
|
|
16
|
-
if (!alias)
|
|
17
|
-
return;
|
|
18
|
-
if (shiftX < w * -1)
|
|
19
|
-
return;
|
|
20
|
-
if (shiftX > mapWidth * drawSize)
|
|
21
|
-
return;
|
|
22
|
-
if (shiftY < h * -1)
|
|
23
|
-
return;
|
|
24
|
-
if (shiftY > mapHeight * drawSize)
|
|
25
|
-
return;
|
|
26
|
-
const leftMostTile = Math.max(Math.floor(shiftX / drawSize), 0);
|
|
27
|
-
const leftOffset = shiftX > 0 ? shiftX % drawSize * -1 : shiftX * -1;
|
|
28
|
-
const tilesWide = Math.min(mapWidth - leftMostTile, Math.ceil((w - leftOffset) / drawSize), mapWidth - 1);
|
|
29
|
-
const topMostTile = Math.max(Math.floor(shiftY / drawSize), 0);
|
|
30
|
-
const topOffset = shiftY > 0 ? shiftY % drawSize * -1 : shiftY * -1;
|
|
31
|
-
const tilesHigh = Math.min(mapHeight - topMostTile, Math.ceil((h - topOffset) / drawSize), mapHeight - 1);
|
|
32
|
-
for (let i = 0; i < tilesWide; i++) {
|
|
33
|
-
for (let j = 0; j < tilesHigh; j++) {
|
|
34
|
-
try {
|
|
35
|
-
const key = map[j + topMostTile][i + leftMostTile];
|
|
36
|
-
if (key === " ")
|
|
37
|
-
continue;
|
|
38
|
-
const dealias = alias[key];
|
|
39
|
-
if (!dealias)
|
|
40
|
-
continue;
|
|
41
|
-
ctx.drawImage(
|
|
42
|
-
tileSet.image,
|
|
43
|
-
dealias[0] * tileSet.size,
|
|
44
|
-
dealias[1] * tileSet.size,
|
|
45
|
-
tileSet.size,
|
|
46
|
-
tileSet.size,
|
|
47
|
-
i * drawSize + leftOffset,
|
|
48
|
-
j * drawSize + topOffset,
|
|
49
|
-
drawSize,
|
|
50
|
-
drawSize
|
|
51
|
-
);
|
|
52
|
-
} catch (_err) {
|
|
53
|
-
console.log(i, j);
|
|
54
|
-
throw _err;
|
|
55
|
-
}
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
|
|
3
|
+
import type { TileSet } from "../resources/tileset.js";
|
|
4
|
+
import { setupDrawable, type DrawFunction } from "../drawable.js";
|
|
5
|
+
import { onMount } from "svelte";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
shiftX: number;
|
|
9
|
+
shiftY: number;
|
|
10
|
+
drawSize: number;
|
|
11
|
+
tileSet: TileSet;
|
|
12
|
+
alias: Record<string, [ number, number ]>;
|
|
13
|
+
map: string[];
|
|
56
14
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
15
|
+
|
|
16
|
+
let {
|
|
17
|
+
shiftX,
|
|
18
|
+
shiftY,
|
|
19
|
+
drawSize,
|
|
20
|
+
tileSet,
|
|
21
|
+
alias,
|
|
22
|
+
map
|
|
23
|
+
}: Props = $props();
|
|
24
|
+
|
|
25
|
+
let mapWidth = $derived(map[0]?.length ?? 0);
|
|
26
|
+
let mapHeight = $derived(map.length ?? 0);
|
|
27
|
+
|
|
28
|
+
const draw: DrawFunction<{x: number, y: number, w: number, h: number}> = ({ ctx, width, height }, { x, y, w, h }) => {
|
|
29
|
+
|
|
30
|
+
if (!map) return;
|
|
31
|
+
if (!alias) return;
|
|
32
|
+
|
|
33
|
+
// CHECK BOUNDS
|
|
34
|
+
if (shiftX < w * -1) return;
|
|
35
|
+
if (shiftX > mapWidth * drawSize) return;
|
|
36
|
+
|
|
37
|
+
if (shiftY < h * - 1) return;
|
|
38
|
+
if (shiftY > mapHeight * drawSize) return;
|
|
39
|
+
|
|
40
|
+
// WE DO HAVE TO DRAW SOME TILES
|
|
41
|
+
const leftMostTile = Math.max(Math.floor(shiftX / drawSize), 0);
|
|
42
|
+
const leftOffset = shiftX > 0 ? (shiftX % drawSize) * -1 : shiftX * -1;
|
|
43
|
+
const tilesWide = Math.min(mapWidth - leftMostTile, Math.ceil((w - leftOffset) / drawSize), mapWidth - 1);
|
|
44
|
+
|
|
45
|
+
const topMostTile = Math.max(Math.floor(shiftY / drawSize), 0);
|
|
46
|
+
const topOffset = shiftY > 0 ? (shiftY % drawSize) * -1 : shiftY * -1;
|
|
47
|
+
const tilesHigh = Math.min(mapHeight - topMostTile, Math.ceil((h - topOffset) / drawSize), mapHeight - 1);
|
|
48
|
+
|
|
49
|
+
for ( let i = 0; i < tilesWide; i ++ ) {
|
|
50
|
+
for ( let j = 0; j < tilesHigh; j ++ ) {
|
|
51
|
+
try {
|
|
52
|
+
const key = map[j + topMostTile][i + leftMostTile];
|
|
53
|
+
if (key === " ") continue;
|
|
54
|
+
const dealias = alias[key];
|
|
55
|
+
if (!dealias) continue;
|
|
56
|
+
ctx.drawImage(
|
|
57
|
+
tileSet.image,
|
|
58
|
+
dealias[0] * tileSet.size,
|
|
59
|
+
dealias[1] * tileSet.size,
|
|
60
|
+
tileSet.size,
|
|
61
|
+
tileSet.size,
|
|
62
|
+
i * drawSize + leftOffset,
|
|
63
|
+
j * drawSize + topOffset,
|
|
64
|
+
drawSize,
|
|
65
|
+
drawSize);
|
|
66
|
+
} catch (_err) {
|
|
67
|
+
console.log(i, j);
|
|
68
|
+
throw _err;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const register = setupDrawable<{x: number, y: number, w: number, h: number}, null>({});
|
|
76
|
+
|
|
77
|
+
onMount(() => {
|
|
78
|
+
return register({ draw })
|
|
79
|
+
})
|
|
80
|
+
|
|
63
81
|
</script>
|