diff options
| author | Syndamia <kamen@syndamia.com> | 2026-03-29 10:10:01 +0300 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2026-03-29 10:10:01 +0300 |
| commit | c7e69628fd8ae971d364e30980d98eb53b6dbe04 (patch) | |
| tree | 74542cc80f8d79a562d7a7046b877fdbf0a72c51 | |
| parent | 2f49c471e32bcf3d942b3396eb954a8dac0db4c7 (diff) | |
| download | ppm_graphics-c7e69628fd8ae971d364e30980d98eb53b6dbe04.tar ppm_graphics-c7e69628fd8ae971d364e30980d98eb53b6dbe04.tar.gz ppm_graphics-c7e69628fd8ae971d364e30980d98eb53b6dbe04.zip | |
feat(anim_graph_rotate): Improved animation
| -rw-r--r-- | renders/anim_graph_rotate.c | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/renders/anim_graph_rotate.c b/renders/anim_graph_rotate.c index e0b3a61..bb7a93e 100644 --- a/renders/anim_graph_rotate.c +++ b/renders/anim_graph_rotate.c @@ -15,22 +15,23 @@ main() { u32 width = 512; u32 height = 512; const u32 FPS = 60; - u32 frames = FPS * 5; + u32 frames = FPS * 10; - PixelCallback* child; - TransformCenter childLeft = { .centerX = width / 4, .centerY = height * 3 / 4, }; - TransformCenter childRight = { .centerX = width * 3 / 4, .centerY = height * 3 / 4, }; + PixelCallback *root, *child; + TransformCenter nodeTop = { .centerX = width / 2, .centerY = height / 4, }; + TransformCenter nodeLeft = { .centerX = width / 4, .centerY = height * 3 / 4, }; + TransformCenter nodeRight = { .centerX = width * 3 / 4, .centerY = height * 3 / 4, }; PixelCallback* segment; LineSegment segmentRight = { - .aX = width / 2, .aY = height / 4, - .bX = width * 3 / 4, .bY = height * 3 / 4, - .width = 20, .color = 0xFFFF00FF, + .aX = nodeTop.centerX, .aY = nodeTop.centerY, + .bX = nodeRight.centerX, .bY = nodeRight.centerY, + .width = 30, .color = 0xFFFF00FF, }; LineSegment segmentLeft = { - .aX = width / 2, .aY = height / 4, - .bX = width / 4, .bY = height * 3 / 4, - .width = 20, .color = 0xFF0088FF, + .aX = nodeLeft.centerX, .aY = nodeLeft.centerY, + .bX = nodeTop.centerX, .bY = nodeTop.centerY, + .width = 30, .color = 0xFF0088FF, }; PixelCallback* callbacks[] = { @@ -42,15 +43,13 @@ main() { NULL, segment = LineSegment_setup(segmentRight), /* Root node */ - TransformCenter_setup((TransformCenter){ - .centerX = width / 2, .centerY = height / 4, - }), + root = TransformCenter_setup(nodeTop), Circle_setup((Circle){ .radius = 60, .color = 0xFFFF0000, }), /* Child node */ NULL, - child = TransformCenter_setup(childRight), + child = TransformCenter_setup(nodeRight), Circle_setup((Circle){ .radius = 60, .color = 0xFF00FF00, }), @@ -60,10 +59,15 @@ main() { FrameCallback* frameCallbacks[] = { /* Move right to left */ FrameRange_setup((FrameRange){ - .startFrame = frames / 3 - FPS, .endFrame = frames / 3, + .startFrame = FPS * 1, .endFrame = FPS * 3, + }), + Interpolate_setup((Interpolate){ + .startValue = &nodeTop, .endValue = &nodeLeft, + .value = root->callback_self, + .interpolate = (f_interpolate)Interpolate_TransformCenter, }), Interpolate_setup((Interpolate){ - .startValue = &childRight, .endValue = &childLeft, + .startValue = &nodeRight, .endValue = &nodeTop, .value = child->callback_self, .interpolate = (f_interpolate)Interpolate_TransformCenter, }), @@ -75,10 +79,15 @@ main() { /* Move left to right */ NULL, FrameRange_setup((FrameRange){ - .startFrame = frames * 2 / 3 - FPS, .endFrame = frames * 2 / 3, + .startFrame = FPS * 6, .endFrame = FPS * 8, + }), + Interpolate_setup((Interpolate){ + .startValue = &nodeLeft, .endValue = &nodeTop, + .value = root->callback_self, + .interpolate = (f_interpolate)Interpolate_TransformCenter, }), Interpolate_setup((Interpolate){ - .startValue = &childLeft, .endValue = &childRight, + .startValue = &nodeTop, .endValue = &nodeRight, .value = child->callback_self, .interpolate = (f_interpolate)Interpolate_TransformCenter, }), |
