create-definedmotion 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/bin/index.js +3 -0
  2. package/package.json +37 -0
  3. package/src/cli.js +100 -0
  4. package/template/.editorconfig +9 -0
  5. package/template/.prettierignore +6 -0
  6. package/template/.prettierrc.yaml +10 -0
  7. package/template/_gitignore +10 -0
  8. package/template/build/entitlements.mac.plist +12 -0
  9. package/template/build/icon.icns +0 -0
  10. package/template/build/icon.ico +0 -0
  11. package/template/build/icon.png +0 -0
  12. package/template/electron-builder.yml +43 -0
  13. package/template/electron.vite.config.ts +50 -0
  14. package/template/eslint.config.mjs +24 -0
  15. package/template/package-lock.json +10299 -0
  16. package/template/package.json +64 -0
  17. package/template/resources/icon.png +0 -0
  18. package/template/src/assets/audio/fadeSound.mp3 +0 -0
  19. package/template/src/assets/audio/fadeSound2.mp3 +0 -0
  20. package/template/src/assets/audio/interstellar.mp3 +0 -0
  21. package/template/src/assets/audio/keyboard1.mp3 +0 -0
  22. package/template/src/assets/audio/keyboard2.mp3 +0 -0
  23. package/template/src/assets/audio/keyboard3.mp3 +0 -0
  24. package/template/src/assets/audio/tick_sound.mp3 +0 -0
  25. package/template/src/assets/base.css +67 -0
  26. package/template/src/assets/electron.svg +10 -0
  27. package/template/src/assets/fonts/Geo-Regular.woff +0 -0
  28. package/template/src/assets/fonts/Montserrat-Italic-VariableFont_wght.woff2 +0 -0
  29. package/template/src/assets/fonts/Montserrat-Medium.ttf +0 -0
  30. package/template/src/assets/fonts/Montserrat-Medium.woff +0 -0
  31. package/template/src/assets/fonts/Montserrat-VariableFont_wght.woff2 +0 -0
  32. package/template/src/assets/fonts/glitch.ttf +0 -0
  33. package/template/src/assets/hdri/indoor1.hdr +0 -0
  34. package/template/src/assets/hdri/metro1.hdr +0 -0
  35. package/template/src/assets/hdri/outdoor1.hdr +0 -0
  36. package/template/src/assets/hdri/photo-studio1.hdr +0 -0
  37. package/template/src/assets/hdri/photo-studio2.hdr +0 -0
  38. package/template/src/assets/hdri/photo-studio3.hdr +0 -0
  39. package/template/src/assets/objects/keyboardScene/ibm-keyboard.glb +0 -0
  40. package/template/src/assets/wavy-lines.svg +25 -0
  41. package/template/src/entry.ts +20 -0
  42. package/template/src/example_scenes/alternativesScene.ts +88 -0
  43. package/template/src/example_scenes/dependencyScene.ts +116 -0
  44. package/template/src/example_scenes/fourierMachineScene.ts +108 -0
  45. package/template/src/example_scenes/fourierSeriesScene.ts +678 -0
  46. package/template/src/example_scenes/keyboardScene.ts +447 -0
  47. package/template/src/example_scenes/surfaceScene.ts +88 -0
  48. package/template/src/example_scenes/tutorials/easy1.ts +59 -0
  49. package/template/src/example_scenes/tutorials/easy2.ts +141 -0
  50. package/template/src/example_scenes/tutorials/easy3.ts +133 -0
  51. package/template/src/example_scenes/tutorials/medium1.ts +154 -0
  52. package/template/src/example_scenes/vectorField.ts +209 -0
  53. package/template/src/example_scenes/visulizingFunctions.ts +246 -0
  54. package/template/src/main/index.ts +101 -0
  55. package/template/src/main/rendering.ts +219 -0
  56. package/template/src/main/storage.ts +35 -0
  57. package/template/src/preload/index.d.ts +8 -0
  58. package/template/src/preload/index.ts +36 -0
  59. package/template/src/renderer/index.html +17 -0
  60. package/template/src/renderer/src/App.svelte +130 -0
  61. package/template/src/renderer/src/app.css +24 -0
  62. package/template/src/renderer/src/env.d.ts +2 -0
  63. package/template/src/renderer/src/lib/animation/animations.ts +214 -0
  64. package/template/src/renderer/src/lib/animation/captureCanvas.ts +85 -0
  65. package/template/src/renderer/src/lib/animation/helpers.ts +7 -0
  66. package/template/src/renderer/src/lib/animation/interpolations.ts +155 -0
  67. package/template/src/renderer/src/lib/animation/protocols.ts +79 -0
  68. package/template/src/renderer/src/lib/audio/loader.ts +104 -0
  69. package/template/src/renderer/src/lib/fonts/Roboto_Regular.json +1 -0
  70. package/template/src/renderer/src/lib/fonts/montserrat-medium.json +1 -0
  71. package/template/src/renderer/src/lib/fonts/montserrat.json +1 -0
  72. package/template/src/renderer/src/lib/general/helpers.ts +77 -0
  73. package/template/src/renderer/src/lib/general/onDestory.ts +10 -0
  74. package/template/src/renderer/src/lib/mathHelpers/vectors.ts +18 -0
  75. package/template/src/renderer/src/lib/rendering/bumpMaps/noise.ts +84 -0
  76. package/template/src/renderer/src/lib/rendering/helpers.ts +35 -0
  77. package/template/src/renderer/src/lib/rendering/lighting3d.ts +387 -0
  78. package/template/src/renderer/src/lib/rendering/materials.ts +6 -0
  79. package/template/src/renderer/src/lib/rendering/objects/import.ts +148 -0
  80. package/template/src/renderer/src/lib/rendering/objects2d.ts +489 -0
  81. package/template/src/renderer/src/lib/rendering/objects3d.ts +89 -0
  82. package/template/src/renderer/src/lib/rendering/protocols.ts +21 -0
  83. package/template/src/renderer/src/lib/rendering/setup.ts +71 -0
  84. package/template/src/renderer/src/lib/rendering/svg/drawing.ts +213 -0
  85. package/template/src/renderer/src/lib/rendering/svg/parsing.ts +717 -0
  86. package/template/src/renderer/src/lib/rendering/svg/rastered.ts +42 -0
  87. package/template/src/renderer/src/lib/rendering/svgObjects.ts +1137 -0
  88. package/template/src/renderer/src/lib/scene/helpers.ts +89 -0
  89. package/template/src/renderer/src/lib/scene/sceneClass.ts +648 -0
  90. package/template/src/renderer/src/lib/shaders/background_gradient/frag.glsl +12 -0
  91. package/template/src/renderer/src/lib/shaders/background_gradient/vert.glsl +6 -0
  92. package/template/src/renderer/src/lib/shaders/hdri_blur/frag.glsl +45 -0
  93. package/template/src/renderer/src/lib/shaders/hdri_blur/vert.glsl +5 -0
  94. package/template/src/renderer/src/main.ts +9 -0
  95. package/template/svelte.config.mjs +7 -0
  96. package/template/tsconfig.json +4 -0
  97. package/template/tsconfig.node.json +10 -0
  98. package/template/tsconfig.web.json +32 -0
@@ -0,0 +1,104 @@
1
+ export interface AudioInScene {
2
+ audioPath: string
3
+ volume: number
4
+ atFrame: number
5
+ }
6
+
7
+ // Global caches for audio assets
8
+ // The key is a file path and the value is the loaded AudioBuffer.
9
+ let loadedAudio = new Map<string, AudioBuffer>()
10
+
11
+ let registeredAudios = new Set<string>()
12
+
13
+ // Create or reuse an AudioContext instance.
14
+ const audioContext = new AudioContext()
15
+
16
+ /**
17
+ * Registers an audio file path and returns a corresponding ID.
18
+ * @param audioPath - The path to the audio file.
19
+ * @returns A unique audio ID.
20
+ */
21
+ export const registerAudio = (audioPath: string) => {
22
+ registeredAudios.add(audioPath)
23
+ }
24
+
25
+ /**
26
+ * Loads all registered audio files into the global cache.
27
+ * Every audio file referenced in the audioIDMappings will be fetched
28
+ * and decoded; results are stored in the loadedAudio map.
29
+ */
30
+ export const loadAllAudio = async (): Promise<void> => {
31
+ const loadPromises: Promise<void>[] = []
32
+
33
+ // Loop over each registered audio file.
34
+ for (const [path, _] of registeredAudios.entries()) {
35
+ // If this audio file isn't already loaded, load it.
36
+ if (!loadedAudio.has(path)) {
37
+ const promise = fetch(path)
38
+ .then((response) => {
39
+ if (!response.ok) {
40
+ throw new Error(`Failed to load audio file at ${path}: ${response.statusText}`)
41
+ }
42
+ return response.arrayBuffer()
43
+ })
44
+ .then((arrayBuffer) => audioContext.decodeAudioData(arrayBuffer))
45
+ .then((decodedBuffer) => {
46
+ loadedAudio.set(path, decodedBuffer)
47
+ console.log(`Loaded audio [path: ${path}] from: ${path}`)
48
+ })
49
+ .catch((error) => {
50
+ console.error(`Error loading audio from ${path}:`, error)
51
+ })
52
+ loadPromises.push(promise)
53
+ }
54
+ }
55
+
56
+ await Promise.all(loadPromises)
57
+ console.log('All audio files have been loaded.')
58
+ }
59
+
60
+ /**
61
+ * Plays the audio corresponding to the given audioID with the specified volume.
62
+ * @param audioID - The registered audio ID to play.
63
+ * @param volume - The volume level (e.g., 0.0 to 1.0).
64
+ */
65
+ export const playAudio = (audioPath: string, volume: number) => {
66
+ const hasAudio = registeredAudios.has(audioPath)
67
+ if (!hasAudio) {
68
+ console.warn(`Audio path ${audioPath} not registered.`)
69
+ return
70
+ }
71
+
72
+ const buffer = loadedAudio.get(audioPath)
73
+ if (!buffer) {
74
+ console.warn(`Audio file for ${audioPath} has not been loaded.`)
75
+ return
76
+ }
77
+
78
+ // Create a buffer source node to play the audio.
79
+ const source = audioContext.createBufferSource()
80
+ source.buffer = buffer
81
+
82
+ // Create a gain node to control the volume.
83
+ const gainNode = audioContext.createGain()
84
+ gainNode.gain.value = volume
85
+
86
+ // Connect the nodes: source -> gain -> audio context destination.
87
+ source.connect(gainNode)
88
+ gainNode.connect(audioContext.destination)
89
+
90
+ // Start playback immediately.
91
+ source.start(0)
92
+ }
93
+
94
+ /**
95
+ * Cleans up all audio resources.
96
+ * This function:
97
+ * - Clears the loaded audio cache.
98
+ * - Clears the audio ID mapping.
99
+ * - Resets the last registered ID counter.
100
+ */
101
+ export const cleanupAudioData = async (): Promise<void> => {
102
+ // Clear the caches.
103
+ loadedAudio.clear()
104
+ }