Further simplified design
- Removed a tone of bloat - Use simple arrows to scroll through items instead of drag-and-drop
609
.gdignore
|
@ -1,3 +1,606 @@
|
|||
docs
|
||||
*.md
|
||||
.idea
|
||||
# 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/*
|
503
.gitignore
vendored
|
@ -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)
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# 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.
|
||||

|
||||
|
||||
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
|
||||
|
||||
|
|
Before Width: | Height: | Size: 913 B |
|
@ -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")
|
|
@ -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
|
|
@ -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"]
|
|
@ -1,7 +0,0 @@
|
|||
[plugin]
|
||||
|
||||
name="Spritesheet Generator"
|
||||
description="Generates cropped spritesheets from multiple images."
|
||||
author="KoBeWi"
|
||||
version="1.2"
|
||||
script="SpriteSheetGenerator.gd"
|
|
@ -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]
|
||||
|
||||
|
|
|
@ -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)
|
157
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"]
|
||||
|
|
|
@ -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"]
|
|
@ -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
|
|
@ -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")
|
BIN
screenshot.gif
Before Width: | Height: | Size: 300 KiB |
BIN
screenshot.png
Normal file
After Width: | Height: | Size: 461 KiB |
|
@ -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]
|
||||
|
Before Width: | Height: | Size: 59 KiB |
|
@ -1,3 +1,4 @@
|
|||
@tool
|
||||
extends Node2D
|
||||
|
||||
@onready var _eyes = $Eyes
|
||||
|
|
|
@ -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
|
23
scripts/game.gd
Normal file
|
@ -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;
|
|
@ -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
|
|
@ -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)
|
|
@ -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
|
|
@ -1,15 +1,79 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 84 96" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
|
||||
<g id="Color" transform="matrix(1,0,0,1,-0.311807,3.9386)">
|
||||
<path id="path2567-7" d="M74.437,-2.53C74.358,-2.535 74.278,-2.529 74.195,-2.51C60.752,0.463 38.712,-1.81 29.746,-1.138C27.585,-0.975 20.45,46.617 3.253,67.485C-3.144,75.247 31.556,74.434 32.832,70.17C35.841,50.723 50.345,33.416 50.345,33.416C50.345,33.416 52.329,54.385 49.456,65.405C47.174,74.163 76.162,73.153 76.7,64.12C78.141,39.903 79.36,-2.243 74.437,-2.53ZM28.447,40.58C31.03,40.745 36.046,47.686 31.388,50.628C30.664,51.085 21.818,47.961 21.602,47.085C21.552,46.881 23.441,43.188 23.744,42.887C24.781,41.638 26.561,40.779 28.204,40.586C28.282,40.577 28.364,40.575 28.447,40.58L28.447,40.58Z" style="fill:rgb(107,166,255);fill-rule:nonzero;"/>
|
||||
<svg
|
||||
width="79"
|
||||
height="79"
|
||||
viewBox="0 0 79 79"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="clip-rule:evenodd;fill-rule:evenodd"
|
||||
id="svg1"
|
||||
sodipodi:docname="beat_up_jeans.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"><defs
|
||||
id="defs1" /><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="5.6893064"
|
||||
inkscape:cx="44.733045"
|
||||
inkscape:cy="29.353315"
|
||||
inkscape:window-width="1392"
|
||||
inkscape:window-height="975"
|
||||
inkscape:window-x="527"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1" />
|
||||
<g
|
||||
id="Color"
|
||||
transform="translate(-1.1019076,3.939774)">
|
||||
<path
|
||||
id="path2567-7"
|
||||
d="m 74.437,-2.53 c -0.079,-0.005 -0.159,10e-4 -0.242,0.02 -13.443,2.973 -35.483,0.7 -44.449,1.372 -2.161,0.163 -9.296,47.755 -26.493,68.623 -6.397,7.762 28.303,6.949 29.579,2.685 3.009,-19.447 17.513,-36.754 17.513,-36.754 0,0 1.984,20.969 -0.889,31.989 -2.282,8.758 26.706,7.748 27.244,-1.285 1.441,-24.217 2.66,-66.363 -2.263,-66.65 z m -45.99,43.11 c 2.583,0.165 7.599,7.106 2.941,10.048 -0.724,0.457 -9.57,-2.667 -9.786,-3.543 -0.05,-0.204 1.839,-3.897 2.142,-4.198 1.037,-1.249 2.817,-2.108 4.46,-2.301 0.078,-0.009 0.16,-0.011 0.243,-0.006 z"
|
||||
style="fill:#6ba6ff;fill-rule:nonzero" />
|
||||
</g>
|
||||
<g id="Re-ink" transform="matrix(1,0,0,1,-0.311807,3.9386)">
|
||||
<path id="path2567" d="M3.252,67.484C20.449,46.616 27.585,-0.975 29.746,-1.138C38.712,-1.81 60.752,0.463 74.195,-2.51C79.495,-3.682 78.164,38.019 76.7,62.62C76.163,71.653 47.173,72.663 49.456,63.905C52.328,52.885 50.345,33.415 50.345,33.415C50.345,33.415 34.099,52.598 32.832,70.17C32.511,74.609 -3.144,75.246 3.252,67.484Z" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:2.83px;"/>
|
||||
<path id="path2571" d="M50.345,33.415C50.345,33.415 55.459,27.022 54.9,21.679C54.341,16.337 54.605,2.175 54.605,2.175" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:1.42px;"/>
|
||||
<path id="path2573" d="M54.9,21.679L58.763,2.105" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:1.42px;"/>
|
||||
<path id="path2569" d="M25.073,16.765C25.073,16.765 32.974,19.361 35.29,16.293C37.606,13.226 37.355,1.36 37.355,1.36L28.498,2.801L25.073,16.765Z" style="fill:rgb(103,103,103);fill-rule:nonzero;stroke:black;stroke-width:1.7px;"/>
|
||||
<path id="path2583" d="M27.783,2.547C27.783,2.547 29.006,-0.13 30.184,-0.057C42.542,0.715 60.983,-0.21 74.27,-1.261C75.328,-1.344 75.36,1.731 74.684,1.867C64.47,3.916 27.783,2.547 27.783,2.547Z" style="fill:rgb(152,152,152);fill-rule:nonzero;"/>
|
||||
<path id="path2579" d="M27.783,2.547L54.393,3.343L75.36,1.731" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:1.42px;"/>
|
||||
<g
|
||||
id="Re-ink"
|
||||
transform="translate(-1.1019076,3.939774)">
|
||||
<path
|
||||
id="path2567"
|
||||
d="M 3.252,67.484 C 20.449,46.616 27.585,-0.975 29.746,-1.138 38.712,-1.81 60.752,0.463 74.195,-2.51 c 5.3,-1.172 3.969,40.529 2.505,65.13 -0.537,9.033 -29.527,10.043 -27.244,1.285 2.872,-11.02 0.889,-30.49 0.889,-30.49 0,0 -16.246,19.183 -17.513,36.755 -0.321,4.439 -35.976,5.076 -29.58,-2.686 z"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:2.83px" />
|
||||
<path
|
||||
id="path2571"
|
||||
d="m 50.345,33.415 c 0,0 5.114,-6.393 4.555,-11.736 C 54.341,16.337 54.605,2.175 54.605,2.175"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:1.42px" />
|
||||
<path
|
||||
id="path2573"
|
||||
d="M 54.9,21.679 58.763,2.105"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:1.42px" />
|
||||
<path
|
||||
id="path2569"
|
||||
d="m 25.073,16.765 c 0,0 7.901,2.596 10.217,-0.472 C 37.606,13.226 37.355,1.36 37.355,1.36 l -8.857,1.441 z"
|
||||
style="fill:#676767;fill-rule:nonzero;stroke:#000000;stroke-width:1.7px" />
|
||||
<path
|
||||
id="path2583"
|
||||
d="m 27.783,2.547 c 0,0 1.223,-2.677 2.401,-2.604 12.358,0.772 30.799,-0.153 44.086,-1.204 1.058,-0.083 1.09,2.992 0.414,3.128 -10.214,2.049 -46.901,0.68 -46.901,0.68 z"
|
||||
style="fill:#989898;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2579"
|
||||
d="M 27.783,2.547 54.393,3.343 75.36,1.731"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:1.42px" />
|
||||
</g>
|
||||
</svg>
|
||||
<metadata
|
||||
id="metadata1"><rdf:RDF><cc:Work
|
||||
rdf:about=""><cc:license
|
||||
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /></cc:Work><cc:License
|
||||
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||
|
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 3.8 KiB |
BIN
sprites/clothes/blue-ruffle-logo.afdesign
Normal file
|
@ -1,33 +1,151 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg width="100%" height="100%" viewBox="0 0 84 97" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;">
|
||||
<g id="Re-ink" transform="matrix(1,0,0,1,3.78547,0.55964)">
|
||||
<path id="path2567" d="M-1.662,72.921C14.964,51.595 22.307,3.585 24.463,3.364C33.407,2.449 56.999,4.204 70.357,0.868C75.623,-0.447 72.545,45.854 71.748,70.486C71.456,79.53 42.504,81.325 44.549,72.509C47.121,61.414 47.489,37.426 47.489,37.426C47.489,37.426 32.541,57.906 27.979,74.804C26.819,79.101 -7.846,80.853 -1.662,72.921Z" style="fill:rgb(0,51,102);fill-rule:nonzero;stroke:black;stroke-width:2.83px;"/>
|
||||
<path id="path2616" d="M18.906,29.424C20.48,30.405 18.779,33.492 19.658,34.905C20.749,36.659 25.767,34.949 26.788,36.59C31.93,44.854 18.845,45.167 14.669,42.752" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2614" d="M41.642,42.972C38.066,44.929 34.683,42.295 31.176,42.832C28.305,43.272 30.94,53.534 36.104,50.24" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2571" d="M47.503,37.223C47.503,37.223 50.975,31.5 51.496,26.335C52.017,21.171 50.87,6.651 50.87,6.651" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:2.27px;"/>
|
||||
<path id="path2573" d="M51.561,24.992L55.018,6.658" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:2.27px;"/>
|
||||
<path id="path2612" d="M23.168,21.22C19.896,38.728 50.562,39.526 39.428,23.982C37.373,21.113 35.873,18.985 32.627,18.119" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2622" d="M12.345,47.392C17.748,46.58 16.622,50.31 19.401,53.601C20.805,55.265 24.103,54.558 25.256,55.729C25.593,56.071 25.433,58.581 25.231,59.043C21.862,66.743 13.152,61.118 8.29,57.589" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2569" d="M19.55,20.819C19.55,20.819 29.267,21.122 31.824,18.253C34.382,15.384 33.088,7.413 33.088,7.413L24.098,7.18L19.55,20.819Z" style="fill:rgb(51,51,51);fill-rule:nonzero;stroke:black;stroke-width:1.42px;"/>
|
||||
<path id="path2579" d="M24.098,7.18L50.721,7.255L71.636,5.075" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:1.42px;"/>
|
||||
<path id="path2598" d="M45.057,27.221C47.968,24.828 53.463,23.172 57.002,25.202" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<path id="path2600" d="M47.762,29.546C44.089,30.911 41.013,33.206 37.615,34.886" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<path id="path2602" d="M54.522,27.251C54.654,30.868 56.325,34.498 57.184,37.824" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<path id="path2610" d="M52.458,33.969C52.962,35.072 52.707,36.417 52.64,37.677" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<path id="path2618" d="M71.861,15.086C70.142,14.926 66.288,15.11 65.404,17.019C63.896,20.275 66.296,22.251 67.366,24.71C69.89,30.51 58.333,40.049 71.672,40.018" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2620" d="M48.563,46.565C52.2,46.201 55.352,46.027 58.154,48.118C59.621,49.214 66.25,51.916 67.957,51.011C69.012,50.452 70.942,47.794 70.91,48.987C70.568,61.851 72.809,57.084 56.995,53.842C53.905,53.208 49.445,57.527 48.404,54.902C48.404,54.902 47.935,49.272 48.563,46.565L48.563,46.565Z" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2630" d="M5.247,65.058C19.854,71.595 5.994,79.898 0.224,73.116" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2624" d="M0.326,72.638C7.274,73.785 12.92,73.195 19.256,71.559" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<path id="path2632" d="M70.266,70.006C56.179,61.261 55.609,65.928 53.219,76.686C59.684,78.01 69.256,75.88 70.266,70.006Z" style="fill:rgb(204,204,204);fill-rule:nonzero;"/>
|
||||
<path id="path2626" d="M48.707,72.368C55.516,73.649 62.013,75.276 67.931,71.115" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.85px;"/>
|
||||
<g id="g2657" transform="matrix(0.998587,0.0531475,-0.0531475,0.998587,-2.56451,-4.90154)">
|
||||
<path id="path2604" d="M53.856,9.307C53.72,13.714 52.262,17.537 49.718,20.929" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.75px;"/>
|
||||
<ellipse id="path2634" cx="49.529" cy="20.881" rx="0.71" ry="0.805"/>
|
||||
<svg
|
||||
width="79"
|
||||
height="79"
|
||||
viewBox="0 0 79 79"
|
||||
version="1.1"
|
||||
xml:space="preserve"
|
||||
style="clip-rule:evenodd;fill-rule:evenodd"
|
||||
id="svg1"
|
||||
sodipodi:docname="blue_camo_jeans.svg"
|
||||
inkscape:version="1.3.2 (091e20e, 2023-11-25)"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:cc="http://creativecommons.org/ns#"><defs
|
||||
id="defs1" /><sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:zoom="8.5773196"
|
||||
inkscape:cx="48.616587"
|
||||
inkscape:cy="34.043269"
|
||||
inkscape:window-width="1392"
|
||||
inkscape:window-height="947"
|
||||
inkscape:window-x="527"
|
||||
inkscape:window-y="25"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="svg1" />
|
||||
<g
|
||||
id="Re-ink"
|
||||
transform="translate(3.786409,0.56047467)">
|
||||
<path
|
||||
id="path2567"
|
||||
d="M -1.662,72.921 C 14.964,51.595 22.307,3.585 24.463,3.364 c 8.944,-0.915 32.536,0.84 45.894,-2.496 5.266,-1.315 2.188,44.986 1.391,69.618 -0.292,9.044 -29.244,10.839 -27.199,2.023 2.572,-11.095 2.94,-35.083 2.94,-35.083 0,0 -14.948,20.48 -19.51,37.378 -1.16,4.297 -35.825,6.049 -29.641,-1.883 z"
|
||||
style="fill:#003366;fill-rule:nonzero;stroke:#000000;stroke-width:2.83px" />
|
||||
<path
|
||||
id="path2616"
|
||||
d="m 18.906,29.424 c 1.574,0.981 -0.127,4.068 0.752,5.481 1.091,1.754 6.109,0.044 7.13,1.685 5.142,8.264 -7.943,8.577 -12.119,6.162"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2614"
|
||||
d="m 41.642,42.972 c -3.576,1.957 -6.959,-0.677 -10.466,-0.14 -2.871,0.44 -0.236,10.702 4.928,7.408"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2571"
|
||||
d="m 47.503,37.223 c 0,0 3.472,-5.723 3.993,-10.888 C 52.017,21.171 50.87,6.651 50.87,6.651"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:2.27px" />
|
||||
<path
|
||||
id="path2573"
|
||||
d="M 51.561,24.992 55.018,6.658"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:2.27px" />
|
||||
<path
|
||||
id="path2612"
|
||||
d="m 23.168,21.22 c -3.272,17.508 27.394,18.306 16.26,2.762 -2.055,-2.869 -3.555,-4.997 -6.801,-5.863"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2622"
|
||||
d="m 12.345,47.392 c 5.403,-0.812 4.277,2.918 7.056,6.209 1.404,1.664 4.702,0.957 5.855,2.128 0.337,0.342 0.177,2.852 -0.025,3.314 -3.369,7.7 -12.079,2.075 -16.941,-1.454"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2569"
|
||||
d="m 19.55,20.819 c 0,0 9.717,0.303 12.274,-2.566 2.558,-2.869 1.264,-10.84 1.264,-10.84 L 24.098,7.18 Z"
|
||||
style="fill:#333333;fill-rule:nonzero;stroke:#000000;stroke-width:1.42px" />
|
||||
<path
|
||||
id="path2579"
|
||||
d="M 24.098,7.18 50.721,7.255 71.636,5.075"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:1.42px" />
|
||||
<path
|
||||
id="path2598"
|
||||
d="m 45.057,27.221 c 2.911,-2.393 8.406,-4.049 11.945,-2.019"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<path
|
||||
id="path2600"
|
||||
d="m 47.762,29.546 c -3.673,1.365 -6.749,3.66 -10.147,5.34"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<path
|
||||
id="path2602"
|
||||
d="m 54.522,27.251 c 0.132,3.617 1.803,7.247 2.662,10.573"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<path
|
||||
id="path2610"
|
||||
d="m 52.458,33.969 c 0.504,1.103 0.249,2.448 0.182,3.708"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<path
|
||||
id="path2618"
|
||||
d="m 71.861,15.086 c -1.719,-0.16 -5.573,0.024 -6.457,1.933 -1.508,3.256 0.892,5.232 1.962,7.691 2.524,5.8 -9.033,15.339 4.306,15.308"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2620"
|
||||
d="m 48.563,46.565 c 3.637,-0.364 6.789,-0.538 9.591,1.553 1.467,1.096 8.096,3.798 9.803,2.893 1.055,-0.559 2.985,-3.217 2.953,-2.024 -0.342,12.864 1.899,8.097 -13.915,4.855 -3.09,-0.634 -7.55,3.685 -8.591,1.06 0,0 -0.469,-5.63 0.159,-8.337 z"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2630"
|
||||
d="m 5.247,65.058 c 14.607,6.537 0.747,14.84 -5.023,8.058"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2624"
|
||||
d="m 0.326,72.638 c 6.948,1.147 12.594,0.557 18.93,-1.079"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<path
|
||||
id="path2632"
|
||||
d="M 70.266,70.006 C 56.179,61.261 55.609,65.928 53.219,76.686 59.684,78.01 69.256,75.88 70.266,70.006 Z"
|
||||
style="fill:#cccccc;fill-rule:nonzero" />
|
||||
<path
|
||||
id="path2626"
|
||||
d="m 48.707,72.368 c 6.809,1.281 13.306,2.908 19.224,-1.253"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.85px" />
|
||||
<g
|
||||
id="g2657"
|
||||
transform="rotate(3.0465618,90.878122,-50.668814)">
|
||||
<path
|
||||
id="path2604"
|
||||
d="m 53.856,9.307 c -0.136,4.407 -1.594,8.23 -4.138,11.622"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.75px" />
|
||||
<ellipse
|
||||
id="path2634"
|
||||
cx="49.528999"
|
||||
cy="20.881001"
|
||||
rx="0.70999998"
|
||||
ry="0.80500001" />
|
||||
</g>
|
||||
<g id="g2653" transform="matrix(0.998587,0.0531475,-0.0531475,0.998587,-2.56451,-4.90154)">
|
||||
<path id="path2606" d="M58.115,8.483C59.708,11.672 61.187,15.3 63.356,18.088" style="fill:none;fill-rule:nonzero;stroke:black;stroke-width:0.75px;"/>
|
||||
<ellipse id="path2634-8" cx="63.403" cy="18.088" rx="0.71" ry="0.805"/>
|
||||
<g
|
||||
id="g2653"
|
||||
transform="rotate(3.0465618,90.878122,-50.668814)">
|
||||
<path
|
||||
id="path2606"
|
||||
d="m 58.115,8.483 c 1.593,3.189 3.072,6.817 5.241,9.605"
|
||||
style="fill:none;fill-rule:nonzero;stroke:#000000;stroke-width:0.75px" />
|
||||
<ellipse
|
||||
id="path2634-8"
|
||||
cx="63.403"
|
||||
cy="18.087999"
|
||||
rx="0.70999998"
|
||||
ry="0.80500001" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
<metadata
|
||||
id="metadata1"><rdf:RDF><cc:Work
|
||||
rdf:about=""><cc:license
|
||||
rdf:resource="http://creativecommons.org/publicdomain/zero/1.0/" /></cc:Work><cc:License
|
||||
rdf:about="http://creativecommons.org/publicdomain/zero/1.0/"><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Reproduction" /><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#Distribution" /><cc:permits
|
||||
rdf:resource="http://creativecommons.org/ns#DerivativeWorks" /></cc:License></rdf:RDF></metadata></svg>
|
||||
|
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 6.2 KiB |
BIN
sprites/clothes/logo.png
Normal file
After Width: | Height: | Size: 20 KiB |
|
@ -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]
|
||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
BIN
sprites/logo.png
Normal file
After Width: | Height: | Size: 20 KiB |
34
sprites/logo.png.import
Normal file
|
@ -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
|
BIN
sprites/ui/greenBtn.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
34
sprites/ui/greenBtn.png.import
Normal file
|
@ -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
|
BIN
sprites/ui/redBtn.png
Normal file
After Width: | Height: | Size: 1 KiB |
34
sprites/ui/redBtn.png.import
Normal file
|
@ -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
|
BIN
sprites/world/boxersOfAmericaFrame.png
Normal file
After Width: | Height: | Size: 3.8 KiB |
34
sprites/world/boxersOfAmericaFrame.png.import
Normal file
|
@ -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
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -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]
|
||||
|