From cb50f84b21f1540044c44dbac7c38555ac408416 Mon Sep 17 00:00:00 2001 From: Eduardo Date: Thu, 28 Sep 2023 18:22:51 +0200 Subject: [PATCH] added project time tracker plugin --- addons/project_time_tracker/icon.png | Bin 0 -> 8029 bytes addons/project_time_tracker/icon.png.import | 34 +++++++ addons/project_time_tracker/plugin.cfg | 7 ++ addons/project_time_tracker/plugin.gd | 15 +++ addons/project_time_tracker/project_timer.gd | 89 +++++++++++++++++ .../project_time_tracker/project_timer.tscn | 90 ++++++++++++++++++ .../project_time_tracker/settings_window.gd | 28 ++++++ 7 files changed, 263 insertions(+) create mode 100644 addons/project_time_tracker/icon.png create mode 100644 addons/project_time_tracker/icon.png.import create mode 100644 addons/project_time_tracker/plugin.cfg create mode 100644 addons/project_time_tracker/plugin.gd create mode 100644 addons/project_time_tracker/project_timer.gd create mode 100644 addons/project_time_tracker/project_timer.tscn create mode 100644 addons/project_time_tracker/settings_window.gd diff --git a/addons/project_time_tracker/icon.png b/addons/project_time_tracker/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff4b75c983e8dad0efc67f179cf8c6b86a147834 GIT binary patch literal 8029 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 PIG~}T^Sn~YI_!S{gQ;@s literal 0 HcmV?d00001 diff --git a/addons/project_time_tracker/icon.png.import b/addons/project_time_tracker/icon.png.import new file mode 100644 index 0000000..33c737c --- /dev/null +++ b/addons/project_time_tracker/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcbfcmhwy2rkl" +path="res://.godot/imported/icon.png-fc3fbdc4c342e4465b7ecfb6bc59cf69.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://addons/project_time_tracker/icon.png" +dest_files=["res://.godot/imported/icon.png-fc3fbdc4c342e4465b7ecfb6bc59cf69.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/project_time_tracker/plugin.cfg b/addons/project_time_tracker/plugin.cfg new file mode 100644 index 0000000..9728cae --- /dev/null +++ b/addons/project_time_tracker/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Project Timer" +description="Tracks how long you've spent in this project." +author="Ccencceth" +version="0.1" +script="plugin.gd" diff --git a/addons/project_time_tracker/plugin.gd b/addons/project_time_tracker/plugin.gd new file mode 100644 index 0000000..6dca2ef --- /dev/null +++ b/addons/project_time_tracker/plugin.gd @@ -0,0 +1,15 @@ +@tool +extends EditorPlugin + + +var dock + + +func _enter_tree() -> void: + dock = preload("res://addons/project_time_tracker/project_timer.tscn").instantiate() + add_control_to_dock(DOCK_SLOT_RIGHT_BL, dock) + + +func _exit_tree() -> void: + remove_control_from_docks(dock) + dock.free() diff --git a/addons/project_time_tracker/project_timer.gd b/addons/project_time_tracker/project_timer.gd new file mode 100644 index 0000000..e59906b --- /dev/null +++ b/addons/project_time_tracker/project_timer.gd @@ -0,0 +1,89 @@ +@tool +extends Control + + +var session_time = 0.0 +var total_time = 0.0 +const PATH_TO_SAVE_FILE = "user://time_in_project.save" +@onready var total_time_label : Label = get_node("VBoxContainer/TimeInProject") +@onready var session_time_label : Label = get_node("VBoxContainer/TimeThisSession") +@onready var settings_window : Window = get_node("SettingsWindow") + + +func _enter_tree() -> void: + read_file() + + +func _exit_tree() -> void: + save_file() + + +func _process(delta: float) -> void: + session_time += delta + total_time += delta + + set_time() + + +func set_time() -> void: + total_time_label.text = "Time in project: " + get_time_string_from_unix(total_time) + session_time_label.text = "Time this session: " + get_time_string_from_unix(session_time) + + +func get_time_string_from_unix(unix_time): + var time_string = "" + var unix_time_int = int(unix_time) + + var hours = floor(unix_time_int / 3600) + if hours < 10: + time_string += "0" + time_string += str(hours) + ":" + unix_time_int -= hours * 3600 + + var minutes = floor(unix_time_int / 60) + if minutes < 10: + time_string += "0" + time_string += str(minutes) + ":" + unix_time_int -= minutes * 60 + + var seconds = unix_time_int + if seconds < 10: + time_string += "0" + time_string += str(seconds) + + return time_string + + +func read_file() -> void: + if not FileAccess.file_exists(PATH_TO_SAVE_FILE): + return + + var save = FileAccess.open(PATH_TO_SAVE_FILE, FileAccess.READ) + + var json_string := "" + while save.get_position() < save.get_length(): + json_string += save.get_line() + + var parsed_result = JSON.parse_string(json_string) + + total_time = float(parsed_result['time']) + + + +func save_file() -> void: + var save = FileAccess.open(PATH_TO_SAVE_FILE, FileAccess.WRITE) + save.store_line(JSON.stringify({'time': roundf(total_time)}, "\t")) + + +func _on_settings_button_pressed() -> void: + settings_window.show() + + +func _on_settings_window_close_requested() -> void: + settings_window.hide() + + +func _on_settings_window_set_new_time(hours, minutes, seconds) -> void: + var unix_time = hours * 3600 + minutes * 60 + seconds + total_time = unix_time + print("Set Time in project to: " + get_time_string_from_unix(total_time)) diff --git a/addons/project_time_tracker/project_timer.tscn b/addons/project_time_tracker/project_timer.tscn new file mode 100644 index 0000000..933e8cd --- /dev/null +++ b/addons/project_time_tracker/project_timer.tscn @@ -0,0 +1,90 @@ +[gd_scene load_steps=3 format=3 uid="uid://dsb6vxpbduj7f"] + +[ext_resource type="Script" path="res://addons/project_time_tracker/project_timer.gd" id="1_1r5vr"] +[ext_resource type="Script" path="res://addons/project_time_tracker/settings_window.gd" id="2_p44mt"] + +[node name="Project Timer" type="Control"] +custom_minimum_size = Vector2(200, 91) +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +script = ExtResource("1_1r5vr") + +[node name="VBoxContainer" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="TimeInProject" type="Label" parent="VBoxContainer"] +layout_mode = 2 +text = "Time in project: 00:00:00" +autowrap_mode = 3 + +[node name="TimeThisSession" type="Label" parent="VBoxContainer"] +layout_mode = 2 +text = "Time this session: 00:00:00" +autowrap_mode = 3 + +[node name="SettingsButton" type="Button" parent="VBoxContainer"] +layout_mode = 2 +text = "Settings" + +[node name="SettingsWindow" type="Window" parent="."] +title = "Timer Settings" +initial_position = 2 +size = Vector2i(195, 100) +visible = false +popup_window = true +script = ExtResource("2_p44mt") + +[node name="Control" type="Control" parent="SettingsWindow"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 + +[node name="VBoxContainer" type="VBoxContainer" parent="SettingsWindow/Control"] +layout_mode = 0 +offset_right = 40.0 +offset_bottom = 40.0 + +[node name="Label" type="Label" parent="SettingsWindow/Control/VBoxContainer"] +layout_mode = 2 +text = "Manually Set Time To" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="SettingsWindow/Control/VBoxContainer"] +layout_mode = 2 + +[node name="InputHours" type="LineEdit" parent="SettingsWindow/Control/VBoxContainer/HBoxContainer"] +layout_mode = 2 +placeholder_text = "h" + +[node name="InputMinutes" type="LineEdit" parent="SettingsWindow/Control/VBoxContainer/HBoxContainer"] +layout_mode = 2 +placeholder_text = "m" + +[node name="InputSeconds" type="LineEdit" parent="SettingsWindow/Control/VBoxContainer/HBoxContainer"] +layout_mode = 2 +placeholder_text = "s" + +[node name="SetTimeButton" type="Button" parent="SettingsWindow/Control/VBoxContainer"] +layout_mode = 2 +text = "Set" + +[connection signal="pressed" from="VBoxContainer/SettingsButton" to="." method="_on_settings_button_pressed"] +[connection signal="close_requested" from="SettingsWindow" to="." method="_on_settings_window_close_requested"] +[connection signal="set_new_time" from="SettingsWindow" to="." method="_on_settings_window_set_new_time"] +[connection signal="text_changed" from="SettingsWindow/Control/VBoxContainer/HBoxContainer/InputHours" to="SettingsWindow" method="_on_input_hours_text_changed"] +[connection signal="text_changed" from="SettingsWindow/Control/VBoxContainer/HBoxContainer/InputMinutes" to="SettingsWindow" method="_on_input_minutes_text_changed"] +[connection signal="text_changed" from="SettingsWindow/Control/VBoxContainer/HBoxContainer/InputSeconds" to="SettingsWindow" method="_on_input_seconds_text_changed"] +[connection signal="pressed" from="SettingsWindow/Control/VBoxContainer/SetTimeButton" to="SettingsWindow" method="_on_set_time_button_pressed"] diff --git a/addons/project_time_tracker/settings_window.gd b/addons/project_time_tracker/settings_window.gd new file mode 100644 index 0000000..7253648 --- /dev/null +++ b/addons/project_time_tracker/settings_window.gd @@ -0,0 +1,28 @@ +@tool +extends Window + + +signal set_new_time(hours, minutes, seconds) + +@onready var hours_line_edit = $Control/VBoxContainer/HBoxContainer/InputHours +@onready var minutes_line_edit = $Control/VBoxContainer/HBoxContainer/InputMinutes +@onready var seconds_line_edit = $Control/VBoxContainer/HBoxContainer/InputSeconds +var hours = 0.0 +var minutes = 0.0 +var seconds = 0.0 + + +func _on_input_hours_text_changed(new_text: String) -> void: + hours = maxf(float(new_text), 0.0) + + +func _on_input_minutes_text_changed(new_text: String) -> void: + minutes = maxf(float(new_text), 0.0) + + +func _on_input_seconds_text_changed(new_text: String) -> void: + seconds = maxf(float(new_text), 0.0) + + +func _on_set_time_button_pressed() -> void: + emit_signal("set_new_time", hours, minutes, seconds) -- 2.30.2