From 9a79715e4706e55d620ff2158f355f674fea2dfb Mon Sep 17 00:00:00 2001 From: minimata Date: Fri, 27 Jun 2025 15:19:12 +0200 Subject: [PATCH] feat: made sure the aspect ration fit a pixel art game and added useful addons --- addons/godot_state_charts/LICENSE | 21 + addons/godot_state_charts/all_of_guard.gd | 22 + addons/godot_state_charts/all_of_guard.gd.uid | 1 + addons/godot_state_charts/all_of_guard.svg | 1 + .../all_of_guard.svg.import | 38 ++ .../animation_player_state.gd | 63 +++ .../animation_player_state.gd.uid | 1 + .../animation_player_state.svg | 1 + .../animation_player_state.svg.import | 38 ++ .../animation_tree_state.gd | 63 +++ .../animation_tree_state.gd.uid | 1 + .../animation_tree_state.svg | 1 + .../animation_tree_state.svg.import | 38 ++ addons/godot_state_charts/any_of_guard.gd | 21 + addons/godot_state_charts/any_of_guard.gd.uid | 1 + addons/godot_state_charts/any_of_guard.svg | 1 + .../any_of_guard.svg.import | 38 ++ addons/godot_state_charts/atomic_state.gd | 25 + addons/godot_state_charts/atomic_state.gd.uid | 1 + addons/godot_state_charts/atomic_state.svg | 1 + .../atomic_state.svg.import | 38 ++ addons/godot_state_charts/compound_state.gd | 268 +++++++++++ .../godot_state_charts/compound_state.gd.uid | 1 + addons/godot_state_charts/compound_state.svg | 1 + .../compound_state.svg.import | 38 ++ .../csharp/CompoundState.cs | 66 +++ .../csharp/CompoundState.cs.uid | 1 + .../godot_state_charts/csharp/NodeWrapper.cs | 49 ++ .../csharp/NodeWrapper.cs.uid | 1 + .../csharp/ResourceWrapper.cs | 39 ++ .../csharp/SerializedStateChart.cs | 89 ++++ .../csharp/SerializedStateChartState.cs | 89 ++++ .../godot_state_charts/csharp/StateChart.cs | 129 ++++++ .../csharp/StateChart.cs.uid | 1 + .../csharp/StateChartDebugger.cs | 65 +++ .../csharp/StateChartDebugger.cs.uid | 1 + .../csharp/StateChartSerializer.cs | 32 ++ .../csharp/StateChartState.cs | 156 +++++++ .../csharp/StateChartState.cs.uid | 1 + .../godot_state_charts/csharp/Transition.cs | 53 +++ .../csharp/Transition.cs.uid | 1 + addons/godot_state_charts/debug_util.gd | 8 + addons/godot_state_charts/debug_util.gd.uid | 1 + addons/godot_state_charts/expression_guard.gd | 39 ++ .../expression_guard.gd.uid | 1 + .../godot_state_charts/expression_guard.svg | 1 + .../expression_guard.svg.import | 38 ++ addons/godot_state_charts/expression_util.gd | 26 ++ .../godot_state_charts/expression_util.gd.uid | 1 + .../godot_state_charts/godot_state_charts.gd | 127 +++++ .../godot_state_charts.gd.uid | 1 + addons/godot_state_charts/guard.gd | 13 + addons/godot_state_charts/guard.gd.uid | 1 + addons/godot_state_charts/guard.svg | 1 + addons/godot_state_charts/guard.svg.import | 38 ++ addons/godot_state_charts/history_state.gd | 57 +++ .../godot_state_charts/history_state.gd.uid | 1 + addons/godot_state_charts/history_state.svg | 1 + .../history_state.svg.import | 38 ++ addons/godot_state_charts/not_guard.gd | 18 + addons/godot_state_charts/not_guard.gd.uid | 1 + addons/godot_state_charts/not_guard.svg | 1 + .../godot_state_charts/not_guard.svg.import | 38 ++ addons/godot_state_charts/parallel_state.gd | 116 +++++ .../godot_state_charts/parallel_state.gd.uid | 1 + addons/godot_state_charts/parallel_state.svg | 1 + .../parallel_state.svg.import | 38 ++ addons/godot_state_charts/plugin.cfg | 7 + addons/godot_state_charts/saved_state.gd | 31 ++ addons/godot_state_charts/saved_state.gd.uid | 1 + .../serialized_state_chart.gd | 46 ++ .../serialized_state_chart.gd.uid | 1 + .../serialized_state_chart_state.gd | 38 ++ .../serialized_state_chart_state.gd.uid | 1 + addons/godot_state_charts/state_chart.gd | 354 ++++++++++++++ addons/godot_state_charts/state_chart.gd.uid | 1 + addons/godot_state_charts/state_chart.svg | 1 + .../godot_state_charts/state_chart.svg.import | 38 ++ .../state_chart_serializer.gd | 193 ++++++++ .../state_chart_serializer.gd.uid | 1 + .../godot_state_charts/state_chart_state.gd | 331 +++++++++++++ .../state_chart_state.gd.uid | 1 + .../state_is_active_guard.gd | 22 + .../state_is_active_guard.gd.uid | 1 + .../state_is_active_guard.svg | 1 + .../state_is_active_guard.svg.import | 38 ++ addons/godot_state_charts/toggle_sidebar.svg | 1 + .../toggle_sidebar.svg.import | 37 ++ addons/godot_state_charts/transition.gd | 206 +++++++++ addons/godot_state_charts/transition.gd.uid | 1 + addons/godot_state_charts/transition.svg | 1 + .../godot_state_charts/transition.svg.import | 38 ++ .../utilities/debugger_history.gd | 58 +++ .../utilities/debugger_history.gd.uid | 1 + .../editor_debugger/editor_debugger.gd | 388 ++++++++++++++++ .../editor_debugger/editor_debugger.gd.uid | 1 + .../editor_debugger/editor_debugger.tscn | 120 +++++ .../editor_debugger_message.gd | 117 +++++ .../editor_debugger_message.gd.uid | 1 + .../editor_debugger/editor_debugger_plugin.gd | 53 +++ .../editor_debugger_plugin.gd.uid | 1 + .../editor_debugger/editor_debugger_remote.gd | 102 ++++ .../editor_debugger_remote.gd.uid | 1 + .../editor_debugger_settings_propagator.gd | 54 +++ ...editor_debugger_settings_propagator.gd.uid | 1 + .../editor_debugger_state_info.gd | 104 +++++ .../editor_debugger_state_info.gd.uid | 1 + .../utilities/editor_sidebar.gd | 99 ++++ .../utilities/editor_sidebar.gd.uid | 1 + .../utilities/editor_sidebar.tscn | 117 +++++ .../utilities/event_editor/event_editor.gd | 100 ++++ .../event_editor/event_editor.gd.uid | 1 + .../event_editor/event_inspector_plugin.gd | 29 ++ .../event_inspector_plugin.gd.uid | 1 + .../event_refactor/event_refactor.gd | 52 +++ .../event_refactor/event_refactor.gd.uid | 1 + .../event_refactor/event_refactor.tscn | 55 +++ .../utilities/ring_buffer.gd | 54 +++ .../utilities/ring_buffer.gd.uid | 1 + .../utilities/state_chart_debugger.gd | 280 +++++++++++ .../utilities/state_chart_debugger.gd.uid | 1 + .../utilities/state_chart_debugger.svg | 1 + .../utilities/state_chart_debugger.svg.import | 38 ++ .../utilities/state_chart_debugger.tscn | 97 ++++ .../utilities/state_chart_util.gd | 49 ++ .../utilities/state_chart_util.gd.uid | 1 + addons/guide/LICENSE.md | 19 + addons/guide/debugger/guide_debugger.gd | 104 +++++ addons/guide/debugger/guide_debugger.gd.uid | 1 + addons/guide/debugger/guide_debugger.tscn | 50 ++ .../action_mapping_editor.gd | 140 ++++++ .../action_mapping_editor.gd.uid | 1 + .../action_mapping_editor.tscn | 43 ++ .../guide/editor/action_slot/action_slot.gd | 70 +++ .../editor/action_slot/action_slot.gd.uid | 1 + .../guide/editor/action_slot/action_slot.tscn | 29 ++ .../action_slot/action_slot_line_edit.gd | 24 + .../action_slot/action_slot_line_edit.gd.uid | 1 + .../action_slot/action_value_type_axis1d.svg | 25 + .../action_value_type_axis1d.svg.import | 38 ++ .../action_slot/action_value_type_axis2d.svg | 25 + .../action_value_type_axis2d.svg.import | 38 ++ .../action_slot/action_value_type_axis3d.svg | 25 + .../action_value_type_axis3d.svg.import | 38 ++ .../action_slot/action_value_type_bool.svg | 22 + .../action_value_type_bool.svg.import | 38 ++ .../editor/action_slot/missing_action.svg | 17 + .../action_slot/missing_action.svg.import | 37 ++ addons/guide/editor/array_edit/array_edit.gd | 113 +++++ .../guide/editor/array_edit/array_edit.gd.uid | 1 + .../guide/editor/array_edit/array_edit.tscn | 88 ++++ .../editor/array_edit/array_edit_item.gd | 84 ++++ .../editor/array_edit/array_edit_item.gd.uid | 1 + .../editor/array_edit/array_edit_item.tscn | 83 ++++ addons/guide/editor/array_edit/dragger.gd | 8 + addons/guide/editor/array_edit/dragger.gd.uid | 1 + .../editor/binding_dialog/binding_dialog.gd | 148 ++++++ .../binding_dialog/binding_dialog.gd.uid | 1 + .../editor/binding_dialog/binding_dialog.tscn | 216 +++++++++ addons/guide/editor/class_scanner.gd | 91 ++++ addons/guide/editor/class_scanner.gd.uid | 1 + .../editor/input_display/input_display.gd | 39 ++ .../editor/input_display/input_display.gd.uid | 1 + .../editor/input_display/input_display.tscn | 18 + .../input_mapping_editor.gd | 299 ++++++++++++ .../input_mapping_editor.gd.uid | 1 + .../input_mapping_editor.tscn | 140 ++++++ addons/guide/editor/logo_editor_small.svg | 24 + .../guide/editor/logo_editor_small.svg.import | 38 ++ .../mapping_context_editor.gd | 159 +++++++ .../mapping_context_editor.gd.uid | 1 + .../mapping_context_editor.tscn | 58 +++ .../editor/modifier_slot/modifier_slot.gd | 14 + .../editor/modifier_slot/modifier_slot.gd.uid | 1 + .../editor/modifier_slot/modifier_slot.tscn | 18 + .../editor/resource_slot/resource_slot.gd | 106 +++++ .../editor/resource_slot/resource_slot.gd.uid | 1 + .../guide/editor/trigger_slot/trigger_slot.gd | 14 + .../editor/trigger_slot/trigger_slot.gd.uid | 1 + .../editor/trigger_slot/trigger_slot.tscn | 20 + addons/guide/editor/utils.gd | 22 + addons/guide/editor/utils.gd.uid | 1 + addons/guide/guide.gd | 387 ++++++++++++++++ addons/guide/guide.gd.uid | 1 + addons/guide/guide_action.gd | 254 ++++++++++ addons/guide/guide_action.gd.uid | 1 + addons/guide/guide_action.svg | 7 + addons/guide/guide_action.svg.import | 38 ++ addons/guide/guide_action_mapping.gd | 21 + addons/guide/guide_action_mapping.gd.uid | 1 + addons/guide/guide_input_mapping.gd | 177 +++++++ addons/guide/guide_input_mapping.gd.uid | 1 + addons/guide/guide_input_tracker.gd | 26 ++ addons/guide/guide_input_tracker.gd.uid | 1 + addons/guide/guide_internal.svg | 12 + addons/guide/guide_internal.svg.import | 38 ++ addons/guide/guide_mapping_context.gd | 30 ++ addons/guide/guide_mapping_context.gd.uid | 1 + addons/guide/guide_mapping_context.svg | 9 + addons/guide/guide_mapping_context.svg.import | 38 ++ addons/guide/guide_reset.gd | 15 + addons/guide/guide_reset.gd.uid | 1 + addons/guide/guide_set.gd | 40 ++ addons/guide/guide_set.gd.uid | 1 + addons/guide/inputs/guide_input.gd | 49 ++ addons/guide/inputs/guide_input.gd.uid | 1 + addons/guide/inputs/guide_input.svg | 12 + addons/guide/inputs/guide_input.svg.import | 38 ++ addons/guide/inputs/guide_input_action.gd | 59 +++ addons/guide/inputs/guide_input_action.gd.uid | 1 + addons/guide/inputs/guide_input_any.gd | 150 ++++++ addons/guide/inputs/guide_input_any.gd.uid | 1 + .../guide/inputs/guide_input_joy_axis_1d.gd | 40 ++ .../inputs/guide_input_joy_axis_1d.gd.uid | 1 + .../guide/inputs/guide_input_joy_axis_2d.gd | 53 +++ .../inputs/guide_input_joy_axis_2d.gd.uid | 1 + addons/guide/inputs/guide_input_joy_base.gd | 13 + .../guide/inputs/guide_input_joy_base.gd.uid | 1 + addons/guide/inputs/guide_input_joy_button.gd | 41 ++ .../inputs/guide_input_joy_button.gd.uid | 1 + addons/guide/inputs/guide_input_key.gd | 126 +++++ addons/guide/inputs/guide_input_key.gd.uid | 1 + .../guide/inputs/guide_input_mouse_axis_1d.gd | 57 +++ .../inputs/guide_input_mouse_axis_1d.gd.uid | 1 + .../guide/inputs/guide_input_mouse_axis_2d.gd | 42 ++ .../inputs/guide_input_mouse_axis_2d.gd.uid | 1 + .../guide/inputs/guide_input_mouse_button.gd | 74 +++ .../inputs/guide_input_mouse_button.gd.uid | 1 + .../inputs/guide_input_mouse_position.gd | 39 ++ .../inputs/guide_input_mouse_position.gd.uid | 1 + addons/guide/inputs/guide_input_state.gd | 437 ++++++++++++++++++ addons/guide/inputs/guide_input_state.gd.uid | 1 + .../guide/inputs/guide_input_touch_angle.gd | 91 ++++ .../inputs/guide_input_touch_angle.gd.uid | 1 + .../guide/inputs/guide_input_touch_axis_1d.gd | 44 ++ .../inputs/guide_input_touch_axis_1d.gd.uid | 1 + .../guide/inputs/guide_input_touch_axis_2d.gd | 27 ++ .../inputs/guide_input_touch_axis_2d.gd.uid | 1 + .../inputs/guide_input_touch_axis_base.gd | 49 ++ .../inputs/guide_input_touch_axis_base.gd.uid | 1 + addons/guide/inputs/guide_input_touch_base.gd | 22 + .../inputs/guide_input_touch_base.gd.uid | 1 + .../inputs/guide_input_touch_distance.gd | 76 +++ .../inputs/guide_input_touch_distance.gd.uid | 1 + .../inputs/guide_input_touch_position.gd | 45 ++ .../inputs/guide_input_touch_position.gd.uid | 1 + addons/guide/inputs/guide_touch_state.gd.uid | 1 + addons/guide/modifiers/guide_modifier.gd | 23 + addons/guide/modifiers/guide_modifier.gd.uid | 1 + addons/guide/modifiers/guide_modifier.svg | 12 + .../guide/modifiers/guide_modifier.svg.import | 38 ++ .../guide_modifier_3d_coordinates.gd | 53 +++ .../guide_modifier_3d_coordinates.gd.uid | 1 + .../guide_modifier_8_way_direction.gd | 47 ++ .../guide_modifier_8_way_direction.gd.uid | 1 + .../guide_modifier_canvas_coordinates.gd | 35 ++ .../guide_modifier_canvas_coordinates.gd.uid | 1 + .../guide/modifiers/guide_modifier_curve.gd | 51 ++ .../modifiers/guide_modifier_curve.gd.uid | 1 + .../modifiers/guide_modifier_deadzone.gd | 63 +++ .../modifiers/guide_modifier_deadzone.gd.uid | 1 + .../modifiers/guide_modifier_input_swizzle.gd | 43 ++ .../guide_modifier_input_swizzle.gd.uid | 1 + .../modifiers/guide_modifier_map_range.gd | 67 +++ .../modifiers/guide_modifier_map_range.gd.uid | 1 + .../guide/modifiers/guide_modifier_negate.gd | 52 +++ .../modifiers/guide_modifier_negate.gd.uid | 1 + .../modifiers/guide_modifier_normalize.gd | 17 + .../modifiers/guide_modifier_normalize.gd.uid | 1 + .../guide_modifier_positive_negative.gd | 65 +++ .../guide_modifier_positive_negative.gd.uid | 1 + .../guide/modifiers/guide_modifier_scale.gd | 35 ++ .../modifiers/guide_modifier_scale.gd.uid | 1 + .../guide_modifier_virtual_cursor.gd | 105 +++++ .../guide_modifier_virtual_cursor.gd.uid | 1 + .../guide_modifier_window_relative.gd | 26 ++ .../guide_modifier_window_relative.gd.uid | 1 + addons/guide/plugin.cfg | 7 + addons/guide/plugin.gd | 45 ++ addons/guide/plugin.gd.uid | 1 + .../guide/remapping/guide_input_detector.gd | 376 +++++++++++++++ .../remapping/guide_input_detector.gd.uid | 1 + addons/guide/remapping/guide_remapper.gd | 307 ++++++++++++ addons/guide/remapping/guide_remapper.gd.uid | 1 + .../guide/remapping/guide_remapping_config.gd | 85 ++++ .../remapping/guide_remapping_config.gd.uid | 1 + addons/guide/triggers/guide_trigger.gd | 65 +++ addons/guide/triggers/guide_trigger.gd.uid | 1 + addons/guide/triggers/guide_trigger.svg | 12 + .../guide/triggers/guide_trigger.svg.import | 38 ++ .../triggers/guide_trigger_chorded_action.gd | 28 ++ .../guide_trigger_chorded_action.gd.uid | 1 + addons/guide/triggers/guide_trigger_combo.gd | 117 +++++ .../guide/triggers/guide_trigger_combo.gd.uid | 1 + .../guide_trigger_combo_cancel_action.gd | 27 ++ .../guide_trigger_combo_cancel_action.gd.uid | 1 + .../triggers/guide_trigger_combo_step.gd | 29 ++ .../triggers/guide_trigger_combo_step.gd.uid | 1 + addons/guide/triggers/guide_trigger_down.gd | 20 + .../guide/triggers/guide_trigger_down.gd.uid | 1 + addons/guide/triggers/guide_trigger_hold.gd | 43 ++ .../guide/triggers/guide_trigger_hold.gd.uid | 1 + .../guide/triggers/guide_trigger_pressed.gd | 22 + .../triggers/guide_trigger_pressed.gd.uid | 1 + addons/guide/triggers/guide_trigger_pulse.gd | 86 ++++ .../guide/triggers/guide_trigger_pulse.gd.uid | 1 + .../guide/triggers/guide_trigger_released.gd | 21 + .../triggers/guide_trigger_released.gd.uid | 1 + .../guide/triggers/guide_trigger_stability.gd | 72 +++ .../triggers/guide_trigger_stability.gd.uid | 1 + addons/guide/triggers/guide_trigger_tap.gd | 48 ++ .../guide/triggers/guide_trigger_tap.gd.uid | 1 + addons/guide/ui/guide_icon_renderer.gd | 30 ++ addons/guide/ui/guide_icon_renderer.gd.uid | 1 + addons/guide/ui/guide_input_formatter.gd | 358 ++++++++++++++ addons/guide/ui/guide_input_formatter.gd.uid | 1 + addons/guide/ui/guide_text_provider.gd | 22 + addons/guide/ui/guide_text_provider.gd.uid | 1 + addons/guide/ui/icon_maker/icon_maker.gd | 103 +++++ addons/guide/ui/icon_maker/icon_maker.gd.uid | 1 + addons/guide/ui/icon_maker/icon_maker.tscn | 24 + .../controllers/controller_renderer.gd | 176 +++++++ .../controllers/controller_renderer.gd.uid | 1 + .../controllers/controller_renderer.tscn | 141 ++++++ .../playstation/icons/PS5_Circle.png | 3 + .../playstation/icons/PS5_Circle.png.import | 34 ++ .../playstation/icons/PS5_Cross.png | 3 + .../playstation/icons/PS5_Cross.png.import | 34 ++ .../playstation/icons/PS5_Dpad.png | 3 + .../playstation/icons/PS5_Dpad.png.import | 34 ++ .../playstation/icons/PS5_Dpad_Down.png | 3 + .../icons/PS5_Dpad_Down.png.import | 34 ++ .../playstation/icons/PS5_Dpad_Left.png | 3 + .../icons/PS5_Dpad_Left.png.import | 34 ++ .../playstation/icons/PS5_Dpad_Right.png | 3 + .../icons/PS5_Dpad_Right.png.import | 34 ++ .../playstation/icons/PS5_Dpad_Up.png | 3 + .../playstation/icons/PS5_Dpad_Up.png.import | 34 ++ .../controllers/playstation/icons/PS5_L1.png | 3 + .../playstation/icons/PS5_L1.png.import | 34 ++ .../controllers/playstation/icons/PS5_L2.png | 3 + .../playstation/icons/PS5_L2.png.import | 34 ++ .../playstation/icons/PS5_Left_Stick.png | 3 + .../icons/PS5_Left_Stick.png.import | 34 ++ .../icons/PS5_Left_Stick_Click.png | 3 + .../icons/PS5_Left_Stick_Click.png.import | 34 ++ .../playstation/icons/PS5_Microphone.png | 3 + .../icons/PS5_Microphone.png.import | 34 ++ .../playstation/icons/PS5_Options.png | 3 + .../playstation/icons/PS5_Options.png.import | 34 ++ .../playstation/icons/PS5_Options_Alt.png | 3 + .../icons/PS5_Options_Alt.png.import | 34 ++ .../controllers/playstation/icons/PS5_R1.png | 3 + .../playstation/icons/PS5_R1.png.import | 34 ++ .../controllers/playstation/icons/PS5_R2.png | 3 + .../playstation/icons/PS5_R2.png.import | 34 ++ .../playstation/icons/PS5_Right_Stick.png | 3 + .../icons/PS5_Right_Stick.png.import | 34 ++ .../icons/PS5_Right_Stick_Click.png | 3 + .../icons/PS5_Right_Stick_Click.png.import | 34 ++ .../playstation/icons/PS5_Share.png | 3 + .../playstation/icons/PS5_Share.png.import | 34 ++ .../playstation/icons/PS5_Share_Alt.png | 3 + .../icons/PS5_Share_Alt.png.import | 34 ++ .../playstation/icons/PS5_Square.png | 3 + .../playstation/icons/PS5_Square.png.import | 34 ++ .../playstation/icons/PS5_Touch_Pad.png | 3 + .../icons/PS5_Touch_Pad.png.import | 34 ++ .../playstation/icons/PS5_Triangle.png | 3 + .../playstation/icons/PS5_Triangle.png.import | 34 ++ .../playstation_controller_renderer.tscn | 103 +++++ .../controllers/switch/icons/Switch_A.png | 3 + .../switch/icons/Switch_A.png.import | 34 ++ .../controllers/switch/icons/Switch_B.png | 3 + .../switch/icons/Switch_B.png.import | 34 ++ .../switch/icons/Switch_Controller_Left.png | 3 + .../icons/Switch_Controller_Left.png.import | 34 ++ .../switch/icons/Switch_Controller_Right.png | 3 + .../icons/Switch_Controller_Right.png.import | 34 ++ .../switch/icons/Switch_Controllers.png | 3 + .../icons/Switch_Controllers.png.import | 34 ++ .../icons/Switch_Controllers_Separate.png | 3 + .../Switch_Controllers_Separate.png.import | 34 ++ .../controllers/switch/icons/Switch_Down.png | 3 + .../switch/icons/Switch_Down.png.import | 34 ++ .../controllers/switch/icons/Switch_Dpad.png | 3 + .../switch/icons/Switch_Dpad.png.import | 34 ++ .../switch/icons/Switch_Dpad_Down.png | 3 + .../switch/icons/Switch_Dpad_Down.png.import | 34 ++ .../switch/icons/Switch_Dpad_Left.png | 3 + .../switch/icons/Switch_Dpad_Left.png.import | 34 ++ .../switch/icons/Switch_Dpad_Right.png | 3 + .../switch/icons/Switch_Dpad_Right.png.import | 34 ++ .../switch/icons/Switch_Dpad_Up.png | 3 + .../switch/icons/Switch_Dpad_Up.png.import | 34 ++ .../controllers/switch/icons/Switch_Home.png | 3 + .../switch/icons/Switch_Home.png.import | 34 ++ .../controllers/switch/icons/Switch_LB.png | 3 + .../switch/icons/Switch_LB.png.import | 34 ++ .../controllers/switch/icons/Switch_LT.png | 3 + .../switch/icons/Switch_LT.png.import | 34 ++ .../controllers/switch/icons/Switch_Left.png | 3 + .../switch/icons/Switch_Left.png.import | 34 ++ .../switch/icons/Switch_Left_Stick.png | 3 + .../switch/icons/Switch_Left_Stick.png.import | 34 ++ .../switch/icons/Switch_Left_Stick_Click.png | 3 + .../icons/Switch_Left_Stick_Click.png.import | 34 ++ .../controllers/switch/icons/Switch_Minus.png | 3 + .../switch/icons/Switch_Minus.png.import | 34 ++ .../controllers/switch/icons/Switch_Plus.png | 3 + .../switch/icons/Switch_Plus.png.import | 34 ++ .../controllers/switch/icons/Switch_RB.png | 3 + .../switch/icons/Switch_RB.png.import | 34 ++ .../controllers/switch/icons/Switch_RT.png | 3 + .../switch/icons/Switch_RT.png.import | 34 ++ .../controllers/switch/icons/Switch_Right.png | 3 + .../switch/icons/Switch_Right.png.import | 34 ++ .../switch/icons/Switch_Right_Stick.png | 3 + .../icons/Switch_Right_Stick.png.import | 34 ++ .../switch/icons/Switch_Right_Stick_Click.png | 3 + .../icons/Switch_Right_Stick_Click.png.import | 34 ++ .../switch/icons/Switch_Square.png | 3 + .../switch/icons/Switch_Square.png.import | 34 ++ .../controllers/switch/icons/Switch_Up.png | 3 + .../switch/icons/Switch_Up.png.import | 34 ++ .../controllers/switch/icons/Switch_X.png | 3 + .../switch/icons/Switch_X.png.import | 34 ++ .../controllers/switch/icons/Switch_Y.png | 3 + .../switch/icons/Switch_Y.png.import | 34 ++ .../switch/switch_controller_renderer.tscn | 101 ++++ .../controllers/xbox/icons/XboxSeriesX_A.png | 3 + .../xbox/icons/XboxSeriesX_A.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_B.png | 3 + .../xbox/icons/XboxSeriesX_B.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Dpad.png | 3 + .../xbox/icons/XboxSeriesX_Dpad.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Dpad_Down.png | 3 + .../icons/XboxSeriesX_Dpad_Down.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Dpad_Left.png | 3 + .../icons/XboxSeriesX_Dpad_Left.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Dpad_Right.png | 3 + .../icons/XboxSeriesX_Dpad_Right.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Dpad_Up.png | 3 + .../xbox/icons/XboxSeriesX_Dpad_Up.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_LB.png | 3 + .../xbox/icons/XboxSeriesX_LB.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_LT.png | 3 + .../xbox/icons/XboxSeriesX_LT.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Left_Stick.png | 3 + .../icons/XboxSeriesX_Left_Stick.png.import | 34 ++ .../icons/XboxSeriesX_Left_Stick_Click.png | 3 + .../XboxSeriesX_Left_Stick_Click.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Menu.png | 3 + .../xbox/icons/XboxSeriesX_Menu.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_RB.png | 3 + .../xbox/icons/XboxSeriesX_RB.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_RT.png | 3 + .../xbox/icons/XboxSeriesX_RT.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Right_Stick.png | 3 + .../icons/XboxSeriesX_Right_Stick.png.import | 34 ++ .../icons/XboxSeriesX_Right_Stick_Click.png | 3 + .../XboxSeriesX_Right_Stick_Click.png.import | 34 ++ .../xbox/icons/XboxSeriesX_Share.png | 3 + .../xbox/icons/XboxSeriesX_Share.png.import | 34 ++ .../xbox/icons/XboxSeriesX_View.png | 3 + .../xbox/icons/XboxSeriesX_View.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_X.png | 3 + .../xbox/icons/XboxSeriesX_X.png.import | 34 ++ .../controllers/xbox/icons/XboxSeriesX_Y.png | 3 + .../xbox/icons/XboxSeriesX_Y.png.import | 34 ++ .../xbox/xbox_controller_renderer.tscn | 101 ++++ .../ui/renderers/joy/icons/button_empty.png | 3 + .../joy/icons/button_empty.png.import | 34 ++ .../ui/renderers/joy/icons/stick_empty.png | 3 + .../joy/icons/stick_empty.png.import | 34 ++ addons/guide/ui/renderers/joy/joy_renderer.gd | 69 +++ .../ui/renderers/joy/joy_renderer.gd.uid | 1 + .../guide/ui/renderers/joy/joy_renderer.tscn | 63 +++ .../ui/renderers/keyboard/Lato-Black.ttf | Bin 0 -> 69500 bytes .../renderers/keyboard/Lato-Black.ttf.import | 35 ++ .../keyboard/icons/Blank_White_Normal.png | 3 + .../icons/Blank_White_Normal.png.import | 34 ++ .../ui/renderers/keyboard/key_renderer.gd | 17 + .../ui/renderers/keyboard/key_renderer.gd.uid | 1 + .../ui/renderers/keyboard/key_renderer.tscn | 36 ++ .../ui/renderers/misc/action_renderer.gd | 11 + .../ui/renderers/misc/action_renderer.gd.uid | 1 + .../ui/renderers/misc/action_renderer.tscn | 16 + .../ui/renderers/misc/fallback_renderer.gd | 11 + .../renderers/misc/fallback_renderer.gd.uid | 1 + .../ui/renderers/misc/fallback_renderer.tscn | 20 + .../ui/renderers/mouse/icons/Mouse_Cursor.png | 3 + .../mouse/icons/Mouse_Cursor.png.import | 34 ++ .../mouse/icons/Mouse_Left_Key_Light.png | 3 + .../icons/Mouse_Left_Key_Light.png.import | 34 ++ .../mouse/icons/Mouse_Middle_Key_Light.png | 3 + .../icons/Mouse_Middle_Key_Light.png.import | 34 ++ .../mouse/icons/Mouse_Right_Key_Light.png | 3 + .../icons/Mouse_Right_Key_Light.png.import | 34 ++ .../mouse/icons/Mouse_Side_Key_1_Light.png | 3 + .../icons/Mouse_Side_Key_1_Light.png.import | 34 ++ .../mouse/icons/Mouse_Side_Key_2_Light.png | 3 + .../icons/Mouse_Side_Key_2_Light.png.import | 34 ++ .../mouse/icons/Mouse_Simple_Key_Light.png | 3 + .../icons/Mouse_Simple_Key_Light.png.import | 34 ++ .../ui/renderers/mouse/mouse_renderer.gd | 87 ++++ .../ui/renderers/mouse/mouse_renderer.gd.uid | 1 + .../ui/renderers/mouse/mouse_renderer.tscn | 125 +++++ addons/guide/ui/renderers/textures/action.svg | 10 + .../ui/renderers/textures/action.svg.import | 37 ++ .../textures/arrow_all_directions.svg | 8 + .../textures/arrow_all_directions.svg.import | 37 ++ .../ui/renderers/textures/arrow_down.svg | 8 + .../renderers/textures/arrow_down.svg.import | 37 ++ .../renderers/textures/arrow_horizontal.svg | 8 + .../textures/arrow_horizontal.svg.import | 37 ++ .../ui/renderers/textures/arrow_left.svg | 8 + .../renderers/textures/arrow_left.svg.import | 37 ++ .../ui/renderers/textures/arrow_right.svg | 8 + .../renderers/textures/arrow_right.svg.import | 37 ++ .../guide/ui/renderers/textures/arrow_up.svg | 8 + .../ui/renderers/textures/arrow_up.svg.import | 37 ++ .../ui/renderers/textures/arrow_vertical.svg | 8 + .../textures/arrow_vertical.svg.import | 37 ++ .../renderers/touch/icons/touch_1_finger.png | 3 + .../touch/icons/touch_1_finger.png.import | 34 ++ .../renderers/touch/icons/touch_2_fingers.png | 3 + .../touch/icons/touch_2_fingers.png.import | 34 ++ .../renderers/touch/icons/touch_3_fingers.png | 3 + .../touch/icons/touch_3_fingers.png.import | 34 ++ .../renderers/touch/icons/touch_4_fingers.png | 3 + .../touch/icons/touch_4_fingers.png.import | 34 ++ .../ui/renderers/touch/icons/touch_rotate.png | 3 + .../touch/icons/touch_rotate.png.import | 34 ++ .../ui/renderers/touch/icons/touch_zoom.png | 3 + .../touch/icons/touch_zoom.png.import | 34 ++ .../ui/renderers/touch/touch_renderer.gd | 73 +++ .../ui/renderers/touch/touch_renderer.gd.uid | 1 + .../ui/renderers/touch/touch_renderer.tscn | 93 ++++ .../controllers/controller_text_provider.gd | 117 +++++ .../controller_text_provider.gd.uid | 1 + .../playstation_controller_text_provider.gd | 37 ++ ...laystation_controller_text_provider.gd.uid | 1 + .../switch/switch_controller_text_provider.gd | 37 ++ .../switch_controller_text_provider.gd.uid | 1 + .../xbox/xbox_controller_text_provider.gd | 37 ++ .../xbox/xbox_controller_text_provider.gd.uid | 1 + .../text_providers/default_text_provider.gd | 141 ++++++ .../default_text_provider.gd.uid | 1 + project.godot | 6 + 550 files changed, 18812 insertions(+) create mode 100644 addons/godot_state_charts/LICENSE create mode 100644 addons/godot_state_charts/all_of_guard.gd create mode 100644 addons/godot_state_charts/all_of_guard.gd.uid create mode 100644 addons/godot_state_charts/all_of_guard.svg create mode 100644 addons/godot_state_charts/all_of_guard.svg.import create mode 100644 addons/godot_state_charts/animation_player_state.gd create mode 100644 addons/godot_state_charts/animation_player_state.gd.uid create mode 100644 addons/godot_state_charts/animation_player_state.svg create mode 100644 addons/godot_state_charts/animation_player_state.svg.import create mode 100644 addons/godot_state_charts/animation_tree_state.gd create mode 100644 addons/godot_state_charts/animation_tree_state.gd.uid create mode 100644 addons/godot_state_charts/animation_tree_state.svg create mode 100644 addons/godot_state_charts/animation_tree_state.svg.import create mode 100644 addons/godot_state_charts/any_of_guard.gd create mode 100644 addons/godot_state_charts/any_of_guard.gd.uid create mode 100644 addons/godot_state_charts/any_of_guard.svg create mode 100644 addons/godot_state_charts/any_of_guard.svg.import create mode 100644 addons/godot_state_charts/atomic_state.gd create mode 100644 addons/godot_state_charts/atomic_state.gd.uid create mode 100644 addons/godot_state_charts/atomic_state.svg create mode 100644 addons/godot_state_charts/atomic_state.svg.import create mode 100644 addons/godot_state_charts/compound_state.gd create mode 100644 addons/godot_state_charts/compound_state.gd.uid create mode 100644 addons/godot_state_charts/compound_state.svg create mode 100644 addons/godot_state_charts/compound_state.svg.import create mode 100644 addons/godot_state_charts/csharp/CompoundState.cs create mode 100644 addons/godot_state_charts/csharp/CompoundState.cs.uid create mode 100644 addons/godot_state_charts/csharp/NodeWrapper.cs create mode 100644 addons/godot_state_charts/csharp/NodeWrapper.cs.uid create mode 100644 addons/godot_state_charts/csharp/ResourceWrapper.cs create mode 100644 addons/godot_state_charts/csharp/SerializedStateChart.cs create mode 100644 addons/godot_state_charts/csharp/SerializedStateChartState.cs create mode 100644 addons/godot_state_charts/csharp/StateChart.cs create mode 100644 addons/godot_state_charts/csharp/StateChart.cs.uid create mode 100644 addons/godot_state_charts/csharp/StateChartDebugger.cs create mode 100644 addons/godot_state_charts/csharp/StateChartDebugger.cs.uid create mode 100644 addons/godot_state_charts/csharp/StateChartSerializer.cs create mode 100644 addons/godot_state_charts/csharp/StateChartState.cs create mode 100644 addons/godot_state_charts/csharp/StateChartState.cs.uid create mode 100644 addons/godot_state_charts/csharp/Transition.cs create mode 100644 addons/godot_state_charts/csharp/Transition.cs.uid create mode 100644 addons/godot_state_charts/debug_util.gd create mode 100644 addons/godot_state_charts/debug_util.gd.uid create mode 100644 addons/godot_state_charts/expression_guard.gd create mode 100644 addons/godot_state_charts/expression_guard.gd.uid create mode 100644 addons/godot_state_charts/expression_guard.svg create mode 100644 addons/godot_state_charts/expression_guard.svg.import create mode 100644 addons/godot_state_charts/expression_util.gd create mode 100644 addons/godot_state_charts/expression_util.gd.uid create mode 100644 addons/godot_state_charts/godot_state_charts.gd create mode 100644 addons/godot_state_charts/godot_state_charts.gd.uid create mode 100644 addons/godot_state_charts/guard.gd create mode 100644 addons/godot_state_charts/guard.gd.uid create mode 100644 addons/godot_state_charts/guard.svg create mode 100644 addons/godot_state_charts/guard.svg.import create mode 100644 addons/godot_state_charts/history_state.gd create mode 100644 addons/godot_state_charts/history_state.gd.uid create mode 100644 addons/godot_state_charts/history_state.svg create mode 100644 addons/godot_state_charts/history_state.svg.import create mode 100644 addons/godot_state_charts/not_guard.gd create mode 100644 addons/godot_state_charts/not_guard.gd.uid create mode 100644 addons/godot_state_charts/not_guard.svg create mode 100644 addons/godot_state_charts/not_guard.svg.import create mode 100644 addons/godot_state_charts/parallel_state.gd create mode 100644 addons/godot_state_charts/parallel_state.gd.uid create mode 100644 addons/godot_state_charts/parallel_state.svg create mode 100644 addons/godot_state_charts/parallel_state.svg.import create mode 100644 addons/godot_state_charts/plugin.cfg create mode 100644 addons/godot_state_charts/saved_state.gd create mode 100644 addons/godot_state_charts/saved_state.gd.uid create mode 100644 addons/godot_state_charts/serialized_state_chart.gd create mode 100644 addons/godot_state_charts/serialized_state_chart.gd.uid create mode 100644 addons/godot_state_charts/serialized_state_chart_state.gd create mode 100644 addons/godot_state_charts/serialized_state_chart_state.gd.uid create mode 100644 addons/godot_state_charts/state_chart.gd create mode 100644 addons/godot_state_charts/state_chart.gd.uid create mode 100644 addons/godot_state_charts/state_chart.svg create mode 100644 addons/godot_state_charts/state_chart.svg.import create mode 100644 addons/godot_state_charts/state_chart_serializer.gd create mode 100644 addons/godot_state_charts/state_chart_serializer.gd.uid create mode 100644 addons/godot_state_charts/state_chart_state.gd create mode 100644 addons/godot_state_charts/state_chart_state.gd.uid create mode 100644 addons/godot_state_charts/state_is_active_guard.gd create mode 100644 addons/godot_state_charts/state_is_active_guard.gd.uid create mode 100644 addons/godot_state_charts/state_is_active_guard.svg create mode 100644 addons/godot_state_charts/state_is_active_guard.svg.import create mode 100644 addons/godot_state_charts/toggle_sidebar.svg create mode 100644 addons/godot_state_charts/toggle_sidebar.svg.import create mode 100644 addons/godot_state_charts/transition.gd create mode 100644 addons/godot_state_charts/transition.gd.uid create mode 100644 addons/godot_state_charts/transition.svg create mode 100644 addons/godot_state_charts/transition.svg.import create mode 100644 addons/godot_state_charts/utilities/debugger_history.gd create mode 100644 addons/godot_state_charts/utilities/debugger_history.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger.tscn create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_message.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_message.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_plugin.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_plugin.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_remote.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_remote.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_settings_propagator.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_settings_propagator.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_state_info.gd create mode 100644 addons/godot_state_charts/utilities/editor_debugger/editor_debugger_state_info.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_sidebar.gd create mode 100644 addons/godot_state_charts/utilities/editor_sidebar.gd.uid create mode 100644 addons/godot_state_charts/utilities/editor_sidebar.tscn create mode 100644 addons/godot_state_charts/utilities/event_editor/event_editor.gd create mode 100644 addons/godot_state_charts/utilities/event_editor/event_editor.gd.uid create mode 100644 addons/godot_state_charts/utilities/event_editor/event_inspector_plugin.gd create mode 100644 addons/godot_state_charts/utilities/event_editor/event_inspector_plugin.gd.uid create mode 100644 addons/godot_state_charts/utilities/event_refactor/event_refactor.gd create mode 100644 addons/godot_state_charts/utilities/event_refactor/event_refactor.gd.uid create mode 100644 addons/godot_state_charts/utilities/event_refactor/event_refactor.tscn create mode 100644 addons/godot_state_charts/utilities/ring_buffer.gd create mode 100644 addons/godot_state_charts/utilities/ring_buffer.gd.uid create mode 100644 addons/godot_state_charts/utilities/state_chart_debugger.gd create mode 100644 addons/godot_state_charts/utilities/state_chart_debugger.gd.uid create mode 100644 addons/godot_state_charts/utilities/state_chart_debugger.svg create mode 100644 addons/godot_state_charts/utilities/state_chart_debugger.svg.import create mode 100644 addons/godot_state_charts/utilities/state_chart_debugger.tscn create mode 100644 addons/godot_state_charts/utilities/state_chart_util.gd create mode 100644 addons/godot_state_charts/utilities/state_chart_util.gd.uid create mode 100644 addons/guide/LICENSE.md create mode 100644 addons/guide/debugger/guide_debugger.gd create mode 100644 addons/guide/debugger/guide_debugger.gd.uid create mode 100644 addons/guide/debugger/guide_debugger.tscn create mode 100644 addons/guide/editor/action_mapping_editor/action_mapping_editor.gd create mode 100644 addons/guide/editor/action_mapping_editor/action_mapping_editor.gd.uid create mode 100644 addons/guide/editor/action_mapping_editor/action_mapping_editor.tscn create mode 100644 addons/guide/editor/action_slot/action_slot.gd create mode 100644 addons/guide/editor/action_slot/action_slot.gd.uid create mode 100644 addons/guide/editor/action_slot/action_slot.tscn create mode 100644 addons/guide/editor/action_slot/action_slot_line_edit.gd create mode 100644 addons/guide/editor/action_slot/action_slot_line_edit.gd.uid create mode 100644 addons/guide/editor/action_slot/action_value_type_axis1d.svg create mode 100644 addons/guide/editor/action_slot/action_value_type_axis1d.svg.import create mode 100644 addons/guide/editor/action_slot/action_value_type_axis2d.svg create mode 100644 addons/guide/editor/action_slot/action_value_type_axis2d.svg.import create mode 100644 addons/guide/editor/action_slot/action_value_type_axis3d.svg create mode 100644 addons/guide/editor/action_slot/action_value_type_axis3d.svg.import create mode 100644 addons/guide/editor/action_slot/action_value_type_bool.svg create mode 100644 addons/guide/editor/action_slot/action_value_type_bool.svg.import create mode 100644 addons/guide/editor/action_slot/missing_action.svg create mode 100644 addons/guide/editor/action_slot/missing_action.svg.import create mode 100644 addons/guide/editor/array_edit/array_edit.gd create mode 100644 addons/guide/editor/array_edit/array_edit.gd.uid create mode 100644 addons/guide/editor/array_edit/array_edit.tscn create mode 100644 addons/guide/editor/array_edit/array_edit_item.gd create mode 100644 addons/guide/editor/array_edit/array_edit_item.gd.uid create mode 100644 addons/guide/editor/array_edit/array_edit_item.tscn create mode 100644 addons/guide/editor/array_edit/dragger.gd create mode 100644 addons/guide/editor/array_edit/dragger.gd.uid create mode 100644 addons/guide/editor/binding_dialog/binding_dialog.gd create mode 100644 addons/guide/editor/binding_dialog/binding_dialog.gd.uid create mode 100644 addons/guide/editor/binding_dialog/binding_dialog.tscn create mode 100644 addons/guide/editor/class_scanner.gd create mode 100644 addons/guide/editor/class_scanner.gd.uid create mode 100644 addons/guide/editor/input_display/input_display.gd create mode 100644 addons/guide/editor/input_display/input_display.gd.uid create mode 100644 addons/guide/editor/input_display/input_display.tscn create mode 100644 addons/guide/editor/input_mapping_editor/input_mapping_editor.gd create mode 100644 addons/guide/editor/input_mapping_editor/input_mapping_editor.gd.uid create mode 100644 addons/guide/editor/input_mapping_editor/input_mapping_editor.tscn create mode 100644 addons/guide/editor/logo_editor_small.svg create mode 100644 addons/guide/editor/logo_editor_small.svg.import create mode 100644 addons/guide/editor/mapping_context_editor/mapping_context_editor.gd create mode 100644 addons/guide/editor/mapping_context_editor/mapping_context_editor.gd.uid create mode 100644 addons/guide/editor/mapping_context_editor/mapping_context_editor.tscn create mode 100644 addons/guide/editor/modifier_slot/modifier_slot.gd create mode 100644 addons/guide/editor/modifier_slot/modifier_slot.gd.uid create mode 100644 addons/guide/editor/modifier_slot/modifier_slot.tscn create mode 100644 addons/guide/editor/resource_slot/resource_slot.gd create mode 100644 addons/guide/editor/resource_slot/resource_slot.gd.uid create mode 100644 addons/guide/editor/trigger_slot/trigger_slot.gd create mode 100644 addons/guide/editor/trigger_slot/trigger_slot.gd.uid create mode 100644 addons/guide/editor/trigger_slot/trigger_slot.tscn create mode 100644 addons/guide/editor/utils.gd create mode 100644 addons/guide/editor/utils.gd.uid create mode 100644 addons/guide/guide.gd create mode 100644 addons/guide/guide.gd.uid create mode 100644 addons/guide/guide_action.gd create mode 100644 addons/guide/guide_action.gd.uid create mode 100644 addons/guide/guide_action.svg create mode 100644 addons/guide/guide_action.svg.import create mode 100644 addons/guide/guide_action_mapping.gd create mode 100644 addons/guide/guide_action_mapping.gd.uid create mode 100644 addons/guide/guide_input_mapping.gd create mode 100644 addons/guide/guide_input_mapping.gd.uid create mode 100644 addons/guide/guide_input_tracker.gd create mode 100644 addons/guide/guide_input_tracker.gd.uid create mode 100644 addons/guide/guide_internal.svg create mode 100644 addons/guide/guide_internal.svg.import create mode 100644 addons/guide/guide_mapping_context.gd create mode 100644 addons/guide/guide_mapping_context.gd.uid create mode 100644 addons/guide/guide_mapping_context.svg create mode 100644 addons/guide/guide_mapping_context.svg.import create mode 100644 addons/guide/guide_reset.gd create mode 100644 addons/guide/guide_reset.gd.uid create mode 100644 addons/guide/guide_set.gd create mode 100644 addons/guide/guide_set.gd.uid create mode 100644 addons/guide/inputs/guide_input.gd create mode 100644 addons/guide/inputs/guide_input.gd.uid create mode 100644 addons/guide/inputs/guide_input.svg create mode 100644 addons/guide/inputs/guide_input.svg.import create mode 100644 addons/guide/inputs/guide_input_action.gd create mode 100644 addons/guide/inputs/guide_input_action.gd.uid create mode 100644 addons/guide/inputs/guide_input_any.gd create mode 100644 addons/guide/inputs/guide_input_any.gd.uid create mode 100644 addons/guide/inputs/guide_input_joy_axis_1d.gd create mode 100644 addons/guide/inputs/guide_input_joy_axis_1d.gd.uid create mode 100644 addons/guide/inputs/guide_input_joy_axis_2d.gd create mode 100644 addons/guide/inputs/guide_input_joy_axis_2d.gd.uid create mode 100644 addons/guide/inputs/guide_input_joy_base.gd create mode 100644 addons/guide/inputs/guide_input_joy_base.gd.uid create mode 100644 addons/guide/inputs/guide_input_joy_button.gd create mode 100644 addons/guide/inputs/guide_input_joy_button.gd.uid create mode 100644 addons/guide/inputs/guide_input_key.gd create mode 100644 addons/guide/inputs/guide_input_key.gd.uid create mode 100644 addons/guide/inputs/guide_input_mouse_axis_1d.gd create mode 100644 addons/guide/inputs/guide_input_mouse_axis_1d.gd.uid create mode 100644 addons/guide/inputs/guide_input_mouse_axis_2d.gd create mode 100644 addons/guide/inputs/guide_input_mouse_axis_2d.gd.uid create mode 100644 addons/guide/inputs/guide_input_mouse_button.gd create mode 100644 addons/guide/inputs/guide_input_mouse_button.gd.uid create mode 100644 addons/guide/inputs/guide_input_mouse_position.gd create mode 100644 addons/guide/inputs/guide_input_mouse_position.gd.uid create mode 100644 addons/guide/inputs/guide_input_state.gd create mode 100644 addons/guide/inputs/guide_input_state.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_angle.gd create mode 100644 addons/guide/inputs/guide_input_touch_angle.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_axis_1d.gd create mode 100644 addons/guide/inputs/guide_input_touch_axis_1d.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_axis_2d.gd create mode 100644 addons/guide/inputs/guide_input_touch_axis_2d.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_axis_base.gd create mode 100644 addons/guide/inputs/guide_input_touch_axis_base.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_base.gd create mode 100644 addons/guide/inputs/guide_input_touch_base.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_distance.gd create mode 100644 addons/guide/inputs/guide_input_touch_distance.gd.uid create mode 100644 addons/guide/inputs/guide_input_touch_position.gd create mode 100644 addons/guide/inputs/guide_input_touch_position.gd.uid create mode 100644 addons/guide/inputs/guide_touch_state.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier.gd create mode 100644 addons/guide/modifiers/guide_modifier.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier.svg create mode 100644 addons/guide/modifiers/guide_modifier.svg.import create mode 100644 addons/guide/modifiers/guide_modifier_3d_coordinates.gd create mode 100644 addons/guide/modifiers/guide_modifier_3d_coordinates.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_8_way_direction.gd create mode 100644 addons/guide/modifiers/guide_modifier_8_way_direction.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_canvas_coordinates.gd create mode 100644 addons/guide/modifiers/guide_modifier_canvas_coordinates.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_curve.gd create mode 100644 addons/guide/modifiers/guide_modifier_curve.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_deadzone.gd create mode 100644 addons/guide/modifiers/guide_modifier_deadzone.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_input_swizzle.gd create mode 100644 addons/guide/modifiers/guide_modifier_input_swizzle.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_map_range.gd create mode 100644 addons/guide/modifiers/guide_modifier_map_range.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_negate.gd create mode 100644 addons/guide/modifiers/guide_modifier_negate.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_normalize.gd create mode 100644 addons/guide/modifiers/guide_modifier_normalize.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_positive_negative.gd create mode 100644 addons/guide/modifiers/guide_modifier_positive_negative.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_scale.gd create mode 100644 addons/guide/modifiers/guide_modifier_scale.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_virtual_cursor.gd create mode 100644 addons/guide/modifiers/guide_modifier_virtual_cursor.gd.uid create mode 100644 addons/guide/modifiers/guide_modifier_window_relative.gd create mode 100644 addons/guide/modifiers/guide_modifier_window_relative.gd.uid create mode 100644 addons/guide/plugin.cfg create mode 100644 addons/guide/plugin.gd create mode 100644 addons/guide/plugin.gd.uid create mode 100644 addons/guide/remapping/guide_input_detector.gd create mode 100644 addons/guide/remapping/guide_input_detector.gd.uid create mode 100644 addons/guide/remapping/guide_remapper.gd create mode 100644 addons/guide/remapping/guide_remapper.gd.uid create mode 100644 addons/guide/remapping/guide_remapping_config.gd create mode 100644 addons/guide/remapping/guide_remapping_config.gd.uid create mode 100644 addons/guide/triggers/guide_trigger.gd create mode 100644 addons/guide/triggers/guide_trigger.gd.uid create mode 100644 addons/guide/triggers/guide_trigger.svg create mode 100644 addons/guide/triggers/guide_trigger.svg.import create mode 100644 addons/guide/triggers/guide_trigger_chorded_action.gd create mode 100644 addons/guide/triggers/guide_trigger_chorded_action.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_combo.gd create mode 100644 addons/guide/triggers/guide_trigger_combo.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_combo_cancel_action.gd create mode 100644 addons/guide/triggers/guide_trigger_combo_cancel_action.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_combo_step.gd create mode 100644 addons/guide/triggers/guide_trigger_combo_step.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_down.gd create mode 100644 addons/guide/triggers/guide_trigger_down.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_hold.gd create mode 100644 addons/guide/triggers/guide_trigger_hold.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_pressed.gd create mode 100644 addons/guide/triggers/guide_trigger_pressed.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_pulse.gd create mode 100644 addons/guide/triggers/guide_trigger_pulse.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_released.gd create mode 100644 addons/guide/triggers/guide_trigger_released.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_stability.gd create mode 100644 addons/guide/triggers/guide_trigger_stability.gd.uid create mode 100644 addons/guide/triggers/guide_trigger_tap.gd create mode 100644 addons/guide/triggers/guide_trigger_tap.gd.uid create mode 100644 addons/guide/ui/guide_icon_renderer.gd create mode 100644 addons/guide/ui/guide_icon_renderer.gd.uid create mode 100644 addons/guide/ui/guide_input_formatter.gd create mode 100644 addons/guide/ui/guide_input_formatter.gd.uid create mode 100644 addons/guide/ui/guide_text_provider.gd create mode 100644 addons/guide/ui/guide_text_provider.gd.uid create mode 100644 addons/guide/ui/icon_maker/icon_maker.gd create mode 100644 addons/guide/ui/icon_maker/icon_maker.gd.uid create mode 100644 addons/guide/ui/icon_maker/icon_maker.tscn create mode 100644 addons/guide/ui/renderers/controllers/controller_renderer.gd create mode 100644 addons/guide/ui/renderers/controllers/controller_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/controllers/controller_renderer.tscn create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Circle.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Circle.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Cross.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Cross.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Down.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Down.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Left.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Left.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Right.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Right.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Up.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Dpad_Up.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_L1.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_L1.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_L2.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_L2.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Left_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Left_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Left_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Left_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Microphone.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Microphone.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Options.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Options.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Options_Alt.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Options_Alt.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_R1.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_R1.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_R2.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_R2.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Right_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Right_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Right_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Right_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Share.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Share.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Share_Alt.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Share_Alt.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Square.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Square.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Touch_Pad.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Touch_Pad.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Triangle.png create mode 100644 addons/guide/ui/renderers/controllers/playstation/icons/PS5_Triangle.png.import create mode 100644 addons/guide/ui/renderers/controllers/playstation/playstation_controller_renderer.tscn create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_A.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_A.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_B.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_B.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controller_Left.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controller_Left.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controller_Right.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controller_Right.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controllers.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controllers.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controllers_Separate.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Controllers_Separate.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Down.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Down.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Down.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Down.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Left.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Left.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Right.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Right.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Up.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Dpad_Up.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Home.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Home.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_LB.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_LB.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_LT.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_LT.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Left_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Minus.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Minus.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Plus.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Plus.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_RB.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_RB.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_RT.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_RT.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Right_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Square.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Square.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Up.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Up.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_X.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_X.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Y.png create mode 100644 addons/guide/ui/renderers/controllers/switch/icons/Switch_Y.png.import create mode 100644 addons/guide/ui/renderers/controllers/switch/switch_controller_renderer.tscn create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_A.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_A.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_B.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_B.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Down.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Down.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Left.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Left.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Right.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Right.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Up.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Dpad_Up.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_LB.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_LB.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_LT.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_LT.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Left_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Left_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Left_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Left_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Menu.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Menu.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_RB.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_RB.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_RT.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_RT.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Right_Stick.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Right_Stick.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Right_Stick_Click.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Right_Stick_Click.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Share.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Share.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_View.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_View.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_X.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_X.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Y.png create mode 100644 addons/guide/ui/renderers/controllers/xbox/icons/XboxSeriesX_Y.png.import create mode 100644 addons/guide/ui/renderers/controllers/xbox/xbox_controller_renderer.tscn create mode 100644 addons/guide/ui/renderers/joy/icons/button_empty.png create mode 100644 addons/guide/ui/renderers/joy/icons/button_empty.png.import create mode 100644 addons/guide/ui/renderers/joy/icons/stick_empty.png create mode 100644 addons/guide/ui/renderers/joy/icons/stick_empty.png.import create mode 100644 addons/guide/ui/renderers/joy/joy_renderer.gd create mode 100644 addons/guide/ui/renderers/joy/joy_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/joy/joy_renderer.tscn create mode 100644 addons/guide/ui/renderers/keyboard/Lato-Black.ttf create mode 100644 addons/guide/ui/renderers/keyboard/Lato-Black.ttf.import create mode 100644 addons/guide/ui/renderers/keyboard/icons/Blank_White_Normal.png create mode 100644 addons/guide/ui/renderers/keyboard/icons/Blank_White_Normal.png.import create mode 100644 addons/guide/ui/renderers/keyboard/key_renderer.gd create mode 100644 addons/guide/ui/renderers/keyboard/key_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/keyboard/key_renderer.tscn create mode 100644 addons/guide/ui/renderers/misc/action_renderer.gd create mode 100644 addons/guide/ui/renderers/misc/action_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/misc/action_renderer.tscn create mode 100644 addons/guide/ui/renderers/misc/fallback_renderer.gd create mode 100644 addons/guide/ui/renderers/misc/fallback_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/misc/fallback_renderer.tscn create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Cursor.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Cursor.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Left_Key_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Left_Key_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Middle_Key_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Middle_Key_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Right_Key_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Right_Key_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Side_Key_1_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Side_Key_1_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Side_Key_2_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Side_Key_2_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Simple_Key_Light.png create mode 100644 addons/guide/ui/renderers/mouse/icons/Mouse_Simple_Key_Light.png.import create mode 100644 addons/guide/ui/renderers/mouse/mouse_renderer.gd create mode 100644 addons/guide/ui/renderers/mouse/mouse_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/mouse/mouse_renderer.tscn create mode 100644 addons/guide/ui/renderers/textures/action.svg create mode 100644 addons/guide/ui/renderers/textures/action.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_all_directions.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_all_directions.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_down.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_down.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_horizontal.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_horizontal.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_left.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_left.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_right.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_right.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_up.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_up.svg.import create mode 100644 addons/guide/ui/renderers/textures/arrow_vertical.svg create mode 100644 addons/guide/ui/renderers/textures/arrow_vertical.svg.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_1_finger.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_1_finger.png.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_2_fingers.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_2_fingers.png.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_3_fingers.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_3_fingers.png.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_4_fingers.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_4_fingers.png.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_rotate.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_rotate.png.import create mode 100644 addons/guide/ui/renderers/touch/icons/touch_zoom.png create mode 100644 addons/guide/ui/renderers/touch/icons/touch_zoom.png.import create mode 100644 addons/guide/ui/renderers/touch/touch_renderer.gd create mode 100644 addons/guide/ui/renderers/touch/touch_renderer.gd.uid create mode 100644 addons/guide/ui/renderers/touch/touch_renderer.tscn create mode 100644 addons/guide/ui/text_providers/controllers/controller_text_provider.gd create mode 100644 addons/guide/ui/text_providers/controllers/controller_text_provider.gd.uid create mode 100644 addons/guide/ui/text_providers/controllers/playstation/playstation_controller_text_provider.gd create mode 100644 addons/guide/ui/text_providers/controllers/playstation/playstation_controller_text_provider.gd.uid create mode 100644 addons/guide/ui/text_providers/controllers/switch/switch_controller_text_provider.gd create mode 100644 addons/guide/ui/text_providers/controllers/switch/switch_controller_text_provider.gd.uid create mode 100644 addons/guide/ui/text_providers/controllers/xbox/xbox_controller_text_provider.gd create mode 100644 addons/guide/ui/text_providers/controllers/xbox/xbox_controller_text_provider.gd.uid create mode 100644 addons/guide/ui/text_providers/default_text_provider.gd create mode 100644 addons/guide/ui/text_providers/default_text_provider.gd.uid diff --git a/addons/godot_state_charts/LICENSE b/addons/godot_state_charts/LICENSE new file mode 100644 index 0000000..4542e9f --- /dev/null +++ b/addons/godot_state_charts/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Jan Thomä + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/addons/godot_state_charts/all_of_guard.gd b/addons/godot_state_charts/all_of_guard.gd new file mode 100644 index 0000000..645e2f1 --- /dev/null +++ b/addons/godot_state_charts/all_of_guard.gd @@ -0,0 +1,22 @@ +@tool +@icon("all_of_guard.svg") + +## A composite guard that is satisfied when all of its guards are satisfied. +class_name AllOfGuard +extends Guard + +## The guards that need to be satisified. When empty, returns true. +@export var guards:Array[Guard] = [] + +func is_satisfied(context_transition:Transition, context_state:StateChartState) -> bool: + for guard in guards: + if not guard.is_satisfied(context_transition, context_state): + return false + return true + + +func get_supported_trigger_types() -> int: + var supported_trigger_types:int = StateChart.TriggerType.NONE + for guard in guards: + supported_trigger_types |= guard.get_supported_trigger_types() + return supported_trigger_types diff --git a/addons/godot_state_charts/all_of_guard.gd.uid b/addons/godot_state_charts/all_of_guard.gd.uid new file mode 100644 index 0000000..e0219eb --- /dev/null +++ b/addons/godot_state_charts/all_of_guard.gd.uid @@ -0,0 +1 @@ +uid://bxprlw40wl0c3 diff --git a/addons/godot_state_charts/all_of_guard.svg b/addons/godot_state_charts/all_of_guard.svg new file mode 100644 index 0000000..8dd5e06 --- /dev/null +++ b/addons/godot_state_charts/all_of_guard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/all_of_guard.svg.import b/addons/godot_state_charts/all_of_guard.svg.import new file mode 100644 index 0000000..52a967e --- /dev/null +++ b/addons/godot_state_charts/all_of_guard.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ux4ia8xhhjrx" +path="res://.godot/imported/all_of_guard.svg-49642db22a4a20844b2d39e67c930c8b.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/all_of_guard.svg" +dest_files=["res://.godot/imported/all_of_guard.svg-49642db22a4a20844b2d39e67c930c8b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/animation_player_state.gd b/addons/godot_state_charts/animation_player_state.gd new file mode 100644 index 0000000..81ec003 --- /dev/null +++ b/addons/godot_state_charts/animation_player_state.gd @@ -0,0 +1,63 @@ +@tool +@icon("animation_player_state.svg") +class_name AnimationPlayerState +extends AtomicState + +## Animation player that this state will use. +@export_node_path("AnimationPlayer") var animation_player: NodePath: + set(value): + animation_player = value + update_configuration_warnings() + +## The name of the animation that should be played when this state is entered. +## When this is empty, the name of this state will be used. +@export var animation_name: StringName = "" + +## A custom blend time for the animation. The default value of -1.0 will use the +## default blend time of the animation player. +@export var custom_blend: float = -1.0 + +## A custom speed for the animation. Use negative values to play the animation +## backwards. +@export var custom_speed: float = 1.0 + +## Whether the animation should be played from the end. +@export var from_end: bool = false + +var _animation_player: AnimationPlayer + +func _ready(): + if Engine.is_editor_hint(): + return + + super._ready() + _animation_player = get_node_or_null(animation_player) + + if not is_instance_valid(_animation_player): + push_error("The animation player is invalid. This node will not work.") + +func _state_enter(transition_target:StateChartState): + super._state_enter(transition_target) + + if not is_instance_valid(_animation_player): + return + + var target_animation = animation_name + if target_animation == "": + target_animation = get_name() + + if _animation_player.current_animation == target_animation and _animation_player.is_playing(): + return + + _animation_player.play(target_animation, custom_blend, custom_speed, from_end) + +func _get_configuration_warnings(): + var warnings = super._get_configuration_warnings() + warnings.append("This node is deprecated and will be removed in a future version.") + + if animation_player.is_empty(): + warnings.append("No animation player is set.") + elif get_node_or_null(animation_player) == null: + warnings.append("The animation player path is invalid.") + + return warnings diff --git a/addons/godot_state_charts/animation_player_state.gd.uid b/addons/godot_state_charts/animation_player_state.gd.uid new file mode 100644 index 0000000..8cb20a1 --- /dev/null +++ b/addons/godot_state_charts/animation_player_state.gd.uid @@ -0,0 +1 @@ +uid://b5vawfqxn7cyf diff --git a/addons/godot_state_charts/animation_player_state.svg b/addons/godot_state_charts/animation_player_state.svg new file mode 100644 index 0000000..69a041e --- /dev/null +++ b/addons/godot_state_charts/animation_player_state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/animation_player_state.svg.import b/addons/godot_state_charts/animation_player_state.svg.import new file mode 100644 index 0000000..43e6538 --- /dev/null +++ b/addons/godot_state_charts/animation_player_state.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3m20gsesp4i0" +path="res://.godot/imported/animation_player_state.svg-1acd03c414690dd7446458c5293935cb.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/animation_player_state.svg" +dest_files=["res://.godot/imported/animation_player_state.svg-1acd03c414690dd7446458c5293935cb.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/animation_tree_state.gd b/addons/godot_state_charts/animation_tree_state.gd new file mode 100644 index 0000000..5839099 --- /dev/null +++ b/addons/godot_state_charts/animation_tree_state.gd @@ -0,0 +1,63 @@ +@tool +@icon("animation_tree_state.svg") +class_name AnimationTreeState +extends AtomicState + + +## Animation tree that this state will use. +@export_node_path("AnimationTree") var animation_tree:NodePath: + set(value): + animation_tree = value + update_configuration_warnings() + +## The name of the state that should be activated in the animation tree +## when this state is entered. If this is empty, the name of this state +## will be used. +@export var state_name:StringName = "" + + +var _animation_tree_state_machine:AnimationNodeStateMachinePlayback + +func _ready(): + if Engine.is_editor_hint(): + return + + super._ready() + + _animation_tree_state_machine = null + var the_tree = get_node_or_null(animation_tree) + + if is_instance_valid(the_tree): + var state_machine = the_tree.get("parameters/playback") + if state_machine is AnimationNodeStateMachinePlayback: + _animation_tree_state_machine = state_machine + else: + push_error("The animation tree does not have a state machine as root node. This node will not work.") + else: + push_error("The animation tree is invalid. This node will not work.") + + +func _state_enter(transition_target:StateChartState): + super._state_enter(transition_target) + + if not is_instance_valid(_animation_tree_state_machine): + return + + var target_state = state_name + if target_state == "": + target_state = get_name() + + # mirror this state to the animation tree + _animation_tree_state_machine.travel(target_state) + + +func _get_configuration_warnings(): + var warnings = super._get_configuration_warnings() + warnings.append("This node is deprecated and will be removed in a future version.") + + if animation_tree.is_empty(): + warnings.append("No animation tree is set.") + elif get_node_or_null(animation_tree) == null: + warnings.append("The animation tree path is invalid.") + + return warnings diff --git a/addons/godot_state_charts/animation_tree_state.gd.uid b/addons/godot_state_charts/animation_tree_state.gd.uid new file mode 100644 index 0000000..a586eac --- /dev/null +++ b/addons/godot_state_charts/animation_tree_state.gd.uid @@ -0,0 +1 @@ +uid://488xerv8d0xh diff --git a/addons/godot_state_charts/animation_tree_state.svg b/addons/godot_state_charts/animation_tree_state.svg new file mode 100644 index 0000000..ceeed5a --- /dev/null +++ b/addons/godot_state_charts/animation_tree_state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/animation_tree_state.svg.import b/addons/godot_state_charts/animation_tree_state.svg.import new file mode 100644 index 0000000..00c1c11 --- /dev/null +++ b/addons/godot_state_charts/animation_tree_state.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3wqyduuj0fq" +path="res://.godot/imported/animation_tree_state.svg-b99077fc178cfa1e23b2c854c7735c4a.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/animation_tree_state.svg" +dest_files=["res://.godot/imported/animation_tree_state.svg-b99077fc178cfa1e23b2c854c7735c4a.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/any_of_guard.gd b/addons/godot_state_charts/any_of_guard.gd new file mode 100644 index 0000000..ee3ff2b --- /dev/null +++ b/addons/godot_state_charts/any_of_guard.gd @@ -0,0 +1,21 @@ +@tool +@icon("any_of_guard.svg") + +## A composite guard, that is satisfied if any of the guards are satisfied. +class_name AnyOfGuard +extends Guard + +## The guards of which at least one must be satisfied. If empty, this guard is not satisfied. +@export var guards: Array[Guard] = [] + +func is_satisfied(context_transition:Transition, context_state:StateChartState) -> bool: + for guard in guards: + if guard.is_satisfied(context_transition, context_state): + return true + return false + +func get_supported_trigger_types() -> int: + var supported_trigger_types:int = StateChart.TriggerType.NONE + for guard in guards: + supported_trigger_types |= guard.get_supported_trigger_types() + return supported_trigger_types diff --git a/addons/godot_state_charts/any_of_guard.gd.uid b/addons/godot_state_charts/any_of_guard.gd.uid new file mode 100644 index 0000000..80d9422 --- /dev/null +++ b/addons/godot_state_charts/any_of_guard.gd.uid @@ -0,0 +1 @@ +uid://duv2yyvlunsi8 diff --git a/addons/godot_state_charts/any_of_guard.svg b/addons/godot_state_charts/any_of_guard.svg new file mode 100644 index 0000000..76884b1 --- /dev/null +++ b/addons/godot_state_charts/any_of_guard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/any_of_guard.svg.import b/addons/godot_state_charts/any_of_guard.svg.import new file mode 100644 index 0000000..0ee4a5c --- /dev/null +++ b/addons/godot_state_charts/any_of_guard.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dbf5ogymlonu4" +path="res://.godot/imported/any_of_guard.svg-3b1aa026a997dbfebde2cc5993b5c820.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/any_of_guard.svg" +dest_files=["res://.godot/imported/any_of_guard.svg-3b1aa026a997dbfebde2cc5993b5c820.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/atomic_state.gd b/addons/godot_state_charts/atomic_state.gd new file mode 100644 index 0000000..3571095 --- /dev/null +++ b/addons/godot_state_charts/atomic_state.gd @@ -0,0 +1,25 @@ +@tool +@icon("atomic_state.svg") +## This is a state that has no sub-states. +class_name AtomicState +extends StateChartState + +func _handle_transition(transition:Transition, source:StateChartState): + # resolve the target state + var target = transition.resolve_target() + if not target is StateChartState: + push_error("The target state '" + str(transition.to) + "' of the transition from '" + source.name + "' is not a state.") + return + # atomic states cannot transition, so we need to ask the parent + # ask the parent + get_parent()._handle_transition(transition, source) + + +func _get_configuration_warnings() -> PackedStringArray : + var warnings = super._get_configuration_warnings() + # check if we have any child nodes which are not transitions + for child in get_children(): + if child is StateChartState: + warnings.append("Atomic states cannot have child states. These will be ignored.") + break + return warnings diff --git a/addons/godot_state_charts/atomic_state.gd.uid b/addons/godot_state_charts/atomic_state.gd.uid new file mode 100644 index 0000000..4300e8d --- /dev/null +++ b/addons/godot_state_charts/atomic_state.gd.uid @@ -0,0 +1 @@ +uid://cytafq8i1y8qm diff --git a/addons/godot_state_charts/atomic_state.svg b/addons/godot_state_charts/atomic_state.svg new file mode 100644 index 0000000..a9daf25 --- /dev/null +++ b/addons/godot_state_charts/atomic_state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/atomic_state.svg.import b/addons/godot_state_charts/atomic_state.svg.import new file mode 100644 index 0000000..839f48c --- /dev/null +++ b/addons/godot_state_charts/atomic_state.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c4ojtah20jtxc" +path="res://.godot/imported/atomic_state.svg-5ab16e5747cef5b5980c4bf84ef9b1af.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/atomic_state.svg" +dest_files=["res://.godot/imported/atomic_state.svg-5ab16e5747cef5b5980c4bf84ef9b1af.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/compound_state.gd b/addons/godot_state_charts/compound_state.gd new file mode 100644 index 0000000..de265ba --- /dev/null +++ b/addons/godot_state_charts/compound_state.gd @@ -0,0 +1,268 @@ +@tool +@icon("compound_state.svg") +## A compound state is a state that has multiple sub-states of which exactly one can +## be active at any given time. +class_name CompoundState +extends StateChartState + +## Called when a child state is entered. +signal child_state_entered() + +## Called when a child state is exited. +signal child_state_exited() + +## The initial state which should be activated when this state is activated. +@export_node_path("StateChartState") var initial_state:NodePath: + get: + return initial_state + set(value): + initial_state = value + update_configuration_warnings() + + +## The currently active substate. +var _active_state:StateChartState = null + +## The initial state +@onready var _initial_state:StateChartState = get_node_or_null(initial_state) + +## The history states of this compound state. +var _history_states:Array[HistoryState] = [] +## Whether any of the history states needs a deep history. +var _needs_deep_history:bool = false + +func _init() -> void: + # subscribe to the child_entered_tree signal in edit mode so we can + # automatically set the initial state when a new sub-state is added + if Engine.is_editor_hint(): + child_entered_tree.connect( + func(child:Node): + # when a child is added in the editor and the child is a state + # and we don't have an initial state yet, set the initial state + # to the newly added child + if child is StateChartState and initial_state.is_empty(): + # the newly added node may have a random name now, + # so we need to defer the call to build a node path + # to the next frame, so the editor has time to rename + # the node to its final name + (func(): initial_state = get_path_to(child)).call_deferred() + ) + + +func _state_init(): + super._state_init() + + # check if we have any history states + for child in get_children(): + if child is HistoryState: + var child_as_history_state:HistoryState = child as HistoryState + _history_states.append(child_as_history_state) + # remember if any of the history states needs a deep history + _needs_deep_history = _needs_deep_history or child_as_history_state.deep + + # initialize all substates. find all children of type State and call _state_init on them. + for child in get_children(): + if child is StateChartState: + var child_as_state:StateChartState = child as StateChartState + child_as_state._state_init() + child_as_state.state_entered.connect(func(): child_state_entered.emit()) + child_as_state.state_exited.connect(func(): child_state_exited.emit()) + +func _state_enter(transition_target:StateChartState): + super._state_enter(transition_target) + + # activate the initial state _unless_ one of these are true + # - the transition target is a descendant of this state + # - we already have an active state because entering the state triggered an immediate transition to a child state + # - we are no longer active becasue entering the state triggered an immediate transition to some other state + var target_is_descendant := false + if transition_target != null and is_ancestor_of(transition_target): + target_is_descendant = true + + if not target_is_descendant and not is_instance_valid(_active_state) and _state_active: + if _initial_state != null: + if _initial_state is HistoryState: + _restore_history_state(_initial_state) + else: + _active_state = _initial_state + _active_state._state_enter(null) + else: + push_error("No initial state set for state '" + name + "'.") + +func _state_step(): + super._state_step() + if _active_state != null: + _active_state._state_step() + +func _state_save(saved_state:SavedState, child_levels:int = -1): + super._state_save(saved_state, child_levels) + + # in addition save all history states, as they are never active and normally would not be saved + var parent = saved_state.get_substate_or_null(self) + if parent == null: + push_error("Probably a bug: The state of '" + name + "' was not saved.") + return + + for history_state in _history_states: + history_state._state_save(parent, child_levels) + +func _state_restore(saved_state:SavedState, child_levels:int = -1): + super._state_restore(saved_state, child_levels) + + # in addition check if we are now active and if so determine the current active state + if active: + # find the currently active child + for child in get_children(): + if child is StateChartState and child.active: + _active_state = child + break + +func _state_exit(): + # if we have any history states, we need to save the current active state + if _history_states.size() > 0: + var saved_state = SavedState.new() + # we save the entire hierarchy if any of the history states needs a deep history + # otherwise we only save this level. This way we can save memory and processing time + _state_save(saved_state, -1 if _needs_deep_history else 1) + + # now save the saved state in all history states + for history_state in _history_states: + # when saving history it's ok when we save deep history in a history state that doesn't need it + # because at restore time we will use the state's deep flag to determine if we need to restore + # the entire hierarchy or just this level. This way we don't need multiple copies of the same + # state hierarchy. + history_state.history = saved_state + + # deactivate the current state + if _active_state != null: + _active_state._state_exit() + _active_state = null + super._state_exit() + + +func _process_transitions(trigger_type:StateChart.TriggerType, event:StringName = "") -> bool: + if not active: + return false + + # forward to the active state + if is_instance_valid(_active_state): + if _active_state._process_transitions(trigger_type, event): + # emit the event_received signal when the trigger type is event + if trigger_type == StateChart.TriggerType.EVENT: + self.event_received.emit(event) + return true + + # if the event was not handled by the active state, we handle it here + # base class will also emit the event_received signal + return super._process_transitions(trigger_type, event) + + +func _handle_transition(transition:Transition, source:StateChartState): + # print("CompoundState._handle_transition: " + name + " from " + source.name + " to " + str(transition.to)) + # resolve the target state + var target = transition.resolve_target() + if not target is StateChartState: + push_error("The target state '" + str(transition.to) + "' of the transition from '" + source.name + "' is not a state.") + return + + # the target state can be + # 0. this state. in this case exit this state and re-enter it. This can happen when + # a child state transfers to its parent state. + # 1. a direct child of this state. this is the easy case in which + # we will deactivate the current _active_state and activate the target + # 2. a descendant of this state. in this case we find the direct child which + # is the ancestor of the target state, activate it and then ask it to perform + # the transition. + # 3. no descendant of this state. in this case, we ask our parent state to + # perform the transition + + if target == self: + # exit this state and re-enter it + _state_exit() + _state_enter(target) + return + + if target in get_children(): + # all good, now first deactivate the current state + if is_instance_valid(_active_state): + _active_state._state_exit() + + # now check if the target is a history state, if this is the + # case, we need to restore the saved state + if target is HistoryState: + _restore_history_state(target) + return + + # else, just activate the target state + _active_state = target + _active_state._state_enter(target) + return + + if self.is_ancestor_of(target): + # find the child which is the ancestor of the new target. + for child in get_children(): + if child is StateChartState and child.is_ancestor_of(target): + # found it. + # change active state if necessary + if _active_state != child: + if is_instance_valid(_active_state): + _active_state._state_exit() + + _active_state = child + # give the transition target because we will send + # the transition to the child state right after we activate it. + # this avoids the child needlessly entering the initial state + _active_state._state_enter(target) + + # ask child to handle the transition + child._handle_transition(transition, source) + return + return + + # ask the parent + get_parent()._handle_transition(transition, source) + + +func _restore_history_state(target:HistoryState): + # print("Target is history state, restoring saved state.") + var saved_state = target.history + if saved_state != null: + # restore the saved state + _state_restore(saved_state, -1 if target.deep else 1) + return + # print("No history saved so far, activating default state.") + # if we don't have history, we just activate the default state + var default_state = target.get_node_or_null(target.default_state) + if is_instance_valid(default_state): + _active_state = default_state + _active_state._state_enter(null) + return + else: + push_error("The default state '" + str(target.default_state) + "' of the history state '" + target.name + "' cannot be found.") + return + + +func _get_configuration_warnings() -> PackedStringArray: + var warnings = super._get_configuration_warnings() + + # count the amount of child states + var child_count = 0 + for child in get_children(): + if child is StateChartState: + child_count += 1 + + if child_count < 1: + warnings.append("Compound states should have at least one child state.") + + elif child_count < 2: + warnings.append("Compound states with only one child state are not very useful. Consider adding more child states or removing this compound state.") + + var the_initial_state = get_node_or_null(initial_state) + + if not is_instance_valid(the_initial_state): + warnings.append("Initial state could not be resolved, is the path correct?") + + elif the_initial_state.get_parent() != self: + warnings.append("Initial state must be a direct child of this compound state.") + + return warnings diff --git a/addons/godot_state_charts/compound_state.gd.uid b/addons/godot_state_charts/compound_state.gd.uid new file mode 100644 index 0000000..86d9082 --- /dev/null +++ b/addons/godot_state_charts/compound_state.gd.uid @@ -0,0 +1 @@ +uid://jk2jm1g6q853 diff --git a/addons/godot_state_charts/compound_state.svg b/addons/godot_state_charts/compound_state.svg new file mode 100644 index 0000000..170d6d3 --- /dev/null +++ b/addons/godot_state_charts/compound_state.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/addons/godot_state_charts/compound_state.svg.import b/addons/godot_state_charts/compound_state.svg.import new file mode 100644 index 0000000..3e0df90 --- /dev/null +++ b/addons/godot_state_charts/compound_state.svg.import @@ -0,0 +1,38 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bbudjoa3ds4qj" +path="res://.godot/imported/compound_state.svg-84780d78ec1f15e1cbb9d20f4df031a7.ctex" +metadata={ +"has_editor_variant": true, +"vram_texture": false +} + +[deps] + +source_file="res://addons/godot_state_charts/compound_state.svg" +dest_files=["res://.godot/imported/compound_state.svg-84780d78ec1f15e1cbb9d20f4df031a7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 +svg/scale=1.0 +editor/scale_with_editor_scale=true +editor/convert_colors_with_editor_theme=false diff --git a/addons/godot_state_charts/csharp/CompoundState.cs b/addons/godot_state_charts/csharp/CompoundState.cs new file mode 100644 index 0000000..fdef872 --- /dev/null +++ b/addons/godot_state_charts/csharp/CompoundState.cs @@ -0,0 +1,66 @@ + + +// ReSharper disable once CheckNamespace +namespace GodotStateCharts +{ + using System; + using Godot; + + /// + /// Wrapper around the compound state node. + /// + public class CompoundState : StateChartState + { + /// + /// Called when a child state is entered. + /// + public event Action ChildStateEntered + { + add => Wrapped.Connect(SignalName.ChildStateEntered, Callable.From(value)); + remove => Wrapped.Disconnect(SignalName.ChildStateEntered, Callable.From(value)); + } + + /// + /// Called when a child state is exited. + /// + public event Action ChildStateExited + { + add => Wrapped.Connect(SignalName.ChildStateExited, Callable.From(value)); + remove => Wrapped.Disconnect(SignalName.ChildStateExited, Callable.From(value)); + } + + private CompoundState(Node wrapped) : base(wrapped) + { + } + + /// + /// Creates a wrapper object around the given node and verifies that the node + /// is actually a compound state. The wrapper object can then be used to interact + /// with the compound state chart from C#. + /// + /// the node that is the state + /// a State wrapper. + /// ArgumentException if the node is not a state. + public new static CompoundState Of(Node state) + { + if (state.GetScript().As