commit e1f3ca740f4f64dae682aa39f91479910859ee8c Author: Xananax Date: Sat Feb 25 00:39:49 2023 +0400 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d355672 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.godot/ \ No newline at end of file diff --git a/Main.gd b/Main.gd new file mode 100644 index 0000000..d1f070e --- /dev/null +++ b/Main.gd @@ -0,0 +1,365 @@ +extends Control + +const CONFIG_PATH := "user://settings.cfg" + +enum COL{ + TEXT, + TIME +} + +const STRINGS := { + START = "start", + STOP = "stop", + NO_TIME = "00:00:00", +} + +@onready var time_label: Label = %TimeLabel +@onready var start_button: Button = %StartButton +@onready var task_name_line_edit: LineEdit = %TaskNameLineEdit +@onready var previous_tasks_tree: Tree = %PreviousTasksTree +@onready var timer: Timer = %Timer +@onready var tasks_button: Button = %TasksButton +@onready var settings_button: Button = %SettingsButton +@onready var previous_tasks_window: Window = %PreviousTasksWindow +@onready var settings_window: Window = %SettingsWindow +@onready var file_path_file_dialog: FileDialog = %FilePathFileDialog +@onready var file_path_line_edit: LineEdit = %FilePathLineEdit +@onready var file_path_button: Button = %FilePathButton +@onready var theme_path_file_dialog: FileDialog = %ThemePathFileDialog +@onready var theme_path_button: Button = %ThemePathButton +@onready var sound_check_box: CheckBox = %SoundCheckBox +@onready var attributions_rich_text_label: RichTextLabel = %AttributionsRichTextLabel +@onready var audio_stream_player: AudioStreamPlayer = %AudioStreamPlayer +@onready var open_data_dir_button: Button = %OpenDataDirButton + + +var previous_entries: Array[TimeEntry] = [] +var current_entry := TimeEntry.new() +var current_item: TreeItem +var config := ConfigFile.new() +var current_file := "" + + +func _init() -> void: + + config.load(CONFIG_PATH) + var default_path := OS.get_system_dir(OS.SYSTEM_DIR_DOCUMENTS, true).path_join("mouse_timer.csv") + current_file = config.get_value("MAIN", "file", default_path) + if config.has_section_key("MAIN", "theme"): + var new_theme: Theme = ResourceLoader.load(config.get_value("MAIN", "theme", "res://default_theme.theme"), "Theme") + if new_theme != null: + theme = new_theme + + +func _ready() -> void: + + get_tree().set_auto_accept_quit(false) + var _root := previous_tasks_tree.create_item() + + file_path_button.pressed.connect( + file_path_file_dialog.popup_centered + ) + + file_path_file_dialog.file_selected.connect(set_current_file) + file_path_line_edit.text_submitted.connect(set_current_file) + + theme_path_button.pressed.connect( + theme_path_file_dialog.popup_centered + ) + theme_path_file_dialog.file_selected.connect( + func theme_selected(theme_path: String) -> void: + var new_theme: Theme = ResourceLoader.load(theme_path, "Theme") + if new_theme != null: + theme = new_theme + config.set_value("MAIN", "theme", theme_path) + config.save(CONFIG_PATH) + ) + + theme_path_file_dialog.hide() + file_path_file_dialog.hide() + previous_tasks_window.hide() + settings_window.hide() + + timer.timeout.connect( + func on_timer_timeout() -> void: + current_entry.update() + + time_label.text = current_entry.get_period() + + var total_elapsed: int = current_entry.get_total_elapsed_seconds() + current_item.set_text(COL.TIME, TimeEntry.time_to_period(total_elapsed)) + current_item.set_metadata(COL.TIME, total_elapsed) + ) + + start_button.tooltip_text = tr(STRINGS.START) + start_button.toggle_mode = true + start_button.toggled.connect( + func start(is_on: bool) -> void: + if sound_check_box.button_pressed: + audio_stream_player.play() + if is_on: + current_entry = TimeEntry.new().start_recording() + current_entry.name = task_name_line_edit.text + current_item = append_name_to_tree(task_name_line_edit.text) + current_entry.previous_total = current_item.get_metadata(COL.TIME) + start_button.tooltip_text = tr(STRINGS.STOP) + timer.start() + else: + add_to_entries() + start_button.tooltip_text = tr(STRINGS.START) + time_label.text = STRINGS.NO_TIME + timer.stop() + ) + + + task_name_line_edit.text = config.get_value("MAIN", "last_task_name", "") + task_name_line_edit.text_changed.connect( + func(new_text: String) -> void: + config.set_value("MAIN", "last_task_name", new_text) + config.save(CONFIG_PATH) + ) + previous_tasks_tree.item_selected.connect( + func item_selected() -> void: + var item := previous_tasks_tree.get_selected() + task_name_line_edit.text = item.get_metadata(COL.TEXT) + ) + + tasks_button.toggle_mode = true + tasks_button.toggled.connect( + func tasks_toggled(is_on: bool) -> void: + previous_tasks_window.visible = is_on + ) + previous_tasks_window.close_requested.connect( + func close() -> void: + tasks_button.set_pressed_no_signal(false) + previous_tasks_window.hide() + ) + + settings_button.toggle_mode = true + settings_button.toggled.connect( + func settings_toggled(is_on: bool) -> void: + settings_window.visible = is_on + ) + settings_window.close_requested.connect( + func close() -> void: + settings_button.set_pressed_no_signal(false) + settings_window.hide() + ) + + sound_check_box.button_pressed = config.get_value("MAIN", "sound_fx", true) + sound_check_box.toggled.connect( + func sound_toggle(is_on: bool) -> void: + config.set_value("MAIN", "sound_fx", is_on) + ) + + open_data_dir_button.pressed.connect( + OS.shell_open.bind(OS.get_user_data_dir()) + ) + + attributions_rich_text_label.meta_clicked.connect(OS.shell_open) + + set_current_file(current_file) + + +## Adds a new time entry to the tree and to the data file +func add_to_entries() -> void: + previous_entries.append(current_entry) + var file := FileAccess.open(current_file, FileAccess.WRITE) + if file == null: + printerr("Could not open file") + file.store_csv_line(current_entry.to_csv_line()) + + +## Adds a new item to the tree, or returns the old item if it exists +func append_name_to_tree(task_name: String, total_time := 0) -> TreeItem: + var item := previous_tasks_tree.get_root() + for item_name in task_name.split("/"): + item.collapsed = false + item = find_item(item, item_name, true) + item.set_metadata(COL.TEXT, task_name) + if not item.get_metadata(COL.TIME): + item.set_metadata(COL.TIME, total_time) + previous_tasks_tree.scroll_to_item(item) + return item + + +## Finds an item in the tree by text +func find_item(root: TreeItem, item_name: String, or_create: bool) -> TreeItem: + for child in root.get_children(): + if child.get_text(COL.TEXT) == item_name: + return child + if or_create: + var child := root.create_child() + child.set_text(COL.TEXT, item_name) + child.set_text(COL.TIME, STRINGS.NO_TIME) + return child + return null + + +## Changes the data file path, and loads the new path +func set_current_file(new_current_file: String) -> void: + if not load_file(new_current_file): + return + previous_entries.clear() + current_file = new_current_file + config.set_value("MAIN", "file", current_file) + config.save(CONFIG_PATH) + file_path_file_dialog.current_path = current_file + file_path_file_dialog.current_dir = current_file.get_base_dir() + file_path_line_edit.text = current_file + + +## Loads the data file +func load_file(source_path: String) -> bool: + var file := FileAccess.open(source_path, FileAccess.READ) + if file == null: + file = FileAccess.open(source_path, FileAccess.WRITE) + if file == null: + printerr("Failed to open file %s"%[ProjectSettings.globalize_path(source_path)]) + return false + return true + var collector := {} + while not file.eof_reached(): + var line := file.get_csv_line() + if line.size() == 0 or "".join(line).length() == 0: + continue + if not TimeEntry.is_csv_line_valid(line): + push_warning("CSV Line `%s` is not conform"%[",".join(line)]) + continue + var entry := TimeEntry.new().from_csv_line(line) + previous_entries.append(entry) + if not collector.has(entry.name): + collector[entry.name] = 0 + collector[entry.name] += entry.get_elapsed_seconds() + for entry_name in collector: + append_name_to_tree(entry_name, collector[entry_name]) + file.close() + return true + + + +func _notification(what: int) -> void: + if what == NOTIFICATION_WM_CLOSE_REQUEST: + if start_button.button_pressed: + add_to_entries() + get_tree().quit() + + +## Unused; if a manual quit button is added, this would be used +func quit() -> void: + get_tree().notification(NOTIFICATION_WM_CLOSE_REQUEST) + + +class TimeEntry: + + var name := "" + var start_time := TimeStamp.new() + var end_time := TimeStamp.new() + var previous_total := 0 + + + func start_recording() -> TimeEntry: + start_time = start_time.from_current_time() + end_time = end_time.from_current_time() + return self + + + func update() -> void: + end_time = end_time.from_current_time() + + + func get_elapsed_seconds() -> int: + var elapsed := end_time.get_difference(start_time) + return elapsed + + + func get_total_elapsed_seconds() -> int: + var elapsed := get_elapsed_seconds() + previous_total + return elapsed + + + func get_period() -> String: + var time_in_secs := get_elapsed_seconds() + return TimeEntry.time_to_period(time_in_secs) + + + func get_total_period() -> String: + var time_in_secs := get_total_elapsed_seconds() + return TimeEntry.time_to_period(time_in_secs) + + + static func time_to_period(time_in_secs: int) -> String: + var seconds := time_in_secs%60 + @warning_ignore("integer_division") + var minutes := (time_in_secs/60)%60 + @warning_ignore("integer_division") + var hours := (time_in_secs/60)/60 + return "%02d:%02d:%02d" % [hours, minutes, seconds] + + func to_csv_line() -> PackedStringArray: + return PackedStringArray([ + name, + start_time, + end_time, + str(get_elapsed_seconds()), + ]) + + static func is_csv_line_valid(line: PackedStringArray) -> bool: + return line.size() > 2 + + + func from_csv_line(line: PackedStringArray) -> TimeEntry: + name = line[0] + start_time.from_string(line[1]) + end_time.from_string(line[2]) + return self + + +class TimeStamp: + var year := 0 + var month := 0 + var day := 0 + var weekday := 0 + var hour := 0 + var minute := 0 + var second := 0 + var unix := 0 + + + func from_current_time() -> TimeStamp: + return from_dict(Time.get_datetime_dict_from_system()) + + + func from_dict(time: Dictionary) -> TimeStamp: + year = time.year + month = time.month + day = time.day + weekday = time.weekday + hour = time.hour + minute = time.minute + second = time.second + unix = Time.get_unix_time_from_datetime_dict(time) + return self + + func to_dict() -> Dictionary: + return { + year = year, + month = month, + day = day, + weekday = weekday, + hour = hour, + minute = minute, + second = second, + } + + func get_difference(other_timestamp: TimeStamp) -> int: + return unix - other_timestamp.unix + + + func from_string(time_string: String) -> TimeStamp: + var time := Time.get_datetime_dict_from_datetime_string(time_string, true) + return from_dict(time) + + + func _to_string() -> String: + return Time.get_datetime_string_from_datetime_dict(to_dict(), false) diff --git a/Main.tscn b/Main.tscn new file mode 100644 index 0000000..1b62a82 --- /dev/null +++ b/Main.tscn @@ -0,0 +1,236 @@ +[gd_scene load_steps=6 format=3 uid="uid://bmlciwscreowf"] + +[ext_resource type="Theme" uid="uid://bd8ancgbfsvmd" path="res://assets/default_theme.theme" id="1_1mila"] +[ext_resource type="Script" path="res://Main.gd" id="1_vrowr"] +[ext_resource type="AudioStream" uid="uid://cdsbhoidgyx70" path="res://assets/pop.ogg" id="3_o37py"] + +[sub_resource type="InputEventKey" id="InputEventKey_guuii"] +device = -1 +pressed = true +keycode = 32 +unicode = 32 + +[sub_resource type="Shortcut" id="Shortcut_irhvi"] +events = [SubResource("InputEventKey_guuii")] + +[node name="PanelContainer" type="PanelContainer"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme = ExtResource("1_1mila") +theme_type_variation = &"background" + +[node name="Main" type="MarginContainer" parent="."] +layout_mode = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 +script = ExtResource("1_vrowr") + +[node name="VBoxContainer" type="VBoxContainer" parent="Main"] +layout_mode = 2 +size_flags_horizontal = 3 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Main/VBoxContainer"] +layout_mode = 2 + +[node name="SettingsButton" type="Button" parent="Main/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Settings" +theme_type_variation = &"settings_button" +icon_alignment = 1 + +[node name="TaskNameLineEdit" type="LineEdit" parent="Main/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +placeholder_text = "Task Name. Use \"/\" to create subtasks" +caret_blink = true +caret_blink_interval = 0.5 + +[node name="TasksButton" type="Button" parent="Main/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +tooltip_text = "Tasks" +theme_type_variation = &"tasks_button" +icon_alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="Main/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="TimeLabel" type="Label" parent="Main/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 1 +theme_type_variation = &"time_label" +text = "00:00:00" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="StartButton" type="Button" parent="Main/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +theme_type_variation = &"play_button" +shortcut = SubResource("Shortcut_irhvi") + +[node name="Timer" type="Timer" parent="Main"] +unique_name_in_owner = true + +[node name="FilePathFileDialog" type="FileDialog" parent="Main"] +unique_name_in_owner = true +title = "Pick Tracker File" +size = Vector2i(800, 600) +ok_button_text = "Save" +access = 2 +filters = PackedStringArray("*.csv ; Comma Separated Files") + +[node name="ThemePathFileDialog" type="FileDialog" parent="Main"] +unique_name_in_owner = true +title = "Open a File" +size = Vector2i(800, 600) +ok_button_text = "Open" +file_mode = 0 +access = 2 +filters = PackedStringArray("*.theme ; Theme Files") + +[node name="PreviousTasksWindow" type="Window" parent="Main"] +unique_name_in_owner = true +title = "Tasks" +size = Vector2i(300, 300) +visible = false +always_on_top = true + +[node name="PanelContainer" type="PanelContainer" parent="Main/PreviousTasksWindow"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_type_variation = &"background" + +[node name="MarginContainer" type="MarginContainer" parent="Main/PreviousTasksWindow/PanelContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="PreviousTasksTree" type="Tree" parent="Main/PreviousTasksWindow/PanelContainer/MarginContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +columns = 2 + +[node name="SettingsWindow" type="Window" parent="Main"] +unique_name_in_owner = true +title = "Settings" +size = Vector2i(300, 300) +visible = false +always_on_top = true + +[node name="PanelContainer" type="PanelContainer" parent="Main/SettingsWindow"] +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_type_variation = &"background" + +[node name="MarginContainer" type="MarginContainer" parent="Main/SettingsWindow/PanelContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 20 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 20 + +[node name="VBoxContainer" type="VBoxContainer" parent="Main/SettingsWindow/PanelContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +theme_override_constants/separation = 10 + +[node name="HBoxContainer" type="HBoxContainer" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"] +layout_mode = 2 +text = "File Path" + +[node name="FilePathLineEdit" type="LineEdit" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 3 +caret_blink = true +caret_blink_interval = 0.5 + +[node name="FilePathButton" type="Button" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "..." + +[node name="HBoxContainer2" type="HBoxContainer" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="Label" type="Label" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2"] +layout_mode = 2 +text = "Alternative theme +" + +[node name="ThemePathButton" type="Button" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer2"] +unique_name_in_owner = true +layout_mode = 2 +text = "load" + +[node name="HBoxContainer3" type="HBoxContainer" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 + +[node name="SoundCheckBox" type="CheckBox" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer/HBoxContainer3"] +unique_name_in_owner = true +layout_mode = 2 +button_pressed = true +text = "Sounds" + +[node name="OpenDataDirButton" type="Button" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +text = "open data dir" + +[node name="AttributionsRichTextLabel" type="RichTextLabel" parent="Main/SettingsWindow/PanelContainer/MarginContainer/VBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_vertical = 3 +theme_type_variation = &"small_text" +bbcode_enabled = true +text = "Font: Cairo, Designed by Mohamed Gaber, Accademia di Belle Arti di Urbino + +Sound: [url]https://opengameart.org/content/bubbles-pop[/url] + +This game uses Godot Engine, available under the following license: + + Copyright (c) 2014-present Godot Engine contributors. Copyright (c) 2007-2014 Juan Linietsky, Ariel Manzur. + + 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. +" + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="."] +unique_name_in_owner = true +stream = ExtResource("3_o37py") diff --git a/README.md b/README.md new file mode 100644 index 0000000..871eb74 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Rat Times + +Track your time, save it to a CSV file. + +![screenshot of the app](info/screenshot.png) + +That's it I guess + +Uses Godot 4 \ No newline at end of file diff --git a/assets/Cairo-VariableFont_slnt,wght.ttf b/assets/Cairo-VariableFont_slnt,wght.ttf new file mode 100644 index 0000000..c0b2ace Binary files /dev/null and b/assets/Cairo-VariableFont_slnt,wght.ttf differ diff --git a/assets/Cairo-VariableFont_slnt,wght.ttf.import b/assets/Cairo-VariableFont_slnt,wght.ttf.import new file mode 100644 index 0000000..3ab7e3c --- /dev/null +++ b/assets/Cairo-VariableFont_slnt,wght.ttf.import @@ -0,0 +1,33 @@ +[remap] + +importer="font_data_dynamic" +type="FontFile" +uid="uid://xixlsyswj6mv" +path="res://.godot/imported/Cairo-VariableFont_slnt,wght.ttf-8e1ad3a3f88c2663b83086e73553b314.fontdata" + +[deps] + +source_file="res://assets/Cairo-VariableFont_slnt,wght.ttf" +dest_files=["res://.godot/imported/Cairo-VariableFont_slnt,wght.ttf-8e1ad3a3f88c2663b83086e73553b314.fontdata"] + +[params] + +Rendering=null +antialiasing=1 +generate_mipmaps=false +multichannel_signed_distance_field=false +msdf_pixel_range=8 +msdf_size=48 +allow_system_fallback=true +force_autohinter=false +hinting=1 +subpixel_positioning=1 +oversampling=0.0 +Fallbacks=null +fallbacks=[] +Compress=null +compress=true +preload=[] +language_support={} +script_support={} +opentype_features={} diff --git a/assets/debug.keystore b/assets/debug.keystore new file mode 100644 index 0000000..9b9044a Binary files /dev/null and b/assets/debug.keystore differ diff --git a/assets/default_theme.theme b/assets/default_theme.theme new file mode 100644 index 0000000..1d4b1cd Binary files /dev/null and b/assets/default_theme.theme differ diff --git a/assets/play.svg b/assets/play.svg new file mode 100644 index 0000000..8374d30 --- /dev/null +++ b/assets/play.svg @@ -0,0 +1,54 @@ + + + + + + + + + + + + diff --git a/assets/play.svg.import b/assets/play.svg.import new file mode 100644 index 0000000..1cca7e2 --- /dev/null +++ b/assets/play.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bcledyqebmri" +path="res://.godot/imported/play.svg-1c68bc58d294f89383fc6b13dae7f4f1.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/play.svg" +dest_files=["res://.godot/imported/play.svg-1c68bc58d294f89383fc6b13dae7f4f1.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/assets/pop.ogg b/assets/pop.ogg new file mode 100644 index 0000000..72c9345 Binary files /dev/null and b/assets/pop.ogg differ diff --git a/assets/pop.ogg.import b/assets/pop.ogg.import new file mode 100644 index 0000000..3f0a7e6 --- /dev/null +++ b/assets/pop.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://cdsbhoidgyx70" +path="res://.godot/imported/pop.ogg-1ea32f2d825ac1e6d9420f3fecda89df.oggvorbisstr" + +[deps] + +source_file="res://assets/pop.ogg" +dest_files=["res://.godot/imported/pop.ogg-1ea32f2d825ac1e6d9420f3fecda89df.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/tasks.svg b/assets/tasks.svg new file mode 100644 index 0000000..ef00b31 --- /dev/null +++ b/assets/tasks.svg @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/tasks.svg.import b/assets/tasks.svg.import new file mode 100644 index 0000000..ca83687 --- /dev/null +++ b/assets/tasks.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ctxkpfc0syh2m" +path="res://.godot/imported/tasks.svg-78ebb4f2e18a1507072d2a7762176d95.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/tasks.svg" +dest_files=["res://.godot/imported/tasks.svg-78ebb4f2e18a1507072d2a7762176d95.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/assets/wheel.svg b/assets/wheel.svg new file mode 100644 index 0000000..28d43fb --- /dev/null +++ b/assets/wheel.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + diff --git a/assets/wheel.svg.import b/assets/wheel.svg.import new file mode 100644 index 0000000..f925b5d --- /dev/null +++ b/assets/wheel.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dskgsrua03gwe" +path="res://.godot/imported/wheel.svg-6ab291b0608b06b66eec00e4d4332248.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/wheel.svg" +dest_files=["res://.godot/imported/wheel.svg-6ab291b0608b06b66eec00e4d4332248.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/build-icons.sh b/build-icons.sh new file mode 100755 index 0000000..08fd944 --- /dev/null +++ b/build-icons.sh @@ -0,0 +1,53 @@ +#!/usr/bin/env bash + +# requires imagemagick and png2icns (usually found in libicns) + +convert \ + -density 300 \ + -define icon:auto-resize=256,128,96,64,48,32,16 \ + -background none \ + logo.svg logo.ico + + +# see: https://gist.github.com/plroebuck/af19a26c908838c7f9e363c571199deb + +icnsfilename="logo" +iconsetdirname=$(mktemp -d -t logo-XXXXXXXXXX) +sizes=( 16 32 128 256 512 ) +#densities=( 72 144 ) +densities=( 72 ) + +for size in "${sizes[@]}" +do + dimen="${size}x${size}" + for density in "${densities[@]}" + do + if [ "${density}" == "72" ]; + then + ## std + resolution="${dimen}" + scale="" + else + ## hires + resolution="$(( $size * 2 ))x$(( $size * 2 ))" + scale="@2x" + fi + pngfilename="${iconsetdirname}/icon_${dimen}${scale}.png" + #echo \ + convert \ + -background "none" \ + -density "${density}" \ + -resize "${resolution}!" \ + -units "PixelsPerInch" \ + logo.svg "${pngfilename}" + if [ "$?" -ne 0 ]; then + echo "error creating icon file: ${pngfilename}" >&2 + exit 1 + else + echo "wrote temp icon file: ${pngfilename}" >&2 + fi + done +done + + +png2icns logo.icns "${iconsetdirname}"/icon_*.png \ No newline at end of file diff --git a/export_presets.cfg b/export_presets.cfg new file mode 100644 index 0000000..bfb573e --- /dev/null +++ b/export_presets.cfg @@ -0,0 +1,495 @@ +[preset.0] + +name="Linux/X11" +platform="Linux/X11" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="exports/rat-times-x64.x86_64" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.0.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +binary_format/embed_pck=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true +binary_format/architecture="x86_64" +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="#!/usr/bin/env bash +export DISPLAY=:0 +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +\"{temp_dir}/{exe_name}\" {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.1] + +name="macOS" +platform="macOS" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.1.options] + +binary_format/architecture="universal" +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +application/icon="res://logo.icns" +application/icon_interpolation=4 +application/bundle_identifier="org.mutnt.io.rat-times" +application/signature="" +application/app_category="Productivity" +application/short_version="1.0" +application/version="1.0" +application/copyright="" +application/copyright_localized={} +display/high_res=true +codesign/codesign=1 +codesign/identity="" +codesign/certificate_file="" +codesign/certificate_password="" +codesign/entitlements/custom_file="" +codesign/entitlements/allow_jit_code_execution=false +codesign/entitlements/allow_unsigned_executable_memory=false +codesign/entitlements/allow_dyld_environment_variables=false +codesign/entitlements/disable_library_validation=false +codesign/entitlements/audio_input=false +codesign/entitlements/camera=false +codesign/entitlements/location=false +codesign/entitlements/address_book=false +codesign/entitlements/calendars=false +codesign/entitlements/photos_library=false +codesign/entitlements/apple_events=false +codesign/entitlements/debugging=false +codesign/entitlements/app_sandbox/enabled=false +codesign/entitlements/app_sandbox/network_server=false +codesign/entitlements/app_sandbox/network_client=false +codesign/entitlements/app_sandbox/device_usb=false +codesign/entitlements/app_sandbox/device_bluetooth=false +codesign/entitlements/app_sandbox/files_downloads=0 +codesign/entitlements/app_sandbox/files_pictures=0 +codesign/entitlements/app_sandbox/files_music=0 +codesign/entitlements/app_sandbox/files_movies=0 +codesign/entitlements/app_sandbox/helper_executables=[] +codesign/custom_options=PackedStringArray() +notarization/notarization=0 +notarization/apple_id_name="" +notarization/apple_id_password="" +notarization/apple_team_id="" +notarization/api_uuid="" +notarization/api_key="" +notarization/api_key_id="" +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/location_usage_description="" +privacy/location_usage_description_localized={} +privacy/address_book_usage_description="" +privacy/address_book_usage_description_localized={} +privacy/calendar_usage_description="" +privacy/calendar_usage_description_localized={} +privacy/photos_library_usage_description="" +privacy/photos_library_usage_description_localized={} +privacy/desktop_folder_usage_description="" +privacy/desktop_folder_usage_description_localized={} +privacy/documents_folder_usage_description="" +privacy/documents_folder_usage_description_localized={} +privacy/downloads_folder_usage_description="" +privacy/downloads_folder_usage_description_localized={} +privacy/network_volumes_usage_description="" +privacy/network_volumes_usage_description_localized={} +privacy/removable_volumes_usage_description="" +privacy/removable_volumes_usage_description_localized={} +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="#!/usr/bin/env bash +unzip -o -q \"{temp_dir}/{archive_name}\" -d \"{temp_dir}\" +open \"{temp_dir}/{exe_name}.app\" --args {cmd_args}" +ssh_remote_deploy/cleanup_script="#!/usr/bin/env bash +kill $(pgrep -x -f \"{temp_dir}/{exe_name}.app/Contents/MacOS/{exe_name} {cmd_args}\") +rm -rf \"{temp_dir}\"" + +[preset.2] + +name="Android" +platform="Android" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.2.options] + +custom_template/debug="" +custom_template/release="" +gradle_build/use_gradle_build=false +gradle_build/export_format=0 +gradle_build/min_sdk="" +gradle_build/target_sdk="" +architectures/armeabi-v7a=false +architectures/arm64-v8a=true +architectures/x86=false +architectures/x86_64=false +keystore/debug="/home/xananax/projects/TimeCounter/assets/debug.keystore" +keystore/debug_user="android" +keystore/debug_password="android" +keystore/release="" +keystore/release_user="" +keystore/release_password="" +version/code=1 +version/name="1.0" +package/unique_name="org.mutnt.io.ratstimes" +package/name="" +package/signed=true +package/app_category=2 +package/retain_data_on_uninstall=false +package/exclude_from_recents=false +launcher_icons/main_192x192="" +launcher_icons/adaptive_foreground_432x432="" +launcher_icons/adaptive_background_432x432="" +graphics/opengl_debug=false +xr_features/xr_mode=0 +xr_features/hand_tracking=0 +xr_features/hand_tracking_frequency=0 +xr_features/passthrough=0 +screen/immersive_mode=true +screen/support_small=true +screen/support_normal=true +screen/support_large=true +screen/support_xlarge=true +user_data_backup/allow=false +command_line/extra_args="" +apk_expansion/enable=false +apk_expansion/SALT="" +apk_expansion/public_key="" +permissions/custom_permissions=PackedStringArray() +permissions/access_checkin_properties=false +permissions/access_coarse_location=false +permissions/access_fine_location=false +permissions/access_location_extra_commands=false +permissions/access_mock_location=false +permissions/access_network_state=false +permissions/access_surface_flinger=false +permissions/access_wifi_state=false +permissions/account_manager=false +permissions/add_voicemail=false +permissions/authenticate_accounts=false +permissions/battery_stats=false +permissions/bind_accessibility_service=false +permissions/bind_appwidget=false +permissions/bind_device_admin=false +permissions/bind_input_method=false +permissions/bind_nfc_service=false +permissions/bind_notification_listener_service=false +permissions/bind_print_service=false +permissions/bind_remoteviews=false +permissions/bind_text_service=false +permissions/bind_vpn_service=false +permissions/bind_wallpaper=false +permissions/bluetooth=false +permissions/bluetooth_admin=false +permissions/bluetooth_privileged=false +permissions/brick=false +permissions/broadcast_package_removed=false +permissions/broadcast_sms=false +permissions/broadcast_sticky=false +permissions/broadcast_wap_push=false +permissions/call_phone=false +permissions/call_privileged=false +permissions/camera=false +permissions/capture_audio_output=false +permissions/capture_secure_video_output=false +permissions/capture_video_output=false +permissions/change_component_enabled_state=false +permissions/change_configuration=false +permissions/change_network_state=false +permissions/change_wifi_multicast_state=false +permissions/change_wifi_state=false +permissions/clear_app_cache=false +permissions/clear_app_user_data=false +permissions/control_location_updates=false +permissions/delete_cache_files=false +permissions/delete_packages=false +permissions/device_power=false +permissions/diagnostic=false +permissions/disable_keyguard=false +permissions/dump=false +permissions/expand_status_bar=false +permissions/factory_test=false +permissions/flashlight=false +permissions/force_back=false +permissions/get_accounts=false +permissions/get_package_size=false +permissions/get_tasks=false +permissions/get_top_activity_info=false +permissions/global_search=false +permissions/hardware_test=false +permissions/inject_events=false +permissions/install_location_provider=false +permissions/install_packages=false +permissions/install_shortcut=false +permissions/internal_system_window=false +permissions/internet=false +permissions/kill_background_processes=false +permissions/location_hardware=false +permissions/manage_accounts=false +permissions/manage_app_tokens=false +permissions/manage_documents=false +permissions/manage_external_storage=false +permissions/master_clear=false +permissions/media_content_control=false +permissions/modify_audio_settings=false +permissions/modify_phone_state=false +permissions/mount_format_filesystems=false +permissions/mount_unmount_filesystems=false +permissions/nfc=false +permissions/persistent_activity=false +permissions/process_outgoing_calls=false +permissions/read_calendar=false +permissions/read_call_log=false +permissions/read_contacts=false +permissions/read_external_storage=false +permissions/read_frame_buffer=false +permissions/read_history_bookmarks=false +permissions/read_input_state=false +permissions/read_logs=false +permissions/read_phone_state=false +permissions/read_profile=false +permissions/read_sms=false +permissions/read_social_stream=false +permissions/read_sync_settings=false +permissions/read_sync_stats=false +permissions/read_user_dictionary=false +permissions/reboot=false +permissions/receive_boot_completed=false +permissions/receive_mms=false +permissions/receive_sms=false +permissions/receive_wap_push=false +permissions/record_audio=false +permissions/reorder_tasks=false +permissions/restart_packages=false +permissions/send_respond_via_message=false +permissions/send_sms=false +permissions/set_activity_watcher=false +permissions/set_alarm=false +permissions/set_always_finish=false +permissions/set_animation_scale=false +permissions/set_debug_app=false +permissions/set_orientation=false +permissions/set_pointer_speed=false +permissions/set_preferred_applications=false +permissions/set_process_limit=false +permissions/set_time=false +permissions/set_time_zone=false +permissions/set_wallpaper=false +permissions/set_wallpaper_hints=false +permissions/signal_persistent_processes=false +permissions/status_bar=false +permissions/subscribed_feeds_read=false +permissions/subscribed_feeds_write=false +permissions/system_alert_window=false +permissions/transmit_ir=false +permissions/uninstall_shortcut=false +permissions/update_device_stats=false +permissions/use_credentials=false +permissions/use_sip=false +permissions/vibrate=false +permissions/wake_lock=false +permissions/write_apn_settings=false +permissions/write_calendar=false +permissions/write_call_log=false +permissions/write_contacts=false +permissions/write_external_storage=false +permissions/write_gservices=false +permissions/write_history_bookmarks=false +permissions/write_profile=false +permissions/write_secure_settings=false +permissions/write_settings=false +permissions/write_sms=false +permissions/write_social_stream=false +permissions/write_sync_settings=false +permissions/write_user_dictionary=false + +[preset.3] + +name="iOS" +platform="iOS" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.3.options] + +custom_template/debug="" +custom_template/release="" +architectures/arm64=true +application/app_store_team_id="org.mutnt.io" +application/provisioning_profile_uuid_debug="" +application/code_sign_identity_debug="" +application/export_method_debug=1 +application/provisioning_profile_uuid_release="" +application/code_sign_identity_release="" +application/export_method_release=0 +application/targeted_device_family=2 +application/bundle_identifier="rat-times" +application/signature="" +application/short_version="1.0" +application/version="1.0" +application/icon_interpolation=4 +application/launch_screens_interpolation=4 +capabilities/access_wifi=false +capabilities/push_notifications=false +user_data/accessible_from_files_app=false +user_data/accessible_from_itunes_sharing=false +privacy/camera_usage_description="" +privacy/camera_usage_description_localized={} +privacy/microphone_usage_description="" +privacy/microphone_usage_description_localized={} +privacy/photolibrary_usage_description="" +privacy/photolibrary_usage_description_localized={} +icons/iphone_120x120="" +icons/iphone_180x180="" +icons/ipad_76x76="" +icons/ipad_152x152="" +icons/ipad_167x167="" +icons/app_store_1024x1024="" +icons/spotlight_40x40="" +icons/spotlight_80x80="" +icons/settings_58x58="" +icons/settings_87x87="" +icons/notification_40x40="" +icons/notification_60x60="" +storyboard/use_launch_screen_storyboard=false +storyboard/image_scale_mode=0 +storyboard/custom_image@2x="" +storyboard/custom_image@3x="" +storyboard/use_custom_bg_color=false +storyboard/custom_bg_color=Color(0, 0, 0, 1) +landscape_launch_screens/iphone_2436x1125="" +landscape_launch_screens/iphone_2208x1242="" +landscape_launch_screens/ipad_1024x768="" +landscape_launch_screens/ipad_2048x1536="" +portrait_launch_screens/iphone_640x960="" +portrait_launch_screens/iphone_640x1136="" +portrait_launch_screens/iphone_750x1334="" +portrait_launch_screens/iphone_1125x2436="" +portrait_launch_screens/ipad_768x1024="" +portrait_launch_screens/ipad_1536x2048="" +portrait_launch_screens/iphone_1242x2208="" + +[preset.4] + +name="Windows Desktop" +platform="Windows Desktop" +runnable=true +dedicated_server=false +custom_features="" +export_filter="all_resources" +include_filter="" +exclude_filter="" +export_path="" +encryption_include_filters="" +encryption_exclude_filters="" +encrypt_pck=false +encrypt_directory=false +script_encryption_key="" + +[preset.4.options] + +custom_template/debug="" +custom_template/release="" +debug/export_console_script=1 +binary_format/embed_pck=false +texture_format/bptc=false +texture_format/s3tc=true +texture_format/etc=false +texture_format/etc2=false +texture_format/no_bptc_fallbacks=true +binary_format/architecture="x86_64" +codesign/enable=false +codesign/identity_type=0 +codesign/identity="" +codesign/password="" +codesign/timestamp=true +codesign/timestamp_server_url="" +codesign/digest_algorithm=1 +codesign/description="" +codesign/custom_options=PackedStringArray() +application/modify_resources=false +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="" +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}'" diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..c98fbb6 Binary files /dev/null and b/icon.png differ diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..30705ea --- /dev/null +++ b/icon.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bxdbjqtxinxlp" +path="res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=["res://.godot/imported/icon.png-487276ed1e3a0c39cad0279d744ee560.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/info/.gdignore b/info/.gdignore new file mode 100644 index 0000000..e69de29 diff --git a/info/screenshot.png b/info/screenshot.png new file mode 100644 index 0000000..d1880c8 Binary files /dev/null and b/info/screenshot.png differ diff --git a/logo.icns b/logo.icns new file mode 100644 index 0000000..7caed91 Binary files /dev/null and b/logo.icns differ diff --git a/logo.ico b/logo.ico new file mode 100644 index 0000000..9d77fa0 Binary files /dev/null and b/logo.ico differ diff --git a/logo.svg b/logo.svg new file mode 100644 index 0000000..5b92d8a --- /dev/null +++ b/logo.svg @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + diff --git a/logo.svg.import b/logo.svg.import new file mode 100644 index 0000000..487d4ef --- /dev/null +++ b/logo.svg.import @@ -0,0 +1,37 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fk5s6m8qlsei" +path="res://.godot/imported/logo.svg-8d8cf086b974db23ad31f8a2f3ea7d0f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://logo.svg" +dest_files=["res://.godot/imported/logo.svg-8d8cf086b974db23ad31f8a2f3ea7d0f.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..a62fe9c --- /dev/null +++ b/project.godot @@ -0,0 +1,43 @@ +; 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="Rat Times" +config/description="Track your time(s)s" +run/main_scene="res://Main.tscn" +config/use_custom_user_dir=true +config/custom_user_dir_name="rat_times" +config/features=PackedStringArray("4.0") +boot_splash/bg_color=Color(0.141176, 0.141176, 0.141176, 0) +boot_splash/show_image=false +config/icon="res://logo.svg" +config/macos_native_icon="res://logo.icns" +config/windows_native_icon="res://logo.ico" + +[display] + +window/size/viewport_width=500 +window/size/viewport_height=151 +window/size/resizable=false +window/size/always_on_top=true +window/size/transparent=true +window/per_pixel_transparency/allowed=true +window/subwindows/embed_subwindows=false + +[physics] + +common/enable_pause_aware_picking=true + +[rendering] + +textures/vram_compression/import_etc2_astc=true +viewport/transparent_background=true +environment/default_environment="res://default_env.tres"