From 7a14b5592d78f57785d04bd1484a35e501b7cceb Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 7 Apr 2024 18:12:25 +0200 Subject: [PATCH] feat(AnimatedSprite): add asSprite prop --- .../src/pages/abstractions/AnimatedSprite.vue | 7 ++- .../abstractions/AnimatedSprite/component.vue | 50 +++++++++++++------ 2 files changed, 40 insertions(+), 17 deletions(-) diff --git a/playground/src/pages/abstractions/AnimatedSprite.vue b/playground/src/pages/abstractions/AnimatedSprite.vue index f316de8d..e50b27b9 100644 --- a/playground/src/pages/abstractions/AnimatedSprite.vue +++ b/playground/src/pages/abstractions/AnimatedSprite.vue @@ -21,7 +21,7 @@ const gl = { } const { fps, animation, definitions, flipX, loop, paused, - reversed, resetOnEnd, centerX, centerY, scale, rotationX, rotationY, rotationZ, position } = useControls({ + reversed, resetOnEnd, asSprite, centerX, centerY, scale, rotationX, rotationY, rotationZ, position } = useControls({ fps: { value: 10, min: 0, max: 120, step: 1 }, animation: { label: 'Animation', value: 'idle', options: ['idle', 'walk', 'blink'] }, definitions: { label: 'Definitions', value: '{}', options: ['{}', '{"idle":"0(10),1-5"}'] }, @@ -30,6 +30,7 @@ const { fps, animation, definitions, flipX, loop, paused, paused: false, reversed: false, resetOnEnd: false, + asSprite: false, centerX: { value: 0.5, min: 0, max: 1, step: 0.01 }, centerY: { value: 0.5, min: 0, max: 1, step: 0.01 }, scale: { value: 1, min: 0.1, max: 4, step: 0.01 }, @@ -141,6 +142,7 @@ const centerDemoImgData = (() => { :fps="fps.value" :loop="loop.value" :reset-on-end="resetOnEnd.value" + :as-sprite="asSprite.value" :center="[centerX.value, centerY.value]" :reversed="reversed.value" :scale="scale.value" @@ -175,6 +177,7 @@ const centerDemoImgData = (() => { :fps="fps.value" :loop="loop.value" :reset-on-end="resetOnEnd.value" + :as-sprite="asSprite.value" :center="[centerX.value, centerY.value]" :reversed="reversed.value" :scale="scale.value" @@ -194,6 +197,7 @@ const centerDemoImgData = (() => { :fps="fps.value" :loop="loop.value" :reset-on-end="resetOnEnd.value" + :as-sprite="asSprite.value" :center="[centerX.value, centerY.value]" :reversed="reversed.value" :scale="scale.value" @@ -210,6 +214,7 @@ const centerDemoImgData = (() => { :atlas="`${ASSETS_URL}cientosAtlas.json`" :definitions="defsParsed" :flip-x="flipX.value" + :as-sprite="asSprite.value" :center="[centerX.value, centerY.value]" :animation="animation.value" :fps="fps.value" diff --git a/src/core/abstractions/AnimatedSprite/component.vue b/src/core/abstractions/AnimatedSprite/component.vue index 22f6d678..d1362460 100644 --- a/src/core/abstractions/AnimatedSprite/component.vue +++ b/src/core/abstractions/AnimatedSprite/component.vue @@ -41,6 +41,8 @@ export interface AnimatedSpriteProps { flipX?: boolean /** For a non-looping animation, when the animation ends, whether to display the zeroth frame. */ resetOnEnd?: boolean + /** Whether to display the object as a THREE.Sprite. [See THREE.Sprite](https://threejs.org/docs/?q=sprite#api/en/objects/Sprite) */ + asSprite?: boolean /** Anchor point of the object. A value of [0.5, 0.5] corresponds to the center. [0, 0] is left, bottom. */ center?: TresVector2 /** Alpha test value for the material. [See THREE.Material.alphaTest](https://threejs.org/docs/#api/en/materials/Material.alphaTest) */ @@ -59,6 +61,7 @@ const props = withDefaults(defineProps(), { reversed: false, flipX: false, resetOnEnd: false, + asSprite: true, center: () => [0.5, 0.5], alphaTest: 0.0, depthTest: true, @@ -201,22 +204,37 @@ watch(() => [props.definitions], () => {