|
| 1 | +--- |
| 2 | +title: "GSoC ’25 Week 10 Update by Aditya Kumar Singh" |
| 3 | +excerpt: "Improved UX and syncing in Human Body activity, enhanced Stickman dashboard visuals, redesigned proportions, and implemented Journal save & multi-stickman support." |
| 4 | +category: "DEVELOPER NEWS" |
| 5 | +date: "2025-07-20" |
| 6 | +slug: "2025-07-20-gsoc-25-AdityaKrSingh26-week010" |
| 7 | +author: "@/constants/MarkdownFiles/authors/aditya-singh.md" |
| 8 | +tags: "gsoc25,sugarlabs,week10,AdityaKrSingh26" |
| 9 | +image: "assets/Images/GSOC.png" |
| 10 | +--- |
| 11 | + |
| 12 | +<!-- markdownlint-disable --> |
| 13 | + |
| 14 | +# Week 10 Progress Report by Aditya Kumar Singh and Midterm Summary |
| 15 | + |
| 16 | +**Project:** [Sugarizer](https://github.com/llaske/sugarizer) |
| 17 | +**Mentors:** [Lionel Laské](https://github.com/llaske) |
| 18 | +**Assisting Mentors:** [Samarth Bagga](https://github.com/SamarthBagga) |
| 19 | +**Reporting Period:** 2025-07-16 - 2025-07-23 |
| 20 | + |
| 21 | +--- |
| 22 | + |
| 23 | +## Goals for This Week |
| 24 | + |
| 25 | +- **Goal 1:** Improve Human Body UX (Tour/Doctor mode randomization, camera reset, leaderboard toggle). |
| 26 | +- **Goal 2:** Polish Stickman activity dashboard and frame preview behavior. |
| 27 | +- **Goal 3:** Improve stickman appearance and proportions. |
| 28 | +- **Goal 4:** Enable multi-stickman support and journal storage. |
| 29 | + |
| 30 | +--- |
| 31 | + |
| 32 | +## This Week’s Achievements |
| 33 | + |
| 34 | +1. **Random Part Selection in Doctor/Tour Modes** |
| 35 | + - Ensured every new session randomly selects a body part to focus on. |
| 36 | + - The selection is now host-driven and synced to all participants. |
| 37 | + ```javascript |
| 38 | + function selectRandomPartForDoctor() { |
| 39 | + presenceCorrectIndex = Math.floor(Math.random() * bodyParts.length); |
| 40 | + document.dispatchEvent(new CustomEvent("target-updated", { |
| 41 | + detail: { part: presenceCorrectIndex } |
| 42 | + })); |
| 43 | + } |
| 44 | + ``` |
| 45 | + |
| 46 | + |
| 47 | +2. **Camera Reset and Leaderboard Cleanup on Exit** |
| 48 | + - Fixed host → client camera sync when exiting Tour mode. |
| 49 | + - Leaderboard UI now clears correctly when Doctor mode ends. |
| 50 | + ```javascript |
| 51 | + function resetTourState() { |
| 52 | + if (!window.isHost) { |
| 53 | + camera.position.set(defaultX, defaultY, defaultZ); |
| 54 | + controls.target.set(0, 1, 0); |
| 55 | + controls.update(); |
| 56 | + } |
| 57 | + hideLeaderboard(); |
| 58 | + } |
| 59 | + ``` |
| 60 | + |
| 61 | + |
| 62 | +3. **Frame Preview Enhancement in Stickman Activity** |
| 63 | + - Previously, users had to add a new frame for the thumbnail preview to refresh. |
| 64 | + - Now, any movement or change in the canvas auto-updates the preview. |
| 65 | + - **Approach:** |
| 66 | + - Detect changes in the canvas (e.g., drag end or part movement). |
| 67 | + - Clone the updated canvas to the current frame’s preview. |
| 68 | + - This ensures instant visual feedback while animating. |
| 69 | + |
| 70 | + |
| 71 | +4. **Stickman Design Overhaul** |
| 72 | + - Revisited the drawing logic and proportions: |
| 73 | + - Shorter neck |
| 74 | + - Thicker limbs |
| 75 | + - Solid, filled circular head |
| 76 | + - Inspired by Pivot Animator to offer a more professional, relatable look. |
| 77 | + > Updated Stickman Design |
| 78 | +  |
| 79 | + |
| 80 | + |
| 81 | +5. **Multi-Stickman Canvas Support** |
| 82 | + - Users can now add more than one stickman in the scene. |
| 83 | + - Each stickman is an isolated object with its own: |
| 84 | + - Position and joint data |
| 85 | + - Frame history |
| 86 | + - Selectable state |
| 87 | + - **Algorithm:** |
| 88 | + - Maintain a list of stickman instances. |
| 89 | + - On user interaction, determine which stickman is targeted. |
| 90 | + - Only that stickman responds to move, draw, and animate actions. |
| 91 | + > Multiple Stickman preview in acitvity |
| 92 | +  |
| 93 | + |
| 94 | + |
| 95 | +6. **Journal Integration for Stickman** |
| 96 | + - Implemented save/load logic to persist stickman data (frames, templates, active character). |
| 97 | + - **Approach:** |
| 98 | + - On save: Serialize all current stickmen, their frame sequences, and selected templates into a JSON blob. |
| 99 | + - On load: Deserialize and reconstruct all visual data, restoring the full session. |
| 100 | + - This allows users to save their progress and resume where they left. |
| 101 | + |
| 102 | + |
| 103 | +--- |
| 104 | + |
| 105 | +## Challenges & How I Overcame Them |
| 106 | + |
| 107 | +- **Challenge:** Preventing multiple stickmen from interfering with each other’s states. |
| 108 | + **Solution:** Scoped interaction events to only apply to the selected stickman instance. |
| 109 | + |
| 110 | +- **Challenge:** Updating previews without triggering unnecessary rendering overhead. |
| 111 | + **Solution:** Triggered preview redraws only on meaningful events like drag-end or transformation complete. |
| 112 | + |
| 113 | +--- |
| 114 | + |
| 115 | +## Key Learnings |
| 116 | + |
| 117 | +- Learned how to architect multi-actor systems on a single canvas while maintaining performance. |
| 118 | +- Strengthened my understanding of event-driven synchronization in real-time collaborative applications. |
| 119 | + |
| 120 | +--- |
| 121 | + |
| 122 | +## Next Week’s Roadmap |
| 123 | + |
| 124 | +- Fix remaining issue on Human Body |
| 125 | +- Increase the size of Stickman |
| 126 | +- Show frames only for selected stickman for multiple stickman |
| 127 | +- Show joints only for selected stickman for multiple stickman |
| 128 | +- Add popup when removing stickman with frames count >1 |
| 129 | + |
| 130 | +--- |
| 131 | + |
| 132 | +## Acknowledgments |
| 133 | + |
| 134 | +Thank you to my mentors, the Sugar Labs community, and fellow GSoC contributors for ongoing support. |
| 135 | + |
| 136 | +--- |
| 137 | + |
0 commit comments