|
| 1 | +extends Node |
| 2 | + |
| 3 | +var api: Node |
| 4 | +var default_checker_size: int |
| 5 | + |
| 6 | +var new_proj_option_label: Label |
| 7 | +var checker_size_label: Label |
| 8 | +var new_proj_value_slider: TextureProgressBar |
| 9 | +var local_value_slider: TextureProgressBar |
| 10 | + |
| 11 | + |
| 12 | +# This script acts as a setup for the extension |
| 13 | +func _enter_tree() -> void: |
| 14 | + api = get_node_or_null("/root/ExtensionsApi") |
| 15 | + var global = api.general.get_global() |
| 16 | + if global: |
| 17 | + # basic initialization |
| 18 | + default_checker_size = global.checker_size |
| 19 | + global.checker_follow_movement = true |
| 20 | + global.checker_follow_scale = true |
| 21 | + api.signals.signal_project_switched(proj_switched) |
| 22 | + |
| 23 | + # Add size option to new image panel |
| 24 | + var new_proj_dialog = global.top_menu_container.new_image_dialog |
| 25 | + new_proj_dialog.instantiate_scene() |
| 26 | + var new_proj_window: Window = new_proj_dialog.node |
| 27 | + if is_instance_valid(new_proj_window): |
| 28 | + var option_parent = new_proj_window.find_child("FillColorContainer") |
| 29 | + if option_parent: |
| 30 | + new_proj_option_label = Label.new() |
| 31 | + new_proj_option_label.text = "Checker Size" |
| 32 | + new_proj_option_label.custom_minimum_size.x = 100 |
| 33 | + new_proj_option_label.size_flags_horizontal = Control.SIZE_EXPAND |
| 34 | + new_proj_value_slider = initialize_slider(default_checker_size) |
| 35 | + option_parent.add_child(new_proj_option_label) |
| 36 | + option_parent.add_child(new_proj_value_slider) |
| 37 | + |
| 38 | + # Add size option toproject properties |
| 39 | + var proj_prop_dialog = global.top_menu_container.project_properties_dialog |
| 40 | + proj_prop_dialog.instantiate_scene() |
| 41 | + var proj_prop_window: Window = proj_prop_dialog.node |
| 42 | + if is_instance_valid(proj_prop_dialog): |
| 43 | + var prop_parent: GridContainer = proj_prop_window.size_value_label.get_parent() |
| 44 | + if prop_parent: |
| 45 | + checker_size_label = Label.new() |
| 46 | + checker_size_label.text = "Local Checker Size" |
| 47 | + checker_size_label.custom_minimum_size.x = 100 |
| 48 | + checker_size_label.size_flags_horizontal = Control.SIZE_EXPAND |
| 49 | + var initial_value = default_checker_size |
| 50 | + var proj: RefCounted = api.project.current_project |
| 51 | + if proj: |
| 52 | + proj.set_meta( |
| 53 | + "checker_size", |
| 54 | + proj.get_meta( |
| 55 | + "checker_size", initial_value |
| 56 | + ) |
| 57 | + ) |
| 58 | + initial_value = proj.get_meta("checker_size", initial_value) |
| 59 | + local_value_slider = initialize_slider(initial_value) |
| 60 | + local_value_slider.value_changed.connect( |
| 61 | + func(new_value): |
| 62 | + var c_proj = api.project.current_project |
| 63 | + if is_instance_valid(c_proj): |
| 64 | + c_proj.set_meta("checker_size", new_value) |
| 65 | + api.general.get_global().checker_size = new_value |
| 66 | + ) |
| 67 | + |
| 68 | + prop_parent.add_child(checker_size_label) |
| 69 | + prop_parent.add_child(local_value_slider) |
| 70 | + |
| 71 | + |
| 72 | +## This also gets called when new project gets created |
| 73 | +func proj_switched(): |
| 74 | + var proj: RefCounted = api.project.current_project |
| 75 | + # set project checker size if it isn't defined yet |
| 76 | + proj.set_meta("checker_size", proj.get_meta("checker_size", new_proj_value_slider.value)) |
| 77 | + # change the checker size based on project's metadata |
| 78 | + if proj.has_meta("checker_size"): # Failsafe |
| 79 | + api.general.get_global().checker_size = proj.get_meta("checker_size") |
| 80 | + if api.general.get_global().top_menu_container.project_properties_dialog.node: |
| 81 | + local_value_slider.value = api.general.get_global().checker_size |
| 82 | + |
| 83 | + |
| 84 | +func _exit_tree() -> void: # Extension is being uninstalled or disabled |
| 85 | + api.signals.signal_project_switched(proj_switched, true) |
| 86 | + if new_proj_option_label and checker_size_label and new_proj_option_label and new_proj_value_slider: |
| 87 | + new_proj_option_label.queue_free() |
| 88 | + checker_size_label.queue_free() |
| 89 | + new_proj_value_slider.queue_free() |
| 90 | + local_value_slider.queue_free() |
| 91 | + api.general.get_global().checker_size = default_checker_size |
| 92 | + |
| 93 | + |
| 94 | +func initialize_slider(initial_value: int) -> TextureProgressBar: |
| 95 | + var new_value_slider = api.general.create_value_slider() |
| 96 | + new_value_slider.allow_greater = true |
| 97 | + new_value_slider.allow_lesser = false |
| 98 | + new_value_slider.size_flags_horizontal = Control.SIZE_EXPAND_FILL |
| 99 | + new_value_slider.min_value = 1.0 |
| 100 | + new_value_slider.max_value = 64 |
| 101 | + new_value_slider.step = 1.0 |
| 102 | + new_value_slider.value = initial_value |
| 103 | + new_value_slider.mouse_default_cursor_shape = Control.CURSOR_POINTING_HAND |
| 104 | + return new_value_slider |
0 commit comments