Code stuff

This commit is contained in:
Melody Becker 2025-01-26 20:23:56 +01:00
parent cf22890c16
commit e58093b5a5
Signed by: mstar
SSH key fingerprint: SHA256:vkXfS9FG2pVNVfvDrzd1VW9n8VJzqqdKQGljxxX8uK8
153 changed files with 11196 additions and 4 deletions

View file

@ -0,0 +1,11 @@
extends EditorInspectorPlugin
const State = preload("res://addons/imjp94.yafsm/src/states/State.gd")
func _can_handle(object):
return object is State
func _parse_property(object, type, path, hint, hint_text, usage, wide) -> bool:
return false
# Hide all property
return true

View file

@ -0,0 +1,82 @@
@tool
extends "res://addons/imjp94.yafsm/scenes/flowchart/FlowChartNode.gd"
const State = preload("../../src/states/State.gd")
const StateMachine = preload("../../src/states/StateMachine.gd")
signal name_edit_entered(new_name) # Emits when focused exit or Enter pressed
@onready var name_edit = $MarginContainer/NameEdit
var undo_redo
var state:
set = set_state
func _init():
super._init()
set_state(State.new())
func _ready():
name_edit.focus_exited.connect(_on_NameEdit_focus_exited)
name_edit.text_submitted.connect(_on_NameEdit_text_submitted)
set_process_input(false) # _input only required when name_edit enabled to check mouse click outside
func _draw():
if state is StateMachine:
if selected:
draw_style_box(get_theme_stylebox("nested_focus", "StateNode"), Rect2(Vector2.ZERO, size))
else:
draw_style_box(get_theme_stylebox("nested_normal", "StateNode"), Rect2(Vector2.ZERO, size))
else:
super._draw()
func _input(event):
if event is InputEventMouseButton:
if event.pressed:
# Detect click outside rect
if get_viewport().gui_get_focus_owner() == name_edit:
var local_event = make_input_local(event)
if not name_edit.get_rect().has_point(local_event.position):
name_edit.release_focus()
func enable_name_edit(v):
if v:
set_process_input(true)
name_edit.editable = true
name_edit.selecting_enabled = true
name_edit.mouse_filter = MOUSE_FILTER_PASS
mouse_default_cursor_shape = CURSOR_IBEAM
name_edit.grab_focus()
else:
set_process_input(false)
name_edit.editable = false
name_edit.selecting_enabled = false
name_edit.mouse_filter = MOUSE_FILTER_IGNORE
mouse_default_cursor_shape = CURSOR_ARROW
name_edit.release_focus()
func _on_state_name_changed(new_name):
name_edit.text = new_name
size.x = 0 # Force reset horizontal size
func _on_state_changed(new_state):
if state:
state.name_changed.connect(_on_state_name_changed)
if name_edit:
name_edit.text = state.name
func _on_NameEdit_focus_exited():
enable_name_edit(false)
name_edit.deselect()
emit_signal("name_edit_entered", name_edit.text)
func _on_NameEdit_text_submitted(new_text):
enable_name_edit(false)
emit_signal("name_edit_entered", new_text)
func set_state(s):
if state != s:
state = s
_on_state_changed(s)

View file

@ -0,0 +1,79 @@
[gd_scene load_steps=8 format=3 uid="uid://l3mqbqjwjkc3"]
[ext_resource type="Script" path="res://addons/imjp94.yafsm/scenes/state_nodes/StateNode.gd" id="2"]
[ext_resource type="SystemFont" uid="uid://dmcxm8gxsonbq" path="res://addons/imjp94.yafsm/assets/fonts/sans_serif.tres" id="2_352m3"]
[sub_resource type="StyleBoxFlat" id="1"]
bg_color = Color(0.164706, 0.164706, 0.164706, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.44, 0.73, 0.98, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[sub_resource type="StyleBoxFlat" id="2"]
bg_color = Color(0.164706, 0.164706, 0.164706, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
corner_detail = 2
[sub_resource type="StyleBoxFlat" id="3"]
bg_color = Color(0.164706, 0.164706, 0.164706, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
border_color = Color(0.960784, 0.772549, 0.333333, 1)
shadow_size = 2
[sub_resource type="StyleBoxFlat" id="4"]
bg_color = Color(0.164706, 0.164706, 0.164706, 1)
border_width_left = 3
border_width_top = 3
border_width_right = 3
border_width_bottom = 3
shadow_size = 2
[sub_resource type="Theme" id="5"]
FlowChartNode/styles/focus = SubResource("1")
FlowChartNode/styles/normal = SubResource("2")
StateNode/styles/nested_focus = SubResource("3")
StateNode/styles/nested_normal = SubResource("4")
[node name="StateNode" type="HBoxContainer"]
grow_horizontal = 2
grow_vertical = 2
theme = SubResource("5")
script = ExtResource("2")
[node name="MarginContainer" type="MarginContainer" parent="."]
layout_mode = 2
mouse_filter = 2
theme_override_constants/margin_left = 5
theme_override_constants/margin_top = 5
theme_override_constants/margin_right = 5
theme_override_constants/margin_bottom = 5
[node name="NameEdit" type="LineEdit" parent="MarginContainer"]
layout_mode = 2
size_flags_horizontal = 4
size_flags_vertical = 4
mouse_filter = 2
mouse_default_cursor_shape = 0
theme_override_fonts/font = ExtResource("2_352m3")
text = "State"
alignment = 1
editable = false
expand_to_text_length = true
selecting_enabled = false
caret_blink = true