mirror of
https://github.com/hobbesjaap/wellbeingapp.git
synced 2024-11-08 19:52:59 +00:00
moved development over to github
This commit is contained in:
parent
306304c2a6
commit
afc53483d1
2
.gitignore
vendored
2
.gitignore
vendored
@ -8,6 +8,8 @@ export.cfg
|
||||
export_presets.cfg
|
||||
*.import
|
||||
.godot/
|
||||
godot/.import/
|
||||
godot/.godot/
|
||||
|
||||
# Imported translations (automatically generated from CSV files)
|
||||
*.translation
|
||||
|
39
COPYRIGHTS.md
Normal file
39
COPYRIGHTS.md
Normal file
@ -0,0 +1,39 @@
|
||||
# Copyrights
|
||||
|
||||
This document attributes the different components used to build the Wellbeing App.
|
||||
|
||||
## The engine: Godot
|
||||
|
||||
This app uses Godot Engine, available under the following license:
|
||||
|
||||
Copyright (c) 2007-2022 Juan Linietsky, Ariel Manzur. Copyright (c) 2014-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.
|
||||
|
||||
## Fonts (as part of Godot)
|
||||
|
||||
Portions of this software are copyright © 2022 The FreeType Project (www.freetype.org). All rights reserved. The app uses the Noto font family, for which <a href="https://github.com/notofonts/noto-fonts/blob/main/LICENSE" target="_blank">the full license is available here</a>.
|
||||
|
||||
## Internet module Mbed TLS (as part of Godot)
|
||||
|
||||
Copyright The Mbed TLS Contributors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
|
||||
|
||||
## Multiplayer module ENET (as part of Godot)
|
||||
|
||||
Copyright (c) 2002-2020 Lee Salzman
|
||||
|
||||
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.
|
22
FEATURES.md
Normal file
22
FEATURES.md
Normal file
@ -0,0 +1,22 @@
|
||||
# A list of features currently implemented
|
||||
|
||||
- Saving & loading of persistent variables to user.ini on the default folder. This should work across all devices. (Currently tested across MacOS and Linux)
|
||||
- Ability to add your own name.
|
||||
- Coded several controllers in separate scripts that access different variables and portions of the app, to allow for flexible future development.
|
||||
|
||||
# A list of features "in progress"
|
||||
|
||||
- Working with the system time to present time-related information.
|
||||
- Bug-testing and a robust "welcome new user" approach to the saving of persistent data.
|
||||
- A "reset" button to remove the user.ini file from within the app.
|
||||
|
||||
# A list of future features to come before next release
|
||||
|
||||
- Wellbeing Cards (one-a-day) depending on user-selected categories.
|
||||
- A serviceable GUI.
|
||||
- A name (and logo, icon, etc).
|
||||
|
||||
# Bucket list of features for future releases
|
||||
|
||||
- White Noise sound section
|
||||
- Journal section
|
1
LICENSE.md
Normal file
1
LICENSE.md
Normal file
@ -0,0 +1 @@
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License</a>.
|
7
PRIVACY.md
Normal file
7
PRIVACY.md
Normal file
@ -0,0 +1,7 @@
|
||||
# Privacy Statement
|
||||
|
||||
- As can be seen by inspecting the source code, the app contains no tracking features or advertisement systems of ANY kind. I am not interested in your data.
|
||||
- Any data entered into the app (your name, birthdate, etc) is stored locally on your device.
|
||||
- The only internet connectivity that the app employs is to check for app updates online (by checking the file version_stuff.csv here on GitHub). If you're not online, the check fails, simple as that. The code for this function will only trigger if you press the "Check for Updates" button. It can be inspected in start_menu.gd
|
||||
|
||||
Too often "free" apps make you their product. Or are free with a hefty subscription lurking around the corner. I get it, for some people, such apps are their livelihood. For me, it's something I wish to develop and hope other people find useful. There is no monetary gain here. Of course I'm curious to see who uses the app. That's why I offer the option to subscribe to a newsletter, which is different. It's opt-in privacy-by-design stuff. You don't want to sign up? Don't press the button. It's really that simple. :)
|
42
README.md
42
README.md
@ -1,3 +1,43 @@
|
||||
<p align="center">
|
||||
<img src="./data/main_icon_smaller.png" width="200" height="200">
|
||||
</p>
|
||||
|
||||
# Wellbeing App (currently unnamed)
|
||||
|
||||
I have moved all code and future development to my self-hosted Gitea: [click here to view this repo there](https://gitea.defiantjc.synology.me/jaap/wellbeingapp).
|
||||
A freeware and open source wellbeing app.
|
||||
|
||||
## Guiding Principles
|
||||
|
||||
This app is being developed, researched and released using the following guiding principles:
|
||||
|
||||
1. **Research-informed**: Wherever possible, any intervention or activity suggested by the app will be supported by academic research. An up-to-date list of academic references (APA style) will be kept within the app with a very brief description on what segment of the app it informed. A more detailed breakdown may appear on my private website, or here, at some point.
|
||||
2. **Agile practises**: I will try to adopt agile coding practises as I go through. This means I aim to release useful features as soon as possible and reiterate, refactor and improve based on feedback. Using the in-app feedback button to let me know how things work for you is therefore the best way to gather this information at this stage.
|
||||
3. **Cross-platform**: The app will (when a first release happens, see the [Features document for an overview](FEATURES.md)) be cross-platform, available initially for Windows, MacOS, Linux & iOS. Android may happen, I currently don't have any Android devices to play with.
|
||||
4. **Free, Open Source**: Inspired by the likes of the NOBA project, the Linux community and countless other highly successful Free, Open Source Software (FOSS) projects out there, my aim is to offer a wide-ranging wellbeing tool available for free to anyone who seeks to use this. The only exception may be future iOS versions, due to the requirement for a paid Developer account with Apple. This will depend on any changes in my personal financial situation.
|
||||
5. **Potentially informing my own research**: This guiding principle may develop into something cohesive or fall away completely. I am currently a student at Glasgow University, completing my Master's in Science in Psychology (online conversion). Depending on how successful I am with developing this project, I may end up designing a research project around it to inform my dissertation / thesis. This is an idea I'm toying with. If this pans out, the research project will run separate from this app, but I will seek volunteers to gather anonymous usage data from. I will not build *any* telemetry into this app. Ever. Any sampling and data collection will run through a separate platform (most likely LimeSurvey).
|
||||
|
||||
## Psychological Principles, Definitions and Criteria
|
||||
|
||||
Equally important are the psychological principles that guide decisions about what to include in this app. Since many concepts have varying definitions I will keep an overview here.
|
||||
|
||||
1. All activities and interventions available in the app will be *research-informed*. As explained by Ashman (2018), it is noted where evidence exists and where it does not, with decisions made accordingly. This approach acknowledges that, even where evidence exists, it may have other considerations, e.g. a very small number of participants or participants from a similar background or ethnicity.
|
||||
2. There is no conclusive definition of *wellbeing*. For the purposes of this app, wellbeing is seen not as a state or fixed endpoint. Similar to work-life balance, it is seen as something we must always strive to maintain. A number of *self-care* interventions can assist with this balancing.
|
||||
3. The concept of a psychologically rich life, as defined by Oishi & Westgate (2022) which states three related, but distinct aspects of a good life: happiness, meaning and psychological richness.
|
||||
|
||||
## Development Logs
|
||||
|
||||
My aim is to write a development log (or potentially record one on YouTube now and again) whenever I have something meaningful to say. These are hosted on my personal blog. Links to these dev logs are listed below, for easy reference.
|
||||
|
||||
- <a href="https://www.jaapmarsman.com/post/2022-08-10-devlog-one/" target="_blank">DevLog #1</a>
|
||||
|
||||
## License & Attributions
|
||||
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank"><img alt="Creative Commons Licence" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-nd/4.0/88x31.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/" target="_blank">Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License</a>.
|
||||
|
||||
For an overview of all underlying licences, copyrights and attributions, please see the [Copyrights document](COPYRIGHTS.md).
|
||||
|
||||
## References
|
||||
|
||||
Ashman, G. (2018). The truth about teaching: An evidence-informed guide for new teachers. SAGE.
|
||||
|
||||
Oishi, S., & Westgate, E. C. (2022). A psychologically rich life: Beyond happiness and meaning. Psychological Review, 129(4), 790–811. [https://doi.org/10.1037/rev0000317](https://doi.org/10.1037/rev0000317)
|
BIN
data/main_icon_smaller.png
Normal file
BIN
data/main_icon_smaller.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 74 KiB |
3
data/wellbeing_cards.csv
Normal file
3
data/wellbeing_cards.csv
Normal file
@ -0,0 +1,3 @@
|
||||
id,category,title,description,picture_id,audio_id,language
|
||||
00001,GWB,Nostalgic Media Consumption,,,,en
|
||||
,,,,,,
|
|
BIN
design_files/colour_scheme.png
(Stored with Git LFS)
Normal file
BIN
design_files/colour_scheme.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
design_files/journal_idea.md
(Stored with Git LFS)
Normal file
BIN
design_files/journal_idea.md
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
design_files/main_icon.afdesign
(Stored with Git LFS)
Normal file
BIN
design_files/main_icon.afdesign
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Black.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Black.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-BlackItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-BlackItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Bold.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Bold.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-BoldItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-BoldItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraBold.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraBold.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraBoldItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraBoldItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraLight.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraLight.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraLightItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-ExtraLightItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Italic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Italic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Light.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Light.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-LightItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-LightItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Medium.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Medium.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-MediumItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-MediumItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Regular.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Regular.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-SemiBold.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-SemiBold.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-SemiBoldItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-SemiBoldItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-Thin.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-Thin.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/NotoSansDisplay-ThinItalic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/NotoSansDisplay-ThinItalic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/noto_sans_display.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/noto_sans_display.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/noto_sans_display_bold.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/noto_sans_display_bold.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/fonts/noto_sans_display_italic.ttf
(Stored with Git LFS)
Normal file
BIN
godot/Assets/fonts/noto_sans_display_italic.ttf
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/icons/mac_icon.icns
(Stored with Git LFS)
Normal file
BIN
godot/Assets/icons/mac_icon.icns
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/icons/main_icon.png
(Stored with Git LFS)
Normal file
BIN
godot/Assets/icons/main_icon.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/icons/main_icon_big_sur_small.png
(Stored with Git LFS)
Normal file
BIN
godot/Assets/icons/main_icon_big_sur_small.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
godot/Assets/icons/main_icon_smaller.png
(Stored with Git LFS)
Normal file
BIN
godot/Assets/icons/main_icon_smaller.png
(Stored with Git LFS)
Normal file
Binary file not shown.
3
godot/apps/daily_prompts.tscn
Normal file
3
godot/apps/daily_prompts.tscn
Normal file
@ -0,0 +1,3 @@
|
||||
[gd_scene format=2]
|
||||
|
||||
[node name="daily_prompts" type="CanvasLayer"]
|
5
godot/apps/pomodoro.tscn
Normal file
5
godot/apps/pomodoro.tscn
Normal file
@ -0,0 +1,5 @@
|
||||
[gd_scene format=2]
|
||||
|
||||
[node name="pomodoro" type="CanvasLayer"]
|
||||
|
||||
[node name="25min_timer" type="Timer" parent="."]
|
31
godot/birthday_selector.gd
Normal file
31
godot/birthday_selector.gd
Normal file
@ -0,0 +1,31 @@
|
||||
extends GridContainer
|
||||
|
||||
|
||||
@onready var user_values = get_node("/root/UserValues")
|
||||
|
||||
|
||||
func _ready():
|
||||
# Access the "country_menu" PopupMenu through this.
|
||||
var birth_month_popup_menu: PopupMenu = $button_birth_month.get_popup()
|
||||
var birth_day_popup_menu: PopupMenu = $button_birth_day.get_popup()
|
||||
# Signal for when the user selects an PopupMenu item.
|
||||
var _error = birth_month_popup_menu.connect("id_pressed",Callable(self,"_on_month_selected"))
|
||||
var _error2 = birth_day_popup_menu.connect("id_pressed",Callable(self,"_on_day_selected"))
|
||||
|
||||
if user_values.user_birth_month != 0:
|
||||
$button_birth_month.text = str("Month " + str(user_values.user_birth_month))
|
||||
|
||||
if user_values.user_birth_day != 0:
|
||||
$button_birth_day.text = str("Day " + str(user_values.user_birth_day))
|
||||
|
||||
|
||||
func _on_month_selected( id ):
|
||||
print(id)
|
||||
user_values.user_birth_month = id
|
||||
$button_birth_month.text = str("Month " + str(id))
|
||||
|
||||
|
||||
func _on_day_selected( id ):
|
||||
print(id)
|
||||
user_values.user_birth_day = id
|
||||
$button_birth_day.text = str("Day " + str(id))
|
9
godot/button_email_feedback.gd
Normal file
9
godot/button_email_feedback.gd
Normal file
@ -0,0 +1,9 @@
|
||||
extends Button
|
||||
|
||||
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
func _on_button_email_feedback_pressed():
|
||||
var _error = OS.shell_open("mailto:feedback@jaapmarsman.com")
|
8
godot/button_name.gd
Normal file
8
godot/button_name.gd
Normal file
@ -0,0 +1,8 @@
|
||||
extends Button
|
||||
|
||||
|
||||
@onready var ui_control = get_node("/root/UiControl")
|
||||
|
||||
|
||||
func _on_button_name_pressed():
|
||||
ui_control.show_user_menu()
|
5
godot/button_open_github.gd
Normal file
5
godot/button_open_github.gd
Normal file
@ -0,0 +1,5 @@
|
||||
extends Button
|
||||
|
||||
|
||||
func _on_button_open_github_pressed():
|
||||
var _error = OS.shell_open("https://gitea.defiantjc.synology.me/jaap/wellbeingapp")
|
39
godot/button_user_save.gd
Normal file
39
godot/button_user_save.gd
Normal file
@ -0,0 +1,39 @@
|
||||
extends Button
|
||||
|
||||
|
||||
@onready var node_variables = get_node("/root/NodeVariables")
|
||||
@onready var ui_control = get_node("/root/UiControl")
|
||||
@onready var user_values = get_node("/root/UserValues")
|
||||
@onready var user_name = get_node("%textbox_user_name")
|
||||
|
||||
|
||||
func _on_button_user_save_pressed():
|
||||
|
||||
if user_name.text == "":
|
||||
# Prettify this later with a friendly user prompt
|
||||
print("Won't continue. Put in name.")
|
||||
|
||||
else:
|
||||
# First time label turns off - this is done every time - no harm in that?
|
||||
node_variables.first_time_label.visible = false
|
||||
|
||||
# Stores values in ini file
|
||||
user_values.config.set_value("User", "user_name", user_name.text)
|
||||
user_values.user_first_name = user_name.text
|
||||
user_values.config.set_value("User", "user_birth_month", user_values.user_birth_month)
|
||||
user_values.config.set_value("User", "user_birth_day", user_values.user_birth_day)
|
||||
|
||||
#config.set_value("Player1", "best_score", 10)
|
||||
#onfig.set_value("Player2", "player_name", "V3geta")
|
||||
#config.set_value("Player2", "best_score", 9001)
|
||||
|
||||
# Save it to a file (overwrite if already exists).
|
||||
# Need to make sure I never lose any values I add.
|
||||
# This seems to be a manual thing to program.
|
||||
# So per value, make sure to read it upon load.
|
||||
# And write it out again as well.
|
||||
|
||||
user_values.config.save("user://user.ini")
|
||||
|
||||
node_variables.welcome_label.text = user_values.welcome_day_part + user_values.user_first_name + "!"
|
||||
ui_control.show_start_menu()
|
3
godot/data/wellbeings_cards.json
Normal file
3
godot/data/wellbeings_cards.json
Normal file
@ -0,0 +1,3 @@
|
||||
[
|
||||
{"id": "", "category": "", "title": "", "description": "", "picture_id": "", "audio_id": "", "language": ""}
|
||||
]
|
7
godot/default_env.tres
Normal file
7
godot/default_env.tres
Normal file
@ -0,0 +1,7 @@
|
||||
[gd_resource type="Environment" load_steps=2 format=3 uid="uid://dkny61n28xihu"]
|
||||
|
||||
[sub_resource type="Sky" id="1"]
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
sky = SubResource("1")
|
33
godot/main_screen.gd
Normal file
33
godot/main_screen.gd
Normal file
@ -0,0 +1,33 @@
|
||||
extends CanvasLayer
|
||||
|
||||
|
||||
@onready var node_variables = get_node("/root/NodeVariables")
|
||||
@onready var ui_control = get_node("/root/UiControl")
|
||||
@onready var user_values = get_node("/root/UserValues")
|
||||
|
||||
|
||||
func _ready():
|
||||
# Read config file if it exists
|
||||
# otherwise set up new user data
|
||||
|
||||
if user_values.err != OK:
|
||||
ui_control.show_user_menu()
|
||||
node_variables.first_time_label.visible = true
|
||||
|
||||
else:
|
||||
|
||||
# Set starting state visibility
|
||||
ui_control.show_start_menu()
|
||||
node_variables.first_time_label.visible = false
|
||||
|
||||
# define variables from ini file
|
||||
node_variables.user_name.text = user_values.user_first_name
|
||||
|
||||
# Iterate over all sections.
|
||||
# for player in config.get_sections():
|
||||
# # Fetch the data for each section.
|
||||
# var player_name = config.get_value(player, "player_name")
|
||||
# var player_score = config.get_value(player, "best_score")
|
||||
|
||||
#func _process(delta):
|
||||
# pass
|
16
godot/node_variables.gd
Normal file
16
godot/node_variables.gd
Normal file
@ -0,0 +1,16 @@
|
||||
extends Node
|
||||
|
||||
|
||||
@onready var main_screen = get_node("/root/main_screen")
|
||||
@onready var start_menu = get_node("/root/main_screen/UI/top_container/start_menu")
|
||||
@onready var user_menu = get_node("/root/main_screen/UI/top_container/user_details")
|
||||
@onready var daily_prompts = get_node("/root/main_screen/UI/top_container/daily_prompts")
|
||||
|
||||
|
||||
@onready var user_name = get_node("/root/main_screen/UI/top_container/user_details/user_menu/green_panel/textbox_user_name")
|
||||
@onready var first_time_label = get_node("/root/main_screen/UI/top_container/user_details/user_menu/green_panel/label_first_time")
|
||||
@onready var welcome_label = get_node("/root/main_screen/UI/top_container/start_menu/welcome_title")
|
||||
|
||||
|
||||
func _ready():
|
||||
pass
|
18
godot/program_values.gd
Normal file
18
godot/program_values.gd
Normal file
@ -0,0 +1,18 @@
|
||||
extends Node
|
||||
|
||||
|
||||
# This variable lists the release number.
|
||||
# This is "the number of releases".
|
||||
|
||||
var release_version : int = 1
|
||||
|
||||
# The var web_release_version is pulled from GitHub
|
||||
# when the update button is checked. A higher value means
|
||||
# an update is available
|
||||
|
||||
var web_release_version : int = 0
|
||||
var current_version : String = "0.0.8"
|
||||
|
||||
|
||||
func _ready():
|
||||
pass
|
46
godot/project.godot
Normal file
46
godot/project.godot
Normal file
@ -0,0 +1,46 @@
|
||||
; 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="Wellbeing App"
|
||||
run/main_scene="res://start_screen.tscn"
|
||||
config/features=PackedStringArray("4.1")
|
||||
run/low_processor_mode=true
|
||||
config/icon="res://Assets/icons/main_icon.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
UserValues="*res://user_values.gd"
|
||||
ProgramValues="*res://program_values.gd"
|
||||
UiControl="*res://ui_control.gd"
|
||||
NodeVariables="*res://node_variables.gd"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/viewport_width=1280
|
||||
window/size/viewport_height=720
|
||||
window/size/window_width_override=2560
|
||||
window/size/window_height_override=1440
|
||||
window/energy_saving/keep_screen_on=false
|
||||
window/stretch/mode="2d"
|
||||
window/stretch/aspect="keep_width"
|
||||
|
||||
[gui]
|
||||
|
||||
theme/use_hidpi=true
|
||||
|
||||
[physics]
|
||||
|
||||
common/enable_pause_aware_picking=true
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/defaults/default_environment="res://default_env.tres"
|
33
godot/start_menu.gd
Normal file
33
godot/start_menu.gd
Normal file
@ -0,0 +1,33 @@
|
||||
extends CanvasLayer
|
||||
|
||||
var csv_url : String = "https://gitea.defiantjc.synology.me/jaap/wellbeingapp/raw/branch/main/version_info.csv"
|
||||
var welcome_day_part : String = " "
|
||||
|
||||
|
||||
func _ready():
|
||||
$version_label.text = "Version " + str(ProgramValues.current_version)
|
||||
|
||||
UserValues.get_device_time()
|
||||
UserValues.set_welcome_day_part()
|
||||
|
||||
$welcome_title.text = UserValues.welcome_day_part + UserValues.user_first_name + "!"
|
||||
|
||||
|
||||
func _on_button_update_check_pressed():
|
||||
$HTTPRequest.request(csv_url)
|
||||
|
||||
|
||||
func update_user_name_label():
|
||||
$welcome_title.text = "Good morning, " + UserValues.user_first_name + "!"
|
||||
|
||||
|
||||
func _on_HTTPRequest_request_completed(_result, _response_code, _headers, body):
|
||||
var test_json_conv = JSON.new()
|
||||
test_json_conv.parse(body.get_string_from_utf8())
|
||||
var json = test_json_conv.get_data()
|
||||
print(json)
|
||||
ProgramValues.web_release_version = json
|
||||
if ProgramValues.web_release_version > ProgramValues.release_version:
|
||||
print("There's an update!")
|
||||
elif ProgramValues.web_release_version == ProgramValues.release_version:
|
||||
print("There is no update!")
|
95
godot/start_menu.tscn
Normal file
95
godot/start_menu.tscn
Normal file
@ -0,0 +1,95 @@
|
||||
[gd_scene load_steps=6 format=3 uid="uid://wp6d880w6h6u"]
|
||||
|
||||
[ext_resource type="Script" path="res://start_menu.gd" id="1"]
|
||||
[ext_resource type="Script" path="res://button_name.gd" id="2"]
|
||||
[ext_resource type="Script" path="res://button_email_feedback.gd" id="3"]
|
||||
[ext_resource type="Script" path="res://button_open_github.gd" id="4"]
|
||||
[ext_resource type="Theme" uid="uid://cqlpsmjde8oae" path="res://wb_theme.tres" id="5"]
|
||||
|
||||
[node name="start_menu" type="CanvasLayer"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="welcome_title" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
anchors_preset = 5
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -185.0
|
||||
offset_top = 2.0
|
||||
offset_right = 185.0
|
||||
offset_bottom = 36.0
|
||||
theme = ExtResource("5")
|
||||
text = "All your base are belong to us"
|
||||
|
||||
[node name="HTTPRequest" type="HTTPRequest" parent="."]
|
||||
|
||||
[node name="version_label" type="Label" parent="."]
|
||||
anchors_preset = 2
|
||||
anchor_top = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_left = 5.0
|
||||
offset_top = -31.0
|
||||
offset_right = 1280.0
|
||||
offset_bottom = -1.0
|
||||
theme = ExtResource("5")
|
||||
text = "Version"
|
||||
|
||||
[node name="GridContainer" type="HFlowContainer" parent="."]
|
||||
offset_left = 10.0
|
||||
offset_top = 55.0
|
||||
offset_right = 1270.0
|
||||
offset_bottom = 665.0
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
|
||||
[node name="button_daily_action" type="Button" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "Daily Action"
|
||||
|
||||
[node name="button_open_github" type="Button" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "GitHub"
|
||||
script = ExtResource("4")
|
||||
|
||||
[node name="button_email_feedback" type="Button" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "Feedback"
|
||||
script = ExtResource("3")
|
||||
|
||||
[node name="button_name" type="Button" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "Name"
|
||||
script = ExtResource("2")
|
||||
|
||||
[node name="button_update_check" type="Button" parent="GridContainer"]
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "Check for Updates"
|
||||
|
||||
[node name="button_journal" type="Button" parent="GridContainer"]
|
||||
visible = false
|
||||
layout_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
size_flags_vertical = 3
|
||||
theme = ExtResource("5")
|
||||
text = "Journal"
|
||||
|
||||
[connection signal="request_completed" from="HTTPRequest" to="." method="_on_HTTPRequest_request_completed"]
|
||||
[connection signal="pressed" from="GridContainer/button_open_github" to="GridContainer/button_open_github" method="_on_button_open_github_pressed"]
|
||||
[connection signal="pressed" from="GridContainer/button_email_feedback" to="GridContainer/button_email_feedback" method="_on_button_email_feedback_pressed"]
|
||||
[connection signal="pressed" from="GridContainer/button_name" to="GridContainer/button_name" method="_on_button_name_pressed"]
|
||||
[connection signal="pressed" from="GridContainer/button_update_check" to="." method="_on_button_update_check_pressed"]
|
141
godot/start_screen.tscn
Normal file
141
godot/start_screen.tscn
Normal file
@ -0,0 +1,141 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://dqlqsachnxomy"]
|
||||
|
||||
[ext_resource type="Script" path="res://main_screen.gd" id="1"]
|
||||
[ext_resource type="PackedScene" path="res://user_details.tscn" id="2"]
|
||||
[ext_resource type="PackedScene" uid="uid://wp6d880w6h6u" path="res://start_menu.tscn" id="3"]
|
||||
[ext_resource type="PackedScene" path="res://apps/daily_prompts.tscn" id="4"]
|
||||
[ext_resource type="Theme" uid="uid://cqlpsmjde8oae" path="res://wb_theme.tres" id="5"]
|
||||
[ext_resource type="PackedScene" path="res://apps/pomodoro.tscn" id="6"]
|
||||
|
||||
[node name="main_screen" type="CanvasLayer"]
|
||||
script = ExtResource("1")
|
||||
|
||||
[node name="UI" type="CanvasLayer" parent="."]
|
||||
|
||||
[node name="background_light" type="ColorRect" parent="UI"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
color = Color(0.94902, 0.937255, 0.85098, 1)
|
||||
|
||||
[node name="top_bar" type="Panel" parent="UI"]
|
||||
custom_minimum_size = Vector2(0, 40)
|
||||
offset_right = 1280.0
|
||||
offset_bottom = 40.0
|
||||
|
||||
[node name="top_container" type="VBoxContainer" parent="UI"]
|
||||
anchors_preset = 15
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = 42.0
|
||||
offset_bottom = -48.0
|
||||
theme = ExtResource("5")
|
||||
|
||||
[node name="start_menu" parent="UI/top_container" instance=ExtResource("3")]
|
||||
visible = false
|
||||
|
||||
[node name="welcome_title" parent="UI/top_container/start_menu" index="0"]
|
||||
anchors_preset = 5
|
||||
offset_top = 0.0
|
||||
offset_bottom = 34.0
|
||||
grow_horizontal = 2
|
||||
|
||||
[node name="version_label" parent="UI/top_container/start_menu" index="2"]
|
||||
anchors_preset = 2
|
||||
offset_left = 0.0
|
||||
offset_top = -30.0
|
||||
offset_right = 1275.0
|
||||
offset_bottom = 0.0
|
||||
grow_vertical = 0
|
||||
|
||||
[node name="button_daily_action" parent="UI/top_container/start_menu/GridContainer" index="0"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_open_github" parent="UI/top_container/start_menu/GridContainer" index="1"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_email_feedback" parent="UI/top_container/start_menu/GridContainer" index="2"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_name" parent="UI/top_container/start_menu/GridContainer" index="3"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_update_check" parent="UI/top_container/start_menu/GridContainer" index="4"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_journal" parent="UI/top_container/start_menu/GridContainer" index="5"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="user_details" parent="UI/top_container" instance=ExtResource("2")]
|
||||
visible = false
|
||||
|
||||
[node name="user_menu" parent="UI/top_container/user_details" index="0"]
|
||||
anchors_preset = 8
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
|
||||
[node name="green_panel" parent="UI/top_container/user_details/user_menu" index="0"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="label_first_time" parent="UI/top_container/user_details/user_menu/green_panel" index="0"]
|
||||
layout_mode = 0
|
||||
anchor_right = 0.0
|
||||
offset_top = 0.0
|
||||
offset_right = 1.0
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="textbox_user_name" parent="UI/top_container/user_details/user_menu/green_panel" index="1"]
|
||||
layout_mode = 0
|
||||
anchor_left = 0.0
|
||||
anchor_right = 0.0
|
||||
offset_left = 0.0
|
||||
offset_top = 0.0
|
||||
offset_right = 700.0
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="birthday_selector" parent="UI/top_container/user_details/user_menu/green_panel" index="2"]
|
||||
layout_mode = 0
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
anchor_right = 0.0
|
||||
anchor_bottom = 0.0
|
||||
offset_left = 0.0
|
||||
offset_top = 0.0
|
||||
offset_right = 267.0
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="button_birth_month" parent="UI/top_container/user_details/user_menu/green_panel/birthday_selector" index="0"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_birth_day" parent="UI/top_container/user_details/user_menu/green_panel/birthday_selector" index="1"]
|
||||
layout_mode = 2
|
||||
|
||||
[node name="button_user_save" parent="UI/top_container/user_details/user_menu/green_panel" index="3"]
|
||||
layout_mode = 0
|
||||
anchor_left = 0.0
|
||||
anchor_top = 0.0
|
||||
anchor_right = 0.0
|
||||
anchor_bottom = 0.0
|
||||
offset_left = 0.0
|
||||
offset_top = 0.0
|
||||
offset_right = 148.57
|
||||
offset_bottom = 34.0
|
||||
|
||||
[node name="daily_prompts" parent="UI/top_container" instance=ExtResource("4")]
|
||||
visible = false
|
||||
|
||||
[node name="pomodoro" parent="UI/top_container" instance=ExtResource("6")]
|
||||
visible = false
|
||||
|
||||
[node name="bottom_bar" type="Panel" parent="UI"]
|
||||
custom_minimum_size = Vector2(0, 40)
|
||||
anchors_preset = 12
|
||||
anchor_top = 1.0
|
||||
anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
offset_top = -40.0
|
||||
|
||||
[editable path="UI/top_container/start_menu"]
|
||||
[editable path="UI/top_container/user_details"]
|
||||
[editable path="UI/top_container/daily_prompts"]
|
||||
[editable path="UI/top_container/pomodoro"]
|
30
godot/ui_control.gd
Normal file
30
godot/ui_control.gd
Normal file
@ -0,0 +1,30 @@
|
||||
extends Node
|
||||
|
||||
|
||||
@onready var node_variables = get_node("/root/NodeVariables")
|
||||
@onready var user_values = get_node("/root/UserValues")
|
||||
|
||||
|
||||
func _ready():
|
||||
pass
|
||||
|
||||
|
||||
func show_start_menu():
|
||||
node_variables.main_screen.visible = true
|
||||
node_variables.start_menu.visible = true
|
||||
node_variables.user_menu.visible = false
|
||||
node_variables.daily_prompts.visible = false
|
||||
|
||||
|
||||
func show_user_menu():
|
||||
node_variables.main_screen.visible = true
|
||||
node_variables.start_menu.visible = false
|
||||
node_variables.user_menu.visible = true
|
||||
node_variables.daily_prompts.visible = false
|
||||
|
||||
|
||||
func show_daily_prompts():
|
||||
node_variables.main_screen.visible = true
|
||||
node_variables.start_menu.visible = false
|
||||
node_variables.user_menu.visible = false
|
||||
node_variables.daily_prompts.visible = true
|
89
godot/user_details.tscn
Normal file
89
godot/user_details.tscn
Normal file
@ -0,0 +1,89 @@
|
||||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://button_user_save.gd" type="Script" id=1]
|
||||
[ext_resource path="res://wb_theme.tres" type="Theme" id=2]
|
||||
[ext_resource path="res://birthday_selector.gd" type="Script" id=3]
|
||||
|
||||
[node name="user_details" type="CanvasLayer"]
|
||||
|
||||
[node name="user_menu" type="PanelContainer" parent="."]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -500.0
|
||||
offset_top = -300.0
|
||||
offset_right = 500.0
|
||||
offset_bottom = 300.0
|
||||
theme = ExtResource( 2 )
|
||||
|
||||
[node name="green_panel" type="Panel" parent="user_menu"]
|
||||
offset_right = 1000.0
|
||||
offset_bottom = 600.0
|
||||
theme = ExtResource( 2 )
|
||||
|
||||
[node name="label_first_time" type="Label" parent="user_menu/green_panel"]
|
||||
unique_name_in_owner = true
|
||||
anchor_right = 1.0
|
||||
offset_top = 3.0
|
||||
offset_bottom = 37.0
|
||||
theme = ExtResource( 2 )
|
||||
text = "First time user: Please fill in your first name below."
|
||||
align = 1
|
||||
|
||||
[node name="textbox_user_name" type="LineEdit" parent="user_menu/green_panel"]
|
||||
unique_name_in_owner = true
|
||||
anchor_left = 0.5
|
||||
anchor_right = 0.5
|
||||
offset_left = -350.0
|
||||
offset_top = 41.0
|
||||
offset_right = 350.0
|
||||
offset_bottom = 75.0
|
||||
theme = ExtResource( 2 )
|
||||
caret_blink = true
|
||||
caret_blink_interval = 0.5
|
||||
|
||||
[node name="birthday_selector" type="GridContainer" parent="user_menu/green_panel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
offset_left = -134.0
|
||||
offset_top = -150.0
|
||||
offset_right = 133.0
|
||||
offset_bottom = -116.0
|
||||
columns = 2
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="button_birth_month" type="MenuButton" parent="user_menu/green_panel/birthday_selector"]
|
||||
offset_right = 130.0
|
||||
offset_bottom = 34.0
|
||||
size_flags_horizontal = 3
|
||||
text = "Month"
|
||||
items = [ "January", null, 0, false, false, 1, 0, null, "", false, "February", null, 0, false, false, 2, 0, null, "", false, "March", null, 0, false, false, 3, 0, null, "", false, "April", null, 0, false, false, 4, 0, null, "", false, "May", null, 0, false, false, 5, 0, null, "", false, "June", null, 0, false, false, 6, 0, null, "", false, "July", null, 0, false, false, 7, 0, null, "", false, "August", null, 0, false, false, 8, 0, null, "", false, "September", null, 0, false, false, 9, 0, null, "", false, "October", null, 0, false, false, 10, 0, null, "", false, "November", null, 0, false, false, 11, 0, null, "", false, "December", null, 0, false, false, 12, 0, null, "", false ]
|
||||
|
||||
[node name="button_birth_day" type="MenuButton" parent="user_menu/green_panel/birthday_selector"]
|
||||
offset_left = 138.0
|
||||
offset_right = 267.0
|
||||
offset_bottom = 34.0
|
||||
focus_mode = 2
|
||||
size_flags_horizontal = 3
|
||||
theme = ExtResource( 2 )
|
||||
text = "Day"
|
||||
items = [ "1", null, 0, false, false, 1, 0, null, "", false, "2", null, 0, false, false, 2, 0, null, "", false, "3", null, 0, false, false, 3, 0, null, "", false, "4", null, 0, false, false, 4, 0, null, "", false, "5", null, 0, false, false, 5, 0, null, "", false, "6", null, 0, false, false, 6, 0, null, "", false, "7", null, 0, false, false, 7, 0, null, "", false, "8", null, 0, false, false, 8, 0, null, "", false, "9", null, 0, false, false, 9, 0, null, "", false, "10", null, 0, false, false, 10, 0, null, "", false, "11", null, 0, false, false, 11, 0, null, "", false, "12", null, 0, false, false, 12, 0, null, "", false, "13", null, 0, false, false, 13, 0, null, "", false, "14", null, 0, false, false, 14, 0, null, "", false, "15", null, 0, false, false, 15, 0, null, "", false, "16", null, 0, false, false, 16, 0, null, "", false, "17", null, 0, false, false, 17, 0, null, "", false, "18", null, 0, false, false, 18, 0, null, "", false, "19", null, 0, false, false, 19, 0, null, "", false, "20", null, 0, false, false, 20, 0, null, "", false, "21", null, 0, false, false, 21, 0, null, "", false, "22", null, 0, false, false, 22, 0, null, "", false, "23", null, 0, false, false, 23, 0, null, "", false, "24", null, 0, false, false, 24, 0, null, "", false, "25", null, 0, false, false, 25, 0, null, "", false, "26", null, 0, false, false, 26, 0, null, "", false, "27", null, 0, false, false, 27, 0, null, "", false, "28", null, 0, false, false, 28, 0, null, "", false, "29", null, 0, false, false, 29, 0, null, "", false, "30", null, 0, false, false, 30, 0, null, "", false, "31", null, 0, false, false, 31, 0, null, "", false ]
|
||||
|
||||
[node name="button_user_save" type="Button" parent="user_menu/green_panel"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 1.0
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 1.0
|
||||
offset_left = -74.0
|
||||
offset_top = -49.0
|
||||
offset_right = 74.5701
|
||||
offset_bottom = -15.0
|
||||
theme = ExtResource( 2 )
|
||||
text = "Done"
|
||||
expand_icon = true
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[connection signal="pressed" from="user_menu/green_panel/button_user_save" to="user_menu/green_panel/button_user_save" method="_on_button_user_save_pressed"]
|
62
godot/user_values.gd
Normal file
62
godot/user_values.gd
Normal file
@ -0,0 +1,62 @@
|
||||
extends Node
|
||||
|
||||
# User values
|
||||
|
||||
var user_first_name = " "
|
||||
var user_birth_month = 0
|
||||
var user_birth_day = 0
|
||||
|
||||
# System time values
|
||||
|
||||
var date
|
||||
var date_month
|
||||
var date_day
|
||||
|
||||
var date_time
|
||||
var date_time_hour
|
||||
|
||||
var welcome_day_part = " "
|
||||
|
||||
# For the login-streak thing
|
||||
|
||||
#var user_login_streak
|
||||
#var user_last_login_year
|
||||
#var user_last_login_month
|
||||
#var user_last_login_day
|
||||
|
||||
|
||||
var config = ConfigFile.new()
|
||||
var err = config.load("user://user.ini")
|
||||
|
||||
# This function can be triggered to update the known system time.
|
||||
func get_device_time():
|
||||
date = Time.get_date_dict_from_system()
|
||||
date_time = Time.get_time_dict_from_system()
|
||||
date_time_hour = date_time.hour
|
||||
date_month = date.month
|
||||
date_day = date.day
|
||||
print(date_month)
|
||||
print(date_day)
|
||||
print(date_time_hour)
|
||||
|
||||
func set_welcome_day_part():
|
||||
if date_time_hour < 24:
|
||||
welcome_day_part = "Good evening, "
|
||||
if date_time_hour < 18:
|
||||
welcome_day_part = "Good afternoon, "
|
||||
if date_time_hour < 12:
|
||||
welcome_day_part = "Good morning, "
|
||||
if date_time_hour < 6:
|
||||
welcome_day_part = "Good night, "
|
||||
|
||||
func _ready():
|
||||
get_device_time()
|
||||
# Read config file if it exists
|
||||
# define variables from ini file
|
||||
if err == OK:
|
||||
user_first_name = config.get_value("User", "user_name")
|
||||
user_birth_month = config.get_value("User", "user_birth_month")
|
||||
user_birth_day = config.get_value("User", "user_birth_day")
|
||||
|
||||
else:
|
||||
pass
|
102
godot/wb_theme.tres
Normal file
102
godot/wb_theme.tres
Normal file
@ -0,0 +1,102 @@
|
||||
[gd_resource type="Theme" load_steps=14 format=3 uid="uid://cqlpsmjde8oae"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://xsnm8cium6dl" path="res://Assets/fonts/noto_sans_display_bold.ttf" id="1"]
|
||||
[ext_resource type="FontFile" uid="uid://cvcedf0p6452r" path="res://Assets/fonts/noto_sans_display.ttf" id="2"]
|
||||
|
||||
[sub_resource type="FontFile" id="1"]
|
||||
fallbacks = Array[Font]([ExtResource("1")])
|
||||
cache/0/16/0/ascent = 0.0
|
||||
cache/0/16/0/descent = 0.0
|
||||
cache/0/16/0/underline_position = 0.0
|
||||
cache/0/16/0/underline_thickness = 0.0
|
||||
cache/0/16/0/scale = 1.0
|
||||
cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="4"]
|
||||
bg_color = Color(0.207843, 0.219608, 0.317647, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="5"]
|
||||
bg_color = Color(0.862745, 0.435294, 0.329412, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="6"]
|
||||
bg_color = Color(0.941176, 0.772549, 0.517647, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="2"]
|
||||
bg_color = Color(0.862745, 0.435294, 0.329412, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="7"]
|
||||
bg_color = Color(0.941176, 0.772549, 0.517647, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="FontFile" id="3"]
|
||||
fallbacks = Array[Font]([ExtResource("2")])
|
||||
cache/0/16/0/ascent = 0.0
|
||||
cache/0/16/0/descent = 0.0
|
||||
cache/0/16/0/underline_position = 0.0
|
||||
cache/0/16/0/underline_thickness = 0.0
|
||||
cache/0/16/0/scale = 1.0
|
||||
cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0)
|
||||
|
||||
[sub_resource type="FontFile" id="8"]
|
||||
fallbacks = Array[Font]([ExtResource("2")])
|
||||
cache/0/16/0/ascent = 0.0
|
||||
cache/0/16/0/descent = 0.0
|
||||
cache/0/16/0/underline_position = 0.0
|
||||
cache/0/16/0/underline_thickness = 0.0
|
||||
cache/0/16/0/scale = 1.0
|
||||
cache/0/16/0/kerning_overrides/16/0 = Vector2(0, 0)
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="9"]
|
||||
content_margin_left = 15.0
|
||||
content_margin_right = 5.0
|
||||
bg_color = Color(0.207843, 0.219608, 0.317647, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxFlat" id="11"]
|
||||
bg_color = Color(0.462745, 0.662745, 0.560784, 1)
|
||||
border_width_left = 2
|
||||
border_width_top = 2
|
||||
border_width_right = 2
|
||||
border_width_bottom = 2
|
||||
border_color = Color(0.207843, 0.219608, 0.317647, 1)
|
||||
corner_radius_top_left = 10
|
||||
corner_radius_top_right = 10
|
||||
corner_radius_bottom_right = 10
|
||||
corner_radius_bottom_left = 10
|
||||
|
||||
[sub_resource type="StyleBoxEmpty" id="12"]
|
||||
|
||||
[resource]
|
||||
Button/fonts/font = SubResource("1")
|
||||
Button/styles/disabled = SubResource("4")
|
||||
Button/styles/focus = SubResource("5")
|
||||
Button/styles/hover = SubResource("6")
|
||||
Button/styles/normal = SubResource("2")
|
||||
Button/styles/pressed = SubResource("7")
|
||||
Label/fonts/font = SubResource("3")
|
||||
LineEdit/fonts/font = SubResource("8")
|
||||
LineEdit/styles/normal = SubResource("9")
|
||||
Panel/styles/panel = SubResource("11")
|
||||
PanelContainer/styles/panel = SubResource("12")
|
1
version_info.csv
Normal file
1
version_info.csv
Normal file
@ -0,0 +1 @@
|
||||
1
|
|
Loading…
Reference in New Issue
Block a user