Skip to content

Commit 2c29370

Browse files
author
ExuberantIris
committed
Fix the problem of state.led_part_length_map
1 parent 0329f74 commit 2c29370

5 files changed

Lines changed: 46 additions & 6 deletions

File tree

editor-blender/core/actions/property/animation_data/control.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ def _update_no_change_keyframe(
411411
part_obj = data_objects[part_obj_name]
412412
dancer_name = getattr(part_obj, "ld_dancer_name")
413413
part_name = getattr(part_obj, "ld_part_name")
414-
part_length = state.led_part_length_map[part_name]
414+
part_length = state.led_part_length_map[dancer_name][part_name]
415415

416416
led_effect_table = state.led_effect_id_table
417417

editor-blender/core/actions/state/control_editor.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,13 +214,20 @@ def take_ctrl_data_from_model(
214214
ld_alpha: int = getattr(part_obj, "ld_alpha")
215215
partControlData.append((effect_id, ld_alpha))
216216
if effect_id == 0:
217+
part_length = part.length
218+
217219
bulb_objs: list[bpy.types.Object] = list(
218220
getattr(part_obj, "children")
219221
)
220222
bulb_objs.sort(key=lambda _obj: getattr(_obj, "ld_led_pos"))
221223
bulb_color_list: list[tuple[int, int]] = [
222224
(obj["ld_color"], getattr(obj, "ld_alpha")) for obj in bulb_objs
223225
]
226+
if len(bulb_color_list) != part_length:
227+
raise Exception(
228+
f"Bulb number {len(bulb_color_list)} does not match actual part length {part_length}"
229+
)
230+
224231
partLEDControlData.append(bulb_color_list)
225232
else:
226233
partLEDControlData.append([])
@@ -287,6 +294,7 @@ async def save_control_frame(start: int | None = None):
287294

288295
with send_request():
289296
try:
297+
print(controlData, ledControlData, fadeData, hasEffectData, start)
290298
await control_agent.save_frame(
291299
id,
292300
controlData,

editor-blender/core/actions/state/initialize.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -362,10 +362,11 @@ async def init_dancers():
362362
led_part_length_map: LEDPartLengthMap = {}
363363

364364
for dancer in dancers_array:
365+
led_part_length_map[dancer.name] = {}
365366
for part in dancer.parts:
366367
part_type_map[part.name] = part.type
367368
if part.type == PartType.LED and part.length is not None:
368-
led_part_length_map[part.name] = part.length
369+
led_part_length_map[dancer.name][part.name] = part.length
369370

370371
dancer_part_index_map: DancerPartIndexMap = {}
371372

editor-blender/core/models/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ class PartType(Enum):
167167

168168

169169
PartTypeMap = dict[PartName, PartType]
170-
LEDPartLengthMap = dict[LEDPartName, int]
170+
LEDPartLengthMap = dict[DancerName, dict[LEDPartName, int]]
171171

172172

173173
Dancers = dict[DancerName, list[PartName]]

editor-blender/core/utils/convert.py

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,7 +1068,6 @@ def control_modify_to_animation_data(
10681068
]
10691069
)
10701070
else:
1071-
part_length = state.led_part_length_map[part_name]
10721071
led_rgb_floats = [(0.0, 0.0, 0.0)] * part_length
10731072

10741073
for i in range(part_length):
@@ -1127,7 +1126,6 @@ def control_modify_to_animation_data(
11271126
]
11281127
)
11291128
else:
1130-
part_length = state.led_part_length_map[part_name]
11311129
led_rgb_floats = [(0.0, 0.0, 0.0)] * part_length
11321130

11331131
if len(part_map) == 0:
@@ -1228,6 +1226,25 @@ def control_map_to_animation_data(
12281226
(led_data.color_id, led_data.alpha)
12291227
for led_data in part_led_status
12301228
]
1229+
# try:
1230+
# led_rgb_floats = gradient_to_rgb_float(
1231+
# [
1232+
# (led_data.color_id, led_data.alpha)
1233+
# for led_data in part_led_status
1234+
# ]
1235+
# )
1236+
# prev_effect_id[0] = 0
1237+
# prev_led_bulbs[0] = [
1238+
# (led_data.color_id, led_data.alpha)
1239+
# for led_data in part_led_status
1240+
# ]
1241+
# except:
1242+
# print(dancer_name, part_name, frame.start, part_data.effect_id)
1243+
# print(part_led_status, [
1244+
# (led_data.color_id, led_data.alpha)
1245+
# for led_data in part_led_status
1246+
# ])
1247+
# led_rgb_floats = [(0.0, 0.0, 0.0)] * part_length
12311248

12321249
elif prev_effect_id[0] > 0:
12331250
prev_effect = led_effect_table[prev_effect_id[0]].effect
@@ -1240,13 +1257,27 @@ def control_map_to_animation_data(
12401257
led_rgb_floats = gradient_to_rgb_float(prev_led_bulbs[0])
12411258

12421259
else:
1243-
led_rgb_floats = [(0, 0, 0)] * part_length
1260+
led_rgb_floats = [(0.0, 0.0, 0.0)] * part_length
12441261

12451262
if len(part_map) == 0:
12461263
part_map.extend([[] for _ in range(part_length)]) # type: ignore
12471264

1265+
# FIXME: delete this
1266+
if len(led_rgb_floats) != part_length:
1267+
print(
1268+
frame.start,
1269+
dancer_name,
1270+
part_name,
1271+
len(led_rgb_floats),
1272+
part_length,
1273+
)
12481274
for i in range(part_length):
12491275
part_map[i].append((frame.start, part_fade, led_rgb_floats[i])) # type: ignore
1276+
# try:
1277+
# part_map[i].append((frame.start, part_fade, led_rgb_floats[i])) # type: ignore
1278+
# except Exception as _:
1279+
# #FIXME: This is just a quickfix, find a better way to do this!
1280+
# part_map[i].append((frame.start, part_fade, (0.0, 0.0, 0.0))) # type: ignore
12501281

12511282
else:
12521283
part_rgb = color_map[part_data.color_id].rgb

0 commit comments

Comments
 (0)