UNPKG

lingo3d

Version:

Lingo3D is a React/Vue 3d game development framework that ships with a complete visual editor

57 lines 2.25 kB
import { Cancellable } from "@lincode/promiselikes"; import loadTexture from "../../display/utils/loaders/loadTexture"; import { requestSpriteSheet, releaseSpriteSheet } from "../../pools/spriteSheetPool"; import { spriteSheetPlaybackSystem } from "../spriteSheetPlaySystem"; import createInternalSystem from "../utils/createInternalSystem"; const loadSpriteSheet = (material, url, columns, length) => { const map = (material.map = loadTexture(url, () => { const rows = Math.ceil(length / columns); map.repeat.set(1 / columns, 1 / rows); })); return map; }; const playSpriteSheet = (material, columns, length, loop) => { material.visible = true; const rows = Math.ceil(length / columns); spriteSheetPlaybackSystem.add(material, { x: 0, y: rows - 1, columns, rows, frame: 0, length, loop }); }; export const configSpriteSheetSystem = createInternalSystem("configSpriteSheetSystem", { effect: (self) => { const { textureStart, textureEnd, texture, columns, length, loop, object3d: { material } } = self; if (textureStart && textureEnd) { const handle = new Cancellable(); const promise = requestSpriteSheet([textureStart, textureEnd]); promise.then(([url, columns, length, blob]) => { if (handle.done) return; self.$blob = blob; loadSpriteSheet(material, url, columns, length); playSpriteSheet(material, columns, length, loop); }); return () => { releaseSpriteSheet(promise); spriteSheetPlaybackSystem.delete(material); handle.cancel(); }; } if (!texture || !columns || !length) return; const handle = new Cancellable(); loadSpriteSheet(material, texture, columns, length); const timeout = setTimeout(() => playSpriteSheet(material, columns, length, loop), 300); return () => { clearTimeout(timeout); spriteSheetPlaybackSystem.delete(material); handle.cancel(); }; } }); //# sourceMappingURL=configSpriteSheetSystem.js.map