Small library for generating claude-code like unicde block mascots, and providing animations when they do stuff
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: independent lefteye/righteye offsets, animatable

- --lefteye and --righteye offset each eye vertically from the mood
baseline (positive = higher, negative = lower)
- Both are animatable: --anim lefteye:-1:1 --anim righteye:1:-1
- Arm baseline now follows the lower of the two eyes

+30 -5
+30 -5
src/main.rs
··· 45 45 #[arg(long, allow_hyphen_values = true)] 46 46 mood: Option<i32>, 47 47 48 + /// Vertical offset of left eye from mood baseline. Positive = higher, negative = lower. [default: 0] 49 + #[arg(long, default_value_t = 0, allow_hyphen_values = true)] 50 + lefteye: i32, 51 + 52 + /// Vertical offset of right eye from mood baseline. Positive = higher, negative = lower. [default: 0] 53 + #[arg(long, default_value_t = 0, allow_hyphen_values = true)] 54 + righteye: i32, 55 + 48 56 /// Vertical offset of left arm from default (one row below eyes). Positive = higher, negative = lower. [default: 0] 49 57 #[arg(long, default_value_t = 0, allow_hyphen_values = true)] 50 58 leftarm: i32, ··· 114 122 numlegs: usize, 115 123 legsize: usize, 116 124 mood: i32, 125 + lefteye: i32, 126 + righteye: i32, 117 127 leftarm: i32, 118 128 rightarm: i32, 119 129 body_color: (u8, u8, u8), ··· 170 180 let space = " "; 171 181 172 182 let baseline_row = (height as i32) / 2; 173 - let eye_row = (baseline_row - p.mood).clamp(1, height as i32 - 2) as usize; 183 + let eye_base = (baseline_row - p.mood).clamp(1, height as i32 - 2); 184 + let left_eye_row = (eye_base - p.lefteye).clamp(1, height as i32 - 2) as usize; 185 + let right_eye_row = (eye_base - p.righteye).clamp(1, height as i32 - 2) as usize; 174 186 175 - let eye_left = width / 3; 176 - let eye_right = width - 1 - (width / 3); 187 + let eye_left_col = width / 3; 188 + let eye_right_col = width - 1 - (width / 3); 177 189 178 - let arm_baseline = (eye_row + 1).min(height - 1); 190 + // Arm baseline: one row below the lower of the two eyes 191 + let arm_baseline = (left_eye_row.max(right_eye_row) + 1).min(height - 1); 179 192 let left_arm_row = (arm_baseline as i32 - p.leftarm).clamp(0, height as i32 - 1) as usize; 180 193 let right_arm_row = (arm_baseline as i32 - p.rightarm).clamp(0, height as i32 - 1) as usize; 181 194 ··· 192 205 193 206 if in_body { 194 207 let body_col = col - arm_pad; 195 - if row == eye_row && (body_col == eye_left || body_col == eye_right) { 208 + if (row == left_eye_row && body_col == eye_left_col) 209 + || (row == right_eye_row && body_col == eye_right_col) 210 + { 196 211 output.push_str(&eye_block); 197 212 } else { 198 213 output.push_str(&body_block); ··· 245 260 let base_numlegs = args.numlegs.unwrap_or_else(|| rng.gen_range(0..=4) * 2); 246 261 let base_legsize = args.legsize.unwrap_or_else(|| rng.gen_range(2..=4)); 247 262 let base_mood = args.mood.unwrap_or_else(|| rng.gen_range(-2..=2)); 263 + let base_lefteye = args.lefteye; 264 + let base_righteye = args.righteye; 248 265 let base_leftarm = args.leftarm; 249 266 let base_rightarm = args.rightarm; 250 267 ··· 277 294 numlegs: base_numlegs, 278 295 legsize: base_legsize, 279 296 mood: base_mood, 297 + lefteye: base_lefteye, 298 + righteye: base_righteye, 280 299 leftarm: base_leftarm, 281 300 rightarm: base_rightarm, 282 301 body_color, ··· 305 324 loop { 306 325 // Apply animation overrides 307 326 let mut mood = base_mood; 327 + let mut lefteye = base_lefteye; 328 + let mut righteye = base_righteye; 308 329 let mut leftarm = base_leftarm; 309 330 let mut rightarm = base_rightarm; 310 331 let mut height = base_height; ··· 317 338 let v = anim.value_at(tick); 318 339 match anim.param.as_str() { 319 340 "mood" => mood = v, 341 + "lefteye" => lefteye = v, 342 + "righteye" => righteye = v, 320 343 "leftarm" => leftarm = v, 321 344 "rightarm" => rightarm = v, 322 345 "height" => height = v.max(3) as usize, ··· 335 358 numlegs, 336 359 legsize, 337 360 mood, 361 + lefteye, 362 + righteye, 338 363 leftarm, 339 364 rightarm, 340 365 body_color,