Guest User

Undefined property

a guest
Feb 22nd, 2023
7
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import Rive, { Artboard, CanvasRenderer, RiveCanvas, StateMachineInstance } from "@rive-app/canvas-advanced";
  2.  
  3. export default class RiveRenderer {
  4.     private canvas: HTMLCanvasElement;
  5.     private rive!: RiveCanvas;
  6.     private renderer!: CanvasRenderer;
  7.     private artboard!: Artboard;
  8.     private stateMachine!: StateMachineInstance;
  9.  
  10.     private lastTime = 0;
  11.  
  12.     constructor(canvas: HTMLCanvasElement) {
  13.         this.canvas = canvas;
  14.         this.setup();
  15.     }
  16.  
  17.     async setup() {
  18.         this.rive = await Rive({
  19.             locateFile: (_) => 'https://unpkg.com/@rive-app/[email protected]/rive.wasm'
  20.         });
  21.  
  22.         this.renderer = this.rive.makeRenderer(this.canvas);
  23.  
  24.         const bytes = await (await fetch(new Request('sneksoldier.riv'))).arrayBuffer();
  25.         const file = await this.rive.load(new Uint8Array(bytes));
  26.  
  27.         this.artboard = file.artboardByName('New Artboard');
  28.         this.stateMachine = new this.rive.StateMachineInstance(
  29.             this.artboard.stateMachineByName('State Machine 1'),
  30.             this.artboard
  31.         );
  32.  
  33.         this.rive.requestAnimationFrame(this.renderLoop);
  34.     }
  35.  
  36.     renderLoop(time: number) {
  37.         const elapsedTimeMs = time - this.lastTime;
  38.         const elapsedTimeSec = elapsedTimeMs / 1000;
  39.         this.lastTime = time;
  40.    
  41.         this.renderer.clear();
  42.         this.stateMachine.advance(elapsedTimeSec);
  43.         this.artboard.advance(elapsedTimeSec);
  44.  
  45.         this.renderer.save();
  46.         this.renderer.align(
  47.             this.rive.Fit.contain,
  48.             this.rive.Alignment.center,
  49.             {
  50.                 minX: 0,
  51.                 minY: 0,
  52.                 maxX: this.canvas.width,
  53.                 maxY: this.canvas.height
  54.             },
  55.             this.artboard.bounds
  56.         );
  57.         this.artboard.draw(this.renderer);
  58.         this.renderer.restore();
  59.  
  60.         this.rive.requestAnimationFrame(this.renderLoop);
  61.     }
  62. }
Advertisement
Add Comment
Please, Sign In to add comment