diff --git a/.gdignore b/.gdignore index 2c49341..1bfdef3 100644 --- a/.gdignore +++ b/.gdignore @@ -1,3 +1,606 @@ -docs -*.md -.idea \ No newline at end of file +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig +# Created by https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio + +### Backup ### +*.bak +*.gho +*.ori +*.orig +*.tmp + +### Executable ### +*.app +*.bat +*.cgi +*.com +*.exe +*.gadget +*.jar +*.pif +*.vb +*.wsf + +### Godot ### +# Godot 4+ specific ignores +.godot/ + +# Godot-specific ignores +.import/ +export.cfg +export_presets.cfg + +# Imported translations (automatically generated from CSV files) +*.translation + +# Mono-specific ignores +.mono/ +data_*/ +mono_crash.*.json + +### Linux ### +*~ + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### macOS Patch ### +# iCloud generated files +*.icloud + +### Rider ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +!.vscode/*.code-snippets + +# Local History for Visual Studio Code +.history/ + +# Built Visual Studio Code Extensions +*.vsix + +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +*.code-workspace + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs + +# JetBrains Rider +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio + +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) + +screenshot.png +archive/* \ No newline at end of file diff --git a/.gitignore b/.gitignore index c6b96f4..025ba01 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ # File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig -# Created by https://www.toptal.com/developers/gitignore/api/windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup -# Edit at https://www.toptal.com/developers/gitignore?templates=windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup +# Created by https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio +# Edit at https://www.toptal.com/developers/gitignore?templates=windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio ### Backup ### *.bak @@ -9,15 +9,6 @@ *.orig *.tmp -### DotnetCore ### -# .NET Core build folders -bin/ -obj/ - -# Common node modules locations -/node_modules -/wwwroot/node_modules - ### Executable ### *.app *.bat @@ -95,15 +86,84 @@ Temporary Items # iCloud generated files *.icloud -### MonoDevelop ### -#User Specific -*.userprefs -*.usertasks +### Rider ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 -#Mono Project Files -*.pidb -*.resources -test-results/ +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser ### VisualStudioCode ### .vscode/* @@ -124,21 +184,6 @@ test-results/ .history .ionide -### Web ### -*.asp -*.cer -*.csr -*.css -*.htm -*.html -*.js -*.jsp -*.php -*.rss -*.wasm -*.wat -*.xhtml - ### Windows ### # Windows thumbnail cache files Thumbs.db @@ -165,7 +210,395 @@ $RECYCLE.BIN/ # Windows shortcuts *.lnk -# End of https://www.toptal.com/developers/gitignore/api/windows,web,visualstudiocode,monodevelop,macos,linux,godot,executable,dotnetcore,backup +### VisualStudio ### +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp_proj +*_wpftmp.csproj +*.log +*.tlog +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio 6 auto-generated project file (contains which files were open etc.) +*.vbp + +# Visual Studio 6 workspace and project file (working project files containing files to include in project) +*.dsw +*.dsp + +# Visual Studio 6 technical files + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# Visual Studio History (VSHistory) files +.vshistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# VS Code files for those working on multiple tools +*.code-workspace + +# Local History for Visual Studio Code + +# Windows Installer files from build outputs + +# JetBrains Rider +*.sln.iml + +### VisualStudio Patch ### +# Additional files built by Visual Studio + +# End of https://www.toptal.com/developers/gitignore/api/windows,visualstudiocode,rider,macos,linux,godot,executable,backup,visualstudio # Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) diff --git a/README.md b/README.md index c0f3ba3..59f90ef 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ # Dress Up Zack -Tony's Dress Up is a re-imagining of my first (and only) Flash game series, ZC's Dress Up that was developed back in 2007. Both this and the originals are heavily inspired by The Sims 2: Body Shop in their own unique ways. +![](screenshot.png) + +Tony's Dress Up is a port of my first (and only) Flash game series, ZC's Dress Up that was developed back in 2007. Both this and the originals are heavily inspired by The Sims 2: Body Shop in their own unique ways. ## License The source and assets are licensed under the GPL-3.0 License and CC-BY, respectfully - see the [LICENSE](LICENSE) and [ASSET-LICENSE](ASSET-LICENSE) for more details. -The Flash games located in the `/archive` directory are proprietary, but considered abandonware. Any extracted assets are under the same license. Feel free to share them on archives. +The Flash games located in the `/archive` directory are proprietary, but considered abandonware. Any extracted assets are under the same license. Feel free to share them on archives. \ No newline at end of file diff --git a/addons/SpritesheetGenerator/Checker.png b/addons/SpritesheetGenerator/Checker.png deleted file mode 100644 index f147f72..0000000 Binary files a/addons/SpritesheetGenerator/Checker.png and /dev/null differ diff --git a/addons/SpritesheetGenerator/SpriteSheetGenerator.gd b/addons/SpritesheetGenerator/SpriteSheetGenerator.gd deleted file mode 100644 index cbb9bbe..0000000 --- a/addons/SpritesheetGenerator/SpriteSheetGenerator.gd +++ /dev/null @@ -1,13 +0,0 @@ -@tool -extends EditorPlugin - -func _enter_tree() -> void: - add_tool_menu_item("Open Spritesheet Generator", run_generator) - get_editor_interface().get_command_palette().add_command("Open Spritesheet Generator", "addons/open_spritesheet_generator", run_generator) - -func _exit_tree() -> void: - remove_tool_menu_item("Open Spritesheet Generator") - get_editor_interface().get_command_palette().remove_command("addons/open_spritesheet_generator") - -func run_generator(): - get_editor_interface().play_custom_scene("res://addons/SpritesheetGenerator/SpritesheetGenerator.tscn") diff --git a/addons/SpritesheetGenerator/SpritesheetFrame.tscn b/addons/SpritesheetGenerator/SpritesheetFrame.tscn deleted file mode 100644 index 790cf62..0000000 --- a/addons/SpritesheetGenerator/SpritesheetFrame.tscn +++ /dev/null @@ -1,77 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://cd5wndu01c1sn"] - -[sub_resource type="StyleBoxFlat" id="2"] -resource_local_to_scene = true -bg_color = Color(0, 0.501961, 0.501961, 1) - -[sub_resource type="GDScript" id="3"] -resource_name = "Prefab" -script/source = "extends PanelContainer - -var odd: Vector2 - -func set_frame_margin(margin: Vector2): - $MarginContainer.add_theme_constant_override(&\"margin_left\", margin.x) - $MarginContainer.add_theme_constant_override(&\"margin_top\", margin.y) - - margin += odd - - $MarginContainer.add_theme_constant_override(&\"margin_right\", margin.x) - $MarginContainer.add_theme_constant_override(&\"margin_bottom\", margin.y) - -func set_texture(texture: Texture2D): - %TextureRect.texture = texture - odd = Vector2(int(get_texture_size().x) % 2, int(get_texture_size().y) % 2) - -func get_texture_size() -> Vector2: - return %TextureRect.texture.get_size() - -func get_position2() -> Vector2: - return position + %TextureRect.position - -func get_texture_data() -> Image: - return %TextureRect.texture.get_image() - -func set_display_background(display: bool): - get_theme_stylebox(&\"panel\").draw_center = display - -func set_background_color(color: Color): - get_theme_stylebox(&\"panel\").bg_color = color - -func _get_drag_data(p: Vector2): - var preview = TextureRect.new() - preview.texture = %TextureRect.texture - preview.ignore_texture_size = true - preview.stretch_mode = TextureRect.STRETCH_KEEP_ASPECT_CENTERED - preview.size = Vector2(64, 64) - set_drag_preview(preview) - return {type = \"SpritesheetFrame\", node = self} - -func _can_drop_data(p: Vector2, data) -> bool: - return data is Dictionary and data.get(\"type\", \"\") == \"SpritesheetFrame\" - -func _drop_data(p: Vector2, data) -> void: - var index = get_index() - get_parent().move_child(self, data.node.get_index()) - get_parent().move_child(data.node, index) - get_tree().current_scene.refresh_grid() - -func _gui_input(event: InputEvent) -> void: - if event is InputEventMouseButton: - if event.pressed and event.button_index == MOUSE_BUTTON_RIGHT: - get_tree().current_scene.remove_frame.call_deferred(self) -" - -[node name="FramePrefab" type="PanelContainer" groups=["frame"]] -theme_override_styles/panel = SubResource("2") -script = SubResource("3") - -[node name="MarginContainer" type="MarginContainer" parent="."] -layout_mode = 2 -mouse_filter = 2 - -[node name="TextureRect" type="TextureRect" parent="MarginContainer"] -unique_name_in_owner = true -texture_filter = 1 -layout_mode = 2 -stretch_mode = 4 diff --git a/addons/SpritesheetGenerator/SpritesheetGenerator.tscn b/addons/SpritesheetGenerator/SpritesheetGenerator.tscn deleted file mode 100644 index c064e03..0000000 --- a/addons/SpritesheetGenerator/SpritesheetGenerator.tscn +++ /dev/null @@ -1,714 +0,0 @@ -[gd_scene load_steps=5 format=3 uid="uid://bf3b0i8scthbm"] - -[ext_resource type="Texture2D" uid="uid://bnkl8rujlgv0h" path="res://addons/SpritesheetGenerator/Checker.png" id="1_hs1uu"] - -[sub_resource type="GDScript" id="1"] -resource_name = "Generator" -script/source = "extends Control - -const SUPPORTED_FORMATS: PackedStringArray = [\"bmp\", \"dds\", \"exr\", \"hdr\", \"jpg\", \"jpeg\", \"png\", \"tga\", \"svg\", \"svgz\", \"webp\"] - -@onready var grid := %GridContainer - -var file_list: Array -var image_list: Array -var texture_list: Array - -var images_to_process: Array -var images_to_texturize: Array -var first_time := true -var image_count: int -var output_path: String - -var auto := true -var margin := Vector2.ONE - -var pan_origin: Vector2 -var pan_start: Vector2 - -signal images_processed - -func _enter_tree() -> void: - $SplitDialog.hide() - $StashDialog.hide() - -func _ready(): - $Status.text = $Status.text % \", \".join(SUPPORTED_FORMATS) - - get_viewport().files_dropped.connect(load_files) - grid.minimum_size_changed.connect(refresh_background) - set_process(false) - -func refresh_background(): - %Background.custom_minimum_size = grid.get_minimum_size() - -func load_files(files: PackedStringArray): - file_list.clear() - image_list.clear() - - %CustomName.text = \"\" - %Reload.disabled = false - %SavePNG.disabled = false - - if files.size() == 1 and not FileAccess.file_exists(files[0]): - var dir := DirAccess.open(files[0]) - if not dir: - show_error(\"Can't open directory.\") - return - - for file in dir.get_files(): - if file.get_extension() in SUPPORTED_FORMATS: - file_list.append(str(dir.get_current_dir().path_join(file))) - else: - var wrong_count: int - for file in files: - if file.get_extension() in SUPPORTED_FORMATS: - file_list.append(file) - else: - wrong_count += 1 - - if wrong_count > 0: - show_error(\"Skipped %s file(s) with unsupported extension.\" % wrong_count) - - if file_list.is_empty(): - show_error(\"No valid files or directories to process.\") - return - - load_images() - -func load_images(): - texture_list.clear() - - for image in grid.get_children(): - image.free() - - for image in %StashImages.get_children(): - image.free() - update_stash() - - var size_map: Dictionary - - if not file_list.is_empty(): - image_list = file_list.map(func(file: String): - var image := Image.load_from_file(file) - if image: - image.set_meta(&\"path\", file) - return image) - - for image in image_list: - if not image: - continue - - if not image.get_size() in size_map: - size_map[image.get_size()] = [] - size_map[image.get_size()].append(image) - - var output_name: String - var most_common_size: Vector2i - var most_common_count: int - - for size in size_map: - if size_map[size].size() > most_common_count: - most_common_size = size - most_common_count = size_map[size].size() - - for image in size_map[most_common_size]: - if output_path.is_empty(): - var path: String = image.get_meta(&\"path\", \"\") - output_path = path.get_base_dir() - output_name = path.get_base_dir().get_file() - - images_to_process.append(image) - size_map.clear() - - if not output_name.is_empty() and %CustomName.text.is_empty(): - %CustomName.text = output_name - update_save_button() - - if images_to_process.size() < file_list.size(): - show_error(\"Rejected %s image(s) due to size mismatch.\" % (file_list.size() - images_to_process.size())) - - if images_to_process.size() == 1: - if file_list.size() > 1: - images_to_process.clear() - show_error(\"Only one dropped image was valid.\") - else: - %SplitPreview.texture = ImageTexture.create_from_image(images_to_process[0]) - $SplitDialog.reset_size() - $SplitDialog.popup_centered() - - return - - $Status.show() - %CenterContainer.hide() - - image_count = images_to_process.size() - %Columns.max_value = image_count - - threshold = %Threshold.value - min_x = 9999999 - min_y = 9999999 - max_x = -9999999 - max_y = -9999999 - - set_process(true) - - await images_processed - - for texture in texture_list: - add_frame(texture) - - toggle_auto(auto) - refresh_margin() - - $Status.hide() - %CenterContainer.show() - -var threshold: float -var min_x: int -var min_y: int -var max_x: int -var max_y: int - -func _process(delta: float) -> void: - if not images_to_process.is_empty(): - var image: Image = images_to_process.pop_front() - $Status.text = str(\"Preprocessing image \", image_count - images_to_process.size(), \"/\", image_count) - - for x in image.get_width(): - for y in image.get_height(): - if image.get_pixel(x, y).a >= threshold: - min_x = mini(min_x, x) - min_y = mini(min_y, y) - max_x = maxi(max_x, x) - max_y = maxi(max_y, y) - - images_to_texturize.append(image) - elif not images_to_texturize.is_empty(): - var rect := Rect2i(min_x, min_y, max_x - min_x + 1, max_y - min_y + 1) - var image: Image = images_to_texturize.pop_front() - $Status.text = str(\"Creating texture \", image_count - images_to_texturize.size(), \"/\", image_count) - - var true_image := Image.create(rect.size.x, rect.size.y, false, image.get_format()) - true_image.blit_rect(image, rect, Vector2()) - - var texture := ImageTexture.create_from_image(true_image) - texture_list.append(texture) - - if images_to_texturize.is_empty(): - set_process(false) - images_processed.emit() - if first_time: - recenter() - first_time = false - -func toggle_grid(show: bool) -> void: - get_tree().call_group(&\"frame\", &\"set_display_background\", show) - -func toggle_auto(button_pressed: bool) -> void: - %Columns.editable = not button_pressed - auto = button_pressed - - if button_pressed: - var best: int - var best_score = -9999999 - - for i in range(1, image_count + 1): - var cols = i - var rows = ceili(image_count / float(i)) - - var score = image_count - cols * rows - maxi(cols, rows) - rows - if score > best_score: - best = i - best_score = score - - grid.columns = best - else: - grid.columns = %Columns.value - refresh_grid() - -func hmargin_changed(value: float) -> void: - margin.x = value - refresh_margin() - -func vmargin_changed(value: float) -> void: - margin.y = value - refresh_margin() - -func refresh_margin(): - get_tree().call_group(&\"frame\", &\"set_frame_margin\", margin) - -func columns_changed(value: float) -> void: - grid.columns = value - refresh_grid() - -func refresh_grid(): - var coord: Vector2 - var dark = false - - for rect in grid.get_children(): - rect.set_background_color(Color(0, 0, 0, 0.2 if dark else 0.1)) - dark = not dark - coord.x += 1 - - if coord.x == grid.columns: - coord.x = 0 - coord.y += 1 - dark = int(coord.y) % 2 == 1 - -func save_png() -> void: - var image_size: Vector2 = grid.get_child(0).get_minimum_size() - - var image := Image.create(image_size.x * grid.columns, image_size.y * (ceil(grid.get_child_count() / float(grid.columns))), false, Image.FORMAT_RGBA8) - - for rect in grid.get_children(): - image.blit_rect(rect.get_texture_data(), Rect2(Vector2(), image_size), rect.get_position2()) - - image.save_png(output_path.path_join(%CustomName.text) + \".png\") - -func show_error(text: String): - if not %Error.visible: - %Error.show() - else: - %Error.text += \"\\n\" - %Error.text += text - %Timer.start() - -func error_hidden() -> void: - %Error.text = \"\" - -func _input(event: InputEvent) -> void: - if event is InputEventMouseButton: - var cc: Control = %CenterContainer - - if event.button_index == MOUSE_BUTTON_MIDDLE: - if event.pressed: - pan_origin = get_local_mouse_position() - pan_start = cc.position - else: - pan_origin = Vector2() - - if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: - var lm = cc.get_local_mouse_position() - cc.scale -= Vector2.ONE * 0.05 - if cc.scale.x <= 0: - cc.scale = Vector2.ONE * 0.05 - - cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale - elif event.button_index == MOUSE_BUTTON_WHEEL_UP: - var lm = cc.get_local_mouse_position() - cc.scale += Vector2.ONE * 0.05 - cc.position -= (lm - cc.get_local_mouse_position()) * cc.scale - - if event is InputEventMouseMotion: - if pan_origin != Vector2(): - %CenterContainer.position = pan_start + (get_local_mouse_position() - pan_origin) - -func recenter() -> void: - %CenterContainer.position = get_viewport().size / 2 - Vector2i(%CenterContainer.size) / 2 - %CenterContainer.scale = Vector2.ONE - -func update_split_preview(): - %SplitPreview.queue_redraw() - -func draw_split_preview() -> void: - var preview: TextureRect = %SplitPreview - var frame_count := Vector2(%SplitX.value, %SplitY.value) - var frame_size := preview.size / frame_count - - for x in range(1, frame_count.x): - for y in int(frame_count.y): - preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x, y + 1), Color.WHITE) - preview.draw_line(frame_size * Vector2(x, y) + Vector2.RIGHT, frame_size * Vector2(x, y + 1) + Vector2.RIGHT, Color.BLACK) - - for y in range(1, frame_count.y): - for x in int(frame_count.x): - preview.draw_line(frame_size * Vector2(x, y), frame_size * Vector2(x + 1, y), Color.WHITE) - preview.draw_line(frame_size * Vector2(x, y) + Vector2.DOWN, frame_size * Vector2(x + 1, y) + Vector2.DOWN, Color.BLACK) - -func split_spritesheet() -> void: - file_list.clear() - image_list.clear() - - var image: Image = images_to_process[0] - var sub_image_size := image.get_size() / Vector2i(%SplitX.value, %SplitY.value) - - for y in %SplitY.value: - for x in %SplitX.value: - image_list.append(image.get_region(Rect2i(Vector2i(x, y) * sub_image_size, sub_image_size))) - - images_to_process.clear() - load_images() - -func remove_frame(frame): - var image: Image = frame.get_texture_data() - var texture := ImageTexture.create_from_image(image) - - var button := TextureButton.new() - button.texture_normal = texture - button.custom_minimum_size = Vector2(128, 128) - button.stretch_mode = TextureButton.STRETCH_KEEP_ASPECT_CENTERED - button.ignore_texture_size = true - button.pressed.connect(re_add_image.bind(button), CONNECT_DEFERRED) - %StashImages.add_child(button) - - var ref := ReferenceRect.new() - button.add_child(ref) - ref.set_anchors_and_offsets_preset(Control.PRESET_FULL_RECT) - ref.mouse_filter = Control.MOUSE_FILTER_IGNORE - ref.editor_only = false - - frame.free() - refresh_grid() - update_stash() - -func update_stash(): - %Stash.disabled = %StashImages.get_child_count() == 0 - -func re_add_image(tb: TextureButton): - add_frame(tb.texture_normal) - tb.free() - refresh_grid() - update_stash() - - if %Stash.disabled: - $StashDialog.hide() - -func add_frame(texture: Texture2D): - var rect := preload(\"res://addons/SpritesheetGenerator/SpritesheetFrame.tscn\").instantiate() - rect.set_texture(texture) - rect.set_display_background(%DisplayGrid.button_pressed) - rect.set_frame_margin(margin) - grid.add_child(rect) - -func update_save_button() -> void: - %SavePNG.disabled = %CustomName.text.is_empty() -" - -[sub_resource type="StyleBoxFlat" id="5"] -content_margin_left = 20.0 -content_margin_top = 20.0 -content_margin_right = 20.0 -content_margin_bottom = 20.0 -bg_color = Color(0, 0, 0, 0.25098) - -[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_kjgn5"] -texture = ExtResource("1_hs1uu") -axis_stretch_horizontal = 1 -axis_stretch_vertical = 1 - -[node name="Main" type="HBoxContainer"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -script = SubResource("1") - -[node name="MarginContainer" type="PanelContainer" parent="."] -layout_mode = 2 -theme_override_styles/panel = SubResource("5") - -[node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer"] -layout_mode = 2 -theme_override_constants/separation = 10 - -[node name="Label5" type="Label" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -text = "Alpha Threshold" -horizontal_alignment = 1 - -[node name="Threshold" type="SpinBox" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -max_value = 1.0 -step = 0.005 -value = 0.9 - -[node name="Reload" type="Button" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -disabled = true -text = "Reload" - -[node name="HSeparator" type="HSeparator" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Label" type="Label" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -text = "Columns" -horizontal_alignment = 1 - -[node name="Columns" type="SpinBox" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -min_value = 1.0 -value = 1.0 -editable = false - -[node name="Grid" type="CheckButton" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -button_pressed = true -text = "Auto" - -[node name="Label3" type="Label" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -text = "Horizontal Margin" -horizontal_alignment = 1 - -[node name="MarginH" type="SpinBox" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -value = 1.0 -suffix = "px" - -[node name="Label4" type="Label" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -text = "Vertical Margin" -horizontal_alignment = 1 - -[node name="MarginV" type="SpinBox" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -max_value = 128.0 -value = 1.0 -suffix = "px" - -[node name="Stash" type="Button" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -disabled = true -text = "Image Stash" - -[node name="HSeparator2" type="HSeparator" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="Button" type="Button" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 -text = "Recenter View -" - -[node name="DisplayGrid" type="CheckBox" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -button_pressed = true -text = "Show Grid" - -[node name="HSeparator3" type="HSeparator" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="HBoxContainer" type="HBoxContainer" parent="MarginContainer/VBoxContainer"] -layout_mode = 2 - -[node name="CustomName" type="LineEdit" parent="MarginContainer/VBoxContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 3 -placeholder_text = "Image Name" - -[node name="SavePNG" type="Button" parent="MarginContainer/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -disabled = true -text = "Save PNG" - -[node name="Status" type="Label" parent="."] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -text = "Drop folder or image files here to start. - -Images should be of the same size. If their sizes don't match, the generator will try to use the dominating size. - -The images will be automatically cropped based on the Alpha Threshold value. Greater value means more exact crop. - -Supported formats: %s - -If you drop a single image, the generator will instead edit it as spritesheet." -horizontal_alignment = 1 -vertical_alignment = 1 - -[node name="View" type="CanvasLayer" parent="."] -layer = -1 - -[node name="CenterContainer" type="CenterContainer" parent="View"] -unique_name_in_owner = true -visible = false -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 3 - -[node name="Background" type="ColorRect" parent="View/CenterContainer"] -unique_name_in_owner = true -layout_mode = 2 -mouse_filter = 1 -color = Color(0, 0.501961, 0.501961, 1) - -[node name="GridContainer" type="GridContainer" parent="View/CenterContainer"] -unique_name_in_owner = true -layout_mode = 2 -theme_override_constants/h_separation = 0 -theme_override_constants/v_separation = 0 -columns = 3 - -[node name="VBoxContainer" type="GridContainer" parent="View"] -anchors_preset = 3 -anchor_left = 1.0 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -40.0 -offset_top = -40.0 -grow_horizontal = 0 -grow_vertical = 0 -mouse_filter = 2 -columns = 3 - -[node name="Label" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "LMB" -horizontal_alignment = 1 - -[node name="VSeparator" type="VSeparator" parent="View/VBoxContainer"] -layout_mode = 2 - -[node name="Label2" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "rearrange images" - -[node name="Label3" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "RMB" -horizontal_alignment = 1 - -[node name="VSeparator2" type="VSeparator" parent="View/VBoxContainer"] -layout_mode = 2 - -[node name="Label4" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "delete images" - -[node name="Label5" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "MMB" -horizontal_alignment = 1 - -[node name="VSeparator3" type="VSeparator" parent="View/VBoxContainer"] -layout_mode = 2 - -[node name="Label6" type="Label" parent="View/VBoxContainer"] -layout_mode = 2 -text = "pan view" - -[node name="CanvasLayer" type="CanvasLayer" parent="."] - -[node name="Error" type="Label" parent="CanvasLayer"] -unique_name_in_owner = true -modulate = Color(1, 0, 0, 1) -anchors_preset = 12 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = -14.0 -grow_horizontal = 2 -grow_vertical = 0 -size_flags_vertical = 0 -horizontal_alignment = 1 - -[node name="Timer" type="Timer" parent="CanvasLayer"] -unique_name_in_owner = true -wait_time = 5.0 -one_shot = true - -[node name="SplitDialog" type="ConfirmationDialog" parent="."] -title = "Edit Spritesheet" -position = Vector2i(-500, 0) -size = Vector2i(272, 343) -visible = true - -[node name="VBoxContainer" type="VBoxContainer" parent="SplitDialog"] -offset_left = 8.0 -offset_top = 8.0 -offset_right = 264.0 -offset_bottom = 294.0 - -[node name="Label" type="Label" parent="SplitDialog/VBoxContainer"] -layout_mode = 2 -text = "Split Frames" -horizontal_alignment = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="SplitDialog/VBoxContainer"] -layout_mode = 2 -alignment = 1 - -[node name="SplitX" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -min_value = 1.0 -max_value = 1000.0 -value = 1.0 -select_all_on_focus = true - -[node name="Label" type="Label" parent="SplitDialog/VBoxContainer/HBoxContainer"] -layout_mode = 2 -text = "x" - -[node name="SplitY" type="SpinBox" parent="SplitDialog/VBoxContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -min_value = 1.0 -max_value = 1000.0 -value = 1.0 -select_all_on_focus = true - -[node name="CenterContainer" type="CenterContainer" parent="SplitDialog/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="PanelContainer" type="PanelContainer" parent="SplitDialog/VBoxContainer/CenterContainer"] -layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxTexture_kjgn5") - -[node name="SplitPreview" type="TextureRect" parent="SplitDialog/VBoxContainer/CenterContainer/PanelContainer"] -unique_name_in_owner = true -layout_mode = 2 - -[node name="StashDialog" type="AcceptDialog" parent="."] -title = "Image Stash" -position = Vector2i(-500, 500) -size = Vector2i(309, 100) -visible = true - -[node name="VBoxContainer" type="VBoxContainer" parent="StashDialog"] -offset_left = 8.0 -offset_top = 8.0 -offset_right = 301.0 -offset_bottom = 51.0 - -[node name="Label" type="Label" parent="StashDialog/VBoxContainer"] -layout_mode = 2 -text = "Click frame to re-add it to spritesheet." -horizontal_alignment = 1 - -[node name="StashImages" type="HFlowContainer" parent="StashDialog/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 - -[connection signal="pressed" from="MarginContainer/VBoxContainer/Reload" to="." method="load_images"] -[connection signal="value_changed" from="MarginContainer/VBoxContainer/Columns" to="." method="columns_changed"] -[connection signal="toggled" from="MarginContainer/VBoxContainer/Grid" to="." method="toggle_auto"] -[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginH" to="." method="hmargin_changed"] -[connection signal="value_changed" from="MarginContainer/VBoxContainer/MarginV" to="." method="vmargin_changed"] -[connection signal="pressed" from="MarginContainer/VBoxContainer/Stash" to="StashDialog" method="popup_centered_ratio" binds= [0.5]] -[connection signal="pressed" from="MarginContainer/VBoxContainer/Button" to="." method="recenter"] -[connection signal="toggled" from="MarginContainer/VBoxContainer/DisplayGrid" to="." method="toggle_grid"] -[connection signal="text_changed" from="MarginContainer/VBoxContainer/HBoxContainer/CustomName" to="." method="update_save_button" unbinds=1] -[connection signal="pressed" from="MarginContainer/VBoxContainer/SavePNG" to="." method="save_png"] -[connection signal="hidden" from="CanvasLayer/Error" to="." method="error_hidden"] -[connection signal="timeout" from="CanvasLayer/Timer" to="CanvasLayer/Error" method="hide"] -[connection signal="confirmed" from="SplitDialog" to="." method="split_spritesheet"] -[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitX" to="." method="update_split_preview" unbinds=1] -[connection signal="value_changed" from="SplitDialog/VBoxContainer/HBoxContainer/SplitY" to="." method="update_split_preview" unbinds=1] -[connection signal="draw" from="SplitDialog/VBoxContainer/CenterContainer/PanelContainer/SplitPreview" to="." method="draw_split_preview"] diff --git a/addons/SpritesheetGenerator/plugin.cfg b/addons/SpritesheetGenerator/plugin.cfg deleted file mode 100644 index 08a28bf..0000000 --- a/addons/SpritesheetGenerator/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="Spritesheet Generator" -description="Generates cropped spritesheets from multiple images." -author="KoBeWi" -version="1.2" -script="SpriteSheetGenerator.gd" diff --git a/project.godot b/project.godot index cefdef2..1a7434b 100644 --- a/project.godot +++ b/project.godot @@ -32,14 +32,17 @@ gdscript/completion/autocomplete_setters_and_getters=true [display] -window/size/viewport_width=800 -window/size/viewport_height=500 -window/size/resizable=false window/energy_saving/keep_screen_on=false +window/stretch/mode="canvas_items" +window/stretch/aspect="expand" + +[dotnet] + +project/assembly_name="Dress Up Zack" [editor_plugins] -enabled=PackedStringArray("res://addons/SpritesheetGenerator/plugin.cfg", "res://addons/fontawesome/plugin.cfg") +enabled=PackedStringArray("res://addons/fontawesome/plugin.cfg") [file_customization] diff --git a/scenes/demo.tscn b/scenes/demo.tscn deleted file mode 100644 index 5337085..0000000 --- a/scenes/demo.tscn +++ /dev/null @@ -1,18 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://bguec0ft5ygk4"] - -[ext_resource type="PackedScene" uid="uid://bvbelmb6rvy4f" path="res://scenes/platform.tscn" id="1_31w52"] -[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="2_cgl4f"] - -[node name="Demo" type="Node2D"] - -[node name="Platform" parent="." instance=ExtResource("1_31w52")] -position = Vector2(170, 92) - -[node name="Platform2" parent="." instance=ExtResource("1_31w52")] -position = Vector2(419, 84) - -[node name="Platform3" parent="." instance=ExtResource("1_31w52")] -position = Vector2(296, 286) - -[node name="Object" parent="." instance=ExtResource("2_cgl4f")] -position = Vector2(169, 90) diff --git a/scenes/game.tscn b/scenes/game.tscn index d8201a7..6d5c005 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,49 +1,154 @@ -[gd_scene load_steps=9 format=3 uid="uid://cvr2aries2lhr"] +[gd_scene load_steps=17 format=3 uid="uid://cvr2aries2lhr"] +[ext_resource type="Script" path="res://scripts/game.gd" id="1_qt3fe"] [ext_resource type="Texture2D" uid="uid://33g80p0qnfw4" path="res://sprites/world/background.svg" id="1_uee2i"] -[ext_resource type="Texture2D" uid="uid://bi7ayrxnn7hex" path="res://sprites/clothes/icrazy_frame.svg" id="2_n1kmf"] +[ext_resource type="Texture2D" uid="uid://bi7ayrxnn7hex" path="res://sprites/world/icrazy_frame.svg" id="2_n1kmf"] [ext_resource type="Texture2D" uid="uid://cmv58t1dfgsov" path="res://sprites/world/stand.svg" id="2_q0w7j"] -[ext_resource type="Texture2D" uid="uid://dteiup73cqn4o" path="res://sprites/clothes/lights.png" id="3_bbsyl"] -[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="6_6t4pu"] +[ext_resource type="Texture2D" uid="uid://d1u3w61r0uv7p" path="res://sprites/world/boxersOfAmericaFrame.png" id="4_327cy"] [ext_resource type="PackedScene" uid="uid://detf8uwimqp3v" path="res://scenes/character.tscn" id="6_tdil0"] -[ext_resource type="PackedScene" uid="uid://bvbelmb6rvy4f" path="res://scenes/platform.tscn" id="7_vqx6c"] +[ext_resource type="Texture2D" uid="uid://405burxtvied" path="res://sprites/clothes/sweat_pants.svg" id="7_7tx8y"] [ext_resource type="Texture2D" uid="uid://venieklgphn5" path="res://sprites/clothes/blue_camo_jeans.svg" id="8_bqcl8"] +[ext_resource type="Texture2D" uid="uid://8vrl1mmcm5is" path="res://sprites/clothes/beat_up_jeans.svg" id="8_jisbs"] +[ext_resource type="Texture2D" uid="uid://310b2835i5d8" path="res://sprites/clothes/dj_shirt.png" id="8_r4o7r"] +[ext_resource type="Texture2D" uid="uid://dt1tsnusorwv8" path="res://sprites/clothes/korm_shirt.png" id="11_6ilrq"] +[ext_resource type="Texture2D" uid="uid://clakkue2mohs4" path="res://sprites/ui/greenBtn.png" id="14_yk2bu"] +[ext_resource type="Texture2D" uid="uid://cd8mirubbhn10" path="res://sprites/ui/redBtn.png" id="15_g5gd1"] +[ext_resource type="Texture2D" uid="uid://wr3ns0ywb75q" path="res://sprites/logo.png" id="16_y58oj"] +[ext_resource type="Texture2D" uid="uid://b0sf2e2e5jfab" path="res://sprites/clothes/z_shirt.png" id="17_yoe0e"] + +[sub_resource type="SpriteFrames" id="SpriteFrames_jjbgs"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": ExtResource("7_7tx8y") +}, { +"duration": 1.0, +"texture": ExtResource("8_jisbs") +}, { +"duration": 1.0, +"texture": ExtResource("8_bqcl8") +}], +"loop": true, +"name": &"bottoms", +"speed": 1.0 +}, { +"frames": [{ +"duration": 1.0, +"texture": ExtResource("8_r4o7r") +}, { +"duration": 1.0, +"texture": ExtResource("11_6ilrq") +}, { +"duration": 1.0, +"texture": ExtResource("17_yoe0e") +}], +"loop": true, +"name": &"tops", +"speed": 5.0 +}] [node name="Game" type="Node"] +script = ExtResource("1_qt3fe") [node name="Background" type="Sprite2D" parent="."] -position = Vector2(400, 240) +position = Vector2(577.603, 328.303) +scale = Vector2(1.14718, 1.13943) texture = ExtResource("1_uee2i") metadata/_edit_lock_ = true [node name="Stand" type="Sprite2D" parent="."] -position = Vector2(125, 461) -scale = Vector2(1.28991, 1.3328) +position = Vector2(564.62, 543.689) +scale = Vector2(1.79062, 1.7736) texture = ExtResource("2_q0w7j") -[node name="PictureFrame" type="Sprite2D" parent="."] -position = Vector2(107.454, 127.574) +[node name="BoxersOfAmericaFrame" type="Sprite2D" parent="."] +position = Vector2(942.068, 139.049) +scale = Vector2(1.7514, 1.86172) +texture = ExtResource("4_327cy") + +[node name="iCrazyFrame" type="Sprite2D" parent="."] +position = Vector2(183.37, 149.267) +scale = Vector2(1.25573, 1.3008) texture = ExtResource("2_n1kmf") -[node name="Light3D" type="PointLight2D" parent="PictureFrame"] -position = Vector2(35.118, -14.56) -texture = ExtResource("3_bbsyl") -metadata/_edit_lock_ = true - [node name="Character" parent="." instance=ExtResource("6_tdil0")] -position = Vector2(117, 234) +position = Vector2(557.567, 197.468) +scale = Vector2(1.5, 1.5) + +[node name="Bottoms" type="AnimatedSprite2D" parent="."] +position = Vector2(570.883, 453.423) +scale = Vector2(1.85571, 1.88987) +sprite_frames = SubResource("SpriteFrames_jjbgs") +animation = &"bottoms" + +[node name="Tops" type="AnimatedSprite2D" parent="."] +position = Vector2(579.842, 318.193) +scale = Vector2(1.5, 1.5) +sprite_frames = SubResource("SpriteFrames_jjbgs") +animation = &"tops" + +[node name="CanvasLayer" type="CanvasLayer" parent="."] + +[node name="Control" type="Control" parent="CanvasLayer"] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 metadata/_edit_lock_ = true -[node name="Bottoms" parent="." groups=["pants"] instance=ExtResource("7_vqx6c")] -position = Vector2(120, 409) +[node name="TopsFwdBtn" type="TextureButton" parent="CanvasLayer/Control"] +layout_mode = 0 +offset_left = 733.043 +offset_top = 272.435 +offset_right = 776.043 +offset_bottom = 335.435 +scale = Vector2(1.5, 1.5) +texture_normal = ExtResource("14_yk2bu") +stretch_mode = 4 -[node name="Platform" parent="." groups=["pants"] instance=ExtResource("7_vqx6c")] -position = Vector2(335, 78) +[node name="TopsBckBtn" type="TextureButton" parent="CanvasLayer/Control"] +layout_mode = 0 +offset_left = 322.285 +offset_top = 269.324 +offset_right = 365.285 +offset_bottom = 332.324 +scale = Vector2(1.5, 1.5) +texture_normal = ExtResource("15_g5gd1") -[node name="Object" parent="." instance=ExtResource("6_6t4pu")] -position = Vector2(335, 79) -group = "pants" -texture = ExtResource("8_bqcl8") +[node name="BottomsBckBtn" type="TextureButton" parent="CanvasLayer/Control"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.273624 +anchor_top = 0.59627 +anchor_right = 0.330916 +anchor_bottom = 0.753677 +offset_top = -1.90735e-05 +offset_right = 1.52588e-05 +offset_bottom = -1.04904e-05 +texture_normal = ExtResource("15_g5gd1") +stretch_mode = 4 +metadata/_edit_use_anchors_ = true -[node name="TileMap" type="TileMap" parent="."] -format = 2 +[node name="BottomsFwdBtn" type="TextureButton" parent="CanvasLayer/Control"] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.636238 +anchor_top = 0.600003 +anchor_right = 0.695266 +anchor_bottom = 0.752781 +offset_left = 1.52588e-05 +texture_normal = ExtResource("14_yk2bu") +stretch_mode = 4 +metadata/_edit_use_anchors_ = true + +[node name="Logo" type="Sprite2D" parent="."] +position = Vector2(1052.16, 511.503) +scale = Vector2(0.225814, 0.216046) +texture = ExtResource("16_y58oj") + +[connection signal="pressed" from="CanvasLayer/Control/TopsFwdBtn" to="." method="_on_tops_fwd_btn_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/TopsBckBtn" to="." method="_on_tops_bck_btn_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/BottomsBckBtn" to="." method="_on_bottoms_bck_btn_pressed"] +[connection signal="pressed" from="CanvasLayer/Control/BottomsFwdBtn" to="." method="_on_bottoms_fwd_btn_pressed"] diff --git a/scenes/object.tscn b/scenes/object.tscn deleted file mode 100644 index ff1a068..0000000 --- a/scenes/object.tscn +++ /dev/null @@ -1,26 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://dn152ouc7l21p"] - -[ext_resource type="Script" path="res://scripts/object.gd" id="1_tyfcj"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_xd2jg"] -size = Vector2(111, 125.5) - -[node name="Object" type="Node2D"] -script = ExtResource("1_tyfcj") - -[node name="Sprite2D" type="Sprite2D" parent="."] -position = Vector2(4.5, 6.5) -scale = Vector2(1.32143, 1.32292) - -[node name="Area2D" type="Area2D" parent="."] -metadata/_edit_lock_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D"] -position = Vector2(5, 7) -shape = SubResource("RectangleShape2D_xd2jg") -metadata/_edit_lock_ = true - -[connection signal="body_entered" from="Area2D" to="." method="_on_area_2d_body_entered"] -[connection signal="body_exited" from="Area2D" to="." method="_on_area_2d_body_exited"] -[connection signal="mouse_entered" from="Area2D" to="." method="_on_area_2d_mouse_entered"] -[connection signal="mouse_exited" from="Area2D" to="." method="_on_area_2d_mouse_exited"] diff --git a/scenes/platform.tscn b/scenes/platform.tscn deleted file mode 100644 index e03becf..0000000 --- a/scenes/platform.tscn +++ /dev/null @@ -1,20 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://bvbelmb6rvy4f"] - -[ext_resource type="Script" path="res://scripts/platform.gd" id="1_xgdk6"] -[ext_resource type="Texture2D" uid="uid://c52oho3nvkt45" path="res://sprites/clothes/scale.png" id="2_ic83p"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_ieyrm"] -size = Vector2(111, 126) - -[node name="Platform" type="StaticBody2D"] -script = ExtResource("1_xgdk6") - -[node name="Sprite2D" type="Sprite2D" parent="."] -position = Vector2(4.5, 7) -scale = Vector2(1.32143, 1.28571) -texture = ExtResource("2_ic83p") - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(4.5, 7) -shape = SubResource("RectangleShape2D_ieyrm") -metadata/_edit_lock_ = true diff --git a/scenes/wardrobe.tscn b/scenes/wardrobe.tscn deleted file mode 100644 index 8f718ef..0000000 --- a/scenes/wardrobe.tscn +++ /dev/null @@ -1,51 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://crwoe1shep3qn"] - -[ext_resource type="PackedScene" uid="uid://dn152ouc7l21p" path="res://scenes/object.tscn" id="1_0jlsi"] - -[sub_resource type="RectangleShape2D" id="RectangleShape2D_oig6u"] -size = Vector2(111, 125.5) - -[node name="Wordrobe" type="Panel"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -metadata/_edit_use_anchors_ = true - -[node name="Grid" type="GridContainer" parent="."] -layout_mode = 2 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -columns = 4 -metadata/_edit_use_anchors_ = true - -[node name="Object" parent="Grid" instance=ExtResource("1_0jlsi")] -position = Vector2(51, 54) -texture = null - -[node name="Bottoms" type="StaticBody2D" parent="Grid" groups=["bottoms"]] - -[node name="ColorRect" type="ColorRect" parent="Grid/Bottoms"] -custom_minimum_size = Vector2(111, 125) -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -49.0 -offset_top = 116.0 -offset_right = 62.0 -offset_bottom = 241.0 -grow_horizontal = 2 -grow_vertical = 2 -color = Color(1, 1, 1, 0.0980392) -metadata/_edit_use_anchors_ = true - -[node name="CollisionShape2D" type="CollisionShape2D" parent="Grid/Bottoms"] -position = Vector2(6, 178.25) -shape = SubResource("RectangleShape2D_oig6u") diff --git a/screenshot.gif b/screenshot.gif deleted file mode 100644 index ef6345c..0000000 Binary files a/screenshot.gif and /dev/null differ diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000..af34b01 Binary files /dev/null and b/screenshot.png differ diff --git a/screenshots/main_ui.png.import b/screenshot.png.import similarity index 69% rename from screenshots/main_ui.png.import rename to screenshot.png.import index 76d3459..1174e39 100644 --- a/screenshots/main_ui.png.import +++ b/screenshot.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dycgk1pvyl7fu" -path="res://.godot/imported/main_ui.png-ac6532fbb861d9876368e8a8c16e4467.ctex" +uid="uid://bjio4exj7ic6b" +path="res://.godot/imported/screenshot.png-024a21af5d37bf0f0dd0e2bccdd149d0.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://screenshots/main_ui.png" -dest_files=["res://.godot/imported/main_ui.png-ac6532fbb861d9876368e8a8c16e4467.ctex"] +source_file="res://screenshot.png" +dest_files=["res://.godot/imported/screenshot.png-024a21af5d37bf0f0dd0e2bccdd149d0.ctex"] [params] diff --git a/screenshots/main_ui.png b/screenshots/main_ui.png deleted file mode 100644 index 02461f8..0000000 Binary files a/screenshots/main_ui.png and /dev/null differ diff --git a/scripts/character.gd b/scripts/character.gd index 5c590a2..f792632 100644 --- a/scripts/character.gd +++ b/scripts/character.gd @@ -1,3 +1,4 @@ +@tool extends Node2D @onready var _eyes = $Eyes diff --git a/scripts/clothing.gd b/scripts/clothing.gd deleted file mode 100644 index 2bfe0df..0000000 --- a/scripts/clothing.gd +++ /dev/null @@ -1,37 +0,0 @@ -# This project is licensed under the GPL-3.0 license. -# See the LICENSE file in the project root for more information. -extends TextureRect - -var is_draggable = false -var is_inside_draggable = false -var body_ref - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - if is_draggable: - if Input.is_action_just_pressed("click"): - global_position = get_global_mouse_position() - elif Input.is_action_just_released("click"): - is_draggable = false - var tween = get_tree().create_tween() - if is_inside_draggable: - tween.tween_property(self,"postion",body_ref.position,0.2).set_ease(Tween.EASE_OUT) - else: - tween.tween_property(self,"global_postion",body_ref.position,0.2).set_ease(Tween.EASE_OUT) - -func _get_drag_data(at_position): - var preview_texture = TextureRect.new() - - preview_texture.texture = texture - preview_texture.expand_mode = 1 - preview_texture.size = Vector2(106, 112) - - set_drag_preview(preview_texture) - - return preview_texture.texture - -func _can_drop_data(at_position, data): - return data is Texture2D - -func _drop_data(at_position, data): - texture = data diff --git a/scripts/game.gd b/scripts/game.gd new file mode 100644 index 0000000..3172af2 --- /dev/null +++ b/scripts/game.gd @@ -0,0 +1,23 @@ +extends Node + + +@onready var tops = $Tops +@onready var bottoms = $Bottoms + +func _on_tops_fwd_btn_pressed(): + var current_frame = tops.get_frame() + tops.frame = current_frame + 1; + +func _on_tops_bck_btn_pressed(): + var current_frame = tops.get_frame() + tops.frame = current_frame + -1; + + +func _on_bottoms_bck_btn_pressed(): + var current_frame = bottoms.get_frame() + bottoms.frame = current_frame + -1; + + +func _on_bottoms_fwd_btn_pressed(): + var current_frame = bottoms.get_frame() + bottoms.frame = current_frame + 1; diff --git a/scripts/gui.gd b/scripts/gui.gd deleted file mode 100644 index 20440b7..0000000 --- a/scripts/gui.gd +++ /dev/null @@ -1,3 +0,0 @@ -# This project is licensed under the GPL-3.0 license. -# See the LICENSE file in the project root for more information. -extends Control diff --git a/scripts/object.gd b/scripts/object.gd deleted file mode 100644 index 7183fef..0000000 --- a/scripts/object.gd +++ /dev/null @@ -1,61 +0,0 @@ -# This project is licensed under the GPL-3.0 license. -# See the LICENSE file in the project root for more information. -@tool -extends Node2D - -@export var group: String = "dropable" -@export var texture: Texture2D - -var is_draggable = false -var is_inside_dropable = false -var body_ref -var offset: Vector2 - -@onready var sprite = $Sprite2D -@onready var collsion = $Area2D/CollisionShape2D - -func _ready(): - sprite.texture = texture - collsion.position = sprite.position - -# Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta): - if is_draggable: - if Input.is_action_just_pressed("click"): - offset = global_position - get_global_mouse_position() - Global.is_dragging = true - - if Input.is_action_pressed("click"): - global_position = get_global_mouse_position() - offset - elif Input.is_action_just_released("click"): - Global.is_dragging = false - var tween = get_tree().create_tween() - if is_inside_dropable: - tween.tween_property(self, "position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT) - else: - tween.tween_property(self, "global_position", body_ref.position, 0.2).set_ease(Tween.EASE_OUT) - - -func _on_area_2d_body_entered(body): - if body.is_in_group(group): - is_inside_dropable = true - body.modulate = Color(Color.REBECCA_PURPLE, 1) - scale = Vector2(1.05, 1.05) - body_ref = body - -func _on_area_2d_body_exited(body:StaticBody2D): - if body.is_in_group(group): - is_inside_dropable = false - body.modulate = Color(Color.MEDIUM_PURPLE, .7) - scale = Vector2(1.05, 1.05) - - -func _on_area_2d_mouse_entered(): - if not Global.is_dragging: - is_draggable = true - scale = Vector2(1.05, 1.05) - -func _on_area_2d_mouse_exited(): - if not Global.is_dragging: - is_draggable = false - scale = Vector2(1, 1) diff --git a/scripts/platform.gd b/scripts/platform.gd deleted file mode 100644 index 414ae85..0000000 --- a/scripts/platform.gd +++ /dev/null @@ -1,12 +0,0 @@ -# This project is licensed under the GPL-3.0 license. -# See the LICENSE file in the project root for more information. -extends StaticBody2D - -func _ready(): - modulate = Color(Color.MEDIUM_PURPLE, 0.7) - -func _process(delta): - if Global.is_dragging: - visible = true - else: - visible = false diff --git a/sprites/clothes/beat_up_jeans.svg b/sprites/clothes/beat_up_jeans.svg index 65773fa..5b378f0 100644 --- a/sprites/clothes/beat_up_jeans.svg +++ b/sprites/clothes/beat_up_jeans.svg @@ -1,15 +1,79 @@ - - - - + + + - - - - - - - + + + + + + + - + diff --git a/sprites/clothes/blue-ruffle-logo.afdesign b/sprites/clothes/blue-ruffle-logo.afdesign new file mode 100644 index 0000000..dad9a94 Binary files /dev/null and b/sprites/clothes/blue-ruffle-logo.afdesign differ diff --git a/sprites/clothes/blue_camo_jeans.svg b/sprites/clothes/blue_camo_jeans.svg index 5abd880..4a98b3e 100644 --- a/sprites/clothes/blue_camo_jeans.svg +++ b/sprites/clothes/blue_camo_jeans.svg @@ -1,33 +1,151 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + - + diff --git a/sprites/clothes/logo.png b/sprites/clothes/logo.png new file mode 100644 index 0000000..1855097 Binary files /dev/null and b/sprites/clothes/logo.png differ diff --git a/addons/SpritesheetGenerator/Checker.png.import b/sprites/clothes/logo.png.import similarity index 67% rename from addons/SpritesheetGenerator/Checker.png.import rename to sprites/clothes/logo.png.import index 7bcd8ec..554e477 100644 --- a/addons/SpritesheetGenerator/Checker.png.import +++ b/sprites/clothes/logo.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://bnkl8rujlgv0h" -path="res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex" +uid="uid://ch1y0g1plqys6" +path="res://.godot/imported/logo.png-68ff395daf2515f85e13ba18ce4a426d.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://addons/SpritesheetGenerator/Checker.png" -dest_files=["res://.godot/imported/Checker.png-95b82ca4c05ab143e1e16c56d598421b.ctex"] +source_file="res://sprites/clothes/logo.png" +dest_files=["res://.godot/imported/logo.png-68ff395daf2515f85e13ba18ce4a426d.ctex"] [params] diff --git a/sprites/clothes/scale.png b/sprites/clothes/scale.png index 17ab738..7a0a9b4 100644 Binary files a/sprites/clothes/scale.png and b/sprites/clothes/scale.png differ diff --git a/sprites/logo.png b/sprites/logo.png new file mode 100644 index 0000000..1855097 Binary files /dev/null and b/sprites/logo.png differ diff --git a/sprites/logo.png.import b/sprites/logo.png.import new file mode 100644 index 0000000..f422dc9 --- /dev/null +++ b/sprites/logo.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://wr3ns0ywb75q" +path="res://.godot/imported/logo.png-9048fb90decc23e071a5e31cbd95178e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/logo.png" +dest_files=["res://.godot/imported/logo.png-9048fb90decc23e071a5e31cbd95178e.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/sprites/ui/greenBtn.png b/sprites/ui/greenBtn.png new file mode 100644 index 0000000..036fd0d Binary files /dev/null and b/sprites/ui/greenBtn.png differ diff --git a/sprites/ui/greenBtn.png.import b/sprites/ui/greenBtn.png.import new file mode 100644 index 0000000..2205cb0 --- /dev/null +++ b/sprites/ui/greenBtn.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://clakkue2mohs4" +path="res://.godot/imported/greenBtn.png-4d4dd91a26d599b1f56f508992a67f2c.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/ui/greenBtn.png" +dest_files=["res://.godot/imported/greenBtn.png-4d4dd91a26d599b1f56f508992a67f2c.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/sprites/ui/redBtn.png b/sprites/ui/redBtn.png new file mode 100644 index 0000000..df6499b Binary files /dev/null and b/sprites/ui/redBtn.png differ diff --git a/sprites/ui/redBtn.png.import b/sprites/ui/redBtn.png.import new file mode 100644 index 0000000..ebc9e50 --- /dev/null +++ b/sprites/ui/redBtn.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cd8mirubbhn10" +path="res://.godot/imported/redBtn.png-e2a2e519f53fb6bff43505aa9622a1cf.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/ui/redBtn.png" +dest_files=["res://.godot/imported/redBtn.png-e2a2e519f53fb6bff43505aa9622a1cf.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/sprites/world/boxersOfAmericaFrame.png b/sprites/world/boxersOfAmericaFrame.png new file mode 100644 index 0000000..3e6ceb3 Binary files /dev/null and b/sprites/world/boxersOfAmericaFrame.png differ diff --git a/sprites/world/boxersOfAmericaFrame.png.import b/sprites/world/boxersOfAmericaFrame.png.import new file mode 100644 index 0000000..b1f5067 --- /dev/null +++ b/sprites/world/boxersOfAmericaFrame.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://d1u3w61r0uv7p" +path="res://.godot/imported/boxersOfAmericaFrame.png-305851a525e3ee9fbe3ec9956a4aa80b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://sprites/world/boxersOfAmericaFrame.png" +dest_files=["res://.godot/imported/boxersOfAmericaFrame.png-305851a525e3ee9fbe3ec9956a4aa80b.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/sprites/clothes/icrazy_frame.svg b/sprites/world/icrazy_frame.svg similarity index 100% rename from sprites/clothes/icrazy_frame.svg rename to sprites/world/icrazy_frame.svg diff --git a/sprites/clothes/icrazy_frame.svg.import b/sprites/world/icrazy_frame.svg.import similarity index 74% rename from sprites/clothes/icrazy_frame.svg.import rename to sprites/world/icrazy_frame.svg.import index 9c6bcf9..f0e5726 100644 --- a/sprites/clothes/icrazy_frame.svg.import +++ b/sprites/world/icrazy_frame.svg.import @@ -3,15 +3,15 @@ importer="texture" type="CompressedTexture2D" uid="uid://bi7ayrxnn7hex" -path="res://.godot/imported/icrazy_frame.svg-032c353b0b85ae71d6c5843b8929a60c.ctex" +path="res://.godot/imported/icrazy_frame.svg-96baf65adc7b6794f97c6c0d94fcce08.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://sprites/clothes/icrazy_frame.svg" -dest_files=["res://.godot/imported/icrazy_frame.svg-032c353b0b85ae71d6c5843b8929a60c.ctex"] +source_file="res://sprites/world/icrazy_frame.svg" +dest_files=["res://.godot/imported/icrazy_frame.svg-96baf65adc7b6794f97c6c0d94fcce08.ctex"] [params]