feat: add animated GIF support using PixiJS built-in GifSprite

Register GifAsset extension for .gif loading, create AnimatedGifSprite
wrapper with lazy load/unload matching ImageSprite pattern, and detect
.gif assets in SceneManager to use animated rendering. GIFs stored as
type 'image' in scene format — no schema changes needed.
This commit is contained in:
Hiren Kangad
2026-03-10 19:26:41 +05:30
parent 51e53a323b
commit 5a64708bd4
3 changed files with 144 additions and 5 deletions
+6 -1
View File
@@ -9,6 +9,7 @@ import { Container, Graphics, Text, TextStyle } from 'pixi.js';
import type { Viewport } from 'pixi-viewport';
import { TextureManager } from './TextureManager';
import { ImageSprite } from './sprites/ImageSprite';
import { AnimatedGifSprite } from './sprites/AnimatedGifSprite';
import { VideoSprite } from './sprites/VideoSprite';
import { DrawingSprite } from './sprites/DrawingSprite';
import { FrameSprite } from './sprites/FrameSprite';
@@ -275,7 +276,11 @@ export class SceneManager {
switch (data.type) {
case 'image': {
const imgData = data as ImageObject;
displayObject = new ImageSprite(imgData.asset, imgData.w, imgData.h, this.textures);
if (imgData.asset.toLowerCase().endsWith('.gif')) {
displayObject = new AnimatedGifSprite(imgData.asset, imgData.w, imgData.h, this.textures);
} else {
displayObject = new ImageSprite(imgData.asset, imgData.w, imgData.h, this.textures);
}
break;
}