diff --git a/.idea/.idea.MusicPlayer.dir/.idea/.gitignore b/.idea/.idea.MusicPlayer.dir/.idea/.gitignore
new file mode 100644
index 0000000..6a32b1c
--- /dev/null
+++ b/.idea/.idea.MusicPlayer.dir/.idea/.gitignore
@@ -0,0 +1,13 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Rider ignored files
+/modules.xml
+/.idea.MusicPlayer.iml
+/contentModel.xml
+/projectSettingsUpdater.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/.idea.MusicPlayer.dir/.idea/encodings.xml b/.idea/.idea.MusicPlayer.dir/.idea/encodings.xml
new file mode 100644
index 0000000..df87cf9
--- /dev/null
+++ b/.idea/.idea.MusicPlayer.dir/.idea/encodings.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.MusicPlayer.dir/.idea/indexLayout.xml b/.idea/.idea.MusicPlayer.dir/.idea/indexLayout.xml
new file mode 100644
index 0000000..7b08163
--- /dev/null
+++ b/.idea/.idea.MusicPlayer.dir/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.MusicPlayer.dir/.idea/vcs.xml b/.idea/.idea.MusicPlayer.dir/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/.idea.MusicPlayer.dir/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/MainWindow.gd b/MainWindow.gd
index 2e75fb3..e3d6b1d 100644
--- a/MainWindow.gd
+++ b/MainWindow.gd
@@ -13,7 +13,39 @@ var list := $ScrollContainer/VBoxContainer
var game_label := $GameLabel
@onready
-var player := $Player
+var character_grid_container := $ScrollContainer2
+
+@onready
+var character_grid := $ScrollContainer2/GridContainer
+
+@onready
+var play_button := $PanelContainer/HBoxContainer/PlayButton
+
+@onready
+var pause_button := $PanelContainer/HBoxContainer/PauseButton
+
+@onready
+var stop_button := $PanelContainer/HBoxContainer/StopButton
+
+@onready
+var audio := $AudioStreamPlayer
+
+@onready
+var progress := $PanelContainer/HBoxContainer/HSlider
+
+@onready
+var label := $PanelContainer/HBoxContainer/Label
+
+@onready
+var add_player := $Players/VBoxContainer/HBoxContainer/AddPlayer
+
+@onready
+var players := $Players/VBoxContainer
+
+var Player := preload("res://Player.tscn")
+
+@onready
+var path = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3'
func get_suggestion_list() -> void:
var http_request = HTTPRequest.new()
@@ -25,12 +57,48 @@ func get_suggestion_list() -> void:
if error != OK:
push_error("An error occurred in the HTTP request.")
+func add_players():
+ var new_player := Player.instantiate()
+ players.add_child(new_player)
+ new_player.connect("change_character_clicked", _on_player_change_character_clicked.bind(new_player))
+
# Called when the node enters the scene tree for the first time.
func _ready():
+ play_button.pressed.connect(fetch_first_song)
+ pause_button.pressed.connect(pause)
+ stop_button.pressed.connect(stop)
+ progress.drag_started.connect(_on_drag_started)
+ progress.drag_ended.connect(_on_drag_ended)
+
+ add_player.pressed.connect(add_players)
+
open_button.pressed.connect(open)
- player.fetched.connect(fetched)
get_suggestion_list()
- #dir_contents("/Users/sebastian/ResilioSync/Sorterat_test")
+
+ var characters := DirAccess.open("res://characters/")
+ if characters:
+ characters.list_dir_begin()
+ var file_name = characters.get_next()
+ while file_name != "":
+ if !file_name.ends_with(".import"):
+
+ var texture = load("res://characters/" + file_name)
+
+ var texture_btn := TextureButton.new()
+
+ character_grid.add_child(texture_btn)
+ texture_btn.custom_minimum_size = Vector2(80, 40)
+ texture_btn.ignore_texture_size = true
+ texture_btn.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT
+ texture_btn.texture_normal = texture
+
+ texture_btn.pressed.connect(select_character.bind(file_name))
+
+ file_name = characters.get_next()
+
+
+
+
func fetched():
var http_request = HTTPRequest.new()
@@ -79,8 +147,9 @@ func open():
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(delta):
-
- pass
+ if audio.has_stream_playback() && !is_changing && !audio.stream_paused:
+ progress.value = audio.get_playback_position()
+ label.text = format_text(progress.value, stream.get_length())
func _on_file_dialog_dir_selected(path):
print(path)
@@ -109,9 +178,118 @@ func dir_contents(path: String) -> void:
else:
print("An error occurred when trying to access the path.")
- if songs:
- player.set_songs(songs)
for game in games:
var label := Label.new()
label.text = game
list.add_child(label)
+
+
+
+
+
+var is_changing: bool = false
+var playback_position: float
+var stream: AudioStream
+
+func set_songs(new_songs) -> void:
+ songs = new_songs
+
+func make_request(address, func_name) -> void:
+ var http_request = HTTPRequest.new()
+ add_child(http_request)
+ http_request.request_completed.connect(func_name)
+
+ # Perform a GET request. The URL below returns JSON as of writing.
+ var error = http_request.request(address)
+ if error != OK:
+ push_error("An error occurred in the HTTP request.")
+
+
+func format_time(time: float) -> String:
+ var mins: String = "%02d" % floor(time / 60)
+ var sec: String = "%02d" % round(fmod(time, 60))
+ return mins + ":" + sec
+
+func format_text(part: float, total: float) -> String:
+ return format_time(part) + " / " + format_time(total)
+
+
+func fetch_first_song() -> void:
+ var http_request = HTTPRequest.new()
+ add_child(http_request)
+ #http.set_download_file("https://music.sanplex.tech/music/first")
+ http_request.request_completed.connect(first_song_fetched)
+
+ # Perform a GET request. The URL below returns JSON as of writing.
+ var error = http_request.request("https://music.sanplex.tech/music/rand")
+ if error != OK:
+ push_error("An error occurred in the HTTP request.")
+
+func first_song_fetched(result, response_code, headers, body) -> void:
+ if result != HTTPRequest.RESULT_SUCCESS:
+ push_error("Song couldn't be downloaded. Try a different song.")
+ var sound = AudioStreamMP3.new()
+ sound.data = body
+ make_request("https://music.sanplex.tech/music/addQue", add_que)
+ play(sound)
+
+func add_que(result, response_code, headers, body) -> void:
+ print("response_code", response_code)
+ fetched()
+
+func play(song) -> void:
+ if audio.stream_paused:
+ audio.stream_paused = false
+ audio.seek(playback_position)
+ print("continue")
+ elif song:
+ print("play given song")
+ audio.stream = song
+ audio.play()
+ stream = audio.stream
+ else:
+ if songs:
+ #print(songs)
+ path = songs[0]
+ print(path)
+ print(FileAccess.file_exists(path))
+ audio.stream = load_mp3(path)
+ print("play")
+ audio.play()
+ stream = audio.stream
+ progress.max_value = round(stream.get_length())
+ progress.tick_count = round(stream.get_length() / 60)
+
+func pause() -> void:
+ audio.stream_paused = true
+ playback_position = audio.get_playback_position()
+
+func stop() -> void:
+ audio.stop()
+ audio.stream_paused = false
+ progress.value = 0
+
+func _on_drag_started() -> void:
+ is_changing = true
+
+func _on_drag_ended(_changed) -> void:
+ audio.seek(progress.value)
+ playback_position = progress.value
+ is_changing = false
+
+func load_mp3(_path) -> AudioStream:
+ var file = FileAccess.open(_path, FileAccess.READ)
+ var sound = AudioStreamMP3.new()
+ sound.data = file.get_buffer(file.get_length())
+ return sound
+
+var current_player
+func _on_player_change_character_clicked(new_player):
+ print("_on_player_change_character_clicked")
+ current_player = new_player
+ character_grid_container.visible = true
+
+func select_character(file_name: String):
+ print("select_character")
+ character_grid_container.visible = false
+ current_player._on_control_character_selected_clicked(file_name)
diff --git a/MainWindow.tscn b/MainWindow.tscn
index 4b03a25..6fa7cc7 100644
--- a/MainWindow.tscn
+++ b/MainWindow.tscn
@@ -1,7 +1,8 @@
-[gd_scene load_steps=3 format=3 uid="uid://db7eqdsumxmo1"]
+[gd_scene load_steps=4 format=3 uid="uid://xwq863o6uvsu"]
-[ext_resource type="PackedScene" uid="uid://cvixk5bkj7lgb" path="res://Player.tscn" id="1_dm1l5"]
[ext_resource type="Script" path="res://MainWindow.gd" id="1_eu0t5"]
+[ext_resource type="AudioStream" uid="uid://n2g8jddr85h2" path="res://01. Opening.mp3" id="4_5kvsq"]
+[ext_resource type="Texture2D" uid="uid://o5go6smk7hm1" path="res://person_add_alt_1-black-36dp.svg" id="4_op458"]
[node name="Control" type="Control"]
layout_mode = 3
@@ -17,34 +18,20 @@ offset_bottom = 469.0
text = "Open"
[node name="FileDialog" type="FileDialog" parent="."]
-initial_position = 2
title = "Open a Directory"
+initial_position = 2
size = Vector2i(616, 400)
ok_button_text = "Select Current Folder"
file_mode = 2
access = 2
show_hidden_files = true
-[node name="Player" parent="." instance=ExtResource("1_dm1l5")]
-layout_mode = 0
-anchors_preset = 0
-anchor_left = 0.0
-anchor_top = 0.0
-anchor_right = 0.0
-anchor_bottom = 0.0
-offset_left = 98.0
-offset_top = 550.0
-offset_right = 748.0
-offset_bottom = 581.0
-grow_horizontal = 1
-grow_vertical = 1
-
[node name="ScrollContainer" type="ScrollContainer" parent="."]
layout_mode = 0
-offset_left = 703.0
-offset_top = 42.0
-offset_right = 1073.0
-offset_bottom = 331.0
+offset_left = 690.0
+offset_top = 25.0
+offset_right = 1060.0
+offset_bottom = 314.0
[node name="VBoxContainer" type="VBoxContainer" parent="ScrollContainer"]
layout_mode = 2
@@ -65,4 +52,80 @@ offset_top = 141.0
offset_right = 557.0
offset_bottom = 253.0
+[node name="ScrollContainer2" type="ScrollContainer" parent="."]
+visible = false
+clip_contents = false
+custom_minimum_size = Vector2(100, 100)
+layout_mode = 0
+offset_left = 194.0
+offset_top = 152.0
+offset_right = 670.0
+offset_bottom = 375.0
+
+[node name="GridContainer" type="GridContainer" parent="ScrollContainer2"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 3
+columns = 3
+
+[node name="PanelContainer" type="PanelContainer" parent="."]
+layout_mode = 0
+offset_left = 110.0
+offset_top = 485.0
+offset_right = 758.0
+offset_bottom = 525.0
+
+[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer"]
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="PlayButton" type="Button" parent="PanelContainer/HBoxContainer"]
+layout_mode = 2
+text = "Play"
+
+[node name="PauseButton" type="Button" parent="PanelContainer/HBoxContainer"]
+layout_mode = 2
+text = "Pause"
+
+[node name="StopButton" type="Button" parent="PanelContainer/HBoxContainer"]
+layout_mode = 2
+text = "Stop"
+
+[node name="HSlider" type="HSlider" parent="PanelContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 4
+scrollable = false
+
+[node name="Label" type="Label" parent="PanelContainer/HBoxContainer"]
+layout_mode = 2
+text = "1:00 / 3:00"
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("4_5kvsq")
+
+[node name="Players" type="PanelContainer" parent="."]
+layout_mode = 0
+offset_left = 837.0
+offset_top = 264.0
+offset_right = 1102.0
+offset_bottom = 453.0
+
+[node name="VBoxContainer" type="VBoxContainer" parent="Players"]
+layout_mode = 2
+
+[node name="HBoxContainer" type="HBoxContainer" parent="Players/VBoxContainer"]
+layout_mode = 2
+
+[node name="Label" type="Label" parent="Players/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+text = "Players"
+horizontal_alignment = 1
+
+[node name="AddPlayer" type="TextureButton" parent="Players/VBoxContainer/HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 8
+texture_normal = ExtResource("4_op458")
+
[connection signal="dir_selected" from="FileDialog" to="." method="_on_file_dialog_dir_selected"]
diff --git a/MediaPlayer.gd b/MediaPlayer.gd
new file mode 100644
index 0000000..995aec3
--- /dev/null
+++ b/MediaPlayer.gd
@@ -0,0 +1,134 @@
+extends PanelContainer
+
+@onready
+var play_button := $HBoxContainer/PlayButton
+
+@onready
+var pause_button := $HBoxContainer/PauseButton
+
+@onready
+var stop_button := $HBoxContainer/StopButton
+
+@onready
+var audio := $AudioStreamPlayer
+
+@onready
+var progress := $HBoxContainer/HSlider
+
+@onready
+var label := $HBoxContainer/Label
+
+@onready
+var path = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3'
+
+var songs := []
+
+var is_changing: bool = false
+var playback_position: float
+var stream: AudioStream
+
+func set_songs(new_songs) -> void:
+ songs = new_songs
+
+func make_request(address, func_name) -> void:
+ var http_request = HTTPRequest.new()
+ add_child(http_request)
+ http_request.request_completed.connect(func_name)
+
+ # Perform a GET request. The URL below returns JSON as of writing.
+ var error = http_request.request(address)
+ if error != OK:
+ push_error("An error occurred in the HTTP request.")
+
+# Called when the node enters the scene tree for the first time.
+func _ready() -> void:
+ play_button.pressed.connect(fetch_first_song)
+ pause_button.pressed.connect(pause)
+ stop_button.pressed.connect(stop)
+ progress.drag_started.connect(_on_drag_started)
+ progress.drag_ended.connect(_on_drag_ended)
+
+func format_time(time: float) -> String:
+ var mins: String = "%02d" % floor(time / 60)
+ var sec: String = "%02d" % round(fmod(time, 60))
+ return mins + ":" + sec
+
+func format_text(part: float, total: float) -> String:
+ return format_time(part) + " / " + format_time(total)
+
+func _process(_delta):
+ if audio.has_stream_playback() && !is_changing && !audio.stream_paused:
+ progress.value = audio.get_playback_position()
+ label.text = format_text(progress.value, stream.get_length())
+
+signal fetched
+
+func fetch_first_song() -> void:
+ var http_request = HTTPRequest.new()
+ add_child(http_request)
+ #http.set_download_file("https://music.sanplex.tech/music/first")
+ http_request.request_completed.connect(first_song_fetched)
+
+ # Perform a GET request. The URL below returns JSON as of writing.
+ var error = http_request.request("https://music.sanplex.tech/music/rand")
+ if error != OK:
+ push_error("An error occurred in the HTTP request.")
+
+func first_song_fetched(result, response_code, headers, body) -> void:
+ if result != HTTPRequest.RESULT_SUCCESS:
+ push_error("Song couldn't be downloaded. Try a different song.")
+ var sound = AudioStreamMP3.new()
+ sound.data = body
+ make_request("https://music.sanplex.tech/music/addQue", add_que)
+ #fetched.emit()
+ play(sound)
+
+func add_que(result, response_code, headers, body) -> void:
+ print("response_code", response_code)
+ fetched.emit()
+
+func play(song) -> void:
+ if audio.stream_paused:
+ audio.stream_paused = false
+ audio.seek(playback_position)
+ print("continue")
+ elif song:
+ print("play given song")
+ audio.stream = song
+ audio.play()
+ stream = audio.stream
+ else:
+ if songs:
+ #print(songs)
+ path = songs[0]
+ print(path)
+ print(FileAccess.file_exists(path))
+ audio.stream = load_mp3(path)
+ print("play")
+ audio.play()
+ stream = audio.stream
+ progress.max_value = round(stream.get_length())
+ progress.tick_count = round(stream.get_length() / 60)
+
+func pause() -> void:
+ audio.stream_paused = true
+ playback_position = audio.get_playback_position()
+
+func stop() -> void:
+ audio.stop()
+ audio.stream_paused = false
+ progress.value = 0
+
+func _on_drag_started() -> void:
+ is_changing = true
+
+func _on_drag_ended(_changed) -> void:
+ audio.seek(progress.value)
+ playback_position = progress.value
+ is_changing = false
+
+func load_mp3(_path) -> AudioStream:
+ var file = FileAccess.open(_path, FileAccess.READ)
+ var sound = AudioStreamMP3.new()
+ sound.data = file.get_buffer(file.get_length())
+ return sound
diff --git a/MediaPlayer.tscn b/MediaPlayer.tscn
new file mode 100644
index 0000000..bd741d6
--- /dev/null
+++ b/MediaPlayer.tscn
@@ -0,0 +1,48 @@
+[gd_scene load_steps=3 format=3 uid="uid://ds15cgsf8vpvc"]
+
+[ext_resource type="Script" path="res://MediaPlayer.gd" id="1_7xb8h"]
+[ext_resource type="AudioStream" uid="uid://n2g8jddr85h2" path="res://01. Opening.mp3" id="2_sv4nm"]
+
+[node name="MediaPlayer" type="PanelContainer"]
+anchors_preset = 8
+anchor_left = 0.5
+anchor_top = 0.5
+anchor_right = 0.5
+anchor_bottom = 0.5
+offset_left = -121.0
+offset_top = -15.5
+offset_right = 121.0
+offset_bottom = 15.5
+grow_horizontal = 2
+grow_vertical = 2
+size_flags_vertical = 4
+script = ExtResource("1_7xb8h")
+
+[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
+stream = ExtResource("2_sv4nm")
+
+[node name="HBoxContainer" type="HBoxContainer" parent="."]
+layout_mode = 2
+size_flags_vertical = 4
+
+[node name="PlayButton" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+text = "Play"
+
+[node name="PauseButton" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+text = "Pause"
+
+[node name="StopButton" type="Button" parent="HBoxContainer"]
+layout_mode = 2
+text = "Stop"
+
+[node name="HSlider" type="HSlider" parent="HBoxContainer"]
+layout_mode = 2
+size_flags_horizontal = 3
+size_flags_vertical = 4
+scrollable = false
+
+[node name="Label" type="Label" parent="HBoxContainer"]
+layout_mode = 2
+text = "1:00 / 3:00"
diff --git a/Player.gd b/Player.gd
index 28032e0..4b9c087 100644
--- a/Player.gd
+++ b/Player.gd
@@ -1,134 +1,48 @@
-extends PanelContainer
+extends Control
@onready
-var play_button := $HBoxContainer/PlayButton
+var points := $HBoxContainer/Points
@onready
-var pause_button := $HBoxContainer/PauseButton
+var add := $HBoxContainer/AddPoint
@onready
-var stop_button := $HBoxContainer/StopButton
+var minus := $HBoxContainer/RemovePoint
@onready
-var audio := $AudioStreamPlayer
+var character := $HBoxContainer/Character
-@onready
-var progress := $HBoxContainer/HSlider
+signal change_character_clicked
-@onready
-var label := $HBoxContainer/Label
-
-@onready
-var path = '/Users/sebastian/ResilioSync/Sorterat_test/Metal Gear Solid 4 - Guns of the Patriots/2-16 Metal Gear Saga.mp3'
-
-var songs := []
-
-var is_changing: bool = false
-var playback_position: float
-var stream: AudioStream
-
-func set_songs(new_songs) -> void:
- songs = new_songs
-
-func make_request(address, func_name) -> void:
- var http_request = HTTPRequest.new()
- add_child(http_request)
- http_request.request_completed.connect(func_name)
-
- # Perform a GET request. The URL below returns JSON as of writing.
- var error = http_request.request(address)
- if error != OK:
- push_error("An error occurred in the HTTP request.")
# Called when the node enters the scene tree for the first time.
-func _ready() -> void:
- play_button.pressed.connect(fetch_first_song)
- pause_button.pressed.connect(pause)
- stop_button.pressed.connect(stop)
- progress.drag_started.connect(_on_drag_started)
- progress.drag_ended.connect(_on_drag_ended)
+func _ready():
+ print("_ready")
+ add.pressed.connect(add_point)
+ minus.pressed.connect(minus_point)
+ character.pressed.connect(change_character)
-func format_time(time: float) -> String:
- var mins: String = "%02d" % floor(time / 60)
- var sec: String = "%02d" % round(fmod(time, 60))
- return mins + ":" + sec
+func add_point():
+ var value := int(points.text)
+ points.text = str(value + 1)
-func format_text(part: float, total: float) -> String:
- return format_time(part) + " / " + format_time(total)
-
-func _process(_delta):
- if audio.has_stream_playback() && !is_changing && !audio.stream_paused:
- progress.value = audio.get_playback_position()
- label.text = format_text(progress.value, stream.get_length())
-
-signal fetched
-
-func fetch_first_song() -> void:
- var http_request = HTTPRequest.new()
- add_child(http_request)
- #http.set_download_file("https://music.sanplex.tech/music/first")
- http_request.request_completed.connect(first_song_fetched)
+func minus_point():
+ var value := int(points.text)
+ points.text = str(value - 1)
- # Perform a GET request. The URL below returns JSON as of writing.
- var error = http_request.request("https://music.sanplex.tech/music/rand")
- if error != OK:
- push_error("An error occurred in the HTTP request.")
+func change_character():
+ print("change_character")
+ change_character_clicked.emit()
-func first_song_fetched(result, response_code, headers, body) -> void:
- if result != HTTPRequest.RESULT_SUCCESS:
- push_error("Image couldn't be downloaded. Try a different image.")
- var sound = AudioStreamMP3.new()
- sound.data = body
- make_request("https://music.sanplex.tech/music/addQue", add_que)
- #fetched.emit()
- play(sound)
+# Called every frame. 'delta' is the elapsed time since the previous frame.
+func _process(delta):
+ pass
+
+func _on_control_character_selected_clicked(file_name: String):
+ print("Back in player list with: " + file_name)
-func add_que(result, response_code, headers, body) -> void:
- print("response_code", response_code)
- fetched.emit()
-
-func play(song) -> void:
- if audio.stream_paused:
- audio.stream_paused = false
- audio.seek(playback_position)
- print("continue")
- elif song:
- print("play given song")
- audio.stream = song
- audio.play()
- stream = audio.stream
- else:
- if songs:
- #print(songs)
- path = songs[0]
- print(path)
- print(FileAccess.file_exists(path))
- audio.stream = load_mp3(path)
- print("play")
- audio.play()
- stream = audio.stream
- progress.max_value = round(stream.get_length())
- progress.tick_count = round(stream.get_length() / 60)
-
-func pause() -> void:
- audio.stream_paused = true
- playback_position = audio.get_playback_position()
-
-func stop() -> void:
- audio.stop()
- audio.stream_paused = false
- progress.value = 0
-
-func _on_drag_started() -> void:
- is_changing = true
-
-func _on_drag_ended(_changed) -> void:
- audio.seek(progress.value)
- playback_position = progress.value
- is_changing = false
-
-func load_mp3(_path) -> AudioStream:
- var file = FileAccess.open(_path, FileAccess.READ)
- var sound = AudioStreamMP3.new()
- sound.data = file.get_buffer(file.get_length())
- return sound
+ var texture = load("res://characters/" + file_name)
+ character.custom_minimum_size = Vector2(80, 40)
+ character.ignore_texture_size = true
+ character.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT
+ character.texture_normal = texture
diff --git a/Player.tscn b/Player.tscn
index db1b336..335f702 100644
--- a/Player.tscn
+++ b/Player.tscn
@@ -1,48 +1,47 @@
-[gd_scene load_steps=3 format=3 uid="uid://cvixk5bkj7lgb"]
+[gd_scene load_steps=4 format=3 uid="uid://cslogy2csnd7a"]
[ext_resource type="Script" path="res://Player.gd" id="1_if4kc"]
-[ext_resource type="AudioStream" uid="uid://n2g8jddr85h2" path="res://01. Opening.mp3" id="2_sv4nm"]
+[ext_resource type="Texture2D" uid="uid://bah8j3gu07305" path="res://characters/Kiryu.png" id="1_y7dih"]
+[ext_resource type="Texture2D" uid="uid://t1tnj6nqpi4a" path="res://person_remove-black-36dp.svg" id="2_xw2ck"]
-[node name="Player" type="PanelContainer"]
-anchors_preset = 8
-anchor_left = 0.5
-anchor_top = 0.5
-anchor_right = 0.5
-anchor_bottom = 0.5
-offset_left = -121.0
-offset_top = -15.5
-offset_right = 121.0
-offset_bottom = 15.5
+[node name="Player" type="Control"]
+custom_minimum_size = Vector2(2.08165e-12, 40)
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
-size_flags_vertical = 4
script = ExtResource("1_if4kc")
-[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."]
-stream = ExtResource("2_sv4nm")
-
[node name="HBoxContainer" type="HBoxContainer" parent="."]
-layout_mode = 2
-size_flags_vertical = 4
+layout_mode = 0
+offset_right = 40.0
+offset_bottom = 40.0
-[node name="PlayButton" type="Button" parent="HBoxContainer"]
+[node name="Name" type="Label" parent="HBoxContainer"]
layout_mode = 2
-text = "Play"
+text = "Sansan: "
-[node name="PauseButton" type="Button" parent="HBoxContainer"]
+[node name="Points" type="Label" parent="HBoxContainer"]
layout_mode = 2
-text = "Pause"
+text = "0"
-[node name="StopButton" type="Button" parent="HBoxContainer"]
+[node name="Character" type="TextureButton" parent="HBoxContainer"]
+custom_minimum_size = Vector2(80, 40)
layout_mode = 2
-text = "Stop"
+texture_normal = ExtResource("1_y7dih")
+ignore_texture_size = true
+stretch_mode = 5
-[node name="HSlider" type="HSlider" parent="HBoxContainer"]
+[node name="AddPoint" type="Button" parent="HBoxContainer"]
layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 4
-scrollable = false
+text = "+1"
-[node name="Label" type="Label" parent="HBoxContainer"]
+[node name="RemovePoint" type="Button" parent="HBoxContainer"]
layout_mode = 2
-text = "1:00 / 3:00"
+text = "-1"
+
+[node name="RemovePlayer" type="TextureButton" parent="HBoxContainer"]
+layout_mode = 2
+texture_normal = ExtResource("2_xw2ck")
diff --git a/addons/Todo_Manager/ColourPicker.gd b/addons/Todo_Manager/ColourPicker.gd
deleted file mode 100644
index 39a3f9a..0000000
--- a/addons/Todo_Manager/ColourPicker.gd
+++ /dev/null
@@ -1,17 +0,0 @@
-@tool
-extends HBoxContainer
-
-var colour : Color
-var title : String:
- set = set_title
-var index : int
-
-@onready var colour_picker := $TODOColourPickerButton
-
-func _ready() -> void:
- $TODOColourPickerButton.color = colour
- $Label.text = title
-
-func set_title(value: String) -> void:
- title = value
- $Label.text = value
diff --git a/addons/Todo_Manager/Current.gd b/addons/Todo_Manager/Current.gd
deleted file mode 100644
index d3961c9..0000000
--- a/addons/Todo_Manager/Current.gd
+++ /dev/null
@@ -1,44 +0,0 @@
-@tool
-extends Panel
-
-signal tree_built # used for debugging
-
-const Todo := preload("res://addons/Todo_Manager/todo_class.gd")
-const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd")
-
-var _sort_alphabetical := true
-
-@onready var tree := $Tree as Tree
-
-func build_tree(todo_item : TodoItem, patterns : Array, cased_patterns : Array[String]) -> void:
- tree.clear()
- var root := tree.create_item()
- root.set_text(0, "Scripts")
- var script := tree.create_item(root)
- script.set_text(0, todo_item.get_short_path() + " -------")
- script.set_metadata(0, todo_item)
- for todo in todo_item.todos:
- var item := tree.create_item(script)
- var content_header : String = todo.content
- if "\n" in todo.content:
- content_header = content_header.split("\n")[0] + "..."
- item.set_text(0, "(%0) - %1".format([todo.line_number, content_header], "%_"))
- item.set_tooltip_text(0, todo.content)
- item.set_metadata(0, todo)
- for i in range(0, len(cased_patterns)):
- if cased_patterns[i] == todo.pattern:
- item.set_custom_color(0, patterns[i][1])
- emit_signal("tree_built")
-
-
-func sort_alphabetical(a, b) -> bool:
- if a.script_path > b.script_path:
- return true
- else:
- return false
-
-func sort_backwards(a, b) -> bool:
- if a.script_path < b.script_path:
- return true
- else:
- return false
diff --git a/addons/Todo_Manager/Dock.gd b/addons/Todo_Manager/Dock.gd
deleted file mode 100644
index e767258..0000000
--- a/addons/Todo_Manager/Dock.gd
+++ /dev/null
@@ -1,297 +0,0 @@
-@tool
-extends Control
-
-#signal tree_built # used for debugging
-enum { CASE_INSENSITIVE, CASE_SENSITIVE }
-
-const Project := preload("res://addons/Todo_Manager/Project.gd")
-const Current := preload("res://addons/Todo_Manager/Current.gd")
-
-const Todo := preload("res://addons/Todo_Manager/todo_class.gd")
-const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd")
-const ColourPicker := preload("res://addons/Todo_Manager/UI/ColourPicker.tscn")
-const Pattern := preload("res://addons/Todo_Manager/UI/Pattern.tscn")
-const DEFAULT_PATTERNS := [["\\bTODO\\b", Color("96f1ad"), CASE_INSENSITIVE], ["\\bHACK\\b", Color("d5bc70"), CASE_INSENSITIVE], ["\\bFIXME\\b", Color("d57070"), CASE_INSENSITIVE]]
-const DEFAULT_SCRIPT_COLOUR := Color("ccced3")
-const DEFAULT_SCRIPT_NAME := false
-const DEFAULT_SORT := true
-
-var plugin : EditorPlugin
-
-var todo_items : Array
-
-var script_colour := Color("ccced3")
-var ignore_paths : Array[String] = []
-var full_path := false
-var auto_refresh := true
-var builtin_enabled := false
-var _sort_alphabetical := true
-
-var patterns := [["\\bTODO\\b", Color("96f1ad"), CASE_INSENSITIVE], ["\\bHACK\\b", Color("d5bc70"), CASE_INSENSITIVE], ["\\bFIXME\\b", Color("d57070"), CASE_INSENSITIVE]]
-
-
-@onready var tabs := $VBoxContainer/TabContainer as TabContainer
-@onready var project := $VBoxContainer/TabContainer/Project as Project
-@onready var current := $VBoxContainer/TabContainer/Current as Current
-@onready var project_tree := $VBoxContainer/TabContainer/Project/Tree as Tree
-@onready var current_tree := $VBoxContainer/TabContainer/Current/Tree as Tree
-@onready var settings_panel := $VBoxContainer/TabContainer/Settings as Panel
-@onready var colours_container := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3/Colours as VBoxContainer
-@onready var pattern_container := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns as VBoxContainer
-@onready var ignore_textbox := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths/TextEdit as LineEdit
-@onready var auto_refresh_button := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/RefreshCheckButton as CheckButton
-
-func _ready() -> void:
- load_config()
- populate_settings()
-
-
-func build_tree() -> void:
- if tabs:
- match tabs.current_tab:
- 0:
- project.build_tree(todo_items, ignore_paths, patterns, plugin.cased_patterns, _sort_alphabetical, full_path)
- create_config_file()
- 1:
- current.build_tree(get_active_script(), patterns, plugin.cased_patterns)
- create_config_file()
- 2:
- pass
- _:
- pass
-
-
-func get_active_script() -> TodoItem:
- var current_script : Script = plugin.get_editor_interface().get_script_editor().get_current_script()
- if current_script:
- var script_path = current_script.resource_path
- for todo_item in todo_items:
- if todo_item.script_path == script_path:
- return todo_item
-
- # nothing found
- var todo_item := TodoItem.new(script_path, [])
- return todo_item
- else:
- # not a script
- var todo_item := TodoItem.new("res://Documentation", [])
- return todo_item
-
-
-func go_to_script(script_path: String, line_number : int = 0) -> void:
- if plugin.get_editor_interface().get_editor_settings().get_setting("text_editor/external/use_external_editor"):
- var exec_path = plugin.get_editor_interface().get_editor_settings().get_setting("text_editor/external/exec_path")
- var args := get_exec_flags(exec_path, script_path, line_number)
- OS.execute(exec_path, args)
- else:
- var script := load(script_path)
- plugin.get_editor_interface().edit_resource(script)
- plugin.get_editor_interface().get_script_editor().goto_line(line_number - 1)
-
-func get_exec_flags(editor_path : String, script_path : String, line_number : int) -> PackedStringArray:
- var args : PackedStringArray
- var script_global_path = ProjectSettings.globalize_path(script_path)
-
- if editor_path.ends_with("code.cmd") or editor_path.ends_with("code"): ## VS Code
- args.append(ProjectSettings.globalize_path("res://"))
- args.append("--goto")
- args.append(script_global_path + ":" + str(line_number))
-
- elif editor_path.ends_with("rider64.exe") or editor_path.ends_with("rider"): ## Rider
- args.append("--line")
- args.append(str(line_number))
- args.append(script_global_path)
-
- else: ## Atom / Sublime
- args.append(script_global_path + ":" + str(line_number))
-
- return args
-
-func sort_alphabetical(a, b) -> bool:
- if a.script_path > b.script_path:
- return true
- else:
- return false
-
-func sort_backwards(a, b) -> bool:
- if a.script_path < b.script_path:
- return true
- else:
- return false
-
-
-func populate_settings() -> void:
- for i in patterns.size():
- ## Create Colour Pickers
- var colour_picker: Variant = ColourPicker.instantiate()
- colour_picker.colour = patterns[i][1]
- colour_picker.title = patterns[i][0]
- colour_picker.index = i
- colours_container.add_child(colour_picker)
- colour_picker.colour_picker.color_changed.connect(change_colour.bind(i))
-
- ## Create Patterns
- var pattern_edit: Variant = Pattern.instantiate()
- pattern_edit.text = patterns[i][0]
- pattern_edit.index = i
- pattern_container.add_child(pattern_edit)
- pattern_edit.line_edit.text_changed.connect(change_pattern.bind(i,
- colour_picker))
- pattern_edit.remove_button.pressed.connect(remove_pattern.bind(i,
- pattern_edit, colour_picker))
- pattern_edit.case_checkbox.toggled.connect(case_sensitive_pattern.bind(i))
- pattern_edit.case_checkbox.button_pressed = patterns[i][2]
-
- var pattern_button := $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns/AddPatternButton
- $VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns.move_child(pattern_button, 0)
-
- # path filtering
- var ignore_paths_field := ignore_textbox
- if not ignore_paths_field.is_connected("text_changed", _on_ignore_paths_changed):
- ignore_paths_field.connect("text_changed", _on_ignore_paths_changed)
- var ignore_paths_text := ""
- for path in ignore_paths:
- ignore_paths_text += path + ", "
- ignore_paths_text = ignore_paths_text.trim_suffix(", ")
- ignore_paths_field.text = ignore_paths_text
-
- auto_refresh_button.button_pressed = auto_refresh
-
-
-func rebuild_settings() -> void:
- for node in colours_container.get_children():
- node.queue_free()
- for node in pattern_container.get_children():
- if node is Button:
- continue
- node.queue_free()
- populate_settings()
-
-
-#### CONFIG FILE ####
-func create_config_file() -> void:
- var config = ConfigFile.new()
- config.set_value("scripts", "full_path", full_path)
- config.set_value("scripts", "sort_alphabetical", _sort_alphabetical)
- config.set_value("scripts", "script_colour", script_colour)
- config.set_value("scripts", "ignore_paths", ignore_paths)
-
- config.set_value("patterns", "patterns", patterns)
-
- config.set_value("config", "auto_refresh", auto_refresh)
- config.set_value("config", "builtin_enabled", builtin_enabled)
-
- var err = config.save("res://addons/Todo_Manager/todo.cfg")
-
-
-func load_config() -> void:
- var config := ConfigFile.new()
- if config.load("res://addons/Todo_Manager/todo.cfg") == OK:
- full_path = config.get_value("scripts", "full_path", DEFAULT_SCRIPT_NAME)
- _sort_alphabetical = config.get_value("scripts", "sort_alphabetical", DEFAULT_SORT)
- script_colour = config.get_value("scripts", "script_colour", DEFAULT_SCRIPT_COLOUR)
- ignore_paths = config.get_value("scripts", "ignore_paths", [] as Array[String])
- patterns = config.get_value("patterns", "patterns", DEFAULT_PATTERNS)
- auto_refresh = config.get_value("config", "auto_refresh", true)
- builtin_enabled = config.get_value("config", "builtin_enabled", false)
- else:
- create_config_file()
-
-
-#### Events ####
-func _on_SettingsButton_toggled(button_pressed: bool) -> void:
- settings_panel.visible = button_pressed
- if button_pressed == false:
- create_config_file()
-# plugin.find_tokens_from_path(plugin.script_cache)
- if auto_refresh:
- plugin.rescan_files(true)
-
-func _on_Tree_item_activated() -> void:
- var item : TreeItem
- match tabs.current_tab:
- 0:
- item = project_tree.get_selected()
- 1:
- item = current_tree.get_selected()
- if item.get_metadata(0) is Todo:
- var todo : Todo = item.get_metadata(0)
- call_deferred("go_to_script", todo.script_path, todo.line_number)
- else:
- var todo_item = item.get_metadata(0)
- call_deferred("go_to_script", todo_item.script_path)
-
-func _on_FullPathCheckBox_toggled(button_pressed: bool) -> void:
- full_path = button_pressed
-
-func _on_ScriptColourPickerButton_color_changed(color: Color) -> void:
- script_colour = color
-
-func _on_RescanButton_pressed() -> void:
- plugin.rescan_files(true)
-
-func change_colour(colour: Color, index: int) -> void:
- patterns[index][1] = colour
-
-func change_pattern(value: String, index: int, this_colour: Node) -> void:
- patterns[index][0] = value
- this_colour.title = value
- plugin.rescan_files(true)
-
-func remove_pattern(index: int, this: Node, this_colour: Node) -> void:
- patterns.remove_at(index)
- this.queue_free()
- this_colour.queue_free()
- plugin.rescan_files(true)
-
-func case_sensitive_pattern(active: bool, index: int) -> void:
- if active:
- patterns[index][2] = CASE_SENSITIVE
- else:
- patterns[index][2] = CASE_INSENSITIVE
- plugin.rescan_files(true)
-
-func _on_DefaultButton_pressed() -> void:
- patterns = DEFAULT_PATTERNS.duplicate(true)
- _sort_alphabetical = DEFAULT_SORT
- script_colour = DEFAULT_SCRIPT_COLOUR
- full_path = DEFAULT_SCRIPT_NAME
- rebuild_settings()
- plugin.rescan_files(true)
-
-func _on_AlphSortCheckBox_toggled(button_pressed: bool) -> void:
- _sort_alphabetical = button_pressed
- plugin.rescan_files(true)
-
-func _on_AddPatternButton_pressed() -> void:
- patterns.append(["\\bplaceholder\\b", Color.WHITE, CASE_INSENSITIVE])
- rebuild_settings()
-
-func _on_RefreshCheckButton_toggled(button_pressed: bool) -> void:
- auto_refresh = button_pressed
-
-func _on_Timer_timeout() -> void:
- plugin.refresh_lock = false
-
-func _on_ignore_paths_changed(new_text: String) -> void:
- var text = ignore_textbox.text
- var split: Array = text.split(',')
- ignore_paths.clear()
- for elem in split:
- if elem == " " || elem == "":
- continue
- ignore_paths.push_front(elem.lstrip(' ').rstrip(' '))
- # validate so no empty string slips through (all paths ignored)
- var i := 0
- for path in ignore_paths:
- if (path == "" || path == " "):
- ignore_paths.remove_at(i)
- i += 1
- plugin.rescan_files(true)
-
-func _on_TabContainer_tab_changed(tab: int) -> void:
- build_tree()
-
-func _on_BuiltInCheckButton_toggled(button_pressed: bool) -> void:
- builtin_enabled = button_pressed
- plugin.rescan_files(true)
diff --git a/addons/Todo_Manager/Pattern.gd b/addons/Todo_Manager/Pattern.gd
deleted file mode 100644
index 4e610af..0000000
--- a/addons/Todo_Manager/Pattern.gd
+++ /dev/null
@@ -1,21 +0,0 @@
-@tool
-extends HBoxContainer
-
-
-var text : String : set = set_text
-var disabled : bool
-var index : int
-
-@onready var line_edit := $LineEdit as LineEdit
-@onready var remove_button := $RemoveButton as Button
-@onready var case_checkbox := %CaseSensativeCheckbox as CheckBox
-
-func _ready() -> void:
- line_edit.text = text
- remove_button.disabled = disabled
-
-
-func set_text(value: String) -> void:
- text = value
- if line_edit:
- line_edit.text = value
diff --git a/addons/Todo_Manager/Project.gd b/addons/Todo_Manager/Project.gd
deleted file mode 100644
index 0687268..0000000
--- a/addons/Todo_Manager/Project.gd
+++ /dev/null
@@ -1,74 +0,0 @@
-@tool
-extends Panel
-
-signal tree_built # used for debugging
-
-const Todo := preload("res://addons/Todo_Manager/todo_class.gd")
-
-var _sort_alphabetical := true
-var _full_path := false
-
-@onready var tree := $Tree as Tree
-
-func build_tree(todo_items : Array, ignore_paths : Array, patterns : Array, cased_patterns: Array[String], sort_alphabetical : bool, full_path : bool) -> void:
- _full_path = full_path
- tree.clear()
- if sort_alphabetical:
- todo_items.sort_custom(Callable(self, "sort_alphabetical"))
- else:
- todo_items.sort_custom(Callable(self, "sort_backwards"))
- var root := tree.create_item()
- root.set_text(0, "Scripts")
- for todo_item in todo_items:
- var ignore := false
- for ignore_path in ignore_paths:
- var script_path : String = todo_item.script_path
- if script_path.begins_with(ignore_path) or script_path.begins_with("res://" + ignore_path) or script_path.begins_with("res:///" + ignore_path):
- ignore = true
- break
- if ignore:
- continue
- var script := tree.create_item(root)
- if full_path:
- script.set_text(0, todo_item.script_path + " -------")
- else:
- script.set_text(0, todo_item.get_short_path() + " -------")
- script.set_metadata(0, todo_item)
- for todo in todo_item.todos:
- var item := tree.create_item(script)
- var content_header : String = todo.content
- if "\n" in todo.content:
- content_header = content_header.split("\n")[0] + "..."
- item.set_text(0, "(%0) - %1".format([todo.line_number, content_header], "%_"))
- item.set_tooltip_text(0, todo.content)
- item.set_metadata(0, todo)
- print(todo.title)
- for i in range(0, len(cased_patterns)):
- if cased_patterns[i] == todo.pattern:
- item.set_custom_color(0, patterns[i][1])
- emit_signal("tree_built")
-
-
-func sort_alphabetical(a, b) -> bool:
- if _full_path:
- if a.script_path < b.script_path:
- return true
- else:
- return false
- else:
- if a.get_short_path() < b.get_short_path():
- return true
- else:
- return false
-
-func sort_backwards(a, b) -> bool:
- if _full_path:
- if a.script_path > b.script_path:
- return true
- else:
- return false
- else:
- if a.get_short_path() > b.get_short_path():
- return true
- else:
- return false
diff --git a/addons/Todo_Manager/UI/ColourPicker.tscn b/addons/Todo_Manager/UI/ColourPicker.tscn
deleted file mode 100644
index 650899f..0000000
--- a/addons/Todo_Manager/UI/ColourPicker.tscn
+++ /dev/null
@@ -1,21 +0,0 @@
-[gd_scene load_steps=2 format=3 uid="uid://bie1xn8v1kd66"]
-
-[ext_resource type="Script" path="res://addons/Todo_Manager/ColourPicker.gd" id="1"]
-
-[node name="TODOColour" type="HBoxContainer"]
-offset_right = 105.0
-offset_bottom = 31.0
-script = ExtResource("1")
-metadata/_edit_use_custom_anchors = false
-
-[node name="Label" type="Label" parent="."]
-offset_top = 4.0
-offset_right = 1.0
-offset_bottom = 27.0
-
-[node name="TODOColourPickerButton" type="ColorPickerButton" parent="."]
-custom_minimum_size = Vector2(40, 0)
-offset_left = 65.0
-offset_right = 105.0
-offset_bottom = 31.0
-size_flags_horizontal = 10
diff --git a/addons/Todo_Manager/UI/Dock.tscn b/addons/Todo_Manager/UI/Dock.tscn
deleted file mode 100644
index f51ca2d..0000000
--- a/addons/Todo_Manager/UI/Dock.tscn
+++ /dev/null
@@ -1,316 +0,0 @@
-[gd_scene load_steps=6 format=3 uid="uid://b6k0dtftankcx"]
-
-[ext_resource type="Script" path="res://addons/Todo_Manager/Dock.gd" id="1"]
-[ext_resource type="Script" path="res://addons/Todo_Manager/Project.gd" id="2"]
-[ext_resource type="Script" path="res://addons/Todo_Manager/Current.gd" id="3"]
-
-[sub_resource type="ButtonGroup" id="ButtonGroup_kqxcu"]
-
-[sub_resource type="ButtonGroup" id="ButtonGroup_kltg3"]
-
-[node name="Dock" type="Control"]
-custom_minimum_size = Vector2(0, 200)
-layout_mode = 3
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-size_flags_vertical = 3
-script = ExtResource("1")
-
-[node name="VBoxContainer" type="VBoxContainer" parent="."]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-offset_top = 4.0
-grow_horizontal = 2
-grow_vertical = 2
-metadata/_edit_layout_mode = 1
-
-[node name="Header" type="HBoxContainer" parent="VBoxContainer"]
-visible = false
-layout_mode = 2
-
-[node name="HeaderLeft" type="HBoxContainer" parent="VBoxContainer/Header"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="Title" type="Label" parent="VBoxContainer/Header/HeaderLeft"]
-layout_mode = 2
-text = "Todo Dock:"
-
-[node name="HeaderRight" type="HBoxContainer" parent="VBoxContainer/Header"]
-layout_mode = 2
-size_flags_horizontal = 3
-alignment = 2
-
-[node name="SettingsButton" type="Button" parent="VBoxContainer/Header/HeaderRight"]
-visible = false
-layout_mode = 2
-toggle_mode = true
-text = "Settings"
-
-[node name="TabContainer" type="TabContainer" parent="VBoxContainer"]
-layout_mode = 2
-size_flags_vertical = 3
-
-[node name="Project" type="Panel" parent="VBoxContainer/TabContainer"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-script = ExtResource("2")
-
-[node name="Tree" type="Tree" parent="VBoxContainer/TabContainer/Project"]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-hide_root = true
-
-[node name="Current" type="Panel" parent="VBoxContainer/TabContainer"]
-visible = false
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-script = ExtResource("3")
-
-[node name="Tree" type="Tree" parent="VBoxContainer/TabContainer/Current"]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-hide_folding = true
-hide_root = true
-
-[node name="Settings" type="Panel" parent="VBoxContainer/TabContainer"]
-visible = false
-layout_mode = 2
-
-[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer/TabContainer/Settings"]
-layout_mode = 1
-anchors_preset = 15
-anchor_right = 1.0
-anchor_bottom = 1.0
-grow_horizontal = 2
-grow_vertical = 2
-
-[node name="MarginContainer" type="MarginContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer"]
-layout_mode = 2
-size_flags_horizontal = 3
-size_flags_vertical = 3
-
-[node name="Scripts" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Scripts"]
-layout_mode = 2
-text = "Scripts:"
-
-[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Scripts"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-size_flags_horizontal = 5
-
-[node name="HBoxContainer2" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2"]
-layout_mode = 2
-
-[node name="Scripts" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2"]
-layout_mode = 2
-
-[node name="ScriptName" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"]
-layout_mode = 2
-text = "Script Name:"
-
-[node name="FullPathCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"]
-layout_mode = 2
-button_group = SubResource("ButtonGroup_kqxcu")
-text = "Full path"
-
-[node name="ShortNameCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName"]
-layout_mode = 2
-button_pressed = true
-button_group = SubResource("ButtonGroup_kqxcu")
-text = "Short name"
-
-[node name="ScriptSort" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"]
-layout_mode = 2
-text = "Sort Order:"
-
-[node name="AlphSortCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"]
-layout_mode = 2
-button_pressed = true
-button_group = SubResource("ButtonGroup_kltg3")
-text = "Alphabetical"
-
-[node name="RAlphSortCheckBox" type="CheckBox" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort"]
-layout_mode = 2
-button_group = SubResource("ButtonGroup_kltg3")
-text = "Reverse Alphabetical"
-
-[node name="ScriptColour" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour"]
-layout_mode = 2
-text = "Script Colour:"
-
-[node name="ScriptColourPickerButton" type="ColorPickerButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour"]
-custom_minimum_size = Vector2(40, 0)
-layout_mode = 2
-color = Color(0.8, 0.807843, 0.827451, 1)
-
-[node name="IgnorePaths" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"]
-layout_mode = 2
-text = "Ignore Paths:"
-
-[node name="TextEdit" type="LineEdit" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"]
-custom_minimum_size = Vector2(100, 0)
-layout_mode = 2
-expand_to_text_length = true
-
-[node name="Label3" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/IgnorePaths"]
-layout_mode = 2
-text = "(Separated by commas)"
-
-[node name="TODOColours" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/TODOColours"]
-layout_mode = 2
-text = "TODO Colours:"
-
-[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/TODOColours"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="HBoxContainer3" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"]
-layout_mode = 2
-
-[node name="Colours" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer3"]
-layout_mode = 2
-
-[node name="Patterns" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Patterns"]
-layout_mode = 2
-text = "Patterns:"
-
-[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Patterns"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="HBoxContainer4" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"]
-layout_mode = 2
-
-[node name="Patterns" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="AddPatternButton" type="Button" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns"]
-layout_mode = 2
-size_flags_horizontal = 0
-text = "Add"
-
-[node name="Config" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Config"]
-layout_mode = 2
-text = "Config:"
-
-[node name="HSeparator" type="HSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/Config"]
-layout_mode = 2
-size_flags_horizontal = 3
-
-[node name="HBoxContainer5" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer"]
-layout_mode = 2
-
-[node name="VSeparator" type="VSeparator" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5"]
-layout_mode = 2
-
-[node name="Patterns" type="VBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5"]
-layout_mode = 2
-
-[node name="RefreshCheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"]
-layout_mode = 2
-size_flags_horizontal = 0
-button_pressed = true
-text = "Auto Refresh"
-
-[node name="HBoxContainer" type="HBoxContainer" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"]
-layout_mode = 2
-
-[node name="BuiltInCheckButton" type="CheckButton" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer"]
-layout_mode = 2
-text = "Scan Built-in Scripts"
-
-[node name="Label" type="Label" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer"]
-layout_mode = 2
-text = "Some functionality will not work for built-in scripts"
-
-[node name="DefaultButton" type="Button" parent="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns"]
-layout_mode = 2
-size_flags_horizontal = 0
-text = "Reset to default"
-
-[node name="Timer" type="Timer" parent="."]
-one_shot = true
-
-[node name="RescanButton" type="Button" parent="."]
-layout_mode = 1
-anchors_preset = 1
-anchor_left = 1.0
-anchor_right = 1.0
-offset_left = -102.0
-offset_top = 3.0
-offset_bottom = 34.0
-grow_horizontal = 0
-text = "Rescan Files"
-flat = true
-
-[connection signal="toggled" from="VBoxContainer/Header/HeaderRight/SettingsButton" to="." method="_on_SettingsButton_toggled"]
-[connection signal="tab_changed" from="VBoxContainer/TabContainer" to="." method="_on_TabContainer_tab_changed"]
-[connection signal="item_activated" from="VBoxContainer/TabContainer/Project/Tree" to="." method="_on_Tree_item_activated"]
-[connection signal="item_activated" from="VBoxContainer/TabContainer/Current/Tree" to="." method="_on_Tree_item_activated"]
-[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptName/FullPathCheckBox" to="." method="_on_FullPathCheckBox_toggled"]
-[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptSort/AlphSortCheckBox" to="." method="_on_AlphSortCheckBox_toggled"]
-[connection signal="color_changed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/VBoxContainer/HBoxContainer2/Scripts/ScriptColour/ScriptColourPickerButton" to="." method="_on_ScriptColourPickerButton_color_changed"]
-[connection signal="pressed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Patterns/AddPatternButton" to="." method="_on_AddPatternButton_pressed"]
-[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/RefreshCheckButton" to="." method="_on_RefreshCheckButton_toggled"]
-[connection signal="toggled" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/HBoxContainer/BuiltInCheckButton" to="." method="_on_BuiltInCheckButton_toggled"]
-[connection signal="pressed" from="VBoxContainer/TabContainer/Settings/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/Patterns/DefaultButton" to="." method="_on_DefaultButton_pressed"]
-[connection signal="timeout" from="Timer" to="." method="_on_Timer_timeout"]
-[connection signal="pressed" from="RescanButton" to="." method="_on_RescanButton_pressed"]
diff --git a/addons/Todo_Manager/UI/Pattern.tscn b/addons/Todo_Manager/UI/Pattern.tscn
deleted file mode 100644
index fb45615..0000000
--- a/addons/Todo_Manager/UI/Pattern.tscn
+++ /dev/null
@@ -1,26 +0,0 @@
-[gd_scene load_steps=2 format=3 uid="uid://bx11sel2q5wli"]
-
-[ext_resource type="Script" path="res://addons/Todo_Manager/Pattern.gd" id="1"]
-
-[node name="Pattern" type="HBoxContainer"]
-script = ExtResource("1")
-
-[node name="LineEdit" type="LineEdit" parent="."]
-layout_mode = 2
-size_flags_horizontal = 0
-expand_to_text_length = true
-
-[node name="RemoveButton" type="Button" parent="."]
-layout_mode = 2
-text = "-"
-
-[node name="MarginContainer" type="MarginContainer" parent="."]
-custom_minimum_size = Vector2(20, 0)
-layout_mode = 2
-size_flags_horizontal = 0
-
-[node name="CaseSensativeCheckbox" type="CheckBox" parent="."]
-unique_name_in_owner = true
-layout_mode = 2
-size_flags_horizontal = 0
-text = "Case Sensitive"
diff --git a/addons/Todo_Manager/doc/example.gd b/addons/Todo_Manager/doc/example.gd
deleted file mode 100644
index 859bbba..0000000
--- a/addons/Todo_Manager/doc/example.gd
+++ /dev/null
@@ -1,7 +0,0 @@
-extends Node
-
-# TODO: this is a TODO
-# HACK: this is a HACK
-# FIXME: this is a FIXME
-# TODO this works too
-#Hack any format will do
diff --git a/addons/Todo_Manager/doc/images/Instruct1.png b/addons/Todo_Manager/doc/images/Instruct1.png
deleted file mode 100644
index 99a8db0..0000000
Binary files a/addons/Todo_Manager/doc/images/Instruct1.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/Instruct1.png.import b/addons/Todo_Manager/doc/images/Instruct1.png.import
deleted file mode 100644
index 122b6fa..0000000
--- a/addons/Todo_Manager/doc/images/Instruct1.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://cew0b35dqpm86"
-path="res://.godot/imported/Instruct1.png-698c6faa3ef3ac4960807faa3e028bd6.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://addons/Todo_Manager/doc/images/Instruct1.png"
-dest_files=["res://.godot/imported/Instruct1.png-698c6faa3ef3ac4960807faa3e028bd6.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
diff --git a/addons/Todo_Manager/doc/images/Instruct2.png b/addons/Todo_Manager/doc/images/Instruct2.png
deleted file mode 100644
index 83798f9..0000000
Binary files a/addons/Todo_Manager/doc/images/Instruct2.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/Instruct3.png b/addons/Todo_Manager/doc/images/Instruct3.png
deleted file mode 100644
index 283c604..0000000
Binary files a/addons/Todo_Manager/doc/images/Instruct3.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/Instruct4.png b/addons/Todo_Manager/doc/images/Instruct4.png
deleted file mode 100644
index 66ef1c9..0000000
Binary files a/addons/Todo_Manager/doc/images/Instruct4.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/Instruct5.png b/addons/Todo_Manager/doc/images/Instruct5.png
deleted file mode 100644
index d418faf..0000000
Binary files a/addons/Todo_Manager/doc/images/Instruct5.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png b/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png
deleted file mode 100644
index 6d19fee..0000000
Binary files a/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png.import b/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png.import
deleted file mode 100644
index 42add3b..0000000
--- a/addons/Todo_Manager/doc/images/TODO_Manager_Logo.png.import
+++ /dev/null
@@ -1,34 +0,0 @@
-[remap]
-
-importer="texture"
-type="CompressedTexture2D"
-uid="uid://bix3qvdo0p21c"
-path="res://.godot/imported/TODO_Manager_Logo.png-e07d7ec75201c66b732ef87ec1bece15.ctex"
-metadata={
-"vram_texture": false
-}
-
-[deps]
-
-source_file="res://addons/Todo_Manager/doc/images/TODO_Manager_Logo.png"
-dest_files=["res://.godot/imported/TODO_Manager_Logo.png-e07d7ec75201c66b732ef87ec1bece15.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
diff --git a/addons/Todo_Manager/doc/images/TodoExternal.gif b/addons/Todo_Manager/doc/images/TodoExternal.gif
deleted file mode 100644
index 25d0850..0000000
Binary files a/addons/Todo_Manager/doc/images/TodoExternal.gif and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/example1.png b/addons/Todo_Manager/doc/images/example1.png
deleted file mode 100644
index 786bd15..0000000
Binary files a/addons/Todo_Manager/doc/images/example1.png and /dev/null differ
diff --git a/addons/Todo_Manager/doc/images/example2.png b/addons/Todo_Manager/doc/images/example2.png
deleted file mode 100644
index 256d754..0000000
Binary files a/addons/Todo_Manager/doc/images/example2.png and /dev/null differ
diff --git a/addons/Todo_Manager/plugin.cfg b/addons/Todo_Manager/plugin.cfg
deleted file mode 100644
index 3fdf882..0000000
--- a/addons/Todo_Manager/plugin.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-[plugin]
-
-name="Todo Manager"
-description="Dock for housing TODO messages."
-author="Peter de Vroom"
-version="2.2.1"
-script="plugin.gd"
diff --git a/addons/Todo_Manager/plugin.gd b/addons/Todo_Manager/plugin.gd
deleted file mode 100644
index 41ccaa3..0000000
--- a/addons/Todo_Manager/plugin.gd
+++ /dev/null
@@ -1,280 +0,0 @@
-@tool
-extends EditorPlugin
-
-const DockScene := preload("res://addons/Todo_Manager/UI/Dock.tscn")
-const Dock := preload("res://addons/Todo_Manager/Dock.gd")
-const Todo := preload("res://addons/Todo_Manager/todo_class.gd")
-const TodoItem := preload("res://addons/Todo_Manager/todoItem_class.gd")
-
-var _dockUI : Dock
-
-class TodoCacheValue:
- var todos: Array
- var last_modified_time: int
-
- func _init(todos: Array, last_modified_time: int):
- self.todos = todos
- self.last_modified_time = last_modified_time
-
-var todo_cache : Dictionary # { key: script_path, value: TodoCacheValue }
-var remove_queue : Array
-var combined_pattern : String
-var cased_patterns : Array[String]
-
-var refresh_lock := false # makes sure _on_filesystem_changed only triggers once
-
-
-func _enter_tree() -> void:
- _dockUI = DockScene.instantiate() as Control
- add_control_to_bottom_panel(_dockUI, "TODO")
- get_editor_interface().get_resource_filesystem().connect("filesystem_changed",
- _on_filesystem_changed)
- get_editor_interface().get_file_system_dock().connect("file_removed", queue_remove)
- get_editor_interface().get_script_editor().connect("editor_script_changed",
- _on_active_script_changed)
- _dockUI.plugin = self
-
- combined_pattern = combine_patterns(_dockUI.patterns)
- find_tokens_from_path(find_scripts())
- _dockUI.build_tree()
-
-
-func _exit_tree() -> void:
- _dockUI.create_config_file()
- remove_control_from_bottom_panel(_dockUI)
- _dockUI.free()
-
-
-func queue_remove(file: String):
- for i in _dockUI.todo_items.size() - 1:
- if _dockUI.todo_items[i].script_path == file:
- _dockUI.todo_items.remove_at(i)
-
-
-func find_tokens_from_path(scripts: Array[String]) -> void:
- for script_path in scripts:
- var file := FileAccess.open(script_path, FileAccess.READ)
- var contents := file.get_as_text()
- find_tokens(contents, script_path)
-
-func find_tokens_from_script(script: Resource) -> void:
- find_tokens(script.source_code, script.resource_path)
-
-
-func find_tokens(text: String, script_path: String) -> void:
- var cached_todos = get_cached_todos(script_path)
- if cached_todos.size() != 0:
-# var i := 0
-# for todo_item in _dockUI.todo_items:
-# if todo_item.script_path == script_path:
-# _dockUI.todo_items.remove_at(i)
-# i += 1
- var todo_item := TodoItem.new(script_path, cached_todos)
- _dockUI.todo_items.append(todo_item)
- else:
- var regex = RegEx.new()
- # if regex.compile("#\\s*\\bTODO\\b.*|#\\s*\\bHACK\\b.*") == OK:
- if regex.compile(combined_pattern) == OK:
- var result : Array[RegExMatch] = regex.search_all(text)
- if result.is_empty():
- for i in _dockUI.todo_items.size():
- if _dockUI.todo_items[i].script_path == script_path:
- _dockUI.todo_items.remove_at(i)
- return # No tokens found
- var match_found : bool
- var i := 0
- for todo_item in _dockUI.todo_items:
- if todo_item.script_path == script_path:
- match_found = true
- var updated_todo_item := update_todo_item(todo_item, result, text, script_path)
- _dockUI.todo_items.remove_at(i)
- _dockUI.todo_items.insert(i, updated_todo_item)
- break
- i += 1
- if !match_found:
- _dockUI.todo_items.append(create_todo_item(result, text, script_path))
-
-
-func create_todo_item(regex_results: Array[RegExMatch], text: String, script_path: String) -> TodoItem:
- var todo_item = TodoItem.new(script_path, [])
- todo_item.script_path = script_path
- var last_line_number := 0
- var lines := text.split("\n")
- for r in regex_results:
- var new_todo : Todo = create_todo(r.get_string(), script_path)
- new_todo.line_number = get_line_number(r.get_string(), text, last_line_number)
- # GD Multiline comment
- var trailing_line := new_todo.line_number
- var should_break = false
- while trailing_line < lines.size() and lines[trailing_line].dedent().begins_with("#"):
- for other_r in regex_results:
- if lines[trailing_line] in other_r.get_string():
- should_break = true
- break
- if should_break:
- break
-
- new_todo.content += "\n" + lines[trailing_line]
- trailing_line += 1
-
- last_line_number = new_todo.line_number
- todo_item.todos.append(new_todo)
- cache_todos(todo_item.todos, script_path)
- return todo_item
-
-
-func update_todo_item(todo_item: TodoItem, regex_results: Array[RegExMatch], text: String, script_path: String) -> TodoItem:
- todo_item.todos.clear()
- var lines := text.split("\n")
- for r in regex_results:
- var new_todo : Todo = create_todo(r.get_string(), script_path)
- new_todo.line_number = get_line_number(r.get_string(), text)
- # GD Multiline comment
- var trailing_line := new_todo.line_number
- var should_break = false
- while trailing_line < lines.size() and lines[trailing_line].dedent().begins_with("#"):
- for other_r in regex_results:
- if lines[trailing_line] in other_r.get_string():
- should_break = true
- break
- if should_break:
- break
-
- new_todo.content += "\n" + lines[trailing_line]
- trailing_line += 1
- todo_item.todos.append(new_todo)
- return todo_item
-
-
-func get_line_number(what: String, from: String, start := 0) -> int:
- what = what.split('\n')[0] # Match first line of multiline C# comments
- var temp_array := from.split('\n')
- var lines := Array(temp_array)
- var line_number# = lines.find(what) + 1
- for i in range(start, lines.size()):
- if what in lines[i]:
- line_number = i + 1 # +1 to account of 0-based array vs 1-based line numbers
- break
- else:
- line_number = 0 # This is an error
- return line_number
-
-
-func _on_filesystem_changed() -> void:
- if !refresh_lock:
- if _dockUI.auto_refresh:
- refresh_lock = true
- _dockUI.get_node("Timer").start()
- rescan_files(false)
-
-
-func find_scripts() -> Array[String]:
- var scripts : Array[String]
- var directory_queue : Array[String]
- var dir := DirAccess.open("res://")
- ### FIRST PHASE ###
- if dir.get_open_error() == OK:
- get_dir_contents(dir, scripts, directory_queue)
- else:
- printerr("TODO_Manager: There was an error during find_scripts() ### First Phase ###")
-
- ### SECOND PHASE ###
- while not directory_queue.is_empty():
- if dir.change_dir(directory_queue[0]) == OK:
- get_dir_contents(dir, scripts, directory_queue)
- else:
- printerr("TODO_Manager: There was an error at: " + directory_queue[0])
- directory_queue.pop_front()
-
- return scripts
-
-
-func cache_todos(todos: Array, script_path: String) -> void:
- var last_modified_time = FileAccess.get_modified_time(script_path)
- todo_cache[script_path] = TodoCacheValue.new(todos, last_modified_time)
-
-
-func get_cached_todos(script_path: String) -> Array:
- if todo_cache.has(script_path):
- var cached_value: TodoCacheValue = todo_cache[script_path]
- if cached_value.last_modified_time == FileAccess.get_modified_time(script_path):
- return cached_value.todos
- return []
-
-func get_dir_contents(dir: DirAccess, scripts: Array[String], directory_queue: Array[String]) -> void:
- dir.include_navigational = false
- dir.include_hidden = false
- dir.list_dir_begin()
- var file_name : String = dir.get_next()
-
- while file_name != "":
- if dir.current_is_dir():
- if file_name == ".import" or file_name == ".mono": # Skip .import folder which should never have scripts
- pass
- else:
- directory_queue.append(dir.get_current_dir() + "/" + file_name)
- else:
- if file_name.ends_with(".gd") or file_name.ends_with(".cs") \
- or file_name.ends_with(".c") or file_name.ends_with(".cpp") or file_name.ends_with(".h") \
- or ((file_name.ends_with(".tscn") and _dockUI.builtin_enabled)):
- if dir.get_current_dir() == "res://":
- scripts.append(dir.get_current_dir() + file_name)
- else:
- scripts.append(dir.get_current_dir() + "/" + file_name)
- file_name = dir.get_next()
-
-
-func rescan_files(clear_cache: bool) -> void:
- _dockUI.todo_items.clear()
- if clear_cache:
- todo_cache.clear()
- combined_pattern = combine_patterns(_dockUI.patterns)
- find_tokens_from_path(find_scripts())
- _dockUI.build_tree()
-
-
-func combine_patterns(patterns: Array) -> String:
- # Case Sensitivity
- cased_patterns = []
- for pattern in patterns:
- if pattern[2] == _dockUI.CASE_INSENSITIVE:
- cased_patterns.append(pattern[0].insert(0, "((?i)") + ")")
- else:
- cased_patterns.append("(" + pattern[0] + ")")
-
- if patterns.size() == 1:
- return cased_patterns[0]
- else:
- var pattern_string := "((\\/\\*)|(#|\\/\\/))\\s*("
- for i in range(patterns.size()):
- if i == 0:
- pattern_string += cased_patterns[i]
- else:
- pattern_string += "|" + cased_patterns[i]
- pattern_string += ")(?(2)[\\s\\S]*?\\*\\/|.*)"
- return pattern_string
-
-
-func create_todo(todo_string: String, script_path: String) -> Todo:
- var todo := Todo.new()
- var regex = RegEx.new()
- for pattern in cased_patterns:
- if regex.compile(pattern) == OK:
- var result : RegExMatch = regex.search(todo_string)
- if result:
- todo.pattern = pattern
- todo.title = result.strings[0]
- else:
- continue
- else:
- printerr("Error compiling " + pattern)
-
- todo.content = todo_string
- todo.script_path = script_path
- return todo
-
-
-func _on_active_script_changed(script) -> void:
- if _dockUI:
- if _dockUI.tabs.current_tab == 1:
- _dockUI.build_tree()
diff --git a/addons/Todo_Manager/todoItem_class.gd b/addons/Todo_Manager/todoItem_class.gd
deleted file mode 100644
index 9bcb000..0000000
--- a/addons/Todo_Manager/todoItem_class.gd
+++ /dev/null
@@ -1,18 +0,0 @@
-@tool
-extends RefCounted
-
-var script_path : String
-var todos : Array
-
-func _init(script_path: String, todos: Array):
- self.script_path = script_path
- self.todos = todos
-
-func get_short_path() -> String:
- var temp_array := script_path.rsplit('/', false, 1)
- var short_path : String
- if not temp_array.size() > 1:
- short_path = "(!)" + temp_array[0]
- else:
- short_path = temp_array[1]
- return short_path
diff --git a/addons/Todo_Manager/todo_class.gd b/addons/Todo_Manager/todo_class.gd
deleted file mode 100644
index af6b26b..0000000
--- a/addons/Todo_Manager/todo_class.gd
+++ /dev/null
@@ -1,9 +0,0 @@
-@tool
-extends RefCounted
-
-
-var pattern : String
-var title : String
-var content : String
-var script_path : String
-var line_number : int
diff --git a/addons/godot-git-plugin/LICENSE b/addons/godot-git-plugin/LICENSE
deleted file mode 100644
index f153fb8..0000000
--- a/addons/godot-git-plugin/LICENSE
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2016-2023 The Godot Engine community
-
-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-git-plugin/THIRDPARTY.md b/addons/godot-git-plugin/THIRDPARTY.md
deleted file mode 100644
index 837488f..0000000
--- a/addons/godot-git-plugin/THIRDPARTY.md
+++ /dev/null
@@ -1,1349 +0,0 @@
-# Third-Party Notices
-
-The Godot Git Plugin source code uses the following third-party source code:
-
-1. godotengine/godot-cpp - MIT License - https://github.com/godotengine/godot-cpp/tree/02336831735fd6affbe0a6fa252ec98d3e78120c
-2. libgit2/libgit2 - GPLv2 with a special Linking Exception - https://github.com/libgit2/libgit2/tree/b7bad55e4bb0a285b073ba5e02b01d3f522fc95d
-3. libssh2/libssh2 - BSD-3-Clause License - https://github.com/libssh2/libssh2/tree/635caa90787220ac3773c1d5ba11f1236c22eae8
-
-We also link to these third-party libraries (only in the compiled binary form):
-
-1. OpenSSL - Only on Linux and MacOS - OpenSSL License - http://www.openssl.org/source/openssl-1.1.1s.tar.gz
-
-## License Texts
-
-### godotengine/godot-cpp
-
-```
-# MIT License
-
-Copyright (c) 2017-2022 Godot Engine contributors.
-
-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.
-```
-
-### libgit2/libgit2
-
-```
- libgit2 is Copyright (C) the libgit2 contributors,
- unless otherwise stated. See the AUTHORS file for details.
-
- Note that the only valid version of the GPL as far as this project
- is concerned is _this_ particular version of the license (ie v2, not
- v2.2 or v3.x or whatever), unless explicitly otherwise stated.
-
-----------------------------------------------------------------------
-
- LINKING EXCEPTION
-
- In addition to the permissions in the GNU General Public License,
- the authors give you unlimited permission to link the compiled
- version of this library into combinations with other programs,
- and to distribute those combinations without any restriction
- coming from the use of this file. (The General Public License
- restrictions do apply in other respects; for example, they cover
- modification of the file, and distribution when not linked into
- a combined executable.)
-
-----------------------------------------------------------------------
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- , 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
-
-----------------------------------------------------------------------
-
-The bundled ZLib code is licensed under the ZLib license:
-
-Copyright (C) 1995-2010 Jean-loup Gailly and Mark Adler
-
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
-
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Jean-loup Gailly Mark Adler
- jloup@gzip.org madler@alumni.caltech.edu
-
-----------------------------------------------------------------------
-
-The Clar framework is licensed under the ISC license:
-
-Copyright (c) 2011-2015 Vicent Marti
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
-ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
-ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
-OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-----------------------------------------------------------------------
-
-The regex library (deps/regex/) is licensed under the GNU LGPL
-(available at the end of this file).
-
-Definitions for data structures and routines for the regular
-expression library.
-
-Copyright (C) 1985,1989-93,1995-98,2000,2001,2002,2003,2005,2006,2008
-Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with the GNU C Library; if not, write to the Free
-Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
-02110-1301 USA.
-
-----------------------------------------------------------------------
-
-The bundled winhttp definition files (deps/winhttp/) are licensed under
-the GNU LGPL (available at the end of this file).
-
-Copyright (C) 2007 Francois Gouget
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation; either
-version 2.1 of the License, or (at your option) any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
-
-----------------------------------------------------------------------
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-
- Copyright (C)
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- , 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-----------------------------------------------------------------------
-
-The bundled SHA1 collision detection code is licensed under the MIT license:
-
-MIT License
-
-Copyright (c) 2017:
- Marc Stevens
- Cryptology Group
- Centrum Wiskunde & Informatica
- P.O. Box 94079, 1090 GB Amsterdam, Netherlands
- marc@marc-stevens.nl
-
- Dan Shumow
- Microsoft Research
- danshu@microsoft.com
-
-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.
-
-----------------------------------------------------------------------
-
-The bundled wildmatch code is licensed under the BSD license:
-
-Copyright Rich Salz.
-All rights reserved.
-
-Redistribution and use in any form are permitted provided that the
-following restrictions are are met:
-
-1. Source distributions must retain this entire copyright notice
- and comment.
-2. Binary distributions must include the acknowledgement ``This
- product includes software developed by Rich Salz'' in the
- documentation or other materials provided with the
- distribution. This must not be represented as an endorsement
- or promotion without specific prior written permission.
-3. The origin of this software must not be misrepresented, either
- by explicit claim or by omission. Credits must appear in the
- source and documentation.
-4. Altered versions must be plainly marked as such in the source
- and documentation and must not be misrepresented as being the
- original software.
-
-THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-----------------------------------------------------------------------
-
-Portions of the OpenSSL headers are included under the OpenSSL license:
-
-Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
-All rights reserved.
-
-This package is an SSL implementation written
-by Eric Young (eay@cryptsoft.com).
-The implementation was written so as to conform with Netscapes SSL.
-
-This library is free for commercial and non-commercial use as long as
-the following conditions are aheared to. The following conditions
-apply to all code found in this distribution, be it the RC4, RSA,
-lhash, DES, etc., code; not just the SSL code. The SSL documentation
-included with this distribution is covered by the same copyright terms
-except that the holder is Tim Hudson (tjh@cryptsoft.com).
-
-Copyright remains Eric Young's, and as such any Copyright notices in
-the code are not to be removed.
-If this package is used in a product, Eric Young should be given attribution
-as the author of the parts of the library used.
-This can be in the form of a textual message at program startup or
-in documentation (online or textual) provided with the package.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- "This product includes cryptographic software written by
- Eric Young (eay@cryptsoft.com)"
- The word 'cryptographic' can be left out if the rouines from the library
- being used are not cryptographic related :-).
-4. If you include any Windows specific code (or a derivative thereof) from
- the apps directory (application code) you must include an acknowledgement:
- "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
-
-THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-The licence and distribution terms for any publically available version or
-derivative of this code cannot be changed. i.e. this code cannot simply be
-copied and put under another distribution licence
-[including the GNU Public Licence.]
-
-====================================================================
-Copyright (c) 1998-2007 The OpenSSL Project. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in
- the documentation and/or other materials provided with the
- distribution.
-
-3. All advertising materials mentioning features or use of this
- software must display the following acknowledgment:
- "This product includes software developed by the OpenSSL Project
- for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
-
-4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- endorse or promote products derived from this software without
- prior written permission. For written permission, please contact
- openssl-core@openssl.org.
-
-5. Products derived from this software may not be called "OpenSSL"
- nor may "OpenSSL" appear in their names without prior written
- permission of the OpenSSL Project.
-
-6. Redistributions of any form whatsoever must retain the following
- acknowledgment:
- "This product includes software developed by the OpenSSL Project
- for use in the OpenSSL Toolkit (http://www.openssl.org/)"
-
-THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
-EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
-ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-OF THE POSSIBILITY OF SUCH DAMAGE.
-```
-
-### libssh2/libssh2
-
-```
-/* Copyright (c) 2004-2007 Sara Golemon
- * Copyright (c) 2005,2006 Mikhail Gusarov
- * Copyright (c) 2006-2007 The Written Word, Inc.
- * Copyright (c) 2007 Eli Fant
- * Copyright (c) 2009-2021 Daniel Stenberg
- * Copyright (C) 2008, 2009 Simon Josefsson
- * Copyright (c) 2000 Markus Friedl
- * Copyright (c) 2015 Microsoft Corp.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms,
- * with or without modification, are permitted provided
- * that the following conditions are met:
- *
- * Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the
- * following disclaimer.
- *
- * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * Neither the name of the copyright holder nor the names
- * of any other contributors may be used to endorse or
- * promote products derived from this software without
- * specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
- * OF SUCH DAMAGE.
- */
-```
-
-### OpenSSL
-
-```
-
- LICENSE ISSUES
- ==============
-
- The OpenSSL toolkit stays under a double license, i.e. both the conditions of
- the OpenSSL License and the original SSLeay license apply to the toolkit.
- See below for the actual license texts.
-
- OpenSSL License
- ---------------
-
-/* ====================================================================
- * Copyright (c) 1998-2019 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com). This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-
- Original SSLeay License
- -----------------------
-
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to. The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * "This product includes cryptographic software written by
- * Eric Young (eay@cryptsoft.com)"
- * The word 'cryptographic' can be left out if the rouines from the library
- * being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- * the apps directory (application code) you must include an acknowledgement:
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed. i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-```
diff --git a/addons/godot-git-plugin/git_plugin.gdextension b/addons/godot-git-plugin/git_plugin.gdextension
deleted file mode 100644
index 3e51918..0000000
--- a/addons/godot-git-plugin/git_plugin.gdextension
+++ /dev/null
@@ -1,11 +0,0 @@
-[configuration]
-
-entry_symbol = "git_plugin_init"
-
-[libraries]
-
-macos.editor = "macos/libgit_plugin.macos.editor.universal.dylib"
-windows.editor.x86_64 = "win64/libgit_plugin.windows.editor.x86_64.dll"
-linux.editor.x86_64 = "linux/libgit_plugin.linux.editor.x86_64.so"
-linux.editor.arm64 = "linux/libgit_plugin.linux.editor.arm64.so"
-linux.editor.rv64 = ""
diff --git a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so b/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so
deleted file mode 100644
index ba8c596..0000000
Binary files a/addons/godot-git-plugin/linux/libgit_plugin.linux.editor.x86_64.so and /dev/null differ
diff --git a/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib b/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib
deleted file mode 100644
index d307081..0000000
Binary files a/addons/godot-git-plugin/macos/libgit_plugin.macos.editor.universal.dylib and /dev/null differ
diff --git a/addons/godot-git-plugin/plugin.cfg b/addons/godot-git-plugin/plugin.cfg
deleted file mode 100644
index 6122b40..0000000
--- a/addons/godot-git-plugin/plugin.cfg
+++ /dev/null
@@ -1,7 +0,0 @@
-[plugin]
-
-name="Godot Git Plugin"
-description="This plugin lets you interact with Git without leaving the Godot editor. More information can be found at https://github.com/godotengine/godot-git-plugin/wiki"
-author="twaritwaikar"
-version="v3.0.0"
-script="godot-git-plugin.gd"
diff --git a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.dll b/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.dll
deleted file mode 100644
index de760c4..0000000
Binary files a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.dll and /dev/null differ
diff --git a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.exp b/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.exp
deleted file mode 100644
index 136d2b6..0000000
Binary files a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.exp and /dev/null differ
diff --git a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.lib b/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.lib
deleted file mode 100644
index b84311d..0000000
Binary files a/addons/godot-git-plugin/win64/libgit_plugin.windows.editor.x86_64.lib and /dev/null differ
diff --git a/characters/Adol.png b/characters/Adol.png
new file mode 100644
index 0000000..21d5d36
Binary files /dev/null and b/characters/Adol.png differ
diff --git a/addons/Todo_Manager/doc/images/example1.png.import b/characters/Adol.png.import
similarity index 67%
rename from addons/Todo_Manager/doc/images/example1.png.import
rename to characters/Adol.png.import
index a3c767f..0bdecd8 100644
--- a/addons/Todo_Manager/doc/images/example1.png.import
+++ b/characters/Adol.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://dm4238rk6sken"
-path="res://.godot/imported/example1.png-6386c332ca46e1e62ea061b956a901cd.ctex"
+uid="uid://bou7hnrkomu0i"
+path="res://.godot/imported/Adol.png-9e4ae06b99138eef359646c7b22cec79.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/example1.png"
-dest_files=["res://.godot/imported/example1.png-6386c332ca46e1e62ea061b956a901cd.ctex"]
+source_file="res://characters/Adol.png"
+dest_files=["res://.godot/imported/Adol.png-9e4ae06b99138eef359646c7b22cec79.ctex"]
[params]
diff --git a/characters/Aloy.png b/characters/Aloy.png
new file mode 100644
index 0000000..014fbfe
Binary files /dev/null and b/characters/Aloy.png differ
diff --git a/addons/Todo_Manager/doc/images/example2.png.import b/characters/Aloy.png.import
similarity index 67%
rename from addons/Todo_Manager/doc/images/example2.png.import
rename to characters/Aloy.png.import
index 44d95ed..03f4811 100644
--- a/addons/Todo_Manager/doc/images/example2.png.import
+++ b/characters/Aloy.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cpuyli2uwof0w"
-path="res://.godot/imported/example2.png-2e3a8f9cd1e178daf22b83dc0513f37a.ctex"
+uid="uid://b1lb225rcs0cg"
+path="res://.godot/imported/Aloy.png-1991978c81b5e74c0c0934a2dcf1ee6e.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/example2.png"
-dest_files=["res://.godot/imported/example2.png-2e3a8f9cd1e178daf22b83dc0513f37a.ctex"]
+source_file="res://characters/Aloy.png"
+dest_files=["res://.godot/imported/Aloy.png-1991978c81b5e74c0c0934a2dcf1ee6e.ctex"]
[params]
diff --git a/characters/Barbarian.png b/characters/Barbarian.png
new file mode 100644
index 0000000..49ebd1e
Binary files /dev/null and b/characters/Barbarian.png differ
diff --git a/addons/Todo_Manager/doc/images/Instruct5.png.import b/characters/Barbarian.png.import
similarity index 67%
rename from addons/Todo_Manager/doc/images/Instruct5.png.import
rename to characters/Barbarian.png.import
index d7f3d7b..6e832b0 100644
--- a/addons/Todo_Manager/doc/images/Instruct5.png.import
+++ b/characters/Barbarian.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://sd2bremxjlmr"
-path="res://.godot/imported/Instruct5.png-001538ed8b5682dcf232de08035aab38.ctex"
+uid="uid://dnfxsgmp800cn"
+path="res://.godot/imported/Barbarian.png-7300144689e707396818d6f82b278ca6.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/Instruct5.png"
-dest_files=["res://.godot/imported/Instruct5.png-001538ed8b5682dcf232de08035aab38.ctex"]
+source_file="res://characters/Barbarian.png"
+dest_files=["res://.godot/imported/Barbarian.png-7300144689e707396818d6f82b278ca6.ctex"]
[params]
diff --git a/characters/Kiryu.png b/characters/Kiryu.png
new file mode 100644
index 0000000..4806bbc
Binary files /dev/null and b/characters/Kiryu.png differ
diff --git a/addons/Todo_Manager/doc/images/Instruct4.png.import b/characters/Kiryu.png.import
similarity index 67%
rename from addons/Todo_Manager/doc/images/Instruct4.png.import
rename to characters/Kiryu.png.import
index 026f68c..0311d6e 100644
--- a/addons/Todo_Manager/doc/images/Instruct4.png.import
+++ b/characters/Kiryu.png.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://beyicwm310ytk"
-path="res://.godot/imported/Instruct4.png-bf5aa1cffc066175cecf9281b0774809.ctex"
+uid="uid://bah8j3gu07305"
+path="res://.godot/imported/Kiryu.png-b44fd7e02123323f7129dedbcd326059.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/Instruct4.png"
-dest_files=["res://.godot/imported/Instruct4.png-bf5aa1cffc066175cecf9281b0774809.ctex"]
+source_file="res://characters/Kiryu.png"
+dest_files=["res://.godot/imported/Kiryu.png-b44fd7e02123323f7129dedbcd326059.ctex"]
[params]
diff --git a/characters/Kratos.png b/characters/Kratos.png
new file mode 100644
index 0000000..62c75a2
Binary files /dev/null and b/characters/Kratos.png differ
diff --git a/characters/Kratos.png.import b/characters/Kratos.png.import
new file mode 100644
index 0000000..9169f7b
--- /dev/null
+++ b/characters/Kratos.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dbquf5kdhijwt"
+path="res://.godot/imported/Kratos.png-96be93b60faf4be47d12b7d77e0db8a0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Kratos.png"
+dest_files=["res://.godot/imported/Kratos.png-96be93b60faf4be47d12b7d77e0db8a0.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
diff --git a/characters/Layton.png b/characters/Layton.png
new file mode 100644
index 0000000..71f3c11
Binary files /dev/null and b/characters/Layton.png differ
diff --git a/characters/Layton.png.import b/characters/Layton.png.import
new file mode 100644
index 0000000..e19369e
--- /dev/null
+++ b/characters/Layton.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dppew11utp65u"
+path="res://.godot/imported/Layton.png-e045f892ea6bda02bca9f3bf7a8f8f8d.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Layton.png"
+dest_files=["res://.godot/imported/Layton.png-e045f892ea6bda02bca9f3bf7a8f8f8d.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
diff --git a/characters/Lemmings.png b/characters/Lemmings.png
new file mode 100644
index 0000000..59bb837
Binary files /dev/null and b/characters/Lemmings.png differ
diff --git a/characters/Lemmings.png.import b/characters/Lemmings.png.import
new file mode 100644
index 0000000..d87fb58
--- /dev/null
+++ b/characters/Lemmings.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://xq48fxilv5mh"
+path="res://.godot/imported/Lemmings.png-1292d9ccd3f0d46e6cf743d3c018c7d0.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Lemmings.png"
+dest_files=["res://.godot/imported/Lemmings.png-1292d9ccd3f0d46e6cf743d3c018c7d0.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
diff --git a/characters/Link.png b/characters/Link.png
new file mode 100644
index 0000000..28c5b28
Binary files /dev/null and b/characters/Link.png differ
diff --git a/characters/Link.png.import b/characters/Link.png.import
new file mode 100644
index 0000000..0804bd0
--- /dev/null
+++ b/characters/Link.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://c8r7ykphss4c2"
+path="res://.godot/imported/Link.png-60e9508aedd004d12081c9005d4aa750.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Link.png"
+dest_files=["res://.godot/imported/Link.png-60e9508aedd004d12081c9005d4aa750.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
diff --git a/characters/Miles.png b/characters/Miles.png
new file mode 100644
index 0000000..e121756
Binary files /dev/null and b/characters/Miles.png differ
diff --git a/characters/Miles.png.import b/characters/Miles.png.import
new file mode 100644
index 0000000..8fb93b5
--- /dev/null
+++ b/characters/Miles.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cylpgeyjnkvbd"
+path="res://.godot/imported/Miles.png-a90dba30e189ed6725b379b5ff9f083e.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Miles.png"
+dest_files=["res://.godot/imported/Miles.png-a90dba30e189ed6725b379b5ff9f083e.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
diff --git a/characters/PaperMario.png b/characters/PaperMario.png
new file mode 100644
index 0000000..60606e3
Binary files /dev/null and b/characters/PaperMario.png differ
diff --git a/characters/PaperMario.png.import b/characters/PaperMario.png.import
new file mode 100644
index 0000000..8d6d24c
--- /dev/null
+++ b/characters/PaperMario.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://dr1oftfrqgfmw"
+path="res://.godot/imported/PaperMario.png-290a7e8407957770ebf4195df8c53c73.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/PaperMario.png"
+dest_files=["res://.godot/imported/PaperMario.png-290a7e8407957770ebf4195df8c53c73.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
diff --git a/characters/Raiden.png b/characters/Raiden.png
new file mode 100644
index 0000000..954aea9
Binary files /dev/null and b/characters/Raiden.png differ
diff --git a/characters/Raiden.png.import b/characters/Raiden.png.import
new file mode 100644
index 0000000..87121f2
--- /dev/null
+++ b/characters/Raiden.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://bqmsmpbblqgds"
+path="res://.godot/imported/Raiden.png-205a027967ace9bf18d56e3f092e9626.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Raiden.png"
+dest_files=["res://.godot/imported/Raiden.png-205a027967ace9bf18d56e3f092e9626.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
diff --git a/characters/Samus.png b/characters/Samus.png
new file mode 100644
index 0000000..e35fdc6
Binary files /dev/null and b/characters/Samus.png differ
diff --git a/characters/Samus.png.import b/characters/Samus.png.import
new file mode 100644
index 0000000..83be99e
--- /dev/null
+++ b/characters/Samus.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cbupdfevcwysf"
+path="res://.godot/imported/Samus.png-ff0f0e36002791d773416c96a6e25d8b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Samus.png"
+dest_files=["res://.godot/imported/Samus.png-ff0f0e36002791d773416c96a6e25d8b.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
diff --git a/characters/Sora.png b/characters/Sora.png
new file mode 100644
index 0000000..eb3d20b
Binary files /dev/null and b/characters/Sora.png differ
diff --git a/characters/Sora.png.import b/characters/Sora.png.import
new file mode 100644
index 0000000..4927dab
--- /dev/null
+++ b/characters/Sora.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://lkj0tdlrn07x"
+path="res://.godot/imported/Sora.png-fc8f0331bc6ab24d4c685b270b81c596.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://characters/Sora.png"
+dest_files=["res://.godot/imported/Sora.png-fc8f0331bc6ab24d4c685b270b81c596.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
diff --git a/noCharacter.png b/noCharacter.png
new file mode 100644
index 0000000..bd6f20f
Binary files /dev/null and b/noCharacter.png differ
diff --git a/noCharacter.png.import b/noCharacter.png.import
new file mode 100644
index 0000000..4b17f1e
--- /dev/null
+++ b/noCharacter.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://r4as0nmtoa7p"
+path="res://.godot/imported/noCharacter.png-913d5aa8e4e20d65781e354ef1232fef.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://noCharacter.png"
+dest_files=["res://.godot/imported/noCharacter.png-913d5aa8e4e20d65781e354ef1232fef.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
diff --git a/person_add_alt_1-black-36dp.svg b/person_add_alt_1-black-36dp.svg
new file mode 100644
index 0000000..a216d50
--- /dev/null
+++ b/person_add_alt_1-black-36dp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/addons/Todo_Manager/doc/images/Instruct2.png.import b/person_add_alt_1-black-36dp.svg.import
similarity index 58%
rename from addons/Todo_Manager/doc/images/Instruct2.png.import
rename to person_add_alt_1-black-36dp.svg.import
index 17747fd..72bca90 100644
--- a/addons/Todo_Manager/doc/images/Instruct2.png.import
+++ b/person_add_alt_1-black-36dp.svg.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cx5p2fr1m6u3h"
-path="res://.godot/imported/Instruct2.png-4e8664e49d00a397bbd539f7dee976ff.ctex"
+uid="uid://o5go6smk7hm1"
+path="res://.godot/imported/person_add_alt_1-black-36dp.svg-bf42e8ddf13a4f7adae8637f26a86e94.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/Instruct2.png"
-dest_files=["res://.godot/imported/Instruct2.png-4e8664e49d00a397bbd539f7dee976ff.ctex"]
+source_file="res://person_add_alt_1-black-36dp.svg"
+dest_files=["res://.godot/imported/person_add_alt_1-black-36dp.svg-bf42e8ddf13a4f7adae8637f26a86e94.ctex"]
[params]
@@ -32,3 +32,6 @@ 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=false
+editor/convert_colors_with_editor_theme=false
diff --git a/person_remove-black-36dp.svg b/person_remove-black-36dp.svg
new file mode 100644
index 0000000..ac9ad26
--- /dev/null
+++ b/person_remove-black-36dp.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/addons/Todo_Manager/doc/images/Instruct3.png.import b/person_remove-black-36dp.svg.import
similarity index 58%
rename from addons/Todo_Manager/doc/images/Instruct3.png.import
rename to person_remove-black-36dp.svg.import
index 7f34f92..0e2311f 100644
--- a/addons/Todo_Manager/doc/images/Instruct3.png.import
+++ b/person_remove-black-36dp.svg.import
@@ -2,16 +2,16 @@
importer="texture"
type="CompressedTexture2D"
-uid="uid://cqj87crklv7ke"
-path="res://.godot/imported/Instruct3.png-3cc62ed99bf29d90b803cb8eb40881e9.ctex"
+uid="uid://t1tnj6nqpi4a"
+path="res://.godot/imported/person_remove-black-36dp.svg-60481722f4b86c76228674c37c2e8b80.ctex"
metadata={
"vram_texture": false
}
[deps]
-source_file="res://addons/Todo_Manager/doc/images/Instruct3.png"
-dest_files=["res://.godot/imported/Instruct3.png-3cc62ed99bf29d90b803cb8eb40881e9.ctex"]
+source_file="res://person_remove-black-36dp.svg"
+dest_files=["res://.godot/imported/person_remove-black-36dp.svg-60481722f4b86c76228674c37c2e8b80.ctex"]
[params]
@@ -32,3 +32,6 @@ 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=false
+editor/convert_colors_with_editor_theme=false
diff --git a/project.godot b/project.godot
index 75cd563..5304b0e 100644
--- a/project.godot
+++ b/project.godot
@@ -12,7 +12,7 @@ config_version=5
config/name="MusicPlayer"
run/main_scene="res://MainWindow.tscn"
-config/features=PackedStringArray("4.0", "Forward Plus")
+config/features=PackedStringArray("4.1", "Forward Plus")
run/low_processor_mode=true
config/icon="res://icon.svg"
@@ -22,11 +22,6 @@ window/subwindows/embed_subwindows=false
window/stretch/mode="canvas_items"
window/stretch/aspect="expand"
-[editor]
-
-version_control/plugin_name="GitPlugin"
-version_control/autoload_on_startup=true
-
[rendering]
textures/vram_compression/import_s3tc_bptc=true
diff --git a/sounds/check.mp3 b/sounds/check.mp3
new file mode 100644
index 0000000..7ffa6db
Binary files /dev/null and b/sounds/check.mp3 differ
diff --git a/sounds/check.mp3.import b/sounds/check.mp3.import
new file mode 100644
index 0000000..0cc91a7
--- /dev/null
+++ b/sounds/check.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://cstk3o6p0t1dd"
+path="res://.godot/imported/check.mp3-e407ac461bb5c0be4e446189ee96e316.mp3str"
+
+[deps]
+
+source_file="res://sounds/check.mp3"
+dest_files=["res://.godot/imported/check.mp3-e407ac461bb5c0be4e446189ee96e316.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/sounds/intro_long.mp3 b/sounds/intro_long.mp3
new file mode 100644
index 0000000..9004832
Binary files /dev/null and b/sounds/intro_long.mp3 differ
diff --git a/sounds/intro_long.mp3.import b/sounds/intro_long.mp3.import
new file mode 100644
index 0000000..ab002a6
--- /dev/null
+++ b/sounds/intro_long.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://cvuwsbyemprym"
+path="res://.godot/imported/intro_long.mp3-32bebeda14ea0663216d473171276670.mp3str"
+
+[deps]
+
+source_file="res://sounds/intro_long.mp3"
+dest_files=["res://.godot/imported/intro_long.mp3-32bebeda14ea0663216d473171276670.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/sounds/intro_short.mp3 b/sounds/intro_short.mp3
new file mode 100644
index 0000000..4235045
Binary files /dev/null and b/sounds/intro_short.mp3 differ
diff --git a/sounds/intro_short.mp3.import b/sounds/intro_short.mp3.import
new file mode 100644
index 0000000..d2aa469
--- /dev/null
+++ b/sounds/intro_short.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://pr4djcr5ni20"
+path="res://.godot/imported/intro_short.mp3-a06e6f75611467edbef805507251f4d4.mp3str"
+
+[deps]
+
+source_file="res://sounds/intro_short.mp3"
+dest_files=["res://.godot/imported/intro_short.mp3-a06e6f75611467edbef805507251f4d4.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/sounds/sound0.mp3 b/sounds/sound0.mp3
new file mode 100644
index 0000000..7c234c5
Binary files /dev/null and b/sounds/sound0.mp3 differ
diff --git a/sounds/sound0.mp3.import b/sounds/sound0.mp3.import
new file mode 100644
index 0000000..312bd75
--- /dev/null
+++ b/sounds/sound0.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://41ovxobjbp5b"
+path="res://.godot/imported/sound0.mp3-ae0f9147e757d9da5043231a59c5fd8d.mp3str"
+
+[deps]
+
+source_file="res://sounds/sound0.mp3"
+dest_files=["res://.godot/imported/sound0.mp3-ae0f9147e757d9da5043231a59c5fd8d.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/sounds/sound1.mp3 b/sounds/sound1.mp3
new file mode 100644
index 0000000..a0e730a
Binary files /dev/null and b/sounds/sound1.mp3 differ
diff --git a/sounds/sound1.mp3.import b/sounds/sound1.mp3.import
new file mode 100644
index 0000000..94c59d8
--- /dev/null
+++ b/sounds/sound1.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://cc2nf2gae1dgk"
+path="res://.godot/imported/sound1.mp3-c89a0fcf190a1a169ec1386d7c0dd01d.mp3str"
+
+[deps]
+
+source_file="res://sounds/sound1.mp3"
+dest_files=["res://.godot/imported/sound1.mp3-c89a0fcf190a1a169ec1386d7c0dd01d.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4
diff --git a/sounds/winning.mp3 b/sounds/winning.mp3
new file mode 100644
index 0000000..3110223
Binary files /dev/null and b/sounds/winning.mp3 differ
diff --git a/sounds/winning.mp3.import b/sounds/winning.mp3.import
new file mode 100644
index 0000000..f0031dc
--- /dev/null
+++ b/sounds/winning.mp3.import
@@ -0,0 +1,19 @@
+[remap]
+
+importer="mp3"
+type="AudioStreamMP3"
+uid="uid://bjl6qkaw2uwaj"
+path="res://.godot/imported/winning.mp3-18a19e66bdf777b25e9befded522ad0d.mp3str"
+
+[deps]
+
+source_file="res://sounds/winning.mp3"
+dest_files=["res://.godot/imported/winning.mp3-18a19e66bdf777b25e9befded522ad0d.mp3str"]
+
+[params]
+
+loop=false
+loop_offset=0
+bpm=0
+beat_count=0
+bar_beats=4