commit bb075d635384e9973cbdc19854fb74cccf4b7f92
Author: Ivan Kuzmenko <6745157+rndtrash@users.noreply.github.com>
Date: Sat Feb 1 07:45:07 2025 +0300
Initial commit
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..8ad74f7
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Normalize EOL for all files that Git considers text files.
+* text=auto eol=lf
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7972896
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,7 @@
+# Godot 4+ specific ignores
+.godot/
+/android/
+
+# Visual Studio specific ignores
+.vs/
+*.csproj.old
\ No newline at end of file
diff --git a/PlaceholderTracker.csproj b/PlaceholderTracker.csproj
new file mode 100644
index 0000000..b6efe1f
--- /dev/null
+++ b/PlaceholderTracker.csproj
@@ -0,0 +1,6 @@
+
+
+ net8.0
+ true
+
+
\ No newline at end of file
diff --git a/PlaceholderTracker.sln b/PlaceholderTracker.sln
new file mode 100644
index 0000000..ceb5e7d
--- /dev/null
+++ b/PlaceholderTracker.sln
@@ -0,0 +1,19 @@
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PlaceholderTracker", "PlaceholderTracker.csproj", "{88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ ExportDebug|Any CPU = ExportDebug|Any CPU
+ ExportRelease|Any CPU = ExportRelease|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.ExportDebug|Any CPU.ActiveCfg = ExportDebug|Any CPU
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.ExportDebug|Any CPU.Build.0 = ExportDebug|Any CPU
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.ExportRelease|Any CPU.ActiveCfg = ExportRelease|Any CPU
+ {88DC9D3A-6E7B-482E-9CBA-57A9D373C39B}.ExportRelease|Any CPU.Build.0 = ExportRelease|Any CPU
+ EndGlobalSection
+EndGlobal
diff --git a/addons/placeholder_tracker/PlaceholderTracker.cs b/addons/placeholder_tracker/PlaceholderTracker.cs
new file mode 100644
index 0000000..ccacffa
--- /dev/null
+++ b/addons/placeholder_tracker/PlaceholderTracker.cs
@@ -0,0 +1,44 @@
+#if TOOLS
+using Godot;
+using System;
+
+namespace PT;
+
+[Tool]
+public partial class PlaceholderTracker : EditorPlugin
+{
+ public const string TODO_EXTENSION = ".todo";
+
+ public static bool IsFilePlaceholder(string path) => FileAccess.FileExists(path + TODO_EXTENSION);
+
+ PtExportPlugin _exportPlugin;
+ PtContextMenuPlugin _contextMenuPlugin;
+
+ public override void _EnterTree()
+ {
+ // AddImportPlugin
+ // AddResourceConversionPlugin
+ _exportPlugin = new PtExportPlugin();
+ AddExportPlugin(_exportPlugin);
+
+ _contextMenuPlugin = new PtContextMenuPlugin();
+ AddContextMenuPlugin(EditorContextMenuPlugin.ContextMenuSlot.Filesystem, _contextMenuPlugin);
+ }
+
+ public override void _ExitTree()
+ {
+ RemoveContextMenuPlugin(_contextMenuPlugin);
+ RemoveExportPlugin(_exportPlugin);
+ }
+
+ public override string _GetPluginName()
+ {
+ return "Placeholder Tracker";
+ }
+
+ public override void _Notification(int what)
+ {
+ //GD.PrintErr(what);
+ }
+}
+#endif
diff --git a/addons/placeholder_tracker/PlaceholderTracker.cs.uid b/addons/placeholder_tracker/PlaceholderTracker.cs.uid
new file mode 100644
index 0000000..c9b9946
--- /dev/null
+++ b/addons/placeholder_tracker/PlaceholderTracker.cs.uid
@@ -0,0 +1 @@
+uid://ywh4rud117pq
diff --git a/addons/placeholder_tracker/PtContextMenuPlugin.cs b/addons/placeholder_tracker/PtContextMenuPlugin.cs
new file mode 100644
index 0000000..8c1b4a3
--- /dev/null
+++ b/addons/placeholder_tracker/PtContextMenuPlugin.cs
@@ -0,0 +1,46 @@
+#if TOOLS
+
+using Godot;
+using System.Linq;
+
+namespace PT;
+
+[Tool]
+public partial class PtContextMenuPlugin : EditorContextMenuPlugin
+{
+ public void MarkAsPlaceholder(Variant filesVariant)
+ {
+ // TODO: recursively mark folders
+ var files = (string[])filesVariant;
+ if (files == null) return;
+
+ foreach (var fileName in files)
+ {
+ var file = FileAccess.Open(fileName + PlaceholderTracker.TODO_EXTENSION, FileAccess.ModeFlags.Write);
+ file.Close();
+ }
+ }
+
+ public void MarkAsReadyForRelease(Variant filesVariant)
+ {
+ // TODO: recursively mark folders
+ var files = (string[])filesVariant;
+ if (files == null) return;
+
+ foreach (var fileName in files)
+ {
+ DirAccess.RemoveAbsolute(fileName + PlaceholderTracker.TODO_EXTENSION);
+ }
+ }
+
+ public override void _PopupMenu(string[] paths)
+ {
+ if (paths.Any(path => !PlaceholderTracker.IsFilePlaceholder(path)))
+ AddContextMenuItem("Mark as placeholder", new Callable(this, MethodName.MarkAsPlaceholder));
+
+ if (paths.Any(path => PlaceholderTracker.IsFilePlaceholder(path)))
+ AddContextMenuItem("Mark as ready for release", new Callable(this, MethodName.MarkAsReadyForRelease));
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/addons/placeholder_tracker/PtContextMenuPlugin.cs.uid b/addons/placeholder_tracker/PtContextMenuPlugin.cs.uid
new file mode 100644
index 0000000..15f1276
--- /dev/null
+++ b/addons/placeholder_tracker/PtContextMenuPlugin.cs.uid
@@ -0,0 +1 @@
+uid://dj6jvvjkt4v02
diff --git a/addons/placeholder_tracker/PtExportPlugin.cs b/addons/placeholder_tracker/PtExportPlugin.cs
new file mode 100644
index 0000000..cdf8822
--- /dev/null
+++ b/addons/placeholder_tracker/PtExportPlugin.cs
@@ -0,0 +1,34 @@
+#if TOOLS
+
+using Godot;
+using System.ComponentModel;
+
+namespace PT;
+
+[Tool]
+public partial class PtExportPlugin : EditorExportPlugin
+{
+ public override string _GetName()
+ {
+ return "Placeholder Tracker";
+ }
+
+ public override void _ExportFile(string path, string type, string[] features)
+ {
+ GD.PushWarning("TODO: warn user when a placeholder is encountered");
+
+ if (path.EndsWith(PlaceholderTracker.TODO_EXTENSION))
+ {
+ GD.PushWarning("TODO: encountered a .TODO file");
+ Skip();
+ return;
+ }
+
+ if (PlaceholderTracker.IsFilePlaceholder(path))
+ {
+ GD.PushWarning("TODO: found a placeholder!");
+ }
+ }
+}
+
+#endif
\ No newline at end of file
diff --git a/addons/placeholder_tracker/PtExportPlugin.cs.uid b/addons/placeholder_tracker/PtExportPlugin.cs.uid
new file mode 100644
index 0000000..b74e8e0
--- /dev/null
+++ b/addons/placeholder_tracker/PtExportPlugin.cs.uid
@@ -0,0 +1 @@
+uid://cxhpmkoxg5y1a
diff --git a/addons/placeholder_tracker/PtPostImportPlugin.cs.uid b/addons/placeholder_tracker/PtPostImportPlugin.cs.uid
new file mode 100644
index 0000000..06df558
--- /dev/null
+++ b/addons/placeholder_tracker/PtPostImportPlugin.cs.uid
@@ -0,0 +1 @@
+uid://sb7w7ejl0xil
diff --git a/addons/placeholder_tracker/baller_pfp.png b/addons/placeholder_tracker/baller_pfp.png
new file mode 100644
index 0000000..bb386a2
Binary files /dev/null and b/addons/placeholder_tracker/baller_pfp.png differ
diff --git a/addons/placeholder_tracker/baller_pfp.png.import b/addons/placeholder_tracker/baller_pfp.png.import
new file mode 100644
index 0000000..3d3f189
--- /dev/null
+++ b/addons/placeholder_tracker/baller_pfp.png.import
@@ -0,0 +1,34 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://p5od1heikax6"
+path="res://.godot/imported/baller_pfp.png-6e362a729b98a11e85abea41713e4a04.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://addons/placeholder_tracker/baller_pfp.png"
+dest_files=["res://.godot/imported/baller_pfp.png-6e362a729b98a11e85abea41713e4a04.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/placeholder_tracker/baller_pfp.png.todo b/addons/placeholder_tracker/baller_pfp.png.todo
new file mode 100644
index 0000000..e69de29
diff --git a/addons/placeholder_tracker/plugin.cfg b/addons/placeholder_tracker/plugin.cfg
new file mode 100644
index 0000000..9ae01c9
--- /dev/null
+++ b/addons/placeholder_tracker/plugin.cfg
@@ -0,0 +1,7 @@
+[plugin]
+
+name="PlaceholderTracker"
+description="Отслеживает и помечает новые файлы как \"заглушки\", тем самым позволяет отследить прогресс разработки ресурсов и не позволяет незаконченным ресурсам, потенциально содержащим нарушения авторских прав или непристойный контент, попасть в финальную сборку."
+author="Tea Sanctuary"
+version=""
+script="PlaceholderTracker.cs"
diff --git a/export_presets.cfg b/export_presets.cfg
new file mode 100644
index 0000000..964cbb5
--- /dev/null
+++ b/export_presets.cfg
@@ -0,0 +1,69 @@
+[preset.0]
+
+name="Windows Desktop"
+platform="Windows Desktop"
+runnable=true
+advanced_options=false
+dedicated_server=false
+custom_features=""
+export_filter="all_resources"
+include_filter=""
+exclude_filter=""
+export_path="export/pt_test.exe"
+patches=PackedStringArray()
+encryption_include_filters=""
+encryption_exclude_filters=""
+seed=0
+encrypt_pck=false
+encrypt_directory=false
+script_export_mode=2
+
+[preset.0.options]
+
+custom_template/debug=""
+custom_template/release=""
+debug/export_console_wrapper=1
+binary_format/embed_pck=false
+texture_format/s3tc_bptc=true
+texture_format/etc2_astc=false
+binary_format/architecture="x86_64"
+codesign/enable=false
+codesign/timestamp=true
+codesign/timestamp_server_url=""
+codesign/digest_algorithm=1
+codesign/description=""
+codesign/custom_options=PackedStringArray()
+application/modify_resources=true
+application/icon=""
+application/console_wrapper_icon=""
+application/icon_interpolation=4
+application/file_version=""
+application/product_version=""
+application/company_name=""
+application/product_name=""
+application/file_description=""
+application/copyright=""
+application/trademarks=""
+application/export_angle=0
+application/export_d3d12=0
+application/d3d12_agility_sdk_multiarch=true
+ssh_remote_deploy/enabled=false
+ssh_remote_deploy/host="user@host_ip"
+ssh_remote_deploy/port="22"
+ssh_remote_deploy/extra_args_ssh=""
+ssh_remote_deploy/extra_args_scp=""
+ssh_remote_deploy/run_script="Expand-Archive -LiteralPath '{temp_dir}\\{archive_name}' -DestinationPath '{temp_dir}'
+$action = New-ScheduledTaskAction -Execute '{temp_dir}\\{exe_name}' -Argument '{cmd_args}'
+$trigger = New-ScheduledTaskTrigger -Once -At 00:00
+$settings = New-ScheduledTaskSettingsSet
+$task = New-ScheduledTask -Action $action -Trigger $trigger -Settings $settings
+Register-ScheduledTask godot_remote_debug -InputObject $task -Force:$true
+Start-ScheduledTask -TaskName godot_remote_debug
+while (Get-ScheduledTask -TaskName godot_remote_debug | ? State -eq running) { Start-Sleep -Milliseconds 100 }
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue"
+ssh_remote_deploy/cleanup_script="Stop-ScheduledTask -TaskName godot_remote_debug -ErrorAction:SilentlyContinue
+Unregister-ScheduledTask -TaskName godot_remote_debug -Confirm:$false -ErrorAction:SilentlyContinue
+Remove-Item -Recurse -Force '{temp_dir}'"
+dotnet/include_scripts_content=false
+dotnet/include_debug_symbols=true
+dotnet/embed_build_outputs=false
diff --git a/icon.svg b/icon.svg
new file mode 100644
index 0000000..9d8b7fa
--- /dev/null
+++ b/icon.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/icon.svg.import b/icon.svg.import
new file mode 100644
index 0000000..06e85d2
--- /dev/null
+++ b/icon.svg.import
@@ -0,0 +1,37 @@
+[remap]
+
+importer="texture"
+type="CompressedTexture2D"
+uid="uid://cu0f6at5sg00k"
+path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"
+metadata={
+"vram_texture": false
+}
+
+[deps]
+
+source_file="res://icon.svg"
+dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex"]
+
+[params]
+
+compress/mode=0
+compress/high_quality=false
+compress/lossy_quality=0.7
+compress/hdr_compression=1
+compress/normal_map=0
+compress/channel_pack=0
+mipmaps/generate=false
+mipmaps/limit=-1
+roughness/mode=0
+roughness/src_normal=""
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/normal_map_invert_y=false
+process/hdr_as_srgb=false
+process/hdr_clamp_exposure=false
+process/size_limit=0
+detect_3d/compress_to=1
+svg/scale=1.0
+editor/scale_with_editor_scale=false
+editor/convert_colors_with_editor_theme=false
diff --git a/project.godot b/project.godot
new file mode 100644
index 0000000..d820857
--- /dev/null
+++ b/project.godot
@@ -0,0 +1,23 @@
+; Engine configuration file.
+; It's best edited using the editor UI and not directly,
+; since the parameters that go here are not all obvious.
+;
+; Format:
+; [section] ; section goes between []
+; param=value ; assign values to parameters
+
+config_version=5
+
+[application]
+
+config/name="PlaceholderTracker"
+config/features=PackedStringArray("4.4", "C#", "Forward Plus")
+config/icon="res://icon.svg"
+
+[dotnet]
+
+project/assembly_name="PlaceholderTracker"
+
+[editor_plugins]
+
+enabled=PackedStringArray("res://addons/placeholder_tracker/plugin.cfg")
diff --git a/test.tscn b/test.tscn
new file mode 100644
index 0000000..7c61d13
--- /dev/null
+++ b/test.tscn
@@ -0,0 +1,3 @@
+[gd_scene format=3 uid="uid://calcua60nuxmi"]
+
+[node name="Test" type="Node2D"]