Skip to content

Commit 82ad97b

Browse files
committed
Changed to blender's timing system
1 parent 90e3937 commit 82ad97b

File tree

1 file changed

+25
-67
lines changed

1 file changed

+25
-67
lines changed

3Debuff.py

Lines changed: 25 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,50 @@
66

77
import bpy
88
import random
9-
import threading
109

1110
def move_objects():
1211
for obj in bpy.data.objects:
1312
obj.location.x += random.uniform(-3, 3)
1413
obj.location.y += random.uniform(-3, 3)
1514
obj.location.z += random.uniform(-3, 3)
15+
return 120 # Run every 2 minutes
1616

1717
def delete_random_object():
1818
if bpy.data.objects:
1919
obj = random.choice(bpy.data.objects)
2020
bpy.data.objects.remove(obj)
21+
return 300 # Run every 5 minutes
2122

2223
def rotate_objects():
2324
for obj in bpy.data.objects:
2425
obj.rotation_euler.x += random.uniform(-0.4, 0.4)
2526
obj.rotation_euler.y += random.uniform(-0.4, 0.4)
2627
obj.rotation_euler.z += random.uniform(-0.4, 0.4)
28+
return 120 # Run every 2 minutes
2729

2830
def shutdown_blender():
29-
# Generate a random delay between 1 to 5 minutes (60 to 300 seconds)
3031
delay_seconds = random.randint(60, 300)
31-
# Start a timer to shut down Blender after the random delay
32-
threading.Timer(delay_seconds, bpy.ops.wm.quit_blender).start()
33-
32+
bpy.app.timers.register(bpy.ops.wm.quit_blender, first_interval=delay_seconds)
33+
3434
def change_light_colors():
3535
for obj in bpy.data.objects:
3636
if obj.type == 'LIGHT':
3737
obj.data.color = (random.random(), random.random(), random.random())
38-
threading.Timer(300, change_light_colors).start()
38+
return 300 # Run every 5 minutes
3939

4040
def add_random_modifier():
4141
modifiers = [
4242
"ARRAY", "BEVEL", "MIRROR", "REMESH", "SCREW", "SKIN", "SOLIDIFY",
4343
"SUBSURF", "WIREFRAME", "DISPLACE", "SIMPLE_DEFORM", "WAVE", "OCEAN"
4444
]
4545

46-
# Get all mesh objects
4746
mesh_objects = [obj for obj in bpy.data.objects if obj.type == 'MESH']
4847

4948
if mesh_objects:
50-
# Choose a random mesh object
5149
obj = random.choice(mesh_objects)
52-
53-
# Choose a random modifier
5450
mod_type = random.choice(modifiers)
55-
56-
# Add the modifier to the chosen object
5751
obj.modifiers.new(name=mod_type, type=mod_type)
58-
52+
return 300 # Run every 5 minutes
5953

6054
def disable_undo():
6155
keyconfig = bpy.context.window_manager.keyconfigs.active
@@ -67,57 +61,33 @@ def disable_undo():
6761
def disable_delete_button():
6862
keyconfig = bpy.context.window_manager.keyconfigs.active
6963

70-
# Disable in 'Object Mode'
71-
keymap_object_mode = keyconfig.keymaps.get('Object Mode')
72-
if keymap_object_mode:
73-
for kmi in keymap_object_mode.keymap_items:
74-
if kmi.type in {'X', 'DEL'}:
75-
keymap_object_mode.keymap_items.remove(kmi)
76-
77-
# Disable in 'Edit Mode'
78-
keymap_edit_mode = keyconfig.keymaps.get('Mesh')
79-
if keymap_edit_mode:
80-
for kmi in keymap_edit_mode.keymap_items:
81-
if kmi.type in {'X', 'DEL'}:
82-
keymap_edit_mode.keymap_items.remove(kmi)
83-
84-
def move_objects_periodic():
85-
move_objects()
86-
threading.Timer(120, move_objects_periodic).start()
87-
88-
def delete_random_object_periodic():
89-
delete_random_object()
90-
threading.Timer(300, delete_random_object_periodic).start()
91-
92-
def rotate_objects_periodic():
93-
rotate_objects()
94-
threading.Timer(120, rotate_objects_periodic).start()
95-
96-
def add_random_modifier_periodic():
97-
add_random_modifier()
98-
threading.Timer(300, add_random_modifier_periodic).start()
99-
64+
for keymap_name in ['Object Mode', 'Mesh']:
65+
keymap = keyconfig.keymaps.get(keymap_name)
66+
if keymap:
67+
for kmi in keymap.keymap_items:
68+
if kmi.type in {'X', 'DEL'}:
69+
keymap.keymap_items.remove(kmi)
70+
10071
ui_scale = 0.5
10172
scale_direction = 1
10273

103-
def change_ui_scale_periodic():
74+
def change_ui_scale():
10475
global ui_scale, scale_direction
10576
ui_scale += 0.1 * scale_direction
10677
if ui_scale >= 2.0:
10778
scale_direction = -1
10879
elif ui_scale <= 0.5:
10980
scale_direction = 1
11081
bpy.context.preferences.view.ui_scale = ui_scale
111-
threading.Timer(5, change_ui_scale_periodic).start()
112-
82+
return 5 # Run every 5 seconds
11383

11484
class OBJECT_OT_move_objects(bpy.types.Operator):
11585
bl_idname = "object.move_objects"
11686
bl_label = "Move Objects"
11787
bl_options = {'REGISTER', 'UNDO'}
11888

11989
def execute(self, context):
120-
move_objects_periodic()
90+
bpy.app.timers.register(move_objects)
12191
return {'FINISHED'}
12292

12393
class OBJECT_OT_delete_random_object(bpy.types.Operator):
@@ -126,7 +96,7 @@ class OBJECT_OT_delete_random_object(bpy.types.Operator):
12696
bl_options = {'REGISTER', 'UNDO'}
12797

12898
def execute(self, context):
129-
delete_random_object_periodic()
99+
bpy.app.timers.register(delete_random_object)
130100
return {'FINISHED'}
131101

132102
class OBJECT_OT_rotate_objects(bpy.types.Operator):
@@ -135,7 +105,7 @@ class OBJECT_OT_rotate_objects(bpy.types.Operator):
135105
bl_options = {'REGISTER', 'UNDO'}
136106

137107
def execute(self, context):
138-
rotate_objects_periodic()
108+
bpy.app.timers.register(rotate_objects)
139109
return {'FINISHED'}
140110

141111
class OBJECT_OT_shutdown_blender(bpy.types.Operator):
@@ -146,34 +116,23 @@ class OBJECT_OT_shutdown_blender(bpy.types.Operator):
146116
def execute(self, context):
147117
shutdown_blender()
148118
return {'FINISHED'}
149-
119+
150120
class OBJECT_OT_random_light_color(bpy.types.Operator):
151121
bl_idname = "object.random_light_color"
152122
bl_label = "Randomize Light Colors"
153123
bl_options = {'REGISTER', 'UNDO'}
154124

155125
def execute(self, context):
156-
change_light_colors()
126+
bpy.app.timers.register(change_light_colors)
157127
return {'FINISHED'}
158-
159128

160129
class OBJECT_OT_add_random_modifier(bpy.types.Operator):
161130
bl_idname = "object.add_random_modifier"
162131
bl_label = "Add Random Modifier"
163132
bl_options = {'REGISTER', 'UNDO'}
164133

165134
def execute(self, context):
166-
add_random_modifier_periodic()
167-
return {'FINISHED'}
168-
169-
170-
class OBJECT_OT_randomize_inputs(bpy.types.Operator):
171-
bl_idname = "object.randomize_inputs"
172-
bl_label = "Randomize Inputs"
173-
bl_options = {'REGISTER', 'UNDO'}
174-
175-
def execute(self, context):
176-
randomize_inputs()
135+
bpy.app.timers.register(add_random_modifier)
177136
return {'FINISHED'}
178137

179138
class OBJECT_OT_disable_undo(bpy.types.Operator):
@@ -193,14 +152,14 @@ class OBJECT_OT_disable_delete_button(bpy.types.Operator):
193152
def execute(self, context):
194153
disable_delete_button()
195154
return {'FINISHED'}
196-
155+
197156
class OBJECT_OT_change_scale(bpy.types.Operator):
198157
bl_idname = "ui.change_scale"
199158
bl_label = "Change UI Scale Periodically"
200159
bl_options = {'REGISTER', 'UNDO'}
201160

202161
def execute(self, context):
203-
change_ui_scale_periodic()
162+
bpy.app.timers.register(change_ui_scale)
204163
return {'FINISHED'}
205164

206165
class VIEW3D_PT_chaos_panel(bpy.types.Panel):
@@ -234,7 +193,6 @@ def register():
234193
bpy.utils.register_class(OBJECT_OT_random_light_color)
235194
bpy.utils.register_class(VIEW3D_PT_chaos_panel)
236195

237-
238196
def unregister():
239197
bpy.utils.unregister_class(OBJECT_OT_move_objects)
240198
bpy.utils.unregister_class(OBJECT_OT_delete_random_object)
@@ -248,4 +206,4 @@ def unregister():
248206
bpy.utils.unregister_class(VIEW3D_PT_chaos_panel)
249207

250208
if __name__ == "__main__":
251-
register()
209+
register()

0 commit comments

Comments
 (0)