From b1996c83245725a6a67ebc0d06ebbe46a60a3d74 Mon Sep 17 00:00:00 2001 From: Michael Freno Date: Mon, 26 Jan 2026 23:20:14 -0500 Subject: [PATCH] getting back to this --- Gaze/Animations/posture.json | 904 +++++++++--------- Gaze/Animations/posture2.json | 345 +++++++ Gaze/Animations/posture3.json | 254 +++++ Gaze/Animations/posture4.json | 407 ++++++++ Gaze/Models/AnimationAsset.swift | 4 +- .../Views/Reminders/PostureReminderView.swift | 69 +- 6 files changed, 1524 insertions(+), 459 deletions(-) create mode 100644 Gaze/Animations/posture2.json create mode 100644 Gaze/Animations/posture3.json create mode 100644 Gaze/Animations/posture4.json diff --git a/Gaze/Animations/posture.json b/Gaze/Animations/posture.json index 15f188a..5e6b9d2 100644 --- a/Gaze/Animations/posture.json +++ b/Gaze/Animations/posture.json @@ -1,140 +1,85 @@ { "v": "5.7.4", - "fr": 30, + "fr": 60, "ip": 0, - "op": 90, - "w": 200, - "h": 400, - "nm": "Posture Arrow Animation", + "op": 180, + "w": 300, + "h": 300, + "nm": "Posture Correction - Side View", "ddd": 0, "assets": [], - "date": "2026-01-09T00:00:00Z", "layers": [ { "ddd": 0, "ind": 1, "ty": 4, - "nm": "Arrow", + "nm": "Head", + "parent": 2, "sr": 1, "ks": { - "o": { - "a": 1, - "k": [ + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, -38, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ { - "t": 0, - "s": [ - 0 - ], - "h": 1 + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [36, 36] }, + "nm": "Head" }, { - "t": 10, - "s": [ - 100 - ], - "h": 1 + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" }, { - "t": 60, - "s": [ - 100 - ], - "h": 1 - }, - { - "t": 70, - "s": [ - 0 - ], - "h": 1 + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } } - ] - }, - "r": { - "a": 0, - "k": 0 - }, - "p": { - "a": 1, - "k": [ - { - "t": 0, - "s": [ - 100, - 200, - 0 - ], - "h": 1 - }, - { - "t": 60, - "s": [ - 100, - 200, - 0 - ], - "h": 1 - }, - { - "t": 90, - "s": [ - 100, - -100, - 0 - ], - "h": 1 - } - ] - }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ] - }, - "s": { - "a": 1, - "k": [ - { - "t": 0, - "s": [ - 0, - 0, - 100 - ], - "h": 1 - }, - { - "t": 10, - "s": [ - 100, - 100, - 100 - ], - "h": 1 - }, - { - "t": 60, - "s": [ - 100, - 100, - 100 - ], - "h": 1 - }, - { - "t": 70, - "s": [ - 50, - 50, - 100 - ], - "h": 1 - } - ] + ], + "nm": "Head Shape" } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Neck", + "parent": 3, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { + "a": 1, + "k": [ + { "t": 0, "s": [30], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 70, "s": [0], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [0] } + ] + }, + "p": { "a": 0, "k": [0, -50, 0] }, + "a": { "a": 0, "k": [0, 20, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } }, "ao": 0, "shapes": [ @@ -146,285 +91,60 @@ "ks": { "a": 0, "k": { - "i": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "o": [ - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ], - [ - 0, - 0 - ] - ], - "v": [ - [ - 0, - -40 - ], - [ - -30, - -10 - ], - [ - -12, - -10 - ], - [ - -12, - 40 - ], - [ - 12, - 40 - ], - [ - 12, - -10 - ], - [ - 30, - -10 - ] - ], - "c": true + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, -20], [0, 20]], + "c": false } }, - "nm": "Arrow Path" + "nm": "Neck Path" }, { - "ty": "fl", - "c": { - "a": 0, - "k": [ - 0, - 0, - 0, - 1 - ] - }, - "o": { - "a": 0, - "k": 100 - }, - "r": 1, - "nm": "Fill" + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" }, { "ty": "tr", - "p": { - "a": 0, - "k": [ - 0, - 0 - ] - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ] - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ] - }, - "r": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100 - } + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } } ], - "nm": "Arrow Shape" + "nm": "Neck Shape" } ], "ip": 0, - "op": 90, + "op": 180, "st": 0, "bm": 0 }, { "ddd": 0, - "ind": 2, + "ind": 3, "ty": 4, - "nm": "Circle Background", + "nm": "Torso", + "parent": 7, "sr": 1, "ks": { - "o": { - "a": 1, - "k": [ - { - "t": 0, - "s": [ - 0 - ], - "h": 1 - }, - { - "t": 10, - "s": [ - 100 - ], - "h": 1 - }, - { - "t": 60, - "s": [ - 100 - ], - "h": 1 - }, - { - "t": 70, - "s": [ - 0 - ], - "h": 1 - } - ] - }, + "o": { "a": 0, "k": 100 }, "r": { - "a": 0, - "k": 0 - }, - "p": { "a": 1, "k": [ - { - "t": 0, - "s": [ - 100, - 200, - 0 - ], - "h": 1 - }, - { - "t": 60, - "s": [ - 100, - 200, - 0 - ], - "h": 1 - }, - { - "t": 90, - "s": [ - 100, - -100, - 0 - ], - "h": 1 - } + { "t": 0, "s": [25], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 70, "s": [-5], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [-5] } ] }, - "a": { - "a": 0, - "k": [ - 0, - 0, - 0 - ] - }, - "s": { - "a": 1, - "k": [ - { - "t": 0, - "s": [ - 0, - 0, - 100 - ], - "h": 1 - }, - { - "t": 10, - "s": [ - 100, - 100, - 100 - ], - "h": 1 - }, - { - "t": 60, - "s": [ - 100, - 100, - 100 - ], - "h": 1 - }, - { - "t": 70, - "s": [ - 50, - 50, - 100 - ], - "h": 1 - } - ] - } + "p": { "a": 0, "k": [0, 0, 0] }, + "a": { "a": 0, "k": [0, 50, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } }, "ao": 0, "shapes": [ @@ -432,79 +152,407 @@ "ty": "gr", "it": [ { - "ty": "el", - "p": { + "ty": "sh", + "ks": { "a": 0, - "k": [ - 0, - 0 - ] + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, -50], [0, 50]], + "c": false + } }, - "s": { + "nm": "Torso Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Torso Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Upper Arm", + "parent": 3, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { + "a": 1, + "k": [ + { "t": 0, "s": [40], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 70, "s": [70], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [70] } + ] + }, + "p": { "a": 0, "k": [0, -40, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { "a": 0, - "k": [ - 120, - 120 - ] + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 35]], + "c": false + } }, - "nm": "Circle Ellipse" + "nm": "Upper Arm Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Upper Arm Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Forearm", + "parent": 4, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { + "a": 1, + "k": [ + { "t": 0, "s": [-80], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 70, "s": [-110], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [-110] } + ] + }, + "p": { "a": 0, "k": [0, 35, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 30]], + "c": false + } + }, + "nm": "Forearm Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Forearm Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Thigh", + "parent": 7, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 90 }, + "p": { "a": 0, "k": [0, 0, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 50]], + "c": false + } + }, + "nm": "Thigh Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Thigh Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Hip (Root)", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [150, 200, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 8, + "ty": 4, + "nm": "Lower Leg", + "parent": 6, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": -90 }, + "p": { "a": 0, "k": [0, 50, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 45]], + "c": false + } + }, + "nm": "Lower Leg Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Lower Leg Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 9, + "ty": 4, + "nm": "Chair Seat", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [125, 208, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [70, 8] }, + "r": { "a": 0, "k": 4 }, + "nm": "Seat" }, { "ty": "fl", - "c": { - "a": 0, - "k": [ - 0.9, - 0.9, - 0.9, - 1 - ] - }, - "o": { - "a": 0, - "k": 30 - }, + "c": { "a": 0, "k": [0.5, 0.5, 0.5, 1] }, + "o": { "a": 0, "k": 100 }, "r": 1, "nm": "Fill" }, { "ty": "tr", - "p": { - "a": 0, - "k": [ - 0, - 0 - ] - }, - "a": { - "a": 0, - "k": [ - 0, - 0 - ] - }, - "s": { - "a": 0, - "k": [ - 100, - 100 - ] - }, - "r": { - "a": 0, - "k": 0 - }, - "o": { - "a": 0, - "k": 100 - } + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } } ], - "nm": "Circle" + "nm": "Seat Shape" } ], "ip": 0, - "op": 90, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 10, + "ty": 4, + "nm": "Chair Back", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 50 }, + "r": { "a": 0, "k": -5 }, + "p": { "a": 0, "k": [92, 160, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "rc", + "d": 1, + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [8, 90] }, + "r": { "a": 0, "k": 4 }, + "nm": "Back" + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.5, 0.5, 0.5, 1] }, + "o": { "a": 0, "k": 100 }, + "r": 1, + "nm": "Fill" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Back Shape" + } + ], + "ip": 0, + "op": 180, "st": 0, "bm": 0 } diff --git a/Gaze/Animations/posture2.json b/Gaze/Animations/posture2.json new file mode 100644 index 0000000..ecb803f --- /dev/null +++ b/Gaze/Animations/posture2.json @@ -0,0 +1,345 @@ +{ + "v": "5.7.4", + "fr": 60, + "ip": 0, + "op": 180, + "w": 300, + "h": 300, + "nm": "Posture 2 - Spine Only", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Head", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, -25, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [40, 40] }, + "nm": "Head" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 8 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Head Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Spine Curve", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [150, 150, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 1, + "k": [ + { + "t": 0, + "s": [{ + "i": [[0, 0], [20, 0], [25, 0], [0, 0]], + "o": [[0, 0], [-20, 0], [-25, 0], [0, 0]], + "v": [[40, -80], [50, -30], [45, 40], [0, 90]], + "c": false + }], + "i": { "x": 0.3, "y": 1 }, + "o": { "x": 0.7, "y": 0 } + }, + { + "t": 70, + "s": [{ + "i": [[0, 0], [0, 0], [0, 0], [0, 0]], + "o": [[0, 0], [0, 0], [0, 0], [0, 0]], + "v": [[0, -80], [0, -30], [0, 40], [0, 90]], + "c": false + }], + "i": { "x": 0.3, "y": 1 }, + "o": { "x": 0.7, "y": 0 } + }, + { + "t": 180, + "s": [{ + "i": [[0, 0], [0, 0], [0, 0], [0, 0]], + "o": [[0, 0], [0, 0], [0, 0], [0, 0]], + "v": [[0, -80], [0, -30], [0, 40], [0, 90]], + "c": false + }] + } + ] + }, + "nm": "Spine Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 8 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Spine Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Vertebrae 1", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 10, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [14, 14] }, + "nm": "Dot" + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "r": 1, + "nm": "Fill" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Vertebra" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Vertebrae 2", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 45, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [14, 14] }, + "nm": "Dot" + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "r": 1, + "nm": "Fill" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Vertebra" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Vertebrae 3", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 80, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [14, 14] }, + "nm": "Dot" + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "r": 1, + "nm": "Fill" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Vertebra" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Vertebrae 4", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 115, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [14, 14] }, + "nm": "Dot" + }, + { + "ty": "fl", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "r": 1, + "nm": "Fill" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Vertebra" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/Gaze/Animations/posture3.json b/Gaze/Animations/posture3.json new file mode 100644 index 0000000..a1f1ec5 --- /dev/null +++ b/Gaze/Animations/posture3.json @@ -0,0 +1,254 @@ +{ + "v": "5.7.4", + "fr": 60, + "ip": 0, + "op": 180, + "w": 300, + "h": 300, + "nm": "Posture 3 - Arrow Up", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Arrow", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { "t": 0, "s": [150, 180, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 40, "s": [150, 120, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 80, "s": [150, 140, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 120, "s": [150, 120, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 160, "s": [150, 140, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 180, "s": [150, 130, 0] } + ] + }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { + "a": 1, + "k": [ + { "t": 0, "s": [80, 80, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 40, "s": [100, 100, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 180, "s": [100, 100, 100] } + ] + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0], [0, 0]], + "o": [[0, 0], [0, 0], [0, 0]], + "v": [[-40, 30], [0, -30], [40, 30]], + "c": false + } + }, + "nm": "Arrow Head" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 12 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Arrow Head Shape" + }, + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, -20], [0, 70]], + "c": false + } + }, + "nm": "Arrow Stem" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 12 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Arrow Stem Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Circle Pulse 1", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 30, "s": [0], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 50, "s": [60], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 100, "s": [0], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [0] } + ] + }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [150, 130, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { + "a": 1, + "k": [ + { "t": 30, "s": [50, 50, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 100, "s": [150, 150, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 180, "s": [150, 150, 100] } + ] + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [120, 120] }, + "nm": "Circle" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 4 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Circle Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Circle Pulse 2", + "sr": 1, + "ks": { + "o": { + "a": 1, + "k": [ + { "t": 90, "s": [0], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 110, "s": [60], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 160, "s": [0], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 180, "s": [0] } + ] + }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [150, 130, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { + "a": 1, + "k": [ + { "t": 90, "s": [50, 50, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 160, "s": [150, 150, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 180, "s": [150, 150, 100] } + ] + } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [120, 120] }, + "nm": "Circle" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 4 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Circle Shape" + } + ], + "ip": 0, + "op": 180, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/Gaze/Animations/posture4.json b/Gaze/Animations/posture4.json new file mode 100644 index 0000000..cb12c06 --- /dev/null +++ b/Gaze/Animations/posture4.json @@ -0,0 +1,407 @@ +{ + "v": "5.7.4", + "fr": 60, + "ip": 0, + "op": 150, + "w": 300, + "h": 300, + "nm": "Posture 4 - Shoulders Back Launch", + "ddd": 0, + "assets": [], + "layers": [ + { + "ddd": 0, + "ind": 1, + "ty": 4, + "nm": "Head", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, -55, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "el", + "p": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [50, 50] }, + "nm": "Head" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Head Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 2, + "ty": 4, + "nm": "Torso", + "parent": 7, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { "a": 0, "k": [0, 0, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, -30], [0, 80]], + "c": false + } + }, + "nm": "Torso Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Torso Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 3, + "ty": 4, + "nm": "Left Shoulder", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { + "a": 1, + "k": [ + { "t": 0, "s": [30], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 50, "s": [-20], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 150, "s": [-20] } + ] + }, + "p": { "a": 0, "k": [-5, -20, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [-50, 20]], + "c": false + } + }, + "nm": "Shoulder Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Shoulder Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 4, + "ty": 4, + "nm": "Right Shoulder", + "parent": 2, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { + "a": 1, + "k": [ + { "t": 0, "s": [-30], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 50, "s": [20], "i": { "x": [0.3], "y": [1] }, "o": { "x": [0.7], "y": [0] } }, + { "t": 150, "s": [20] } + ] + }, + "p": { "a": 0, "k": [5, -20, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [50, 20]], + "c": false + } + }, + "nm": "Shoulder Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Shoulder Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 5, + "ty": 4, + "nm": "Left Leg", + "parent": 7, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": -20 }, + "p": { "a": 0, "k": [-5, 80, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 50]], + "c": false + } + }, + "nm": "Leg Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Leg Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 6, + "ty": 4, + "nm": "Right Leg", + "parent": 7, + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 20 }, + "p": { "a": 0, "k": [5, 80, 0] }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { "a": 0, "k": [100, 100, 100] } + }, + "ao": 0, + "shapes": [ + { + "ty": "gr", + "it": [ + { + "ty": "sh", + "ks": { + "a": 0, + "k": { + "i": [[0, 0], [0, 0]], + "o": [[0, 0], [0, 0]], + "v": [[0, 0], [0, 50]], + "c": false + } + }, + "nm": "Leg Path" + }, + { + "ty": "st", + "c": { "a": 0, "k": [0.298, 0.686, 0.314, 1] }, + "o": { "a": 0, "k": 100 }, + "w": { "a": 0, "k": 6 }, + "lc": 2, + "lj": 2, + "nm": "Stroke" + }, + { + "ty": "tr", + "p": { "a": 0, "k": [0, 0] }, + "a": { "a": 0, "k": [0, 0] }, + "s": { "a": 0, "k": [100, 100] }, + "r": { "a": 0, "k": 0 }, + "o": { "a": 0, "k": 100 } + } + ], + "nm": "Leg Shape" + } + ], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + }, + { + "ddd": 0, + "ind": 7, + "ty": 4, + "nm": "Root", + "sr": 1, + "ks": { + "o": { "a": 0, "k": 100 }, + "r": { "a": 0, "k": 0 }, + "p": { + "a": 1, + "k": [ + { "t": 0, "s": [150, 150, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 50, "s": [150, 150, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 70, "s": [150, 160, 0], "i": { "x": 0.1, "y": 1 }, "o": { "x": 0.5, "y": 0 } }, + { "t": 120, "s": [150, -200, 0], "i": { "x": 0.3, "y": 1 }, "o": { "x": 0.7, "y": 0 } }, + { "t": 150, "s": [150, -200, 0] } + ] + }, + "a": { "a": 0, "k": [0, 0, 0] }, + "s": { + "a": 1, + "k": [ + { "t": 0, "s": [100, 100, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 50, "s": [100, 100, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 70, "s": [110, 90, 100], "i": { "x": [0.1, 0.1, 0.1], "y": [1, 1, 1] }, "o": { "x": [0.5, 0.5, 0.5], "y": [0, 0, 0] } }, + { "t": 120, "s": [60, 60, 100], "i": { "x": [0.3, 0.3, 0.3], "y": [1, 1, 1] }, "o": { "x": [0.7, 0.7, 0.7], "y": [0, 0, 0] } }, + { "t": 150, "s": [60, 60, 100] } + ] + } + }, + "ao": 0, + "shapes": [], + "ip": 0, + "op": 150, + "st": 0, + "bm": 0 + } + ], + "markers": [] +} diff --git a/Gaze/Models/AnimationAsset.swift b/Gaze/Models/AnimationAsset.swift index 3020f5c..d7690c8 100644 --- a/Gaze/Models/AnimationAsset.swift +++ b/Gaze/Models/AnimationAsset.swift @@ -10,9 +10,9 @@ import Foundation enum AnimationAsset: String { case blink = "blink" case lookAway = "look-away" - case posture = "posture" + case posture = "posture4" case ring = "ring" - + var fileName: String { return self.rawValue } diff --git a/Gaze/Views/Reminders/PostureReminderView.swift b/Gaze/Views/Reminders/PostureReminderView.swift index 361adca..d7299fa 100644 --- a/Gaze/Views/Reminders/PostureReminderView.swift +++ b/Gaze/Views/Reminders/PostureReminderView.swift @@ -5,29 +5,47 @@ // Created by Mike Freno on 1/7/26. // +import Lottie import SwiftUI struct PostureReminderView: View { let sizePercentage: Double var onDismiss: () -> Void - @State private var scale: CGFloat = 0 - @State private var yOffset: CGFloat = 0 @State private var opacity: Double = 0 + @State private var scale: CGFloat = 0 + @State private var shouldShowAnimation = false private let screenHeight = NSScreen.main?.frame.height ?? 800 private let screenWidth = NSScreen.main?.frame.width ?? 1200 + private var baseSize: CGFloat { + screenWidth * (sizePercentage / 100.0) * 2.5 + } + var body: some View { VStack { - Image(systemName: "arrow.up.circle.fill") - .font(.system(size: scale)) - .foregroundStyle(Color.accentColor) + if shouldShowAnimation { + GazeLottieView( + animationName: AnimationAsset.posture.fileName, + loopMode: .playOnce, + animationSpeed: 1.0, + onAnimationFinish: { completed in + if completed { + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + fadeOut() + } + } + } + ) + .frame(width: baseSize, height: baseSize) + .scaleEffect(scale) + } + Spacer() } .opacity(opacity) - .offset(y: yOffset) - .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) - .padding(.top, screenHeight * 0.075) + .frame(maxWidth: .infinity, maxHeight: .infinity) + .padding(.top, screenHeight * 0.05) .accessibilityIdentifier(AccessibilityIdentifiers.Reminders.postureView) .onAppear { startAnimation() @@ -35,36 +53,29 @@ struct PostureReminderView: View { } private func startAnimation() { - // Phase 1: Fade in + Grow to configured size - withAnimation(.easeOut(duration: 0.4)) { + withAnimation(.easeOut(duration: 0.3)) { opacity = 1.0 - scale = screenWidth * (sizePercentage / 100.0) + scale = 1.0 } - // Phase 2: Hold - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4 + 0.5) { - // Phase 3: Shrink to half the configured size - withAnimation(.easeInOut(duration: 0.3)) { - scale = screenWidth * (sizePercentage / 100.0) * 0.5 - } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + shouldShowAnimation = true + } + } - // Phase 4: Shoot upward - DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { - withAnimation(.easeIn(duration: 0.4)) { - yOffset = -screenHeight - opacity = 0 - } + private func fadeOut() { + withAnimation(.easeOut(duration: 0.3)) { + opacity = 0 + scale = 0.7 + } - // Dismiss after animation - DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) { - onDismiss() - } - } + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) { + onDismiss() } } } #Preview("Posture Reminder") { - PostureReminderView(sizePercentage: 10.0, onDismiss: {}) + PostureReminderView(sizePercentage: 15.0, onDismiss: {}) .frame(width: 800, height: 600) }