added the game

This commit is contained in:
JHDev2006
2025-09-13 16:30:32 +01:00
parent 5ef689109b
commit 3773bdaf64
3616 changed files with 263702 additions and 0 deletions

View File

@@ -0,0 +1,78 @@
[gd_scene load_steps=2 format=2]
[ext_resource path="res://addons/mod_tool/interface/config_editor/json_editor.gd" type="Script" id=1]
[node name="Mod Config Editor" type="PanelContainer"]
visible = false
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 24.0
[node name="VBox" type="VBoxContainer" parent="."]
offset_left = 7.0
offset_top = 7.0
offset_right = 1907.0
offset_bottom = 891.0
[node name="HBox" type="HBoxContainer" parent="VBox"]
offset_right = 1900.0
offset_bottom = 40.0
[node name="Label" type="Label" parent="VBox/HBox"]
offset_top = 13.0
offset_right = 1533.0
offset_bottom = 27.0
size_flags_horizontal = 3
text = "Default json for user mod configuration"
[node name="ErrorLabel" type="Label" parent="VBox/HBox"]
unique_name_in_owner = true
offset_left = 1537.0
offset_top = 13.0
offset_right = 1617.0
offset_bottom = 27.0
text = "JSON is valid"
[node name="ShouldValidate" type="CheckButton" parent="VBox/HBox"]
unique_name_in_owner = true
offset_left = 1621.0
offset_right = 1697.0
offset_bottom = 40.0
pressed = true
flat = true
[node name="VSeparator" type="VSeparator" parent="VBox/HBox"]
offset_left = 1701.0
offset_right = 1705.0
offset_bottom = 40.0
[node name="SaveConfig" type="Button" parent="VBox/HBox"]
offset_left = 1709.0
offset_right = 1900.0
offset_bottom = 40.0
text = "Save config to manifest.json"
[node name="ConfigEditor" type="TextEdit" parent="VBox"]
unique_name_in_owner = true
offset_top = 44.0
offset_right = 1900.0
offset_bottom = 884.0
size_flags_vertical = 3
text = "{
}"
highlight_current_line = true
syntax_highlighter = true
show_line_numbers = true
fold_gutter = true
highlight_all_occurrences = true
smooth_scrolling = true
hiding_enabled = true
script = ExtResource( 1 )
[node name="ValidationDelay" type="Timer" parent="VBox/ConfigEditor"]
one_shot = true
[connection signal="cursor_changed" from="VBox/ConfigEditor" to="VBox/ConfigEditor" method="_on_cursor_changed"]
[connection signal="text_changed" from="VBox/ConfigEditor" to="VBox/ConfigEditor" method="_on_text_changed"]
[connection signal="timeout" from="VBox/ConfigEditor/ValidationDelay" to="VBox/ConfigEditor" method="_on_ValidationDelay_timeout"]

View File

@@ -0,0 +1,226 @@
@tool
extends TextEdit
signal discard_last_console_error
var base_theme: Theme: set = set_base_theme
var editor_settings: EditorSettings: set = set_editor_settings
var last_text := ""
var last_selection: TextSelection
var highlight_settings: PackedStringArray = [
"string_color", "background_color", "line_number_color",
"text_selected_color", "selection_color", "brace_mismatch_color",
"current_line_color", "word_highlighted_color", "number_color",
"code_folding_color", "symbol_color"
]
var autobrace_pairs := {
"(": ")",
"{": "}",
"[": "]",
'"': '"',
":": ",",
}
func _ready() -> void:
last_text = text
$"%ShouldValidate".connect("pressed", Callable(self, "validate"))
validate()
func set_base_theme(p_base_theme: Theme) -> void:
base_theme = p_base_theme
add_theme_font_override("font", base_theme.get_font("source", "EditorFonts"))
func set_editor_settings(p_editor_settings: EditorSettings) -> void:
editor_settings = p_editor_settings
# TODO -> syntax_highlighter = get_setting_bool("text_editor/highlighting/syntax_highlighter")
highlight_all_occurrences = get_setting_bool("text_editor/highlighting/highlight_all_occurrences")
highlight_current_line = get_setting_bool("text_editor/highlighting/highlight_current_line")
draw_tabs = get_setting_bool("text_editor/indent/draw_tabs")
draw_spaces = get_setting_bool("text_editor/indent/draw_spaces")
$ValidationDelay.wait_time = editor_settings.get_setting("text_editor/completion/idle_parse_delay")
# TODO -> add_color_region('"', '"', get_highlight_color("string_color"))
for highlight in highlight_settings:
add_theme_color_override(highlight, get_highlight_color(highlight))
func get_highlight_color(name: String) -> Color:
var color = editor_settings.get_setting("text_editor/highlighting/" + name)
return color if color is Color else null
func get_setting_bool(setting: String) -> bool:
var is_set = editor_settings.get_setting(setting)
return is_set if is_set is bool else false
func validate() -> void:
if not $"%ShouldValidate".pressed:
$"%ErrorLabel".text = "Validation off"
return
var test_json_conv = JSON.new()
test_json_conv.parse(text)
var parsed := test_json_conv.get_data()
if not parsed.error == OK:
$"%ErrorLabel".text = "Line %s: %s" % [parsed.error_line +1, parsed.error_string]
emit_signal("discard_last_console_error")
return
$"%ErrorLabel".text = "JSON is valid"
func _on_cursor_changed() -> void:
if get_selected_text().length() > 0:
last_selection = TextSelection.from_text_edit(self)
else:
last_selection = null
func _on_text_changed() -> void:
$ValidationDelay.stop()
$ValidationDelay.start()
if get_setting_bool("text_editor/completion/auto_brace_complete"):
autobrace()
last_text = text
func autobrace() -> void:
var line := get_line(get_caret_line())
var char_before_cursor := ""
if get_caret_column() > 0:
char_before_cursor = line[get_caret_column()-1]
var char_after_cursor := ""
if get_caret_column() < line.length():
char_after_cursor = line[get_caret_column()]
# When deleting, also delete the autobraced character
if Input.is_key_pressed(KEY_BACKSPACE):
if char_after_cursor in autobrace_pairs.values():
var deleted_character := first_different_character(text, last_text)
if autobrace_pairs.has(deleted_character) and autobrace_pairs[deleted_character] == char_after_cursor:
delete_character_after_cursor()
# If we encounter a closing brace, "skip" over it
# Since the character is written already, just delete the next one
elif is_matching_closing_brace(char_before_cursor, char_after_cursor):
delete_character_after_cursor()
# If a character is in the autoclose dict, close it
elif char_before_cursor in autobrace_pairs.keys():
var closing_char: String = autobrace_pairs[char_before_cursor]
var last_cursor_column := get_caret_column()
if not last_selection:
insert_text_at_caret(closing_char)
set_caret_column(last_cursor_column)
return
# If there is a selection, surround that with the bracing characters
# Pressing the alt key moves the selection left by one character
if Input.is_key_pressed(KEY_ALT):
if last_cursor_column == last_selection.from_col +1:
# If selected right to left, it can be fixed by offsetting it right
select(
last_selection.from_line, last_selection.from_col +1,
last_selection.to_line, last_selection.to_col +1
)
insert_text_at_caret(last_selection.enclosed_text + closing_char)
set_caret_column(last_selection.to_col +1)
else:
# If selected left to right, something else goes wrong as well,
# but it can be fixed by inserting the whole selection with braces
# and removing the leftover trailing brace behind it afterwards
insert_text_at_caret(char_before_cursor + last_selection.enclosed_text + closing_char)
delete_character_after_cursor()
set_caret_column(last_selection.to_col +1)
else:
insert_text_at_caret(last_selection.enclosed_text + closing_char)
set_caret_column(last_selection.to_col +1)
last_selection = null
func is_matching_closing_brace(new_character: String, char_after_cursor: String) -> bool:
if not new_character == char_after_cursor:
return false
# Opening and closing brace are the same -> ""
if char_after_cursor in autobrace_pairs.keys():
return true
# Opening and closing brace are different -> ()
if new_character in autobrace_pairs.values():
return true
return false
func delete_character_after_cursor() -> void:
var line_text := get_line(get_caret_line())
var cursor_col := get_caret_column() +1
var text_length := len(line_text)
if cursor_col < 1 or cursor_col > text_length:
return
var left_text := line_text.substr(0, cursor_col - 1)
var right_text := line_text.substr(cursor_col, text_length - cursor_col)
set_line(get_caret_line(), left_text + right_text)
set_caret_column(cursor_col - 1)
func first_different_character(str1: String, str2: String) -> String:
var len1 := str1.length()
var len2 := str2.length()
if len1 == 0:
return str2[0]
if len2 == 0:
return str1[0]
for i in min(len1, len2):
if not str1[i] == str2[i]:
return str2[i]
return ""
func _on_ValidationDelay_timeout() -> void:
validate()
class TextSelection:
var enclosed_text: String
var from_line: int
var from_col: int
var to_line: int
var to_col: int
func _init(p_enclosed_text: String, p_from_line: int, p_from_col: int, p_to_line: int, p_to_col: int) -> void:
enclosed_text = p_enclosed_text
from_line = p_from_line
from_col = p_from_col
to_line = p_to_line
to_col = p_to_col
static func from_text_edit(text_edit: TextEdit) -> TextSelection:
return TextSelection.new(
text_edit.get_selection_text(),
text_edit.get_selection_from_line(), text_edit.get_selection_from_column(),
text_edit.get_selection_to_line(), text_edit.get_selection_to_column()
)
func _to_string() -> String:
return "%s %s %s" % [ Vector2(from_line, from_col), enclosed_text, Vector2(to_line, to_col) ]

View File

@@ -0,0 +1 @@
uid://uu3ra0v727ro