add staggered text

rename box to rect
refactor rust
This commit is contained in:
2023-05-23 10:27:45 +02:00
parent 7576850ae0
commit 8523e44029
32 changed files with 4344 additions and 2203 deletions

View File

@@ -1,6 +1,7 @@
import { z } from "zod";
import { BoxEntity, EllipseEntity, TextEntity } from "./Entities";
import { EllipseEntity, EntityType, RectEntity, TextEntity } from "./Entities";
import { AnimatedVec2 } from "./Values";
import { TextPaint } from "./Paint";
export const AnimationData = z.object({
offset: z.number(),
@@ -8,16 +9,43 @@ export const AnimationData = z.object({
visible: z.boolean().optional().default(true),
});
export const AnimatedBoxEntity = BoxEntity.extend({
export const AnimatedTransform = z.object({
/** Translates by the given animated vec2 */
translate: AnimatedVec2,
/** Skews by the given animated vec2 */
skew: AnimatedVec2,
/** Rotates by the given animated vec2 */
rotate: AnimatedVec2,
/** Scales on the x and y axis by the given animated vec2 */
scale: AnimatedVec2,
});
export const AnimatedStaggeredText = z.object({
/** Transform applied to the whole layer. */
transform: AnimatedTransform,
/** The staggered delay that is applied for each letter. Gets multiplied by the index of the letter. */
stagger: z.number().min(0),
/** These properties get applied to each letter */
letter: z.object({
transform: AnimatedTransform,
paint: TextPaint,
}),
text: z.string(),
animation_data: AnimationData,
type: z.literal(EntityType.Enum.StaggeredText),
});
export const AnimatedRectEntity = RectEntity.extend({
position: AnimatedVec2,
size: AnimatedVec2,
origin: AnimatedVec2,
transform: AnimatedTransform.optional(),
animation_data: AnimationData,
});
export const AnimatedTextEntity = TextEntity.extend({
origin: AnimatedVec2,
transform: AnimatedTransform.optional(),
animation_data: AnimationData,
});
@@ -25,12 +53,14 @@ export const AnimatedEllipseEntity = EllipseEntity.extend({
radius: AnimatedVec2,
position: AnimatedVec2,
origin: AnimatedVec2,
transform: AnimatedTransform.optional(),
animation_data: AnimationData,
});
export const AnimatedEntity = z.discriminatedUnion("type", [
AnimatedBoxEntity,
AnimatedRectEntity,
AnimatedTextEntity,
AnimatedStaggeredText,
AnimatedEllipseEntity,
]);