@hi-ashleyj/llama 0.9.0 → 0.10.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/README.md +29 -0
- package/dist/Game.svelte +123 -0
- package/{components → dist}/Game.svelte.d.ts +4 -4
- package/dist/GameObject.svelte +38 -0
- package/{components → dist}/GameObject.svelte.d.ts +2 -2
- package/dist/Layer.svelte +58 -0
- package/{components → dist}/Layer.svelte.d.ts +3 -2
- package/dist/controllers/MouseClickable.svelte +50 -0
- package/{components/mouse → dist/controllers}/MouseClickable.svelte.d.ts +2 -2
- package/dist/controllers/MouseEventArea.svelte +58 -0
- package/{components/mouse → dist/controllers}/MouseEventArea.svelte.d.ts +7 -3
- package/{components/controller.d.ts → dist/controllers/keyboard.d.ts} +6 -6
- package/{components/controller.js → dist/controllers/keyboard.js} +9 -9
- package/{components → dist/controllers}/mouse.d.ts +5 -1
- package/{components → dist/controllers}/mouse.js +24 -6
- package/dist/core-contexts.d.ts +48 -0
- package/{setup.js → dist/core-contexts.js} +7 -19
- package/dist/drawable.d.ts +14 -0
- package/dist/drawable.js +13 -0
- package/dist/drawables/Arc.svelte +31 -0
- package/{components → dist}/drawables/Arc.svelte.d.ts +2 -2
- package/dist/drawables/Circle.svelte +25 -0
- package/{components → dist}/drawables/Circle.svelte.d.ts +2 -2
- package/dist/drawables/DisplayImage.svelte +17 -0
- package/{components → dist}/drawables/DisplayImage.svelte.d.ts +2 -2
- package/dist/drawables/MultiLineText.svelte +43 -0
- package/{components → dist}/drawables/MultiLineText.svelte.d.ts +4 -4
- package/dist/drawables/Rectangle.svelte +22 -0
- package/{components → dist}/drawables/Rectangle.svelte.d.ts +2 -2
- package/dist/drawables/RoundedRectangle.svelte +24 -0
- package/{components → dist}/drawables/RoundedRectangle.svelte.d.ts +2 -2
- package/dist/drawables/Text.svelte +37 -0
- package/{components → dist}/drawables/Text.svelte.d.ts +4 -4
- package/dist/extras/Empty.svelte +0 -0
- package/dist/extras/Empty.svelte.d.ts +18 -0
- package/dist/extras/LayerPortal.svelte +24 -0
- package/dist/extras/LayerPortal.svelte.d.ts +18 -0
- package/dist/extras/Rotate.svelte +25 -0
- package/dist/extras/Rotate.svelte.d.ts +22 -0
- package/dist/extras/SceneSwitcher.svelte +20 -0
- package/dist/extras/SceneSwitcher.svelte.d.ts +16 -0
- package/dist/extras/SceneTransition.svelte +40 -0
- package/dist/extras/SceneTransition.svelte.d.ts +21 -0
- package/dist/extras/SensibleDefaultStyles.svelte +22 -0
- package/dist/extras/SensibleDefaultStyles.svelte.d.ts +20 -0
- package/dist/extras/Tweened.svelte +9 -0
- package/dist/extras/Tweened.svelte.d.ts +21 -0
- package/dist/extras/scenes.d.ts +6 -0
- package/dist/extras/scenes.js +22 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +24 -0
- package/package.json +26 -29
- package/components/Game.svelte +0 -116
- package/components/GameObject.svelte +0 -40
- package/components/Layer.svelte +0 -47
- package/components/drawables/Arc.svelte +0 -29
- package/components/drawables/Circle.svelte +0 -25
- package/components/drawables/DisplayImage.svelte +0 -17
- package/components/drawables/MultiLineText.svelte +0 -45
- package/components/drawables/Rectangle.svelte +0 -22
- package/components/drawables/RoundedRectangle.svelte +0 -24
- package/components/drawables/Text.svelte +0 -36
- package/components/mouse/MouseClickable.svelte +0 -49
- package/components/mouse/MouseEventArea.svelte +0 -55
- package/components/mouse/MouseLeftClick.svelte +0 -33
- package/components/mouse/MouseLeftClick.svelte.d.ts +0 -16
- package/drawables.d.ts +0 -1
- package/drawables.js +0 -1
- package/index.d.ts +0 -12
- package/index.js +0 -11
- package/resources.d.ts +0 -1
- package/resources.js +0 -1
- package/setup.d.ts +0 -12
- package/types/contexts.d.ts +0 -35
- package/types/index.d.ts +0 -1
- /package/{components → dist/controllers}/motions.d.ts +0 -0
- /package/{components → dist/controllers}/motions.js +0 -0
- /package/{components → dist}/drawables/index.d.ts +0 -0
- /package/{components → dist}/drawables/index.js +0 -0
- /package/{components → dist}/resources/images.d.ts +0 -0
- /package/{components → dist}/resources/images.js +0 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
duration?: number | undefined;
|
|
5
|
+
value?: number | undefined;
|
|
6
|
+
};
|
|
7
|
+
events: {
|
|
8
|
+
[evt: string]: CustomEvent<any>;
|
|
9
|
+
};
|
|
10
|
+
slots: {
|
|
11
|
+
default: {
|
|
12
|
+
smooth: number;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
export type TweenedProps = typeof __propDef.props;
|
|
17
|
+
export type TweenedEvents = typeof __propDef.events;
|
|
18
|
+
export type TweenedSlots = typeof __propDef.slots;
|
|
19
|
+
export default class Tweened extends SvelteComponent<TweenedProps, TweenedEvents, TweenedSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Writable } from "svelte/store";
|
|
2
|
+
export declare const currentScene: Writable<string>;
|
|
3
|
+
export declare const jumpSignal: Writable<boolean>;
|
|
4
|
+
export declare const effectiveScene: Writable<string>;
|
|
5
|
+
export declare const sceneAnimating: Writable<boolean>;
|
|
6
|
+
export declare const changeScene: (scene: string) => void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { writable, get } from "svelte/store";
|
|
2
|
+
export const currentScene = writable("default");
|
|
3
|
+
export const jumpSignal = writable(false);
|
|
4
|
+
export const effectiveScene = writable("default");
|
|
5
|
+
export const sceneAnimating = writable(false);
|
|
6
|
+
let wasAnimating = false;
|
|
7
|
+
sceneAnimating.subscribe((animating) => {
|
|
8
|
+
wasAnimating = animating;
|
|
9
|
+
if (animating)
|
|
10
|
+
return;
|
|
11
|
+
let currentSceneValue = get(currentScene);
|
|
12
|
+
if (currentSceneValue !== get(effectiveScene)) {
|
|
13
|
+
changeScene(currentSceneValue);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
export const changeScene = function (scene) {
|
|
17
|
+
currentScene.set(scene);
|
|
18
|
+
if (wasAnimating)
|
|
19
|
+
return;
|
|
20
|
+
sceneAnimating.set(true);
|
|
21
|
+
effectiveScene.set(scene);
|
|
22
|
+
};
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export { default as Game } from "./Game.svelte";
|
|
2
|
+
export { default as Layer } from "./Layer.svelte";
|
|
3
|
+
export { default as GameObject } from "./GameObject.svelte";
|
|
4
|
+
export { getGame, getLayer, getTriggerLayerRender } from "./core-contexts.js";
|
|
5
|
+
export type { GameContext, LayerContext, LayerDrawable } from "./core-contexts.d.ts";
|
|
6
|
+
export { default as MouseClickable } from "./controllers/MouseClickable.svelte";
|
|
7
|
+
export { default as MouseEventArea } from "./controllers/MouseEventArea.svelte";
|
|
8
|
+
export { MOUSE_ACTION } from "./controllers/mouse.js";
|
|
9
|
+
export { KEYBOARD_ACTION } from "./controllers/keyboard.js";
|
|
10
|
+
export { setupDrawable } from "./drawable.js";
|
|
11
|
+
export type { DrawableContext, DrawableObject, DrawFunction } from "./drawable.d.ts";
|
|
12
|
+
export * as Drawables from "./drawables/index.js";
|
|
13
|
+
export { resolve as resolveImage } from "./resources/images.js";
|
|
14
|
+
export { default as SensibleDefaultStyles } from "./extras/SensibleDefaultStyles.svelte";
|
|
15
|
+
export { default as Empty } from "./extras/Empty.svelte";
|
|
16
|
+
export { default as LayerPortal } from "./extras/LayerPortal.svelte";
|
|
17
|
+
export { changeScene } from "./extras/scenes.js";
|
|
18
|
+
export { default as SceneSwitcher } from "./extras/SceneSwitcher.svelte";
|
|
19
|
+
export { default as SceneTransition } from "./extras/SceneTransition.svelte";
|
|
20
|
+
export { default as Rotate } from "./extras/Rotate.svelte";
|
|
21
|
+
export { default as Tweened } from "./extras/Tweened.svelte";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// CORE
|
|
2
|
+
export { default as Game } from "./Game.svelte";
|
|
3
|
+
export { default as Layer } from "./Layer.svelte";
|
|
4
|
+
export { default as GameObject } from "./GameObject.svelte";
|
|
5
|
+
export { getGame, getLayer, getTriggerLayerRender } from "./core-contexts.js";
|
|
6
|
+
// CONTROLLERS
|
|
7
|
+
export { default as MouseClickable } from "./controllers/MouseClickable.svelte";
|
|
8
|
+
export { default as MouseEventArea } from "./controllers/MouseEventArea.svelte";
|
|
9
|
+
export { MOUSE_ACTION } from "./controllers/mouse.js";
|
|
10
|
+
export { KEYBOARD_ACTION } from "./controllers/keyboard.js";
|
|
11
|
+
// DRAWABLES
|
|
12
|
+
export { setupDrawable } from "./drawable.js";
|
|
13
|
+
export * as Drawables from "./drawables/index.js";
|
|
14
|
+
// RESOURCES
|
|
15
|
+
export { resolve as resolveImage } from "./resources/images.js";
|
|
16
|
+
// EXTRAS
|
|
17
|
+
export { default as SensibleDefaultStyles } from "./extras/SensibleDefaultStyles.svelte";
|
|
18
|
+
export { default as Empty } from "./extras/Empty.svelte";
|
|
19
|
+
export { default as LayerPortal } from "./extras/LayerPortal.svelte";
|
|
20
|
+
export { changeScene } from "./extras/scenes.js";
|
|
21
|
+
export { default as SceneSwitcher } from "./extras/SceneSwitcher.svelte";
|
|
22
|
+
export { default as SceneTransition } from "./extras/SceneTransition.svelte";
|
|
23
|
+
export { default as Rotate } from "./extras/Rotate.svelte";
|
|
24
|
+
export { default as Tweened } from "./extras/Tweened.svelte";
|
package/package.json
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hi-ashleyj/llama",
|
|
3
3
|
"description": "A (Very Incomplete) 2D Canvas Game Engine powered by Svelte",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.10.0",
|
|
5
5
|
"type": "module",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "vite dev",
|
|
8
|
+
"build": "vite build",
|
|
9
|
+
"package": "svelte-package",
|
|
10
|
+
"preview": "vite preview",
|
|
11
|
+
"sync": "svelte-kit sync",
|
|
12
|
+
"check": "svelte-check"
|
|
13
|
+
},
|
|
6
14
|
"repository": {
|
|
7
15
|
"type": "git",
|
|
8
16
|
"url": "git+https://github.com/hi-ashleyj/llama-game-engine.git"
|
|
@@ -19,35 +27,24 @@
|
|
|
19
27
|
"@sveltejs/package": "latest",
|
|
20
28
|
"sass": "^1.58.0",
|
|
21
29
|
"svelte": "^3.44.0",
|
|
22
|
-
"svelte-
|
|
23
|
-
"svelte2tsx": "^0.5.12",
|
|
30
|
+
"svelte-check": "^3.4.6",
|
|
24
31
|
"typescript": "^4.7.4",
|
|
25
32
|
"vite": "^4.0.0"
|
|
26
33
|
},
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"./components/Game.svelte": "./components/Game.svelte",
|
|
30
|
-
"./components/GameObject.svelte": "./components/GameObject.svelte",
|
|
31
|
-
"./components/Layer.svelte": "./components/Layer.svelte",
|
|
32
|
-
"./components/controller": "./components/controller.js",
|
|
33
|
-
"./components/drawables/Arc.svelte": "./components/drawables/Arc.svelte",
|
|
34
|
-
"./components/drawables/Circle.svelte": "./components/drawables/Circle.svelte",
|
|
35
|
-
"./components/drawables/DisplayImage.svelte": "./components/drawables/DisplayImage.svelte",
|
|
36
|
-
"./components/drawables/MultiLineText.svelte": "./components/drawables/MultiLineText.svelte",
|
|
37
|
-
"./components/drawables/Rectangle.svelte": "./components/drawables/Rectangle.svelte",
|
|
38
|
-
"./components/drawables/RoundedRectangle.svelte": "./components/drawables/RoundedRectangle.svelte",
|
|
39
|
-
"./components/drawables/Text.svelte": "./components/drawables/Text.svelte",
|
|
40
|
-
"./components/drawables": "./components/drawables/index.js",
|
|
41
|
-
"./components/motions": "./components/motions.js",
|
|
42
|
-
"./components/mouse/MouseClickable.svelte": "./components/mouse/MouseClickable.svelte",
|
|
43
|
-
"./components/mouse/MouseEventArea.svelte": "./components/mouse/MouseEventArea.svelte",
|
|
44
|
-
"./components/mouse/MouseLeftClick.svelte": "./components/mouse/MouseLeftClick.svelte",
|
|
45
|
-
"./components/mouse": "./components/mouse.js",
|
|
46
|
-
"./components/resources/images": "./components/resources/images.js",
|
|
47
|
-
"./drawables": "./drawables.js",
|
|
48
|
-
".": "./index.js",
|
|
49
|
-
"./resources": "./resources.js",
|
|
50
|
-
"./setup": "./setup.js"
|
|
34
|
+
"peerDependencies": {
|
|
35
|
+
"svelte": "^4.0.0"
|
|
51
36
|
},
|
|
52
|
-
"
|
|
53
|
-
|
|
37
|
+
"files": [
|
|
38
|
+
"dist"
|
|
39
|
+
],
|
|
40
|
+
"exports": {
|
|
41
|
+
".": {
|
|
42
|
+
"types": "./dist/index.d.ts",
|
|
43
|
+
"svelte": "./dist/index.js"
|
|
44
|
+
},
|
|
45
|
+
"./drawables": {
|
|
46
|
+
"types": "./dist/drawables/index.d.ts",
|
|
47
|
+
"svelte": "./dist/drawables/index.js"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
package/components/Game.svelte
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
<script>import { writable } from "svelte/store";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
import { setupGame } from "../setup";
|
|
4
|
-
import { Timing } from "./motions";
|
|
5
|
-
import { Controller } from "./controller";
|
|
6
|
-
import { Mouse } from "./mouse";
|
|
7
|
-
export let width = 1920;
|
|
8
|
-
export let height = 1080;
|
|
9
|
-
export let background = "#000000";
|
|
10
|
-
// noinspection JSUnusedAssignment
|
|
11
|
-
const widthStore = writable(1920);
|
|
12
|
-
// noinspection JSUnusedAssignment
|
|
13
|
-
const heightStore = writable(1080);
|
|
14
|
-
// noinspection JSUnusedAssignment
|
|
15
|
-
const backgroundStore = writable("#000000");
|
|
16
|
-
$: {
|
|
17
|
-
$widthStore = width;
|
|
18
|
-
}
|
|
19
|
-
$: {
|
|
20
|
-
$heightStore = height;
|
|
21
|
-
}
|
|
22
|
-
$: {
|
|
23
|
-
$backgroundStore = background;
|
|
24
|
-
}
|
|
25
|
-
const layers = new Set();
|
|
26
|
-
const draw = function (delta, time) {
|
|
27
|
-
for (let layer of layers) {
|
|
28
|
-
if (layer.isStatic())
|
|
29
|
-
continue;
|
|
30
|
-
layer.draw(delta, time);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
const assign = function (ctx) {
|
|
34
|
-
layers.add(ctx);
|
|
35
|
-
return () => layers.delete(ctx);
|
|
36
|
-
};
|
|
37
|
-
const timing = new Timing();
|
|
38
|
-
const controller = new Controller();
|
|
39
|
-
const mouse = new Mouse();
|
|
40
|
-
const frameEvents = new Set();
|
|
41
|
-
const frameBeforeEvents = new Set();
|
|
42
|
-
const frameAfterEvents = new Set();
|
|
43
|
-
// noinspection JSUnusedGlobalSymbols
|
|
44
|
-
export const context = {
|
|
45
|
-
width: widthStore,
|
|
46
|
-
height: heightStore,
|
|
47
|
-
background: backgroundStore,
|
|
48
|
-
assign,
|
|
49
|
-
createTimer: timing.createTimer.bind(timing),
|
|
50
|
-
createBurst: timing.createBurst.bind(timing),
|
|
51
|
-
onKeyboardEvent: controller.on.bind(controller),
|
|
52
|
-
isKeyboardPressed: controller.isPressed.bind(controller),
|
|
53
|
-
getKeyboardStore: controller.getStore.bind(controller),
|
|
54
|
-
onMouseEvent: mouse.on.bind(mouse),
|
|
55
|
-
isMousePressed: mouse.isPressed.bind(mouse),
|
|
56
|
-
getMousePosition: mouse.getPosition.bind(mouse),
|
|
57
|
-
getMouseStore: mouse.getStore.bind(mouse),
|
|
58
|
-
onFrame: (callback) => {
|
|
59
|
-
frameEvents.add(callback);
|
|
60
|
-
return () => frameEvents.delete(callback);
|
|
61
|
-
},
|
|
62
|
-
onBeforeFrame: (callback) => {
|
|
63
|
-
frameBeforeEvents.add(callback);
|
|
64
|
-
return () => frameBeforeEvents.delete(callback);
|
|
65
|
-
},
|
|
66
|
-
onAfterFrame: (callback) => {
|
|
67
|
-
frameAfterEvents.add(callback);
|
|
68
|
-
return () => frameAfterEvents.delete(callback);
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
setupGame(context);
|
|
72
|
-
let last = -1;
|
|
73
|
-
const loop = function (time) {
|
|
74
|
-
if (last < 0)
|
|
75
|
-
last = time;
|
|
76
|
-
let delta = (time - last);
|
|
77
|
-
if (delta > 1000) {
|
|
78
|
-
requestAnimationFrame(loop);
|
|
79
|
-
return last = time;
|
|
80
|
-
}
|
|
81
|
-
// TODO: NEW TIMEOUT LOGIC
|
|
82
|
-
frameBeforeEvents.forEach((callback) => callback({ delta, time }));
|
|
83
|
-
timing.update(delta);
|
|
84
|
-
frameEvents.forEach((callback) => callback({ delta, time }));
|
|
85
|
-
draw(delta, time);
|
|
86
|
-
frameAfterEvents.forEach((callback) => callback({ delta, time }));
|
|
87
|
-
requestAnimationFrame(loop);
|
|
88
|
-
last = time;
|
|
89
|
-
};
|
|
90
|
-
onMount(() => {
|
|
91
|
-
requestAnimationFrame(loop);
|
|
92
|
-
controller.start();
|
|
93
|
-
mouse.start();
|
|
94
|
-
});
|
|
95
|
-
let wiw = 0;
|
|
96
|
-
let wih = 0;
|
|
97
|
-
$: {
|
|
98
|
-
mouse.changeWindowDimensions(wiw, wih);
|
|
99
|
-
}
|
|
100
|
-
</script>
|
|
101
|
-
|
|
102
|
-
<div class="game" style:background-color={background}>
|
|
103
|
-
<slot />
|
|
104
|
-
</div>
|
|
105
|
-
|
|
106
|
-
<svelte:window bind:innerHeight={wih} bind:innerWidth={wiw}></svelte:window>
|
|
107
|
-
|
|
108
|
-
<style>
|
|
109
|
-
.game {
|
|
110
|
-
position: relative;
|
|
111
|
-
width: 100%;
|
|
112
|
-
height: 100%;
|
|
113
|
-
padding: 0;
|
|
114
|
-
margin: 0;
|
|
115
|
-
}
|
|
116
|
-
</style>
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let x = 0;
|
|
4
|
-
export let y = 0;
|
|
5
|
-
export let w = 0;
|
|
6
|
-
export let h = 0;
|
|
7
|
-
/**
|
|
8
|
-
* FALSE = ANCHOR TOP LEFT
|
|
9
|
-
* TRUE = ANCHOR CENTER
|
|
10
|
-
*/
|
|
11
|
-
export let centered = false;
|
|
12
|
-
export let opacity = 1;
|
|
13
|
-
$: ax = (centered) ? x - (w / 2) : x;
|
|
14
|
-
$: ay = (centered) ? y - (h / 2) : y;
|
|
15
|
-
const targets = new Set();
|
|
16
|
-
const draw = function ({ width, height, ctx }) {
|
|
17
|
-
if (opacity <= 0)
|
|
18
|
-
return;
|
|
19
|
-
if (opacity < 1) {
|
|
20
|
-
ctx.globalAlpha = opacity;
|
|
21
|
-
}
|
|
22
|
-
targets.forEach(f => f.draw({ width, height, ctx }, { x: ax, y: ay, w, h }));
|
|
23
|
-
if (opacity < 1) {
|
|
24
|
-
ctx.globalAlpha = 1;
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
let register = setupDrawable({
|
|
28
|
-
assign: (ctx) => {
|
|
29
|
-
targets.add(ctx);
|
|
30
|
-
return () => {
|
|
31
|
-
targets.delete(ctx);
|
|
32
|
-
};
|
|
33
|
-
},
|
|
34
|
-
});
|
|
35
|
-
onMount(() => {
|
|
36
|
-
return register({ draw });
|
|
37
|
-
});
|
|
38
|
-
</script>
|
|
39
|
-
|
|
40
|
-
<slot/>
|
package/components/Layer.svelte
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
<script>import { setupLayer, getGame } from "../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let zIndex = 0;
|
|
4
|
-
export let staticMode = false;
|
|
5
|
-
let shouldRenderNextFrame = true;
|
|
6
|
-
let canvas;
|
|
7
|
-
$: ctx = (typeof canvas !== "undefined") ? canvas.getContext("2d") : null;
|
|
8
|
-
let targets = new Set();
|
|
9
|
-
const draw = () => {
|
|
10
|
-
if (ctx === null)
|
|
11
|
-
return;
|
|
12
|
-
ctx.clearRect(0, 0, $width, $height);
|
|
13
|
-
targets.forEach(f => f.draw({ width: $width, height: $height, ctx }));
|
|
14
|
-
};
|
|
15
|
-
let { width, height } = getGame();
|
|
16
|
-
let register = setupLayer({
|
|
17
|
-
assign: (ctx) => {
|
|
18
|
-
targets.add(ctx);
|
|
19
|
-
return () => { targets.delete(ctx); };
|
|
20
|
-
},
|
|
21
|
-
requestFrame: () => {
|
|
22
|
-
if (!staticMode)
|
|
23
|
-
return;
|
|
24
|
-
shouldRenderNextFrame = true;
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
onMount(() => {
|
|
28
|
-
return register({ draw, isStatic: () => { if (shouldRenderNextFrame) {
|
|
29
|
-
shouldRenderNextFrame = false;
|
|
30
|
-
draw();
|
|
31
|
-
} return staticMode; } });
|
|
32
|
-
});
|
|
33
|
-
</script>
|
|
34
|
-
|
|
35
|
-
<canvas width={$width} height={$height} bind:this={canvas} style:z-index={zIndex}></canvas>
|
|
36
|
-
<slot />
|
|
37
|
-
|
|
38
|
-
<style>
|
|
39
|
-
canvas {
|
|
40
|
-
position: absolute;
|
|
41
|
-
top: 0;
|
|
42
|
-
left: 0;
|
|
43
|
-
width: 100%;
|
|
44
|
-
height: 100%;
|
|
45
|
-
object-fit: contain;
|
|
46
|
-
}
|
|
47
|
-
</style>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let fill = null;
|
|
4
|
-
export let stroke = null;
|
|
5
|
-
export let strokeWidth = null;
|
|
6
|
-
export let startAngle;
|
|
7
|
-
export let endAngle;
|
|
8
|
-
$: sd = (startAngle - 90) * Math.PI / 180;
|
|
9
|
-
$: ed = (endAngle - 90) * Math.PI / 180;
|
|
10
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
11
|
-
let r = (w + h) / 4;
|
|
12
|
-
ctx.beginPath();
|
|
13
|
-
ctx.arc(x + r, y + r, r, sd, ed);
|
|
14
|
-
ctx.lineTo(x + r, y + r);
|
|
15
|
-
if (fill) {
|
|
16
|
-
ctx.fillStyle = fill;
|
|
17
|
-
ctx.fill();
|
|
18
|
-
}
|
|
19
|
-
if (stroke && strokeWidth) {
|
|
20
|
-
ctx.strokeStyle = stroke;
|
|
21
|
-
ctx.lineWidth = strokeWidth;
|
|
22
|
-
ctx.stroke();
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
let register = setupDrawable({});
|
|
26
|
-
onMount(() => {
|
|
27
|
-
return register({ draw });
|
|
28
|
-
});
|
|
29
|
-
</script>
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let fill = null;
|
|
4
|
-
export let stroke = null;
|
|
5
|
-
export let strokeWidth = null;
|
|
6
|
-
const TWO_PI = Math.PI * 2;
|
|
7
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
8
|
-
let r = (w + h) / 4;
|
|
9
|
-
ctx.beginPath();
|
|
10
|
-
ctx.arc(x + r, y + r, r, 0, TWO_PI);
|
|
11
|
-
if (fill) {
|
|
12
|
-
ctx.fillStyle = fill;
|
|
13
|
-
ctx.fill();
|
|
14
|
-
}
|
|
15
|
-
if (stroke && strokeWidth) {
|
|
16
|
-
ctx.strokeStyle = stroke;
|
|
17
|
-
ctx.lineWidth = strokeWidth;
|
|
18
|
-
ctx.stroke();
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
let register = setupDrawable({});
|
|
22
|
-
onMount(() => {
|
|
23
|
-
return register({ draw });
|
|
24
|
-
});
|
|
25
|
-
</script>
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let image = null;
|
|
4
|
-
export let crop = null;
|
|
5
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
6
|
-
if (!image)
|
|
7
|
-
return;
|
|
8
|
-
if (crop) {
|
|
9
|
-
return ctx.drawImage(image, crop.x, crop.y, crop.w, crop.h, x, y, w, h);
|
|
10
|
-
}
|
|
11
|
-
ctx.drawImage(image, x, y, w, h);
|
|
12
|
-
};
|
|
13
|
-
let register = setupDrawable({});
|
|
14
|
-
onMount(() => {
|
|
15
|
-
return register({ draw });
|
|
16
|
-
});
|
|
17
|
-
</script>
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let text;
|
|
4
|
-
export let size;
|
|
5
|
-
export let spacing = 1.4;
|
|
6
|
-
export let font;
|
|
7
|
-
export let style = undefined;
|
|
8
|
-
export let fill = undefined;
|
|
9
|
-
export let stroke = undefined;
|
|
10
|
-
export let strokeWidth = null;
|
|
11
|
-
export let alignH = "left";
|
|
12
|
-
export let alignV = "top";
|
|
13
|
-
$: computedFont = (style ? style + " " : "") + size + "px " + font;
|
|
14
|
-
$: splits = text?.split("\n") || [];
|
|
15
|
-
$: offset =
|
|
16
|
-
alignV === "bottom"
|
|
17
|
-
? ((splits?.length || 1) - 1) * size * spacing
|
|
18
|
-
: alignV === "middle"
|
|
19
|
-
? ((splits?.length || 1) - 1) * size * spacing * 0.5
|
|
20
|
-
: 0;
|
|
21
|
-
const draw = function ({ ctx }, { x, y }) {
|
|
22
|
-
if (!splits)
|
|
23
|
-
return;
|
|
24
|
-
for (let i = 0; i < splits.length; i++) {
|
|
25
|
-
const line = splits[i];
|
|
26
|
-
ctx.beginPath();
|
|
27
|
-
ctx.textAlign = alignH;
|
|
28
|
-
ctx.textBaseline = alignV;
|
|
29
|
-
ctx.font = computedFont;
|
|
30
|
-
if (fill) {
|
|
31
|
-
ctx.fillStyle = fill;
|
|
32
|
-
ctx.fillText(line, x, y + size * spacing * i - offset);
|
|
33
|
-
}
|
|
34
|
-
if (stroke && strokeWidth) {
|
|
35
|
-
ctx.strokeStyle = stroke;
|
|
36
|
-
ctx.lineWidth = strokeWidth;
|
|
37
|
-
ctx.strokeText(line, x, y + size * spacing * i - offset);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
let register = setupDrawable({});
|
|
42
|
-
onMount(() => {
|
|
43
|
-
return register({ draw });
|
|
44
|
-
});
|
|
45
|
-
</script>
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let fill = null;
|
|
4
|
-
export let stroke = null;
|
|
5
|
-
export let strokeWidth = null;
|
|
6
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
7
|
-
ctx.beginPath();
|
|
8
|
-
ctx.rect(x, y, w, h);
|
|
9
|
-
if (fill) {
|
|
10
|
-
ctx.fillStyle = fill;
|
|
11
|
-
ctx.fill();
|
|
12
|
-
}
|
|
13
|
-
if (stroke && strokeWidth) {
|
|
14
|
-
ctx.strokeStyle = stroke;
|
|
15
|
-
ctx.stroke();
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
let register = setupDrawable({});
|
|
19
|
-
onMount(() => {
|
|
20
|
-
return register({ draw });
|
|
21
|
-
});
|
|
22
|
-
</script>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let fill = null;
|
|
4
|
-
export let stroke = null;
|
|
5
|
-
export let strokeWidth = null;
|
|
6
|
-
export let radius = 0;
|
|
7
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
8
|
-
ctx.beginPath();
|
|
9
|
-
ctx.roundRect(x, y, w, h, radius);
|
|
10
|
-
if (fill) {
|
|
11
|
-
ctx.fillStyle = fill;
|
|
12
|
-
ctx.fill();
|
|
13
|
-
}
|
|
14
|
-
if (stroke && strokeWidth) {
|
|
15
|
-
ctx.strokeStyle = stroke;
|
|
16
|
-
ctx.lineWidth = strokeWidth;
|
|
17
|
-
ctx.stroke();
|
|
18
|
-
}
|
|
19
|
-
};
|
|
20
|
-
let register = setupDrawable({});
|
|
21
|
-
onMount(() => {
|
|
22
|
-
return register({ draw });
|
|
23
|
-
});
|
|
24
|
-
</script>
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable } from "../../setup";
|
|
2
|
-
import { onMount } from "svelte";
|
|
3
|
-
export let text;
|
|
4
|
-
export let size;
|
|
5
|
-
export let font;
|
|
6
|
-
export let style = undefined;
|
|
7
|
-
export let fill = undefined;
|
|
8
|
-
export let stroke = undefined;
|
|
9
|
-
export let strokeWidth = null;
|
|
10
|
-
export let alignH = "left";
|
|
11
|
-
export let alignV = "top";
|
|
12
|
-
$: computedFont = ((style) ? style + " " : "") + size + "px " + font;
|
|
13
|
-
const draw = function ({ ctx }, { x, y, w, h }) {
|
|
14
|
-
if (!text)
|
|
15
|
-
return;
|
|
16
|
-
ctx.beginPath();
|
|
17
|
-
ctx.textAlign = alignH;
|
|
18
|
-
ctx.textBaseline = alignV;
|
|
19
|
-
ctx.font = computedFont;
|
|
20
|
-
let actualX = x + (alignH === "right" ? w : alignH === "center" ? w / 2 : 0);
|
|
21
|
-
let actualY = y + (alignV === "bottom" ? h : alignV === "middle" ? (h / 2) + (size * 0.10) : 0);
|
|
22
|
-
if (fill) {
|
|
23
|
-
ctx.fillStyle = fill;
|
|
24
|
-
ctx.fillText(text, actualX, actualY);
|
|
25
|
-
}
|
|
26
|
-
if (stroke && strokeWidth) {
|
|
27
|
-
ctx.strokeStyle = stroke;
|
|
28
|
-
ctx.lineWidth = strokeWidth;
|
|
29
|
-
ctx.strokeText(text, actualX, actualY);
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
let register = setupDrawable({});
|
|
33
|
-
onMount(() => {
|
|
34
|
-
return register({ draw });
|
|
35
|
-
});
|
|
36
|
-
</script>
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
<script>import { setupDrawable, getGame } from "../../setup";
|
|
2
|
-
import { onMount, createEventDispatcher } from "svelte";
|
|
3
|
-
import { MOUSE_ACTION } from "../mouse";
|
|
4
|
-
let tx = 0;
|
|
5
|
-
let ty = 0;
|
|
6
|
-
let tw = 0;
|
|
7
|
-
let th = 0;
|
|
8
|
-
let dispatch = createEventDispatcher();
|
|
9
|
-
let context = getGame();
|
|
10
|
-
const draw = function (_info, { x, y, w, h }) {
|
|
11
|
-
tx = x;
|
|
12
|
-
ty = y;
|
|
13
|
-
tw = w;
|
|
14
|
-
th = h;
|
|
15
|
-
};
|
|
16
|
-
let register = setupDrawable({});
|
|
17
|
-
onMount(() => {
|
|
18
|
-
let event = context.onMouseEvent(null, MOUSE_ACTION.DOWN, ({ key }) => {
|
|
19
|
-
let x = context.getMousePosition("mouse_x");
|
|
20
|
-
if (x < tx || x > tx + tw)
|
|
21
|
-
return;
|
|
22
|
-
let y = context.getMousePosition("mouse_y");
|
|
23
|
-
if (y < ty || y > ty + th)
|
|
24
|
-
return;
|
|
25
|
-
dispatch("click");
|
|
26
|
-
switch (key) {
|
|
27
|
-
case ("mouse_left"): {
|
|
28
|
-
dispatch("left");
|
|
29
|
-
dispatch("leftorright");
|
|
30
|
-
return;
|
|
31
|
-
}
|
|
32
|
-
case ("mouse_right"): {
|
|
33
|
-
dispatch("right");
|
|
34
|
-
dispatch("leftorright");
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
case ("mouse_middle"): {
|
|
38
|
-
dispatch("middle");
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
dispatch("other");
|
|
42
|
-
});
|
|
43
|
-
let deregister = register({ draw });
|
|
44
|
-
return () => {
|
|
45
|
-
event();
|
|
46
|
-
deregister();
|
|
47
|
-
};
|
|
48
|
-
});
|
|
49
|
-
</script>
|