diff --git a/animations/spells/1st/telekinetic-projectile.json b/animations/spells/1st/telekinetic-projectile.json index 06b92b44..4fe92d26 100644 --- a/animations/spells/1st/telekinetic-projectile.json +++ b/animations/spells/1st/telekinetic-projectile.json @@ -8,14 +8,13 @@ "atLocation": { "offset": { "x": [ - -0.25, + -1, 1 ], "y": [ -1, 1 - ], - "flipX": true + ] }, "gridUnits": true }, diff --git a/src/presets/index.ts b/src/presets/index.ts index 64ef7105..991b158d 100644 --- a/src/presets/index.ts +++ b/src/presets/index.ts @@ -158,3 +158,28 @@ export function genericEffectOptions(seq: EffectSection, { options }: AnimationO return seq; } + +function checkIfOffset(obj: any): obj is { + offset: { + x: number | [number, number] | undefined; + y: number | [number, number] | undefined; + }; +} { + return 'offset' in obj; +} + +export function parseOffsets(obj: T) { + if (!obj || !(typeof obj === 'object')) return {}; + + if (checkIfOffset(obj)) { + if (Array.isArray(obj.offset.x)) { + obj.offset.x = Sequencer.Helpers.random_float_between(obj.offset.x[0], obj.offset.x[1]); + } + if (Array.isArray(obj.offset.y)) { + obj.offset.y = Sequencer.Helpers.random_float_between(obj.offset.y[0], obj.offset.y[1]); + } + return obj as { offset: Vector2 }; + } else { + return obj; + } +} diff --git a/src/presets/onToken.ts b/src/presets/onToken.ts index 2c229730..cf87e57a 100644 --- a/src/presets/onToken.ts +++ b/src/presets/onToken.ts @@ -1,5 +1,5 @@ import type { AnimationObject } from 'src/storage/animCore'; -import { type GameData, genericEffectOptions, type SequencerTypes } from '.'; +import { type GameData, genericEffectOptions, parseOffsets, type SequencerTypes } from '.'; export default function ranged(seq: SequencerTypes, animation: AnimationObject, data: GameData) { const { options } = animation; @@ -53,8 +53,10 @@ export default function ranged(seq: SequencerTypes, animation: AnimationObject, if (options?.preset?.rotateTowards) { effect.rotateTowards( - options?.preset?.location === 'target' ? Sequencer.Helpers.random_array_element(sources) : Sequencer.Helpers.random_array_element(targets), - options?.preset?.rotateTowards, // TODO: Parse random number arrays + options?.preset?.location === 'target' + ? Sequencer.Helpers.random_array_element(sources) + : Sequencer.Helpers.random_array_element(targets), + parseOffsets(options?.preset?.rotateTowards), ); } diff --git a/src/storage/animationsSchema.ts b/src/storage/animationsSchema.ts index be5986d1..f212b93d 100644 --- a/src/storage/animationsSchema.ts +++ b/src/storage/animationsSchema.ts @@ -173,8 +173,6 @@ const offset = z .refine(arr => arr[0] !== arr[1], 'Offset range cannot be zero.'), ) .optional(), - flipX: z.literal(true).optional(), - flipY: z.literal(true).optional(), }) .strict() .refine(...nonEmpty)