Add CT3536 Games Programming
@ -0,0 +1,86 @@
|
||||
* text=auto
|
||||
|
||||
# Unity files
|
||||
*.meta -text merge=unityyamlmerge diff
|
||||
*.unity -text merge=unityyamlmerge diff
|
||||
*.asset -text merge=unityyamlmerge diff
|
||||
*.prefab -text merge=unityyamlmerge diff
|
||||
*.mat -text merge=unityyamlmerge diff
|
||||
*.anim -text merge=unityyamlmerge diff
|
||||
*.controller -text merge=unityyamlmerge diff
|
||||
*.overrideController -text merge=unityyamlmerge diff
|
||||
*.physicMaterial -text merge=unityyamlmerge diff
|
||||
*.physicsMaterial2D -text merge=unityyamlmerge diff
|
||||
*.playable -text merge=unityyamlmerge diff
|
||||
*.mask -text merge=unityyamlmerge diff
|
||||
*.brush -text merge=unityyamlmerge diff
|
||||
*.flare -text merge=unityyamlmerge diff
|
||||
*.fontsettings -text merge=unityyamlmerge diff
|
||||
*.guiskin -text merge=unityyamlmerge diff
|
||||
*.giparams -text merge=unityyamlmerge diff
|
||||
*.renderTexture -text merge=unityyamlmerge diff
|
||||
*.spriteatlas -text merge=unityyamlmerge diff
|
||||
*.terrainlayer -text merge=unityyamlmerge diff
|
||||
*.mixer -text merge=unityyamlmerge diff
|
||||
*.shadervariants -text merge=unityyamlmerge diff
|
||||
|
||||
# Image formats
|
||||
*.psd filter=lfs diff=lfs merge=lfs -text
|
||||
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.gif filter=lfs diff=lfs merge=lfs -text
|
||||
*.bmp filter=lfs diff=lfs merge=lfs -text
|
||||
*.tga filter=lfs diff=lfs merge=lfs -text
|
||||
*.tiff filter=lfs diff=lfs merge=lfs -text
|
||||
*.tif filter=lfs diff=lfs merge=lfs -text
|
||||
*.iff filter=lfs diff=lfs merge=lfs -text
|
||||
*.pict filter=lfs diff=lfs merge=lfs -text
|
||||
*.dds filter=lfs diff=lfs merge=lfs -text
|
||||
*.xcf filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
# Audio formats
|
||||
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||
*.ogg filter=lfs diff=lfs merge=lfs -text
|
||||
*.wav filter=lfs diff=lfs merge=lfs -text
|
||||
*.aiff filter=lfs diff=lfs merge=lfs -text
|
||||
*.aif filter=lfs diff=lfs merge=lfs -text
|
||||
*.mod filter=lfs diff=lfs merge=lfs -text
|
||||
*.it filter=lfs diff=lfs merge=lfs -text
|
||||
*.s3m filter=lfs diff=lfs merge=lfs -text
|
||||
*.xm filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
# Video formats
|
||||
*.mov filter=lfs diff=lfs merge=lfs -text
|
||||
*.avi filter=lfs diff=lfs merge=lfs -text
|
||||
*.asf filter=lfs diff=lfs merge=lfs -text
|
||||
*.mpg filter=lfs diff=lfs merge=lfs -text
|
||||
*.mpeg filter=lfs diff=lfs merge=lfs -text
|
||||
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
# 3D formats
|
||||
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||
*.obj filter=lfs diff=lfs merge=lfs -text
|
||||
*.max filter=lfs diff=lfs merge=lfs -text
|
||||
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||
*.dae filter=lfs diff=lfs merge=lfs -text
|
||||
*.mb filter=lfs diff=lfs merge=lfs -text
|
||||
*.ma filter=lfs diff=lfs merge=lfs -text
|
||||
*.3ds filter=lfs diff=lfs merge=lfs -text
|
||||
*.dfx filter=lfs diff=lfs merge=lfs -text
|
||||
*.c4d filter=lfs diff=lfs merge=lfs -text
|
||||
*.lwo filter=lfs diff=lfs merge=lfs -text
|
||||
*.lwo2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.abc filter=lfs diff=lfs merge=lfs -text
|
||||
*.3dm filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
# Build
|
||||
*.dll filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdb filter=lfs diff=lfs merge=lfs -text
|
||||
*.mdb filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
# Packaging
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
@ -0,0 +1,50 @@
|
||||
[Ll]ibrary/
|
||||
[Tt]emp/
|
||||
[Oo]bj/
|
||||
[Bb]uild/
|
||||
[Bb]uilds/
|
||||
[Ll]ogs/
|
||||
|
||||
# Uncomment this line if you wish to ignore the asset store tools plugin
|
||||
# [Aa]ssets/AssetStoreTools*
|
||||
|
||||
# Visual Studio cache directory
|
||||
.vs/
|
||||
|
||||
# Gradle cache directory
|
||||
.gradle/
|
||||
|
||||
# Autogenerated VS/MD/Consulo/Rider/VSCode solution and project files
|
||||
ExportedObj/
|
||||
.consulo/
|
||||
.vscode/
|
||||
.idea/
|
||||
*.csproj
|
||||
*.unityproj
|
||||
*.sln
|
||||
*.suo
|
||||
*.tmp
|
||||
*.user
|
||||
*.userprefs
|
||||
*.pidb
|
||||
*.booproj
|
||||
*.svd
|
||||
*.pdb
|
||||
*.mdb
|
||||
*.opendb
|
||||
*.VC.db
|
||||
|
||||
# Unity3D generated meta files
|
||||
*.pidb.meta
|
||||
*.pdb.meta
|
||||
*.mdb.meta
|
||||
|
||||
# Unity3D generated file on crash reports
|
||||
sysinfo.txt
|
||||
|
||||
# Builds
|
||||
*.apk
|
||||
*.unitypackage
|
||||
|
||||
# Crashlytics generated file
|
||||
crashlytics-build.properties
|
@ -0,0 +1,86 @@
|
||||
* text=auto
|
||||
|
||||
# Unity files
|
||||
*.meta -text merge=unityyamlmerge diff
|
||||
*.unity -text merge=unityyamlmerge diff
|
||||
*.asset -text merge=unityyamlmerge diff
|
||||
*.prefab -text merge=unityyamlmerge diff
|
||||
*.mat -text merge=unityyamlmerge diff
|
||||
*.anim -text merge=unityyamlmerge diff
|
||||
*.controller -text merge=unityyamlmerge diff
|
||||
*.overrideController -text merge=unityyamlmerge diff
|
||||
*.physicMaterial -text merge=unityyamlmerge diff
|
||||
*.physicsMaterial2D -text merge=unityyamlmerge diff
|
||||
*.playable -text merge=unityyamlmerge diff
|
||||
*.mask -text merge=unityyamlmerge diff
|
||||
*.brush -text merge=unityyamlmerge diff
|
||||
*.flare -text merge=unityyamlmerge diff
|
||||
*.fontsettings -text merge=unityyamlmerge diff
|
||||
*.guiskin -text merge=unityyamlmerge diff
|
||||
*.giparams -text merge=unityyamlmerge diff
|
||||
*.renderTexture -text merge=unityyamlmerge diff
|
||||
*.spriteatlas -text merge=unityyamlmerge diff
|
||||
*.terrainlayer -text merge=unityyamlmerge diff
|
||||
*.mixer -text merge=unityyamlmerge diff
|
||||
*.shadervariants -text merge=unityyamlmerge diff
|
||||
# Image formats
|
||||
*.psd filter=lfs diff=lfs merge=lfs -text
|
||||
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.gif filter=lfs diff=lfs merge=lfs -text
|
||||
*.bmp filter=lfs diff=lfs merge=lfs -text
|
||||
*.tga filter=lfs diff=lfs merge=lfs -text
|
||||
*.tiff filter=lfs diff=lfs merge=lfs -text
|
||||
*.tif filter=lfs diff=lfs merge=lfs -text
|
||||
*.iff filter=lfs diff=lfs merge=lfs -text
|
||||
*.pict filter=lfs diff=lfs merge=lfs -text
|
||||
*.dds filter=lfs diff=lfs merge=lfs -text
|
||||
*.xcf filter=lfs diff=lfs merge=lfs -text
|
||||
# Audio formats
|
||||
*.mp3 filter=lfs diff=lfs merge=lfs -text
|
||||
*.ogg filter=lfs diff=lfs merge=lfs -text
|
||||
*.wav filter=lfs diff=lfs merge=lfs -text
|
||||
*.aiff filter=lfs diff=lfs merge=lfs -text
|
||||
*.aif filter=lfs diff=lfs merge=lfs -text
|
||||
*.mod filter=lfs diff=lfs merge=lfs -text
|
||||
*.it filter=lfs diff=lfs merge=lfs -text
|
||||
*.s3m filter=lfs diff=lfs merge=lfs -text
|
||||
*.xm filter=lfs diff=lfs merge=lfs -text
|
||||
# Video formats
|
||||
*.mov filter=lfs diff=lfs merge=lfs -text
|
||||
*.avi filter=lfs diff=lfs merge=lfs -text
|
||||
*.asf filter=lfs diff=lfs merge=lfs -text
|
||||
*.mpg filter=lfs diff=lfs merge=lfs -text
|
||||
*.mpeg filter=lfs diff=lfs merge=lfs -text
|
||||
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
||||
# 3D formats
|
||||
*.fbx filter=lfs diff=lfs merge=lfs -text
|
||||
*.obj filter=lfs diff=lfs merge=lfs -text
|
||||
*.max filter=lfs diff=lfs merge=lfs -text
|
||||
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||
*.dae filter=lfs diff=lfs merge=lfs -text
|
||||
*.mb filter=lfs diff=lfs merge=lfs -text
|
||||
*.ma filter=lfs diff=lfs merge=lfs -text
|
||||
*.3ds filter=lfs diff=lfs merge=lfs -text
|
||||
*.dfx filter=lfs diff=lfs merge=lfs -text
|
||||
*.c4d filter=lfs diff=lfs merge=lfs -text
|
||||
*.lwo filter=lfs diff=lfs merge=lfs -text
|
||||
*.lwo2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.abc filter=lfs diff=lfs merge=lfs -text
|
||||
*.3dm filter=lfs diff=lfs merge=lfs -text
|
||||
# Build
|
||||
*.dll filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdb filter=lfs diff=lfs merge=lfs -text
|
||||
*.mdb filter=lfs diff=lfs merge=lfs -text
|
||||
# Packaging
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.rar filter=lfs diff=lfs merge=lfs -text
|
||||
*.tar filter=lfs diff=lfs merge=lfs -text
|
||||
# Collapse Unity-generated files on GitHub
|
||||
*.asset linguist-generated
|
||||
*.mat linguist-generated
|
||||
*.meta linguist-generated
|
||||
*.prefab linguist-generated
|
||||
*.unity linguist-generated
|
@ -0,0 +1,5 @@
|
||||
{
|
||||
"timestamp": 1685616397,
|
||||
"signature": "D0GURmGccoH1to6sP9kx1GWUr5dG4Hamp/KBQXYfLzIYyam6lbNDyiUJB5/IgZYH4IMsKxBBOuPzSof6wRKtZgOa5XWRdJDlItAM+ZjIbBSsA74DJUO+10OAyAb4KDcoaYVwAS/B0pphwNVSFXXRApOx9UBAwKkK23ychLJeBt9+2Qkl++l4gvsOrsKZCTVlEJbFlhfa6YBzfCARsSL3criIp4ZBsN2HVy4IhxttCzZXmOq34Uc9tKRBreNk64LvAHEsk2Xg4XiXGyGsvBODex02FdQm8zsCVZoQX7QUP0ZPFR+9sC/0CQZ50J/q74hDl90ZRXHwDhda+DgDERIpldRna8BvUJ5ylgbeGi5hk5X+8L36FlATB3ejTSA7+20GDqvJJEHjvJ2o7TU6eNRSCaLyM91mhfR4Zv1tkrzKprV9cxQ6B57E403u/dJ8SVQ7XJenK7MgnZKJdxsq3vMVEI4GPVB9i5B42ZtEg88stKq7c1+clWqHdp5Lq9AMn+D6",
|
||||
"publicKey": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUlJQm9qQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FZOEFNSUlCaWdLQ0FZRUFzdUhXYUhsZ0I1cVF4ZEJjTlJKSAordHR4SmoxcVY1NTdvMlZaRE1XaXhYRVBkRTBEMVFkT1JIRXNSS1RscmplUXlERU83ZlNQS0ZwZ1A3MU5TTnJCCkFHM2NFSU45aHNQVDhOVmllZmdWem5QTkVMenFkVmdEbFhpb2VpUnV6OERKWFgvblpmU1JWKytwbk9ySTRibG4KS0twelJlNW14OTc1SjhxZ1FvRktKT0NNRlpHdkJMR2MxSzZZaEIzOHJFODZCZzgzbUovWjBEYkVmQjBxZm13cgo2ZDVFUXFsd0E5Y3JZT1YyV1VpWXprSnBLNmJZNzRZNmM1TmpBcEFKeGNiaTFOaDlRVEhUcU44N0ZtMDF0R1ZwCjVNd1pXSWZuYVRUemEvTGZLelR5U0pka0tldEZMVGdkYXpMYlpzUEE2aHBSK0FJRTJhc0tLTi84UUk1N3UzU2cKL2xyMnZKS1IvU2l5eEN1Q20vQWJkYnJMbXk0WjlSdm1jMGdpclA4T0lLQWxBRWZ2TzV5Z2hSKy8vd1RpTFlzUQp1SllDM0V2UE16ZGdKUzdGR2FscnFLZzlPTCsxVzROY05yNWdveVdSUUJ0cktKaWlTZEJVWmVxb0RvSUY5NHpCCndGbzJJT1JFdXFqcU51M3diMWZIM3p1dGdtalFra3IxVjJhd3hmcExLWlROQWdNQkFBRT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg"
|
||||
}
|
@ -0,0 +1,566 @@
|
||||
# Changelog
|
||||
All notable changes to this package will be documented in this file.
|
||||
|
||||
## [2.0.5] - 2023-05-31
|
||||
Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Fixed
|
||||
- Fixed remaining references to 'Plastic SCM' in localized labels.
|
||||
|
||||
## [2.0.4] - 2023-04-14
|
||||
Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Fixed
|
||||
- Fixed 'Texture2D' does not contain a definition for 'ignoreMipmapLimit' error when installing Unity Version Control on previous Unity Editor Versions
|
||||
- Fixed broken sign in dialog style when waiting for user to complete sign in
|
||||
- Fixed NullReferenceException when opening a new project and the user doesn't have a Unity Version Control organization linked to a Unity ID
|
||||
|
||||
## [2.0.3] - 2023-03-29
|
||||
|
||||
Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Changed
|
||||
- Changed the icons for Unity Version Control rebranding
|
||||
- Changed onboarding workflow
|
||||
|
||||
### Fixed
|
||||
- Fixed blurry icons in the Unity Version Control window and toolbar button
|
||||
- Fixed Pending Changes tab not always opening its selected item's location in Project window
|
||||
- Fixed "Checked-out (changed)" status icon not showing up on Pending Changes tab
|
||||
- Fixed issue that prevented new packages from being installed unless user enters play mode
|
||||
|
||||
## [2.0.1] - 2023-02-17
|
||||
|
||||
Unity Version Control is now available as part of the Version Control Package! You can enable Unity Version Control via Window > Unity Version Control to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Changed
|
||||
- Updated branding from "Plastic SCM" to "Unity Version Control"
|
||||
- Improved offline experience by disabling the plugin when there is no internet connection
|
||||
|
||||
## [2.0.0] - 2023-01-11
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Changed
|
||||
- Removed Collab from the package
|
||||
|
||||
## [1.17.7] - 2022-10-28
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added offline mode toggle for smoother offline experience
|
||||
|
||||
### Fixed
|
||||
- Fixed performance issue with FindWorkspaceForPath method called multiple times every frame
|
||||
- Fixed performance issue with UI.CooldownWindowDelayer.OnUpdate running on project without Plastic SCM workspace
|
||||
|
||||
## [1.17.6] - 2022-10-06
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Changed
|
||||
- Changed the "Go back to changeset" option in Changesets tab to "Revert to changeset"
|
||||
- Improved notification banner appearance
|
||||
|
||||
### Fixed
|
||||
- Fixed editor refresh triggering when a workspace update is in progress
|
||||
- Fixed pending changes show global ignored as private
|
||||
- Removed encryption checkbox from create organization dialog
|
||||
|
||||
## [1.17.2] - 2022-07-06
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added notification banner on the status bar for live updates
|
||||
|
||||
### Changed
|
||||
- Renamed "Invite members to workspace" option to "Invite members to organization"
|
||||
|
||||
### Fixed
|
||||
- Fixed not being able to view changesets in a Gluon workspace
|
||||
- Fixed not being able to insert carriage return in checkin dialog
|
||||
|
||||
## [1.17.1] - 2022-06-21
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Fixed
|
||||
- Fixed missing references in synced prefabs
|
||||
|
||||
## [1.17.0] - 2022-06-13
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added option to enable changelists and display them in pending changes tab
|
||||
- Added changelist related options to pending changes context menu
|
||||
|
||||
### Fixed
|
||||
- Fixed editor hangs when there is no network available
|
||||
- Fixed existing checkout has locked the workspace error
|
||||
- Fixed checkin fails over unstable connection
|
||||
|
||||
## [1.15.18] - 2022-05-18
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Fixed
|
||||
- Fixed editor hang when entering Play Mode
|
||||
|
||||
## [1.15.17] - 2022-04-27
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added checkin comment column to Incoming Changes view
|
||||
|
||||
### Changed
|
||||
- Updated Go Back confirmation message to be consistent with feature
|
||||
- Updated Create Child Branch dialog to focus on branch name field when opened
|
||||
- Improved messaging of Subtractive Merge after using Go Back feature
|
||||
|
||||
### Fixed
|
||||
- Fixed assets not added correctly when Plastic SCM window is not open
|
||||
- Fixed wrong position of overlay icons on Pending Changes view
|
||||
- Disallowed Go Back feature to a changeset from another branch
|
||||
|
||||
## [1.15.16] - 2022-03-28
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added "Switch to changeset" menu option in changesets view
|
||||
- Added "Go back to changeset" menu option in changesets view
|
||||
|
||||
### Changed
|
||||
- Removed category icons from views
|
||||
- Removed "com.unity.services.core" package dependency
|
||||
|
||||
### Fixed
|
||||
- Fixed light theme icons used in dark theme after pulling incoming changes
|
||||
- Fixed "Input string was not in a correct format" error
|
||||
|
||||
## [1.15.15] - 2022-03-09
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added checkout option in scene prefab view
|
||||
|
||||
### Changed
|
||||
- Updated file overlay icon size to adapt to project window zoom level
|
||||
- Updated the styling of number of items in a category in Gluon incoming changes view
|
||||
|
||||
### Fixed
|
||||
- Fixed Plastic X not opening from plugin menu
|
||||
- Fixed error when trying to invite members to proect
|
||||
- Fixed editor unhandled errors being hijacked by the plugin
|
||||
- Fixed toolbar icon not displaying incoming changes notification when Plastic window is closed
|
||||
- Fixed VCCache::instance != NULL error when opening a project with Plastic window opened
|
||||
|
||||
## [1.15.13] - 2022-02-14
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added branch name column in changeset view
|
||||
|
||||
### Changed
|
||||
- Updated checkin comment box to keep the last comment after checkin error
|
||||
|
||||
### Fixed
|
||||
- Fixed performance regression in large projects due to FindObjectsOfTypeAll calls
|
||||
|
||||
## [1.15.12] - 2022-01-27
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added option to "Save Revision as" to the context menu in the changesets view
|
||||
- Added incoming changes overview bar for Gluon workspace
|
||||
|
||||
### Changed
|
||||
- Updated the styling for number of items in category for pending changes view
|
||||
- Updated the styling for number of items in category for changesets view
|
||||
- Updated the styling for tabs close button
|
||||
- Updated the color in different sections of the plugin
|
||||
- Reduced dialog padding for the "Create Branch" dialog
|
||||
- Updated the display overlay icons to show even if PlasticSCM window is closed
|
||||
- Updated styling of number of items in incoming changes category
|
||||
- Improved plugin initialization process and let the plugin functions without needing the Plastic window opened
|
||||
- Disabled the invite button when user does not have invite permission or not on a cloud repo
|
||||
|
||||
### Fixed
|
||||
- Fixed size info in incoming changes view does not match actual changes size
|
||||
- Fixed checkin and checkout options not respecting inspector locked status
|
||||
- Fixed buttons in inspector view displayed even when Plastic window is closed
|
||||
- Fixed icon incorrect sizes
|
||||
- Fixed errors on create branch dialog
|
||||
- Fixed Newtonsoft.Json.dll conflicts with other external packages
|
||||
- Fixed editor objects count increasing when hovering over Plastic window or toolbar button
|
||||
- Fixed ArgumentOutOfRange exception when creating a branch
|
||||
- Fixed scene reloading not happening after creating a new branch
|
||||
|
||||
## [1.15.7] - 2021-12-02
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added option to "Save Revision as" to the context menu in the changesets view
|
||||
- Added incoming changes overview bar for Gluon workspace
|
||||
|
||||
### Changed
|
||||
- Moved Plastic Package settings to the Unity Project Settings window
|
||||
- Refined styling for Updating Workplace success state
|
||||
- Updated texts for empty state and overview bar
|
||||
- Removed Incoming Changes notification from empty state
|
||||
- Updated the text for Forced Checkout option
|
||||
- Refined the status overlay icons
|
||||
- Updated the refresh icon on the toolbar
|
||||
- Updated the texts for empty checkin message dialog
|
||||
|
||||
### Fixed
|
||||
- Fixed capitalization of Pending Changes and File History tab names
|
||||
- Fixed the amount of spacing after the Item column title in the Pending Changes tab
|
||||
- Removed pin striping from line items in File History tab
|
||||
- Fixed project view context menu and icons missing after Collaborate project migration
|
||||
- Fixed migrated projects not downloading correctly from Unity Hub
|
||||
|
||||
## [1.15.4] - 2021-11-10
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Add option to "Add to ignore file" in context menu in the project view
|
||||
- Added empty state message for Pending Changes tab
|
||||
- Added success state message for Pending Changes tab
|
||||
- Added metrics for Branches tab functionalities
|
||||
|
||||
### Changed
|
||||
- Removed pinstriping in the Gluon Incoming Changes window
|
||||
- Removed the “Nothing to download” bar from the Incoming Changes window when there are no items to download
|
||||
- Changed the default metadata columns shown in the Incoming Changes screen
|
||||
- Updated the alignment of sorting arrows to the right of the column
|
||||
|
||||
### Fixed
|
||||
- Fixed UI overlays in Project view missing on changed assets when force checkout is disabled
|
||||
- Fixed console error when selecting object in Scene view hierarchy or creating a new asset
|
||||
- Fixed NullReferenceException after closing the Plastic SCM window
|
||||
|
||||
## [1.15.1] - 2021-10-21
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added visual overview bar to the incoming changes tab
|
||||
- Added progress dialog for the migration process
|
||||
- Added Branches tab that shows a list of all branches in the repository
|
||||
- Added option and dialog to create a child branch from selected branch.
|
||||
- Added option to switch to another branch
|
||||
- Added option and dialog to rename a branch
|
||||
- Added option to delete a branch
|
||||
- Added a preference to save if the window should open the Branches tab by default
|
||||
- Added metrics for Plastic SCM installation window usage
|
||||
|
||||
### Changed
|
||||
- Updated texts for workspace modes selection and checkin comment box
|
||||
- Updated status bar notification icons
|
||||
|
||||
### Fixed
|
||||
- Fixed inverted text for the force checkout option
|
||||
- Fixed typing capital O in checkin comment would open the selected item
|
||||
- Fixed loading indicator not centered on Plastic SCM installation window
|
||||
- Fixed installing Plastic SCM would sign out user from the plugin
|
||||
- Removed extra refresh button on Gluon's Incoming Changes tab
|
||||
- Fixed loading indicator not centered on Plastic SCM installation window
|
||||
- Fixed missing Plastic SCM window option when user is not signed in on Unity Hub
|
||||
- Removed meta file warning message for the deleted Beta folder
|
||||
- Fixed Plastic SCM menu missing from Project view context menu
|
||||
|
||||
## [1.13.5] - 2021-09-27
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added workspace migration from Collab to Plastic which can be done with or without Plastic installed
|
||||
- Added notification status icons
|
||||
- Added light and dark mode versions of avatar icon
|
||||
|
||||
### Changed
|
||||
- Updated texts for migration
|
||||
- Improved usage analytics around Editor and Plugin version
|
||||
- Workspace Migration Adjustments
|
||||
|
||||
### Fixed
|
||||
- Renamed the CoreServices namespace so it doesn't conflict with other packages
|
||||
- Devex integration to properly depend on Core
|
||||
- Fixed some situations where the history window would be blank
|
||||
- Fixed missing Enterprise login link
|
||||
- Fixed low resolution icons in light theme
|
||||
|
||||
## [1.11.2] - 2021-08-27
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added horizontal scroll bar to Changesets list for easier viewing
|
||||
- Added auto-login for SSO credentials handler
|
||||
- Added metrics for changeset tab usage
|
||||
- Added metrics for checkin actions
|
||||
- Added new Undo icon
|
||||
- Added missing API documentation
|
||||
- Added ability to modify assets without checkout
|
||||
- Added ability to allow empty checkin messages
|
||||
- Added empty checking message localization
|
||||
- Added Plastic toolbar button to Unity editor
|
||||
- Added notification icon for incoming changes to Plastic toolbar button
|
||||
|
||||
### Changed
|
||||
- Removed the unneeded refresh button from History Tab
|
||||
- Moved search bar to the top right global icon section in all tabs
|
||||
- Updated capitalization of options in the Settings context menu
|
||||
- Updated tab button styling to be consistent with Unity Editor conventions
|
||||
- Status bar visible across all tabs
|
||||
- Moved refresh button to the toolbar at the top right corner of the window
|
||||
- Moved changesets time period selector to the right corner of the window
|
||||
- Removed "Changes of changeset" header on the Changesets tab
|
||||
- Moved number of selected items next to "Item" metadata title on the Pending Changes tab
|
||||
- Improved refresh icon resolution
|
||||
- Changed changesets detail to appear in vertical column
|
||||
- Reduced default number of columns in changesets tab
|
||||
- The number of changesets is no longer displayed in changesets tab
|
||||
- Changed Launch branch explorer into an icon with tooltip
|
||||
- Removed the hide changes button in changesets tab
|
||||
- Moved incoming change prompt and button into a status bar
|
||||
- Changed "Launch Plastic" to "Launch Plastic SCM" in options menu
|
||||
- Wording change for plastic installation
|
||||
- Updated file status icons
|
||||
|
||||
### Fixed
|
||||
- Fixed a bug where the Texture2D error would pop up after downloading a project
|
||||
- Fixed a bug when context menu would sometimes disappear
|
||||
- Fixed small textbox on checkin dialog when launched from context menu
|
||||
- Fixed a workspace NullReferenceException bug
|
||||
- Fixed notification icon not showing on Plastic window
|
||||
- Fixed auto login errors not showing up for users
|
||||
- Fixed unexpected error message after user switched workspace to a label
|
||||
|
||||
## [1.9.0] - 2021-07-13
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
|
||||
### Added
|
||||
- Added Checkin and Update confirmation notification
|
||||
- Added auto sign in when logged into Unity account
|
||||
|
||||
### Changed
|
||||
- Simplified UI: decluttered UI
|
||||
- Improved load time performance
|
||||
|
||||
### Fixed
|
||||
- Fixed view not switching to workspace after creating an Enterprise Gluon workspace
|
||||
- Fixed contextual menu not showing up in project view
|
||||
- Fixed SSO renew token after password change
|
||||
- Fixed some namespace collisions with Antlr3
|
||||
|
||||
## [1.7.1] - 2021-06-25
|
||||
|
||||
Plastic SCM for Unity is now available as part of the Version Control Package! You can enable Plastic SCM via Window > Plastic SCM to get started!
|
||||
If you have previously used the Unity Asset Store Plastic SCM plug-in, you can now simply use this package. Make sure you delete the plug-in from your project.
|
||||
Removing a previously added Plastic SCM Asset Store Plug-In:
|
||||
- Select the PlasticSCM folder in the Assets\Plugins folder on the Project tab, then click Edit > Delete
|
||||
- Close the Unity Editor and open your project again. You will find the Plastic SCM menu item in the Window menu.
|
||||
### Added
|
||||
- Added support for inviting other members. This option is available from the gear / settings icon.
|
||||
- Added support for signing in with Cloud Edition. This is available during the onboarding screen if you have never signed in.
|
||||
- Added support for turning off Plastic in their project. This option removes the Plastic metadata from your directory. This option is available under Assets > Plastic SCM > Turn off Plastic SCM
|
||||
- Added notification on the Plastic SCM tab title to indicate incoming changes. Users will no longer need to have the Plastic SCM window visible to know there are incoming changes.
|
||||
- Auto configuration of SSO
|
||||
- Added date column in incoming changes
|
||||
### Changed
|
||||
- Updating license to better conform with expected customer usage.
|
||||
- Updated documentation file to meet standards.
|
||||
- Updated third-party usage.
|
||||
- No longer requires downloading of the full Plastic client. Basic features will work without additional installation. Features that require the full Plastic client will allow download and install as needed.
|
||||
- Usability improvements around checking in code
|
||||
- Improved update workspace tab UX
|
||||
- Plastic SCM context menu is now available even if the Plastic SCM window is closed
|
||||
### Fixed
|
||||
- Stability and performance improvements
|
||||
|
||||
## [1.5.7] - 2021-04-07
|
||||
### Unreleased
|
||||
- The Version Control package will be expanding to include both Collaborate and Plastic SCM version control interfaces. This release is preparing for that move and contains no new functionality or bug fixes for Collaborate.
|
||||
### Changed
|
||||
- Collaborate Package renamed to Version Control with changes to package display name and description.
|
||||
### Fixed
|
||||
- Fixed NPE when updating the version of the Collab package.
|
||||
|
||||
## [1.3.9] - 2020-07-13
|
||||
### Fixed
|
||||
- Unnecessary use of texture compression in icons that slowed down platform switching
|
||||
- Update publish button state when selected changes update
|
||||
- Use colorized icons when changes are available.
|
||||
|
||||
## [1.3.8] - 2020-06-08
|
||||
### Fixed
|
||||
- Fix incorrect priority of error messages
|
||||
- Fix Collab button being stuck in inprogress state
|
||||
- Fix error when partially publishing without the window open
|
||||
|
||||
## [1.3.7] - 2020-01-30
|
||||
### Changed
|
||||
- Bulk revert is now supported.
|
||||
- Collab is blocked in play mode.
|
||||
### Fixed
|
||||
- Fixed services window's links to open Collab.
|
||||
|
||||
## [1.3.6] - 2020-01-21
|
||||
### Fixed
|
||||
- Fixed compile errors when removing the NUnit package by removing unnecessary references.
|
||||
|
||||
## [1.3.5] - 2020-01-08
|
||||
### Fixed
|
||||
- Fix "accept mine" / "accept remote" icon swap in conflicts view.
|
||||
|
||||
## [1.3.4] - 2019-12-16
|
||||
### Changed
|
||||
- Window state is no longer restored after the window is closed and opened.
|
||||
### Fixed
|
||||
- History tab failing to load on startup if it is left open in the previous session.
|
||||
- Progress bar percentage not matching the bar.
|
||||
- History list correctly updates after a new revision is published.
|
||||
- UI instabilities when restoring or going back to a revision with a different package manifest.
|
||||
- Improve handling of changes to the project id.
|
||||
|
||||
## [1.3.3] - 2019-12-10
|
||||
### Changed
|
||||
- Disable UI test cases that can be unstable.
|
||||
|
||||
## [1.3.2] - 2019-12-05
|
||||
### Changed
|
||||
- Update UX to UIElements.
|
||||
- Increased minimum supported version to 2020.1.
|
||||
- Update Documentation to required standards.
|
||||
|
||||
## [1.2.16] - 2019-02-11
|
||||
### Fixed
|
||||
- Update stylesheet to pass USS validation
|
||||
|
||||
## [1.2.15] - 2018-11-16
|
||||
### Changed
|
||||
- Added support for non-experimental UIElements.
|
||||
|
||||
## [1.2.11] - 2018-09-04
|
||||
### Fixed
|
||||
- Made some performance improvements to reduce impact on ReloadAssemblies.
|
||||
|
||||
## [1.2.9] - 2018-08-13
|
||||
### Fixed
|
||||
- Test issues for the Collab History Window are now fixed.
|
||||
|
||||
## [1.2.7] - 2018-08-07
|
||||
### Fixed
|
||||
- Toolbar drop-down will no longer show up when package is uninstalled.
|
||||
|
||||
## [1.2.6] - 2018-06-15
|
||||
### Fixed
|
||||
- Fixed an issue where Collab's History window wouldn't load properly.
|
||||
|
||||
## [1.2.5] - 2018-05-21
|
||||
This is the first release of *Unity Package CollabProxy*.
|
||||
|
||||
### Added
|
||||
- Collab history and toolbar windows
|
||||
- Collab view and presenter classes
|
||||
- Collab Editor tests for view and presenter
|
@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 47777d81697d65f45befb6ccd55b2324
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,6 @@
|
||||
# Access remote projects
|
||||
|
||||
1. In the Unity Hub v3, click **Open** > **Open Remote Project** to see the list of your version control repositories that contain a Unity project.
|
||||
2. Select the project and click **Next**.
|
||||
3. Select the Editor version and platform and click the **change version** button.
|
||||
4. Your local version control workspace will be created for you. The latest version of the project will be downloaded and the Editor will open with the latest version of your Unity project.
|
@ -0,0 +1,13 @@
|
||||
# Add team members
|
||||
|
||||
To invite team members to contribute to your project:
|
||||
|
||||
|
||||
1. Click the settings menu (gear icon) and click Invite Members to Workspace.
|
||||
|
||||

|
||||
|
||||
1. In your DevOps version control dashboard, click Add new user.
|
||||
|
||||
You can also send invitations and add different permission types for each user.
|
||||
|
@ -0,0 +1,23 @@
|
||||
# Create projects
|
||||
|
||||
To create projects:
|
||||
|
||||
1. In Unity, open the version control window and click on **Create Workspace**.
|
||||
It will suggest names for your repository (shared files and history) and workspace (your local copy).
|
||||
|
||||
If you wish to use an existing version control repository, click the three dots next to the repository name, and select a repository from the list.
|
||||
|
||||
2. Select the type of workspace that fits your needs.
|
||||
|
||||
* **local workspace**
|
||||
With this workspace, you can work with branching and merging.
|
||||
|
||||
* **Gluon workspace**
|
||||
This workspace tailored for artists allows you to pick the files you want to work on and check them back in without updating your whole workspace.
|
||||
|
||||
1. Add asset files associated with your project.
|
||||
version control will display the project files from the asset folder in the **Pending changes** tab. You can choose specific files to include or add all to the repository by selecting the files and clicking Checkin changes.
|
||||
|
||||
version control will automatically perform a check in for appropriate folders and files – such as package files and project settings – when it’s set up from the Unity Editor. You can view these in the **Changesets tab.**
|
||||
|
||||
Once your initial asset check in is complete, you’re set up with version control for Unity and ready to create.
|
@ -0,0 +1,15 @@
|
||||
# Getting started with an existing Unity version control repository
|
||||
|
||||
Suppose you want to start working on a Unity project in an existing Unity version control repository and already have a Unity version control account linked to your Unity ID. In that case, you will be able to open the project straight from the **Unity Hub**. A workspace will automatically be created for your project on your machine.
|
||||
|
||||
1. In the Unity Hub v3 Beta, click **Open** > **Open remote project** to see the list of your Unity version control repositories that contain a Unity project.
|
||||
2. Click the project and click **Next**.
|
||||
3. Click the Editor version and platform and click the **change version** button.
|
||||
4. In the Editor pop-up, click the **Migrate** button to migrate your local workspace to a Unity version control workspace
|
||||
5. Once the migration is completed, click the **Open Unity version control** button.
|
||||
|
||||

|
||||
|
||||
## Accessing the Unity version control Window
|
||||
|
||||
You can access the **Unity version control** window in the Unity Editor by clicking **Window** > **Unity version control**.
|
@ -0,0 +1,8 @@
|
||||
# Getting started with Unity version control
|
||||
|
||||
You can use Unity version control directly in Unity and is available via the Version Control package in the Unity Package Manager.
|
||||
|
||||
Learn more about [Unity version control Cloud Edition](https://unity.com/products/plastic-scm).
|
||||
|
||||
* To start with a new version control repository for your project, see [Getting started with a new repository](NewPlasticRepo.md).
|
||||
* To start from an existing Unity version control repository, see [Getting started with an existing repository](ExistingPlasticRepo.md).
|
@ -0,0 +1,14 @@
|
||||
# Unity version control for Git users
|
||||
|
||||
|
||||
| **GIT**| **Unity VC**| **Explanation**|
|
||||
|:--|:--|:--|
|
||||
| To Commit| To Check in| To Check in is to submit changes to the repo.|
|
||||
| Commit| Changeset| Each new change on the history of the repo, grouping several individual file and directory changes.|
|
||||
| Master| Main| When you create a repo in Unity VC, there's always an "empty" branch. Unity VC calls it Main.|
|
||||
| To checkout | To update| Downloading content to the workspace (working copy). This is called "update" because in Unity VC, "checkout" has a different meaning.|
|
||||
|| Checkout| When you checkout a file in Unity VC, you're saying you are going to modify the file.|
|
||||
|| Exclusive checkout or lock | This is locking a file so nobody can touch it. It’s only useful for non-mergeable files, like binaries, images, or art in a video game.|
|
||||
| Rebase|| Unity VC handles branching differently than Git. In Unity VC, a rebase is just a merge operation.|
|
||||
| Repository | Repository| Where the entire history of the project is stored.
|
||||
| Working copy | Workspace| In Git, you have the working copy and the repository in the exact location. You have a working copy and a .git hidden dir with the repository. In Unity VC, this is slightly different since repositories and workspaces are separated. You can have several workspaces working with the same local repository.
|
@ -0,0 +1,37 @@
|
||||
# Glossary
|
||||
|
||||
## General terms
|
||||
|
||||
#### Ignore file
|
||||
|
||||
A special file used in many **Version Control** Systems which specifies files to be excluded from **version control**. In Unity projects, several files can be excluded from **version control**. Using an Ignore File is the best way to achieve this. See [Using external version control systems with Unity](https://docs.unity3d.com/Manual/ExternalVersionControlSystemSupport.html).
|
||||
|
||||
#### Project
|
||||
|
||||
In Unity, you use a project to design and develop a game. A project stores all of the files related to a game, such as the asset and **Scene** files. See [2D or 3D projects](https://docs.unity3d.com/Manual/2Dor3D.html).
|
||||
|
||||
#### Version Control
|
||||
|
||||
A system for managing file changes. You can use Unity in conjunction with most **version control** tools, including **Perforce** , Git, Mercurial, and perforce. See [Version Control](https://docs.unity3d.com/Manual/VersionControl.html).
|
||||
|
||||
## Unity version control terms
|
||||
|
||||
#### Checkin
|
||||
|
||||
Checkin is the act of submitting changes to the repo. You must enter a comment in the text box before you can check in your changes.
|
||||
|
||||
#### Developer Workflow
|
||||
|
||||
Developers have access to the branch explorer directly from inside Unity and easily switch branches.
|
||||
|
||||
#### Gluon Workflow
|
||||
|
||||
Artists can take advantage of the Gluon visualized interface and workflow from inside Unity.
|
||||
|
||||
#### Organization
|
||||
|
||||
The organization handles different sets of repositories in the Cloud. Inside the organization, you can create as many repositories as you need.
|
||||
|
||||
#### Workspace
|
||||
|
||||
Your workspace interacts with the version control, where you download the files and make the required changes for each checkin.
|
@ -0,0 +1,37 @@
|
||||
# Overview of features
|
||||
|
||||
## Pending Changes
|
||||
|
||||
The **Pending Changes** tab allows you to view all pending changes in your workspace. These changes are not checked into the repository. In this tab, you can select which files you want to check in, add a comment, and check in the changes.
|
||||
|
||||

|
||||
|
||||
**Note** : You can check in a specific file using the version control contextual menu in the project view or the **Checkin** button in the **Inspector** window.
|
||||
|
||||

|
||||
|
||||
In the example below, the user adds a GameScene. They can check in the scene using the **Pending Changes** tab or the **Checkin** option in the contextual menu.
|
||||
|
||||

|
||||
|
||||
## Incoming Changes
|
||||
|
||||
The **Incoming Changes** tab allows you to view all incoming changes and conflicts and update your local project. Any changes made to your project prompts an "**Incoming changes**" notification at the top right of the version control window.
|
||||
|
||||
**Tip** : Check the **Incoming Changes** tab frequently to avoid facing future change conflicts in your team.
|
||||
|
||||

|
||||
|
||||
## Project History
|
||||
|
||||
Use the **Changesets** tab to view all changes made to your project as they occur chronologically, along with who made the changes and when. You can sort by columns and alter the chronological view of the story.
|
||||
|
||||

|
||||
|
||||
Double-click any file in a changeset to go to the **File History** tab, and display every changeset. In the **File History view**, right-click on a change and click **Save the revision as…** to restore the file's former state. This is useful if you had previously deleted some logic that you now need.
|
||||
|
||||

|
||||
|
||||
You can also view the changes made to a specific file in the **Project view** through a contextual menu, then revert to an earlier revision of the file.
|
||||
|
||||

|
@ -0,0 +1,6 @@
|
||||
# More help
|
||||
|
||||
To find more information on working with the Unity version control plug-in, see [Getting started with Unity Version control](https://docs.unity3d.com/2022.1/Documentation/Manual/PlasticSCMPluginGettingStarted.html).
|
||||
|
||||
You can also post and find questions related to Unity version control in the [Unity forum](https://forum.unity.com/forums/plastic-scm.605/).
|
||||
|
@ -0,0 +1,24 @@
|
||||
# Getting started with a new version control repository
|
||||
|
||||
**Note**: To start from an existing version control repository, see [Getting started with an existing version control repository](ExistingRepo.md).
|
||||
|
||||
You can walk through a straightforward onboarding wizard when creating a repository for your Unity project. This new wizard will help you:
|
||||
|
||||
* Set up your account and configure your repository for your Unity project, enabling you to sync to a version control Cloud Edition repository.
|
||||
* Generate a standard ignore file that prevents unnecessary components of your Unity project from being checked in.
|
||||
* Automatically do the first check-in so that your repository is in sync with your local changes.
|
||||
|
||||
1. Open your Unity project.
|
||||
2. To access the version control window in the Unity Editor, click **Window** > **version control**:
|
||||

|
||||
|
||||
3. In the version control onboarding window, complete the steps to continue:
|
||||

|
||||
|
||||
Unity connects your project to your version control Cloud repository; version control automatically creates an ignore file in the workspace for Unity projects so it doesn't track files that shouldn't be part of the repository. It also creates a standard automatic checkin during the initial setup. So now you're all set to start using version control!
|
||||
|
||||

|
||||
|
||||
**Note**: Basic version control actions, such as viewing pending changes, checking in changes, and viewing changesets, don’t require a version control Client install. However, if you want to use more advanced features, such as branching and diffing changeset, you will be prompted to download the version control client (if you have not already done so):
|
||||
|
||||

|
@ -0,0 +1,16 @@
|
||||
# Quick start guide
|
||||
|
||||
The Version Control package will allow you to use Unity version control for your projects in the Unity Editor.
|
||||
|
||||
Unity VC integrates version control in Unity that will abstract version control complexity. It will also enable you to work collaboratively on more complex projects by providing additional VCS features such as branching, locking, merging, and a standalone GUI.
|
||||
|
||||
The Version Control package follows the Unity support schedule. Currently, supported versions are:
|
||||
|
||||
* 2020.3
|
||||
* 2021.3
|
||||
* 2022.2
|
||||
* 2023.1
|
||||
* 2023.2
|
||||
|
||||
|
||||
[Getting started with Unity version control](StartPlasticForUnity.md)
|
@ -0,0 +1,10 @@
|
||||
# Connect Unity Cloud Build
|
||||
|
||||
Unity Cloud Build is a [continuous integration](https://docs.unity3d.com/2022.2/Documentation/Manual/UnityCloudBuild.html#automated-build-generation) that automatically creates multiplatform builds in the Cloud in minutes. You can point Cloud Build toward your version control system to:
|
||||
|
||||
* Automate new builds
|
||||
* Build faster
|
||||
* Catch problems earlier
|
||||
* Iterate on your builds more efficiently with agility.
|
||||
|
||||
To get started, see [Pay as you go with Cloud Build](https://docs.unity3d.com/2022.2/Documentation/Manual/UnityCloudBuildMeteredBilling.html).
|
@ -0,0 +1,20 @@
|
||||
[About version control](index.md)
|
||||
|
||||
* [Quick start guide](QuickStartGuide.md)
|
||||
* [Create projects](CreateProjects.md)
|
||||
* [Access remote projects](AccessRemoteProjects.md)
|
||||
* [Add team members](AddMembers.md)
|
||||
* [Connect Cloud Build](ReconnectCB.md)
|
||||
* [Get started with Unity version control](StartPlasticForUnity.md)
|
||||
* [Get started with a new version control repository](NewRepo.md)
|
||||
* [Get started with an existing version control repository](ExistingRepo.md)
|
||||
* [Main features](MainFeatures.md)
|
||||
* [Pending Changes](MainFeatures.md#pending-changes)
|
||||
* [Incoming Changes](MainFeatures.md#incoming-changes)
|
||||
* [Project History](MainFeatures.md#project-history)
|
||||
* [Unity version control for Git users](GitUsers.md)
|
||||
* [Glossary](Glossary.md)
|
||||
* [General terms](Glossary.md#general-terms)
|
||||
* [version control terms](Glossary.md#unity-version-control-terms)
|
||||
* [More help](MoreHelp.md)
|
||||
|
After Width: | Height: | Size: 174 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 67 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 120 KiB |
After Width: | Height: | Size: 1.1 MiB |
After Width: | Height: | Size: 41 KiB |
After Width: | Height: | Size: 116 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 54 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 3.0 MiB |
After Width: | Height: | Size: 3.8 MiB |
@ -0,0 +1,7 @@
|
||||
# About Version Control
|
||||
|
||||
The Version Control package provides an in-editor interface for teams to work with Unity version control (Unity VC).
|
||||
## Unity VC
|
||||
|
||||
Unity VC plug-in for Unity is a free Unity plug-in that gives you the ability to use Unity VC, a leading version control solution, directly in Unity. Get started with [Unity VC](QuickStartGuide.md).
|
||||
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3eedd97b804f5a546a8817f8be60e318
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d5ae383aa416ba14e800dff2526122ed
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,24 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor
|
||||
{
|
||||
internal static class ApplicationDataPath
|
||||
{
|
||||
internal static string Get()
|
||||
{
|
||||
return mApplicationDataPath ?? Application.dataPath;
|
||||
}
|
||||
|
||||
internal static void InitializeForTesting(string applicationDataPath)
|
||||
{
|
||||
mApplicationDataPath = applicationDataPath;
|
||||
}
|
||||
|
||||
internal static void Reset()
|
||||
{
|
||||
mApplicationDataPath = null;
|
||||
}
|
||||
|
||||
static string mApplicationDataPath;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 50503d5b64dbddc48a0bcba68901b3d6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,5 @@
|
||||
using System.Runtime.CompilerServices;
|
||||
using UnityEngine;
|
||||
|
||||
[assembly: InternalsVisibleTo("Unity.PlasticSCM.EditorTests")]
|
||||
[assembly: InternalsVisibleTo("Unity.PlasticSCM.DevTools")]
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d50ac3212a7ff5a4795bf609a2a20350
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d3f8e034331c39c4f823ac31228dc4d9
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,257 @@
|
||||
using Codice.Client.BaseCommands;
|
||||
using PlasticGui;
|
||||
using PlasticGui.WorkspaceWindow.Items;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
internal interface IAssetFilesFilterPatternsMenuOperations
|
||||
{
|
||||
void AddFilesFilterPatterns(
|
||||
FilterTypes type, FilterActions action, FilterOperationType operation);
|
||||
}
|
||||
|
||||
internal class AssetFilesFilterPatternsMenuBuilder
|
||||
{
|
||||
internal AssetFilesFilterPatternsMenuBuilder(
|
||||
int ignoredMenuItemsPriority,
|
||||
int hiddenChangesMenuItemsPriority)
|
||||
{
|
||||
mIgnoredMenuItemsPriority = ignoredMenuItemsPriority;
|
||||
mHiddenChangesMenuItemsPriority = hiddenChangesMenuItemsPriority;
|
||||
|
||||
mIgnoredSubmenuItem = string.Format(
|
||||
"{0}/{1}",
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.MenuAddToIgnoreList));
|
||||
|
||||
mHiddenChangesSubmenuItem = string.Format(
|
||||
"{0}/{1}",
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.MenuAddToHiddenChangesList));
|
||||
}
|
||||
|
||||
internal void SetOperations(
|
||||
IAssetFilesFilterPatternsMenuOperations operations)
|
||||
{
|
||||
mOperations = operations;
|
||||
}
|
||||
|
||||
internal void UpdateMenuItems(FilterMenuActions actions)
|
||||
{
|
||||
UpdateIgnoredMenuItems(actions);
|
||||
UpdateHiddenChangesMenuItems(actions);
|
||||
|
||||
HandleMenuItem.UpdateAllMenus();
|
||||
}
|
||||
|
||||
internal void RemoveMenuItems()
|
||||
{
|
||||
RemoveIgnoredMenuItems();
|
||||
RemoveHiddenChangesMenuItems();
|
||||
}
|
||||
|
||||
void IgnoredByName_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.Ignored, FilterActions.ByName,
|
||||
GetIgnoredFilterOperationType());
|
||||
}
|
||||
|
||||
void IgnoredByExtension_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.Ignored, FilterActions.ByExtension,
|
||||
GetIgnoredFilterOperationType());
|
||||
}
|
||||
|
||||
void IgnoredByFullPath_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.Ignored, FilterActions.ByFullPath,
|
||||
GetIgnoredFilterOperationType());
|
||||
}
|
||||
|
||||
void HiddenChangesByName_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.HiddenChanges, FilterActions.ByName,
|
||||
GetHiddenChangesFilterOperationType());
|
||||
}
|
||||
|
||||
void HiddenChangesByExtension_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.HiddenChanges, FilterActions.ByExtension,
|
||||
GetHiddenChangesFilterOperationType());
|
||||
}
|
||||
|
||||
void HiddenChangesByFullPath_Click()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.AddFilesFilterPatterns(
|
||||
FilterTypes.HiddenChanges, FilterActions.ByFullPath,
|
||||
GetHiddenChangesFilterOperationType());
|
||||
}
|
||||
|
||||
void UpdateIgnoredMenuItems(FilterMenuActions actions)
|
||||
{
|
||||
RemoveIgnoredMenuItems();
|
||||
|
||||
if (!actions.Operations.HasFlag(FilterMenuOperations.Ignore))
|
||||
{
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mIgnoredSubmenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
DisabledMenuItem_Click, ValidateDisabledMenuItem);
|
||||
return;
|
||||
}
|
||||
|
||||
mIgnoredByNameMenuItem = GetIgnoredMenuItemName(actions.FilterByName);
|
||||
mIgnoredByExtensionMenuItem = GetIgnoredMenuItemName(actions.FilterByExtension);
|
||||
mIgnoredByFullPathMenuItem = GetIgnoredMenuItemName(actions.FilterByFullPath);
|
||||
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mIgnoredByNameMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
IgnoredByName_Click, ValidateEnabledMenuItem);
|
||||
|
||||
if (!actions.Operations.HasFlag(FilterMenuOperations.IgnoreByExtension))
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mIgnoredByExtensionMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
IgnoredByExtension_Click, ValidateEnabledMenuItem);
|
||||
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mIgnoredByFullPathMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
IgnoredByFullPath_Click, ValidateEnabledMenuItem);
|
||||
}
|
||||
|
||||
void UpdateHiddenChangesMenuItems(FilterMenuActions actions)
|
||||
{
|
||||
RemoveHiddenChangesMenuItems();
|
||||
|
||||
if (!actions.Operations.HasFlag(FilterMenuOperations.HideChanged))
|
||||
{
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mHiddenChangesSubmenuItem,
|
||||
mHiddenChangesMenuItemsPriority,
|
||||
DisabledMenuItem_Click, ValidateDisabledMenuItem);
|
||||
return;
|
||||
}
|
||||
|
||||
mHiddenChangesByNameMenuItem = GetHiddenChangesMenuItemName(actions.FilterByName);
|
||||
mHiddenChangesByExtensionMenuItem = GetHiddenChangesMenuItemName(actions.FilterByExtension);
|
||||
mHiddenChangesByFullPathMenuItem = GetHiddenChangesMenuItemName(actions.FilterByFullPath);
|
||||
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mHiddenChangesByNameMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
HiddenChangesByName_Click, ValidateEnabledMenuItem);
|
||||
|
||||
if (actions.Operations.HasFlag(FilterMenuOperations.HideChangedByExtension))
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mHiddenChangesByExtensionMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
HiddenChangesByExtension_Click, ValidateEnabledMenuItem);
|
||||
|
||||
HandleMenuItem.AddMenuItem(
|
||||
mHiddenChangesByFullPathMenuItem,
|
||||
mIgnoredMenuItemsPriority,
|
||||
HiddenChangesByFullPath_Click, ValidateEnabledMenuItem);
|
||||
}
|
||||
|
||||
void RemoveIgnoredMenuItems()
|
||||
{
|
||||
HandleMenuItem.RemoveMenuItem(mIgnoredSubmenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mIgnoredByNameMenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mIgnoredByExtensionMenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mIgnoredByFullPathMenuItem);
|
||||
}
|
||||
|
||||
void RemoveHiddenChangesMenuItems()
|
||||
{
|
||||
HandleMenuItem.RemoveMenuItem(mHiddenChangesSubmenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mHiddenChangesByNameMenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mHiddenChangesByExtensionMenuItem);
|
||||
HandleMenuItem.RemoveMenuItem(mHiddenChangesByFullPathMenuItem);
|
||||
}
|
||||
|
||||
FilterOperationType GetIgnoredFilterOperationType()
|
||||
{
|
||||
if (mIgnoredByNameMenuItem.StartsWith(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.MenuAddToIgnoreList)))
|
||||
{
|
||||
return FilterOperationType.Add;
|
||||
}
|
||||
|
||||
return FilterOperationType.Remove;
|
||||
}
|
||||
|
||||
FilterOperationType GetHiddenChangesFilterOperationType()
|
||||
{
|
||||
if (mHiddenChangesByNameMenuItem.StartsWith(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.MenuAddToHiddenChangesList)))
|
||||
{
|
||||
return FilterOperationType.Add;
|
||||
}
|
||||
|
||||
return FilterOperationType.Remove;
|
||||
}
|
||||
|
||||
void DisabledMenuItem_Click() { }
|
||||
|
||||
bool ValidateEnabledMenuItem() { return true; }
|
||||
|
||||
bool ValidateDisabledMenuItem() { return false; }
|
||||
|
||||
string GetIgnoredMenuItemName(string filterPattern)
|
||||
{
|
||||
return UnityMenuItem.GetText(
|
||||
mIgnoredSubmenuItem,
|
||||
UnityMenuItem.EscapedText(filterPattern));
|
||||
}
|
||||
|
||||
string GetHiddenChangesMenuItemName(string filterPattern)
|
||||
{
|
||||
return UnityMenuItem.GetText(
|
||||
mHiddenChangesSubmenuItem,
|
||||
UnityMenuItem.EscapedText(filterPattern));
|
||||
}
|
||||
|
||||
IAssetFilesFilterPatternsMenuOperations mOperations;
|
||||
|
||||
string mIgnoredSubmenuItem;
|
||||
string mHiddenChangesSubmenuItem;
|
||||
|
||||
string mIgnoredByNameMenuItem;
|
||||
string mHiddenChangesByNameMenuItem;
|
||||
|
||||
string mIgnoredByExtensionMenuItem;
|
||||
string mHiddenChangesByExtensionMenuItem;
|
||||
|
||||
string mIgnoredByFullPathMenuItem;
|
||||
string mHiddenChangesByFullPathMenuItem;
|
||||
|
||||
readonly int mIgnoredMenuItemsPriority;
|
||||
readonly int mHiddenChangesMenuItemsPriority;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b4eb3fe08d1dc86419dee5ddcc40baae
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,317 @@
|
||||
using UnityEditor;
|
||||
using UnityEditor.VersionControl;
|
||||
|
||||
using Codice.CM.Common;
|
||||
using Codice.Client.BaseCommands.EventTracking;
|
||||
using PlasticGui;
|
||||
using PlasticGui.WorkspaceWindow.Items;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
using Unity.PlasticSCM.Editor.Tool;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
internal class AssetMenuItems
|
||||
{
|
||||
internal static void Enable(
|
||||
WorkspaceInfo wkInfo,
|
||||
IAssetStatusCache assetStatusCache)
|
||||
{
|
||||
if (mIsEnabled)
|
||||
return;
|
||||
|
||||
mWkInfo = wkInfo;
|
||||
mAssetStatusCache = assetStatusCache;
|
||||
|
||||
mIsEnabled = true;
|
||||
|
||||
mAssetSelection = new ProjectViewAssetSelection(UpdateFilterMenuItems);
|
||||
|
||||
mFilterMenuBuilder = new AssetFilesFilterPatternsMenuBuilder(
|
||||
IGNORE_MENU_ITEMS_PRIORITY,
|
||||
HIDDEN_MENU_ITEMS_PRIORITY);
|
||||
|
||||
AddMenuItems();
|
||||
}
|
||||
|
||||
internal static void Disable()
|
||||
{
|
||||
mIsEnabled = false;
|
||||
|
||||
RemoveMenuItems();
|
||||
|
||||
if (mAssetSelection != null)
|
||||
mAssetSelection.Dispose();
|
||||
|
||||
mWkInfo = null;
|
||||
mAssetStatusCache = null;
|
||||
mAssetSelection = null;
|
||||
mFilterMenuBuilder = null;
|
||||
mOperations = null;
|
||||
}
|
||||
|
||||
internal static void BuildOperations(
|
||||
WorkspaceInfo wkInfo,
|
||||
WorkspaceWindow workspaceWindow,
|
||||
IViewSwitcher viewSwitcher,
|
||||
IHistoryViewLauncher historyViewLauncher,
|
||||
GluonGui.ViewHost viewHost,
|
||||
PlasticGui.WorkspaceWindow.NewIncomingChangesUpdater incomingChangesUpdater,
|
||||
IAssetStatusCache assetStatusCache,
|
||||
IMergeViewLauncher mergeViewLauncher,
|
||||
PlasticGui.Gluon.IGluonViewSwitcher gluonViewSwitcher,
|
||||
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
|
||||
EditorWindow parentWindow,
|
||||
bool isGluonMode)
|
||||
{
|
||||
if (!mIsEnabled)
|
||||
Enable(wkInfo, assetStatusCache);
|
||||
|
||||
AssetOperations assetOperations = new AssetOperations(
|
||||
wkInfo,
|
||||
workspaceWindow,
|
||||
viewSwitcher,
|
||||
historyViewLauncher,
|
||||
viewHost,
|
||||
incomingChangesUpdater,
|
||||
mAssetStatusCache,
|
||||
mergeViewLauncher,
|
||||
gluonViewSwitcher,
|
||||
parentWindow,
|
||||
mAssetSelection,
|
||||
showDownloadPlasticExeWindow,
|
||||
isGluonMode);
|
||||
|
||||
mOperations = assetOperations;
|
||||
mFilterMenuBuilder.SetOperations(assetOperations);
|
||||
}
|
||||
|
||||
static void RemoveMenuItems()
|
||||
{
|
||||
mFilterMenuBuilder.RemoveMenuItems();
|
||||
|
||||
HandleMenuItem.RemoveMenuItem(
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu));
|
||||
|
||||
HandleMenuItem.UpdateAllMenus();
|
||||
}
|
||||
|
||||
static void UpdateFilterMenuItems()
|
||||
{
|
||||
AssetList assetList = ((AssetOperations.IAssetSelection)
|
||||
mAssetSelection).GetSelectedAssets();
|
||||
|
||||
SelectedPathsGroupInfo info = AssetsSelection.GetSelectedPathsGroupInfo(
|
||||
mWkInfo.ClientPath, assetList, mAssetStatusCache);
|
||||
|
||||
FilterMenuActions actions =
|
||||
assetList.Count != info.SelectedCount ?
|
||||
new FilterMenuActions() :
|
||||
FilterMenuUpdater.GetMenuActions(info);
|
||||
|
||||
mFilterMenuBuilder.UpdateMenuItems(actions);
|
||||
}
|
||||
|
||||
static void AddMenuItems()
|
||||
{
|
||||
// TODO: Try removing this
|
||||
// Somehow first item always disappears. So this is a filler item
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
|
||||
PENDING_CHANGES_MENU_ITEM_PRIORITY,
|
||||
PendingChanges, ValidatePendingChanges);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.PendingChangesPlasticMenu),
|
||||
PENDING_CHANGES_MENU_ITEM_PRIORITY,
|
||||
PendingChanges, ValidatePendingChanges);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.AddPlasticMenu),
|
||||
ADD_MENU_ITEM_PRIORITY,
|
||||
Add, ValidateAdd);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.CheckoutPlasticMenu),
|
||||
CHECKOUT_MENU_ITEM_PRIORITY,
|
||||
Checkout, ValidateCheckout);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.CheckinPlasticMenu),
|
||||
CHECKIN_MENU_ITEM_PRIORITY,
|
||||
Checkin, ValidateCheckin);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.UndoPlasticMenu),
|
||||
UNDO_MENU_ITEM_PRIORITY,
|
||||
Undo, ValidateUndo);
|
||||
|
||||
UpdateFilterMenuItems();
|
||||
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.DiffPlasticMenu),
|
||||
GetPlasticShortcut.ForAssetDiff(),
|
||||
DIFF_MENU_ITEM_PRIORITY,
|
||||
Diff, ValidateDiff);
|
||||
HandleMenuItem.AddMenuItem(
|
||||
GetPlasticMenuItemName(PlasticLocalization.Name.HistoryPlasticMenu),
|
||||
GetPlasticShortcut.ForHistory(),
|
||||
HISTORY_MENU_ITEM_PRIORITY,
|
||||
History, ValidateHistory);
|
||||
|
||||
HandleMenuItem.UpdateAllMenus();
|
||||
}
|
||||
|
||||
static void PendingChanges()
|
||||
{
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.ShowPendingChanges();
|
||||
}
|
||||
|
||||
static bool ValidatePendingChanges()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
static void Add()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.Add();
|
||||
}
|
||||
|
||||
static bool ValidateAdd()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.Add);
|
||||
}
|
||||
|
||||
static void Checkout()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.Checkout();
|
||||
}
|
||||
|
||||
static bool ValidateCheckout()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.Checkout);
|
||||
}
|
||||
|
||||
static void Checkin()
|
||||
{
|
||||
TrackFeatureUseEvent.For(
|
||||
PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
|
||||
TrackFeatureUseEvent.Features.ContextMenuCheckinOption);
|
||||
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.Checkin();
|
||||
}
|
||||
|
||||
static bool ValidateCheckin()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.Checkin);
|
||||
}
|
||||
|
||||
static void Undo()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.Undo();
|
||||
}
|
||||
|
||||
static bool ValidateUndo()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.Undo);
|
||||
}
|
||||
|
||||
static void Diff()
|
||||
{
|
||||
if (mOperations == null)
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.ShowDiff();
|
||||
}
|
||||
|
||||
static bool ValidateDiff()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.Diff);
|
||||
}
|
||||
|
||||
static void History()
|
||||
{
|
||||
ShowWindow.Plastic();
|
||||
|
||||
mOperations.ShowHistory();
|
||||
}
|
||||
|
||||
static bool ValidateHistory()
|
||||
{
|
||||
return ShouldMenuItemBeEnabled(
|
||||
mWkInfo.ClientPath, mAssetSelection, mAssetStatusCache,
|
||||
AssetMenuOperations.History);
|
||||
}
|
||||
|
||||
static bool ShouldMenuItemBeEnabled(
|
||||
string wkPath,
|
||||
AssetOperations.IAssetSelection assetSelection,
|
||||
IAssetStatusCache statusCache,
|
||||
AssetMenuOperations operation)
|
||||
{
|
||||
AssetList assetList = assetSelection.GetSelectedAssets();
|
||||
|
||||
if (assetList.Count == 0)
|
||||
return false;
|
||||
|
||||
SelectedAssetGroupInfo selectedGroupInfo = SelectedAssetGroupInfo.
|
||||
BuildFromAssetList(wkPath, assetList, statusCache);
|
||||
|
||||
if (assetList.Count != selectedGroupInfo.SelectedCount)
|
||||
return false;
|
||||
|
||||
AssetMenuOperations operations = AssetMenuUpdater.
|
||||
GetAvailableMenuOperations(selectedGroupInfo);
|
||||
|
||||
return operations.HasFlag(operation);
|
||||
}
|
||||
|
||||
static string GetPlasticMenuItemName(PlasticLocalization.Name name)
|
||||
{
|
||||
return string.Format("{0}/{1}",
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.PrefixUnityVersionControlMenu),
|
||||
PlasticLocalization.GetString(name));
|
||||
}
|
||||
|
||||
static IAssetMenuOperations mOperations;
|
||||
|
||||
static ProjectViewAssetSelection mAssetSelection;
|
||||
static AssetFilesFilterPatternsMenuBuilder mFilterMenuBuilder;
|
||||
|
||||
static bool mIsEnabled;
|
||||
static IAssetStatusCache mAssetStatusCache;
|
||||
static WorkspaceInfo mWkInfo;
|
||||
|
||||
const int BASE_MENU_ITEM_PRIORITY = 19; // Puts Plastic SCM right below Create menu
|
||||
|
||||
// incrementing the "order" param by 11 causes the menu system to add a separator
|
||||
const int PENDING_CHANGES_MENU_ITEM_PRIORITY = BASE_MENU_ITEM_PRIORITY;
|
||||
const int ADD_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 11;
|
||||
const int CHECKOUT_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 12;
|
||||
const int CHECKIN_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 13;
|
||||
const int UNDO_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 14;
|
||||
const int IGNORE_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 25;
|
||||
const int HIDDEN_MENU_ITEMS_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 26;
|
||||
const int DIFF_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 37;
|
||||
const int HISTORY_MENU_ITEM_PRIORITY = PENDING_CHANGES_MENU_ITEM_PRIORITY + 38;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 7c8a8e3e4456f9149905cf2c80aa41a9
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,224 @@
|
||||
using System;
|
||||
|
||||
using UnityEditor.VersionControl;
|
||||
|
||||
using Codice;
|
||||
using Codice.Client.Commands.WkTree;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays;
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
[Flags]
|
||||
internal enum AssetMenuOperations : byte
|
||||
{
|
||||
None = 0,
|
||||
Checkout = 1 << 0,
|
||||
Diff = 1 << 1,
|
||||
History = 1 << 2,
|
||||
Add = 1 << 3,
|
||||
Checkin = 1 << 4,
|
||||
Undo = 1 << 5,
|
||||
}
|
||||
|
||||
internal class SelectedAssetGroupInfo
|
||||
{
|
||||
internal int SelectedCount;
|
||||
|
||||
internal bool IsControlledSelection;
|
||||
internal bool IsCheckedInSelection;
|
||||
internal bool IsCheckedOutSelection;
|
||||
internal bool IsPrivateSelection;
|
||||
internal bool IsAddedSelection;
|
||||
internal bool IsFileSelection;
|
||||
internal bool HasAnyAddedInSelection;
|
||||
internal bool HasAnyRemoteLockedInSelection;
|
||||
|
||||
internal static SelectedAssetGroupInfo BuildFromAssetList(
|
||||
string wkPath,
|
||||
AssetList assetList,
|
||||
IAssetStatusCache statusCache)
|
||||
{
|
||||
bool isCheckedInSelection = true;
|
||||
bool isControlledSelection = true;
|
||||
bool isCheckedOutSelection = true;
|
||||
bool isPrivateSelection = true;
|
||||
bool isAddedSelection = true;
|
||||
bool isFileSelection = true;
|
||||
bool hasAnyAddedInSelection = false;
|
||||
bool hasAnyRemoteLockedInSelection = false;
|
||||
|
||||
int selectedCount = 0;
|
||||
|
||||
foreach (Asset asset in assetList)
|
||||
{
|
||||
string fullPath = AssetsPath.GetFullPathUnderWorkspace.
|
||||
ForAsset(wkPath, asset.path);
|
||||
|
||||
if (fullPath == null)
|
||||
continue;
|
||||
|
||||
SelectedAssetGroupInfo singleFileGroupInfo = BuildFromSingleFile(
|
||||
fullPath, asset.isFolder, statusCache);
|
||||
|
||||
if (!singleFileGroupInfo.IsCheckedInSelection)
|
||||
isCheckedInSelection = false;
|
||||
|
||||
if (!singleFileGroupInfo.IsControlledSelection)
|
||||
isControlledSelection = false;
|
||||
|
||||
if (!singleFileGroupInfo.IsCheckedOutSelection)
|
||||
isCheckedOutSelection = false;
|
||||
|
||||
if (!singleFileGroupInfo.IsPrivateSelection)
|
||||
isPrivateSelection = false;
|
||||
|
||||
if (!singleFileGroupInfo.IsAddedSelection)
|
||||
isAddedSelection = false;
|
||||
|
||||
if (!singleFileGroupInfo.IsFileSelection)
|
||||
isFileSelection = false;
|
||||
|
||||
if (singleFileGroupInfo.HasAnyAddedInSelection)
|
||||
hasAnyAddedInSelection = true;
|
||||
|
||||
if (singleFileGroupInfo.HasAnyRemoteLockedInSelection)
|
||||
hasAnyRemoteLockedInSelection = true;
|
||||
|
||||
selectedCount++;
|
||||
}
|
||||
|
||||
return new SelectedAssetGroupInfo()
|
||||
{
|
||||
IsCheckedInSelection = isCheckedInSelection,
|
||||
IsCheckedOutSelection = isCheckedOutSelection,
|
||||
IsControlledSelection = isControlledSelection,
|
||||
IsPrivateSelection = isPrivateSelection,
|
||||
IsAddedSelection = isAddedSelection,
|
||||
IsFileSelection = isFileSelection,
|
||||
HasAnyAddedInSelection = hasAnyAddedInSelection,
|
||||
HasAnyRemoteLockedInSelection = hasAnyRemoteLockedInSelection,
|
||||
SelectedCount = selectedCount,
|
||||
};
|
||||
}
|
||||
|
||||
internal static SelectedAssetGroupInfo BuildFromSingleFile(
|
||||
string fullPath,
|
||||
bool isDirectory,
|
||||
IAssetStatusCache statusCache)
|
||||
{
|
||||
bool isCheckedInSelection = true;
|
||||
bool isControlledSelection = true;
|
||||
bool isCheckedOutSelection = true;
|
||||
bool isPrivateSelection = true;
|
||||
bool isAddedSelection = true;
|
||||
bool isFileSelection = true;
|
||||
bool hasAnyAddedInSelection = false;
|
||||
bool hasAnyRemoteLockedInSelection = false;
|
||||
|
||||
WorkspaceTreeNode wkTreeNode =
|
||||
PlasticGui.Plastic.API.GetWorkspaceTreeNode(fullPath);
|
||||
|
||||
if (isDirectory)
|
||||
isFileSelection = false;
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsPrivate(wkTreeNode))
|
||||
isControlledSelection = false;
|
||||
else
|
||||
isPrivateSelection = false;
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(wkTreeNode))
|
||||
isCheckedInSelection = false;
|
||||
else
|
||||
isCheckedOutSelection = false;
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsAdded(wkTreeNode))
|
||||
hasAnyAddedInSelection = true;
|
||||
else
|
||||
isAddedSelection = false;
|
||||
|
||||
AssetStatus assetStatus = statusCache.GetStatus(fullPath);
|
||||
|
||||
if (ClassifyAssetStatus.IsLockedRemote(assetStatus))
|
||||
hasAnyRemoteLockedInSelection = true;
|
||||
|
||||
return new SelectedAssetGroupInfo()
|
||||
{
|
||||
IsCheckedInSelection = isCheckedInSelection,
|
||||
IsCheckedOutSelection = isCheckedOutSelection,
|
||||
IsControlledSelection = isControlledSelection,
|
||||
IsPrivateSelection = isPrivateSelection,
|
||||
IsAddedSelection = isAddedSelection,
|
||||
IsFileSelection = isFileSelection,
|
||||
HasAnyAddedInSelection = hasAnyAddedInSelection,
|
||||
HasAnyRemoteLockedInSelection = hasAnyRemoteLockedInSelection,
|
||||
SelectedCount = 1,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
internal interface IAssetMenuOperations
|
||||
{
|
||||
void ShowPendingChanges();
|
||||
void Add();
|
||||
void Checkout();
|
||||
void Checkin();
|
||||
void Undo();
|
||||
void ShowDiff();
|
||||
void ShowHistory();
|
||||
}
|
||||
|
||||
internal static class AssetMenuUpdater
|
||||
{
|
||||
internal static AssetMenuOperations GetAvailableMenuOperations(
|
||||
SelectedAssetGroupInfo info)
|
||||
{
|
||||
AssetMenuOperations result = AssetMenuOperations.None;
|
||||
|
||||
if (info.SelectedCount == 0)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
if (info.IsControlledSelection &&
|
||||
info.IsCheckedInSelection &&
|
||||
info.IsFileSelection &&
|
||||
!info.HasAnyRemoteLockedInSelection)
|
||||
{
|
||||
result |= AssetMenuOperations.Checkout;
|
||||
}
|
||||
|
||||
if (info.IsFileSelection &&
|
||||
info.IsPrivateSelection)
|
||||
{
|
||||
result |= AssetMenuOperations.Add;
|
||||
}
|
||||
|
||||
if (info.IsFileSelection &&
|
||||
info.IsControlledSelection &&
|
||||
info.IsCheckedOutSelection)
|
||||
{
|
||||
result |= AssetMenuOperations.Checkin;
|
||||
result |= AssetMenuOperations.Undo;
|
||||
}
|
||||
|
||||
if (info.SelectedCount == 1 &&
|
||||
info.IsControlledSelection &&
|
||||
!info.HasAnyAddedInSelection &&
|
||||
info.IsFileSelection)
|
||||
{
|
||||
result |= AssetMenuOperations.Diff;
|
||||
}
|
||||
|
||||
if (info.SelectedCount == 1 &&
|
||||
info.IsControlledSelection &&
|
||||
!info.HasAnyAddedInSelection)
|
||||
{
|
||||
result |= AssetMenuOperations.History;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c456fa791a741a045a8a99ee73af2ae6
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,323 @@
|
||||
using System.IO;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.VersionControl;
|
||||
|
||||
using Codice.Client.BaseCommands;
|
||||
using Codice.Client.BaseCommands.EventTracking;
|
||||
using Codice.Client.Commands;
|
||||
using Codice.Client.Commands.WkTree;
|
||||
using Codice.Client.Common;
|
||||
using Codice.Client.Common.Threading;
|
||||
using Codice.CM.Common;
|
||||
using GluonGui;
|
||||
using PlasticGui;
|
||||
using PlasticGui.Gluon;
|
||||
using PlasticGui.WorkspaceWindow;
|
||||
using PlasticGui.WorkspaceWindow.Diff;
|
||||
using PlasticGui.WorkspaceWindow.Items;
|
||||
using Unity.PlasticSCM.Editor.AssetMenu.Dialogs;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
using Unity.PlasticSCM.Editor.Tool;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
using Unity.PlasticSCM.Editor.Views.PendingChanges.Dialogs;
|
||||
|
||||
using GluonCheckoutOperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.CheckoutOperation;
|
||||
using GluonUndoCheckoutOperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.UndoCheckoutOperation;
|
||||
using GluonAddoperation = GluonGui.WorkspaceWindow.Views.WorkspaceExplorer.Explorer.Operations.AddOperation;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
internal class AssetOperations :
|
||||
IAssetMenuOperations,
|
||||
IAssetFilesFilterPatternsMenuOperations
|
||||
{
|
||||
internal interface IAssetSelection
|
||||
{
|
||||
AssetList GetSelectedAssets();
|
||||
}
|
||||
|
||||
internal AssetOperations(
|
||||
WorkspaceInfo wkInfo,
|
||||
IWorkspaceWindow workspaceWindow,
|
||||
IViewSwitcher viewSwitcher,
|
||||
IHistoryViewLauncher historyViewLauncher,
|
||||
ViewHost viewHost,
|
||||
NewIncomingChangesUpdater newIncomingChangesUpdater,
|
||||
IAssetStatusCache assetStatusCache,
|
||||
IMergeViewLauncher mergeViewLauncher,
|
||||
IGluonViewSwitcher gluonViewSwitcher,
|
||||
EditorWindow parentWindow,
|
||||
IAssetSelection assetSelection,
|
||||
LaunchTool.IShowDownloadPlasticExeWindow showDownloadPlasticExeWindow,
|
||||
bool isGluonMode)
|
||||
{
|
||||
mWkInfo = wkInfo;
|
||||
mWorkspaceWindow = workspaceWindow;
|
||||
mViewSwitcher = viewSwitcher;
|
||||
mHistoryViewLauncher = historyViewLauncher;
|
||||
mViewHost = viewHost;
|
||||
mNewIncomingChangesUpdater = newIncomingChangesUpdater;
|
||||
mAssetStatusCache = assetStatusCache;
|
||||
mMergeViewLauncher = mergeViewLauncher;
|
||||
mGluonViewSwitcher = gluonViewSwitcher;
|
||||
mAssetSelection = assetSelection;
|
||||
mShowDownloadPlasticExeWindow = showDownloadPlasticExeWindow;
|
||||
mIsGluonMode = isGluonMode;
|
||||
mParentWindow = parentWindow;
|
||||
|
||||
mGuiMessage = new UnityPlasticGuiMessage();
|
||||
mProgressControls = new EditorProgressControls(mGuiMessage);
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.ShowPendingChanges()
|
||||
{
|
||||
mViewSwitcher.ShowPendingChanges();
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.Add()
|
||||
{
|
||||
List<string> selectedPaths = GetSelectedPaths.ForOperation(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets(),
|
||||
mAssetStatusCache,
|
||||
AssetMenuOperations.Add);
|
||||
|
||||
if (mIsGluonMode)
|
||||
{
|
||||
GluonAddoperation.Add(
|
||||
mViewHost,
|
||||
mProgressControls,
|
||||
mGuiMessage,
|
||||
selectedPaths.ToArray(),
|
||||
false,
|
||||
RefreshAsset.VersionControlCache);
|
||||
return;
|
||||
}
|
||||
|
||||
AddOperation.Run(
|
||||
mWorkspaceWindow,
|
||||
mProgressControls,
|
||||
null,
|
||||
null,
|
||||
selectedPaths,
|
||||
false,
|
||||
mNewIncomingChangesUpdater,
|
||||
RefreshAsset.VersionControlCache);
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.Checkout()
|
||||
{
|
||||
List<string> selectedPaths = GetSelectedPaths.ForOperation(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets(),
|
||||
mAssetStatusCache,
|
||||
AssetMenuOperations.Checkout);
|
||||
|
||||
if (mIsGluonMode)
|
||||
{
|
||||
GluonCheckoutOperation.Checkout(
|
||||
mViewHost,
|
||||
mProgressControls,
|
||||
mGuiMessage,
|
||||
selectedPaths.ToArray(),
|
||||
false,
|
||||
RefreshAsset.VersionControlCache);
|
||||
return;
|
||||
}
|
||||
|
||||
CheckoutOperation.Checkout(
|
||||
mWorkspaceWindow,
|
||||
null,
|
||||
mProgressControls,
|
||||
selectedPaths,
|
||||
mNewIncomingChangesUpdater,
|
||||
RefreshAsset.VersionControlCache);
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.Checkin()
|
||||
{
|
||||
List<string> selectedPaths = GetSelectedPaths.ForOperation(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets(),
|
||||
mAssetStatusCache,
|
||||
AssetMenuOperations.Checkin);
|
||||
|
||||
if (!CheckinDialog.CheckinPaths(
|
||||
mWkInfo,
|
||||
selectedPaths,
|
||||
mAssetStatusCache,
|
||||
mIsGluonMode,
|
||||
mParentWindow,
|
||||
mWorkspaceWindow,
|
||||
mViewHost,
|
||||
mGuiMessage,
|
||||
mMergeViewLauncher,
|
||||
mGluonViewSwitcher))
|
||||
return;
|
||||
|
||||
RefreshAsset.UnityAssetDatabase();
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.Undo()
|
||||
{
|
||||
List<string> selectedPaths = GetSelectedPaths.ForOperation(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets(),
|
||||
mAssetStatusCache,
|
||||
AssetMenuOperations.Undo);
|
||||
|
||||
SaveAssets.ForPathsWithoutConfirmation(selectedPaths);
|
||||
|
||||
if (mIsGluonMode)
|
||||
{
|
||||
GluonUndoCheckoutOperation.UndoCheckout(
|
||||
mWkInfo,
|
||||
mViewHost,
|
||||
mProgressControls,
|
||||
selectedPaths.ToArray(),
|
||||
false,
|
||||
RefreshAsset.UnityAssetDatabase);
|
||||
return;
|
||||
}
|
||||
|
||||
UndoCheckoutOperation.Run(
|
||||
mWorkspaceWindow,
|
||||
null,
|
||||
mProgressControls,
|
||||
selectedPaths,
|
||||
mNewIncomingChangesUpdater,
|
||||
RefreshAsset.UnityAssetDatabase);
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.ShowDiff()
|
||||
{
|
||||
if (mShowDownloadPlasticExeWindow.Show(
|
||||
mWkInfo,
|
||||
mIsGluonMode,
|
||||
TrackFeatureUseEvent.Features.InstallPlasticCloudFromShowDiff,
|
||||
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromFromShowDiff,
|
||||
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromFromShowDiff))
|
||||
return;
|
||||
|
||||
string selectedPath = AssetsSelection.GetSelectedPath(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets());
|
||||
|
||||
DiffInfo diffInfo = null;
|
||||
|
||||
IThreadWaiter waiter = ThreadWaiter.GetWaiter(10);
|
||||
waiter.Execute(
|
||||
/*threadOperationDelegate*/ delegate
|
||||
{
|
||||
string symbolicName = GetSymbolicName(selectedPath);
|
||||
string extension = Path.GetExtension(selectedPath);
|
||||
|
||||
diffInfo = PlasticGui.Plastic.API.BuildDiffInfoForDiffWithPrevious(
|
||||
selectedPath, symbolicName, selectedPath, extension, mWkInfo);
|
||||
},
|
||||
/*afterOperationDelegate*/ delegate
|
||||
{
|
||||
if (waiter.Exception != null)
|
||||
{
|
||||
ExceptionsHandler.DisplayException(waiter.Exception);
|
||||
return;
|
||||
}
|
||||
|
||||
DiffOperation.DiffWithPrevious(
|
||||
diffInfo,
|
||||
null,
|
||||
null);
|
||||
});
|
||||
}
|
||||
|
||||
void IAssetMenuOperations.ShowHistory()
|
||||
{
|
||||
if (mShowDownloadPlasticExeWindow.Show(
|
||||
mWkInfo,
|
||||
mIsGluonMode,
|
||||
TrackFeatureUseEvent.Features.InstallPlasticCloudFromShowHistory,
|
||||
TrackFeatureUseEvent.Features.InstallPlasticEnterpriseFromShowHistory,
|
||||
TrackFeatureUseEvent.Features.CancelPlasticInstallationFromShowHistory))
|
||||
return;
|
||||
|
||||
Asset selectedAsset = AssetsSelection.GetSelectedAsset(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets());
|
||||
|
||||
string selectedPath = Path.GetFullPath(selectedAsset.path);
|
||||
|
||||
WorkspaceTreeNode node = PlasticGui.Plastic.API.
|
||||
GetWorkspaceTreeNode(selectedPath);
|
||||
|
||||
mHistoryViewLauncher.ShowHistoryView(
|
||||
node.RepSpec,
|
||||
node.RevInfo.ItemId,
|
||||
selectedPath,
|
||||
selectedAsset.isFolder);
|
||||
}
|
||||
|
||||
void IAssetFilesFilterPatternsMenuOperations.AddFilesFilterPatterns(
|
||||
FilterTypes type,
|
||||
FilterActions action,
|
||||
FilterOperationType operation)
|
||||
{
|
||||
List<string> selectedPaths = AssetsSelection.GetSelectedPaths(
|
||||
mWkInfo.ClientPath,
|
||||
mAssetSelection.GetSelectedAssets());
|
||||
|
||||
string[] rules = FilterRulesGenerator.GenerateRules(
|
||||
selectedPaths, mWkInfo.ClientPath, action, operation);
|
||||
|
||||
bool isApplicableToAllWorkspaces = !mIsGluonMode;
|
||||
bool isAddOperation = operation == FilterOperationType.Add;
|
||||
|
||||
FilterRulesConfirmationData filterRulesConfirmationData =
|
||||
FilterRulesConfirmationDialog.AskForConfirmation(
|
||||
rules, isAddOperation, isApplicableToAllWorkspaces, mParentWindow);
|
||||
|
||||
AddFilesFilterPatternsOperation.Run(
|
||||
mWkInfo, mWorkspaceWindow, type, operation, filterRulesConfirmationData);
|
||||
}
|
||||
|
||||
static string GetSymbolicName(string selectedPath)
|
||||
{
|
||||
WorkspaceTreeNode node = PlasticGui.Plastic.API.
|
||||
GetWorkspaceTreeNode(selectedPath);
|
||||
|
||||
string branchName = string.Empty;
|
||||
BranchInfoCache.TryGetBranchName(
|
||||
node.RepSpec, node.RevInfo.BranchId, out branchName);
|
||||
|
||||
string userName = PlasticGui.Plastic.API.GetUserName(
|
||||
node.RepSpec.Server, node.RevInfo.Owner);
|
||||
|
||||
string symbolicName = string.Format(
|
||||
"cs:{0}@{1} {2} {3}",
|
||||
node.RevInfo.Changeset,
|
||||
string.Format("br:{0}", branchName),
|
||||
userName,
|
||||
"Workspace Revision");
|
||||
|
||||
return symbolicName;
|
||||
}
|
||||
|
||||
readonly WorkspaceInfo mWkInfo;
|
||||
readonly IViewSwitcher mViewSwitcher;
|
||||
readonly IHistoryViewLauncher mHistoryViewLauncher;
|
||||
readonly IWorkspaceWindow mWorkspaceWindow;
|
||||
readonly ViewHost mViewHost;
|
||||
readonly NewIncomingChangesUpdater mNewIncomingChangesUpdater;
|
||||
readonly IAssetStatusCache mAssetStatusCache;
|
||||
readonly IMergeViewLauncher mMergeViewLauncher;
|
||||
readonly IGluonViewSwitcher mGluonViewSwitcher;
|
||||
readonly bool mIsGluonMode;
|
||||
readonly GuiMessage.IGuiMessage mGuiMessage;
|
||||
readonly EditorProgressControls mProgressControls;
|
||||
readonly EditorWindow mParentWindow;
|
||||
readonly IAssetSelection mAssetSelection;
|
||||
readonly LaunchTool.IShowDownloadPlasticExeWindow mShowDownloadPlasticExeWindow;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2c8b452bcd72d8248a3297ff656f0a7a
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,141 @@
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using UnityEditor.VersionControl;
|
||||
|
||||
using PlasticGui.WorkspaceWindow.Items;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
internal static class AssetsSelection
|
||||
{
|
||||
internal static Asset GetSelectedAsset(
|
||||
string wkPath,
|
||||
AssetList assetList)
|
||||
{
|
||||
if (assetList.Count == 0)
|
||||
return null;
|
||||
|
||||
foreach (Asset asset in assetList)
|
||||
{
|
||||
if (AssetsPath.GetFullPathUnderWorkspace.
|
||||
ForAsset(wkPath, asset.path) == null)
|
||||
continue;
|
||||
|
||||
return asset;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
internal static string GetSelectedPath(
|
||||
string wkPath,
|
||||
AssetList assetList)
|
||||
{
|
||||
Asset result = GetSelectedAsset(wkPath, assetList);
|
||||
|
||||
if (result == null)
|
||||
return null;
|
||||
|
||||
return Path.GetFullPath(result.path);
|
||||
}
|
||||
|
||||
internal static List<string> GetSelectedPaths(
|
||||
string wkPath,
|
||||
AssetList assetList)
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
|
||||
foreach (Asset asset in assetList)
|
||||
{
|
||||
string fullPath = AssetsPath.GetFullPathUnderWorkspace.
|
||||
ForAsset(wkPath, asset.path);
|
||||
|
||||
if (fullPath == null)
|
||||
continue;
|
||||
|
||||
result.Add(fullPath);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
internal static SelectedPathsGroupInfo GetSelectedPathsGroupInfo(
|
||||
string wkPath,
|
||||
AssetList assetList,
|
||||
IAssetStatusCache statusCache)
|
||||
{
|
||||
SelectedPathsGroupInfo result = new SelectedPathsGroupInfo();
|
||||
|
||||
if (assetList.Count == 0)
|
||||
return result;
|
||||
|
||||
result.IsRootSelected = false;
|
||||
result.IsCheckedoutEverySelected = true;
|
||||
result.IsDirectoryEverySelected = true;
|
||||
result.IsCheckedinEverySelected = true;
|
||||
result.IsChangedEverySelected = true;
|
||||
|
||||
foreach (Asset asset in assetList)
|
||||
{
|
||||
string fullPath = AssetsPath.GetFullPathUnderWorkspace.
|
||||
ForAsset(wkPath, asset.path);
|
||||
|
||||
if (fullPath == null)
|
||||
continue;
|
||||
|
||||
if (MetaPath.IsMetaPath(fullPath))
|
||||
fullPath = MetaPath.GetPathFromMetaPath(fullPath);
|
||||
|
||||
AssetStatus status = statusCache.GetStatus(fullPath);
|
||||
string assetName = GetAssetName(asset);
|
||||
|
||||
result.IsCheckedoutEverySelected &= ClassifyAssetStatus.IsCheckedOut(status);
|
||||
result.IsDirectoryEverySelected &= asset.isFolder;
|
||||
result.IsCheckedinEverySelected &= false; // TODO: not implemented yet
|
||||
result.IsChangedEverySelected &= false; // TODO: not implemented yet
|
||||
|
||||
result.IsAnyDirectorySelected |= asset.isFolder;
|
||||
result.IsAnyPrivateSelected |= ClassifyAssetStatus.IsPrivate(status);
|
||||
|
||||
result.FilterInfo.IsAnyIgnoredSelected |= ClassifyAssetStatus.IsIgnored(status);
|
||||
result.FilterInfo.IsAnyHiddenChangedSelected |= ClassifyAssetStatus.IsHiddenChanged(status);
|
||||
|
||||
result.SelectedCount++;
|
||||
|
||||
if (result.SelectedCount == 1)
|
||||
{
|
||||
result.FirstIsControlled = ClassifyAssetStatus.IsControlled(status);
|
||||
result.FirstIsDirectory = asset.isFolder;
|
||||
|
||||
result.FilterInfo.CommonName = assetName;
|
||||
result.FilterInfo.CommonExtension = Path.GetExtension(assetName);
|
||||
result.FilterInfo.CommonFullPath = asset.assetPath;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (result.FilterInfo.CommonName != assetName)
|
||||
result.FilterInfo.CommonName = null;
|
||||
|
||||
if (result.FilterInfo.CommonExtension != Path.GetExtension(assetName))
|
||||
result.FilterInfo.CommonExtension = null;
|
||||
|
||||
if (result.FilterInfo.CommonFullPath != asset.assetPath)
|
||||
result.FilterInfo.CommonFullPath = null;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static string GetAssetName(Asset asset)
|
||||
{
|
||||
if (asset.isFolder)
|
||||
return Path.GetFileName(Path.GetDirectoryName(asset.path));
|
||||
|
||||
return asset.fullName;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1686ac2e1d109ed43bf2dec74fed784f
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f5d6c6c129fff0140a040d43aedb9547
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,383 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
using Codice.Client.BaseCommands.EventTracking;
|
||||
using Codice.Client.Common;
|
||||
using Codice.CM.Common;
|
||||
using GluonGui;
|
||||
using PlasticGui;
|
||||
using PlasticGui.Gluon;
|
||||
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
using Unity.PlasticSCM.Editor.UI.Progress;
|
||||
using Unity.PlasticSCM.Editor.UI.Tree;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu.Dialogs
|
||||
{
|
||||
internal class CheckinDialog : PlasticDialog
|
||||
{
|
||||
protected override Rect DefaultRect
|
||||
{
|
||||
get
|
||||
{
|
||||
var baseRect = base.DefaultRect;
|
||||
return new Rect(baseRect.x, baseRect.y, 700, 450);
|
||||
}
|
||||
}
|
||||
|
||||
protected override string GetTitle()
|
||||
{
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.CheckinChanges);
|
||||
}
|
||||
|
||||
internal static bool CheckinPaths(
|
||||
WorkspaceInfo wkInfo,
|
||||
List<string> paths,
|
||||
IAssetStatusCache assetStatusCache,
|
||||
bool isGluonMode,
|
||||
EditorWindow parentWindow,
|
||||
IWorkspaceWindow workspaceWindow,
|
||||
ViewHost viewHost,
|
||||
GuiMessage.IGuiMessage guiMessage,
|
||||
IMergeViewLauncher mergeViewLauncher,
|
||||
IGluonViewSwitcher gluonViewSwitcher)
|
||||
{
|
||||
MetaCache metaCache = new MetaCache();
|
||||
metaCache.Build(paths);
|
||||
|
||||
CheckinDialog dialog = Create(
|
||||
wkInfo,
|
||||
paths,
|
||||
assetStatusCache,
|
||||
metaCache,
|
||||
isGluonMode,
|
||||
new ProgressControlsForDialogs(),
|
||||
workspaceWindow,
|
||||
viewHost,
|
||||
guiMessage,
|
||||
mergeViewLauncher,
|
||||
gluonViewSwitcher);
|
||||
|
||||
return dialog.RunModal(parentWindow) == ResponseType.Ok;
|
||||
}
|
||||
|
||||
protected override void OnModalGUI()
|
||||
{
|
||||
Title(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.CheckinComment));
|
||||
|
||||
GUI.SetNextControlName(CHECKIN_TEXTAREA_NAME);
|
||||
|
||||
mComment = GUILayout.TextArea(
|
||||
mComment,
|
||||
EditorStyles.textArea,
|
||||
GUILayout.MinHeight(120));
|
||||
|
||||
if (!mTextAreaFocused)
|
||||
{
|
||||
EditorGUI.FocusTextInControl(CHECKIN_TEXTAREA_NAME);
|
||||
mTextAreaFocused = true;
|
||||
}
|
||||
|
||||
Title(PlasticLocalization.GetString(PlasticLocalization.Name.Files));
|
||||
|
||||
DoFileList(
|
||||
mWkInfo,
|
||||
mPaths,
|
||||
mAssetStatusCache,
|
||||
mMetaCache);
|
||||
|
||||
DrawProgressForDialogs.For(
|
||||
mProgressControls.ProgressData);
|
||||
|
||||
DoButtonsArea();
|
||||
|
||||
mProgressControls.ForcedUpdateProgress(this);
|
||||
}
|
||||
|
||||
void DoFileList(
|
||||
WorkspaceInfo wkInfo,
|
||||
List<string> paths,
|
||||
IAssetStatusCache assetStatusCache,
|
||||
MetaCache metaCache)
|
||||
{
|
||||
mFileListScrollPosition = GUILayout.BeginScrollView(
|
||||
mFileListScrollPosition,
|
||||
EditorStyles.helpBox,
|
||||
GUILayout.ExpandHeight(true));
|
||||
|
||||
foreach (string path in paths)
|
||||
{
|
||||
if (MetaPath.IsMetaPath(path))
|
||||
continue;
|
||||
|
||||
Texture fileIcon = Directory.Exists(path) ?
|
||||
Images.GetDirectoryIcon() :
|
||||
Images.GetFileIcon(path);
|
||||
|
||||
string label = WorkspacePath.GetWorkspaceRelativePath(
|
||||
wkInfo.ClientPath, path);
|
||||
|
||||
if (metaCache.HasMeta(path))
|
||||
label = string.Concat(label, UnityConstants.TREEVIEW_META_LABEL);
|
||||
|
||||
AssetsOverlays.AssetStatus assetStatus =
|
||||
assetStatusCache.GetStatus(path);
|
||||
|
||||
Rect selectionRect = EditorGUILayout.GetControlRect();
|
||||
|
||||
DoListViewItem(selectionRect, fileIcon, label, assetStatus);
|
||||
}
|
||||
|
||||
GUILayout.EndScrollView();
|
||||
}
|
||||
|
||||
void DoListViewItem(
|
||||
Rect itemRect,
|
||||
Texture fileIcon,
|
||||
string label,
|
||||
AssetsOverlays.AssetStatus statusToDraw)
|
||||
{
|
||||
Texture overlayIcon = DrawAssetOverlay.DrawOverlayIcon.
|
||||
GetOverlayIcon(statusToDraw);
|
||||
|
||||
itemRect = DrawTreeViewItem.DrawIconLeft(
|
||||
itemRect,
|
||||
UnityConstants.TREEVIEW_ROW_HEIGHT,
|
||||
fileIcon,
|
||||
overlayIcon);
|
||||
|
||||
GUI.Label(itemRect, label);
|
||||
}
|
||||
|
||||
void DoButtonsArea()
|
||||
{
|
||||
using (new EditorGUILayout.HorizontalScope())
|
||||
{
|
||||
GUILayout.FlexibleSpace();
|
||||
|
||||
if (Application.platform == RuntimePlatform.WindowsEditor)
|
||||
{
|
||||
DoCheckinButton();
|
||||
DoCancelButton();
|
||||
return;
|
||||
}
|
||||
|
||||
DoCancelButton();
|
||||
DoCheckinButton();
|
||||
}
|
||||
}
|
||||
|
||||
void DoCheckinButton()
|
||||
{
|
||||
GUI.enabled = !string.IsNullOrEmpty(mComment) && !mIsRunningCheckin;
|
||||
|
||||
try
|
||||
{
|
||||
if (!AcceptButton(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.CheckinButton)))
|
||||
return;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if (!mSentCheckinTrackEvent)
|
||||
{
|
||||
TrackFeatureUseEvent.For(
|
||||
PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
|
||||
TrackFeatureUseEvent.Features.ContextMenuCheckinDialogCheckin);
|
||||
|
||||
mSentCheckinTrackEvent = true;
|
||||
}
|
||||
|
||||
GUI.enabled = true;
|
||||
}
|
||||
|
||||
OkButtonWithCheckinAction();
|
||||
}
|
||||
|
||||
void DoCancelButton()
|
||||
{
|
||||
if (!NormalButton(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.CancelButton)))
|
||||
return;
|
||||
|
||||
if (!mSentCancelTrackEvent)
|
||||
{
|
||||
TrackFeatureUseEvent.For(
|
||||
PlasticGui.Plastic.API.GetRepositorySpec(mWkInfo),
|
||||
TrackFeatureUseEvent.Features.ContextMenuCheckinDialogCancel);
|
||||
|
||||
mSentCancelTrackEvent = true;
|
||||
}
|
||||
|
||||
CancelButtonAction();
|
||||
}
|
||||
|
||||
void OkButtonWithCheckinAction()
|
||||
{
|
||||
bool isCancelled;
|
||||
SaveAssets.ForPathsWithConfirmation(mPaths, out isCancelled);
|
||||
|
||||
if (isCancelled)
|
||||
return;
|
||||
|
||||
mIsRunningCheckin = true;
|
||||
|
||||
mPaths.AddRange(mMetaCache.GetExistingMeta(mPaths));
|
||||
|
||||
if (mIsGluonMode)
|
||||
{
|
||||
CheckinDialogOperations.CheckinPathsPartial(
|
||||
mWkInfo,
|
||||
mPaths,
|
||||
mComment,
|
||||
mViewHost,
|
||||
this,
|
||||
mGuiMessage,
|
||||
mProgressControls,
|
||||
mGluonViewSwitcher);
|
||||
return;
|
||||
}
|
||||
|
||||
CheckinDialogOperations.CheckinPaths(
|
||||
mWkInfo,
|
||||
mPaths,
|
||||
mComment,
|
||||
mWorkspaceWindow,
|
||||
this,
|
||||
mGuiMessage,
|
||||
mProgressControls,
|
||||
mMergeViewLauncher);
|
||||
}
|
||||
|
||||
static CheckinDialog Create(
|
||||
WorkspaceInfo wkInfo,
|
||||
List<string> paths,
|
||||
IAssetStatusCache assetStatusCache,
|
||||
MetaCache metaCache,
|
||||
bool isGluonMode,
|
||||
ProgressControlsForDialogs progressControls,
|
||||
IWorkspaceWindow workspaceWindow,
|
||||
ViewHost viewHost,
|
||||
GuiMessage.IGuiMessage guiMessage,
|
||||
IMergeViewLauncher mergeViewLauncher,
|
||||
IGluonViewSwitcher gluonViewSwitcher)
|
||||
{
|
||||
var instance = CreateInstance<CheckinDialog>();
|
||||
instance.IsResizable = true;
|
||||
instance.minSize = new Vector2(520, 370);
|
||||
instance.mWkInfo = wkInfo;
|
||||
instance.mPaths = paths;
|
||||
instance.mAssetStatusCache = assetStatusCache;
|
||||
instance.mMetaCache = metaCache;
|
||||
instance.mIsGluonMode = isGluonMode;
|
||||
instance.mProgressControls = progressControls;
|
||||
instance.mWorkspaceWindow = workspaceWindow;
|
||||
instance.mViewHost = viewHost;
|
||||
instance.mGuiMessage = guiMessage;
|
||||
instance.mMergeViewLauncher = mergeViewLauncher;
|
||||
instance.mGluonViewSwitcher = gluonViewSwitcher;
|
||||
instance.mEscapeKeyAction = instance.CancelButtonAction;
|
||||
return instance;
|
||||
}
|
||||
|
||||
WorkspaceInfo mWkInfo;
|
||||
List<string> mPaths;
|
||||
IAssetStatusCache mAssetStatusCache;
|
||||
MetaCache mMetaCache;
|
||||
bool mIsGluonMode;
|
||||
bool mTextAreaFocused;
|
||||
string mComment;
|
||||
|
||||
bool mIsRunningCheckin;
|
||||
Vector2 mFileListScrollPosition;
|
||||
|
||||
// IMGUI evaluates every frame, need to make sure feature tracks get sent only once
|
||||
bool mSentCheckinTrackEvent = false;
|
||||
bool mSentCancelTrackEvent = false;
|
||||
|
||||
ProgressControlsForDialogs mProgressControls;
|
||||
|
||||
IWorkspaceWindow mWorkspaceWindow;
|
||||
ViewHost mViewHost;
|
||||
IMergeViewLauncher mMergeViewLauncher;
|
||||
IGluonViewSwitcher mGluonViewSwitcher;
|
||||
GuiMessage.IGuiMessage mGuiMessage;
|
||||
|
||||
const string CHECKIN_TEXTAREA_NAME = "checkin_textarea";
|
||||
|
||||
class MetaCache
|
||||
{
|
||||
internal bool HasMeta(string path)
|
||||
{
|
||||
return mCache.Contains(MetaPath.GetMetaPath(path));
|
||||
}
|
||||
|
||||
internal List<string> GetExistingMeta(List<string> paths)
|
||||
{
|
||||
List<string> result = new List<string>();
|
||||
|
||||
foreach (string path in paths)
|
||||
{
|
||||
string metaPath = MetaPath.GetMetaPath(path);
|
||||
|
||||
if (!mCache.Contains(metaPath))
|
||||
continue;
|
||||
|
||||
result.Add(metaPath);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void Build(List<string> paths)
|
||||
{
|
||||
HashSet<string> indexedKeys = BuildIndexedKeys(paths);
|
||||
|
||||
for (int i = paths.Count - 1; i >= 0; i--)
|
||||
{
|
||||
string currentPath = paths[i];
|
||||
|
||||
if (!MetaPath.IsMetaPath(currentPath))
|
||||
continue;
|
||||
|
||||
string realPath = MetaPath.GetPathFromMetaPath(currentPath);
|
||||
|
||||
if (!indexedKeys.Contains(realPath))
|
||||
continue;
|
||||
|
||||
// found foo.c and foo.c.meta
|
||||
// with the same chage types - move .meta to cache
|
||||
mCache.Add(currentPath);
|
||||
paths.RemoveAt(i);
|
||||
}
|
||||
}
|
||||
|
||||
static HashSet<string> BuildIndexedKeys(List<string> paths)
|
||||
{
|
||||
HashSet<string> result = new HashSet<string>();
|
||||
|
||||
foreach (string path in paths)
|
||||
{
|
||||
if (MetaPath.IsMetaPath(path))
|
||||
continue;
|
||||
|
||||
result.Add(path);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
HashSet<string> mCache =
|
||||
new HashSet<string>();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 678db227e4ffec949980d309c0532b08
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,143 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice.Client.BaseCommands;
|
||||
using Codice.Client.Commands.CheckIn;
|
||||
using Codice.Client.Common;
|
||||
using Codice.Client.Common.Threading;
|
||||
using Codice.Client.GameUI.Checkin;
|
||||
using Codice.CM.Common;
|
||||
|
||||
using GluonGui;
|
||||
|
||||
using PlasticGui;
|
||||
using PlasticGui.Gluon;
|
||||
using PlasticGui.WorkspaceWindow.PendingChanges;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu.Dialogs
|
||||
{
|
||||
internal static class CheckinDialogOperations
|
||||
{
|
||||
internal static void CheckinPaths(
|
||||
WorkspaceInfo wkInfo,
|
||||
List<string> paths,
|
||||
string comment,
|
||||
IWorkspaceWindow workspaceWindow,
|
||||
CheckinDialog dialog,
|
||||
GuiMessage.IGuiMessage guiMessage,
|
||||
IProgressControls progressControls,
|
||||
IMergeViewLauncher mergeViewLauncher)
|
||||
{
|
||||
BaseCommandsImpl baseCommands = new BaseCommandsImpl();
|
||||
|
||||
progressControls.ShowProgress("Checkin in files");
|
||||
|
||||
IThreadWaiter waiter = ThreadWaiter.GetWaiter(50);
|
||||
waiter.Execute(
|
||||
/*threadOperationDelegate*/ delegate
|
||||
{
|
||||
CheckinParams ciParams = new CheckinParams();
|
||||
ciParams.paths = paths.ToArray();
|
||||
ciParams.comment = comment;
|
||||
ciParams.time = DateTime.MinValue;
|
||||
ciParams.flags = CheckinFlags.Recurse | CheckinFlags.ProcessSymlinks;
|
||||
|
||||
baseCommands.CheckIn(ciParams);
|
||||
},
|
||||
/*afterOperationDelegate*/ delegate
|
||||
{
|
||||
progressControls.HideProgress();
|
||||
((IPlasticDialogCloser)dialog).CloseDialog();
|
||||
|
||||
if (waiter.Exception is CmClientMergeNeededException)
|
||||
{
|
||||
// we need to explicitly call EditorWindow.Close() to ensure
|
||||
// that the dialog is closed before asking the user
|
||||
dialog.Close();
|
||||
|
||||
if (!UserWantsToShowIncomingView(guiMessage))
|
||||
return;
|
||||
|
||||
ShowIncomingChanges.FromCheckin(
|
||||
wkInfo,
|
||||
mergeViewLauncher,
|
||||
progressControls);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (waiter.Exception != null)
|
||||
{
|
||||
ExceptionsHandler.DisplayException(waiter.Exception);
|
||||
return;
|
||||
}
|
||||
|
||||
workspaceWindow.RefreshView(ViewType.PendingChangesView);
|
||||
workspaceWindow.RefreshView(ViewType.HistoryView);
|
||||
});
|
||||
}
|
||||
|
||||
internal static void CheckinPathsPartial(
|
||||
WorkspaceInfo wkInfo,
|
||||
List<string> paths,
|
||||
string comment,
|
||||
ViewHost viewHost,
|
||||
CheckinDialog dialog,
|
||||
GuiMessage.IGuiMessage guiMessage,
|
||||
IProgressControls progressControls,
|
||||
IGluonViewSwitcher gluonViewSwitcher)
|
||||
{
|
||||
BaseCommandsImpl baseCommands = new BaseCommandsImpl();
|
||||
|
||||
progressControls.ShowProgress(PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.CheckinInFilesProgress));
|
||||
|
||||
IThreadWaiter waiter = ThreadWaiter.GetWaiter(50);
|
||||
waiter.Execute(
|
||||
/*threadOperationDelegate*/ delegate
|
||||
{
|
||||
baseCommands.PartialCheckin(wkInfo, paths, comment);
|
||||
},
|
||||
/*afterOperationDelegate*/ delegate
|
||||
{
|
||||
progressControls.HideProgress();
|
||||
|
||||
((IPlasticDialogCloser)dialog).CloseDialog();
|
||||
|
||||
if (waiter.Exception is CheckinConflictsException)
|
||||
{
|
||||
// we need to explicitly call EditorWindow.Close() to ensure
|
||||
// that the dialog is closed before asking the user
|
||||
dialog.Close();
|
||||
|
||||
if (!UserWantsToShowIncomingView(guiMessage))
|
||||
return;
|
||||
|
||||
gluonViewSwitcher.ShowIncomingChangesView();
|
||||
return;
|
||||
}
|
||||
|
||||
if (waiter.Exception != null)
|
||||
{
|
||||
ExceptionsHandler.DisplayException(waiter.Exception);
|
||||
return;
|
||||
}
|
||||
|
||||
viewHost.RefreshView(ViewType.CheckinView);
|
||||
viewHost.RefreshView(ViewType.HistoryView);
|
||||
});
|
||||
}
|
||||
|
||||
static bool UserWantsToShowIncomingView(GuiMessage.IGuiMessage guiMessage)
|
||||
{
|
||||
GuiMessage.GuiMessageResponseButton result = guiMessage.ShowQuestion(
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.CheckinConflictsTitle),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.UnityCheckinConflictsExplanation),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.CheckinShowIncomingChangesView),
|
||||
PlasticLocalization.GetString(PlasticLocalization.Name.CancelButton),
|
||||
null);
|
||||
|
||||
return result == GuiMessage.GuiMessageResponseButton.Positive;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c44a2ac668da0a04d9e567739215b2eb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,61 @@
|
||||
using System;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEditor.VersionControl;
|
||||
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetMenu
|
||||
{
|
||||
internal class ProjectViewAssetSelection : AssetOperations.IAssetSelection
|
||||
{
|
||||
internal ProjectViewAssetSelection(Action assetSelectionChangedAction)
|
||||
{
|
||||
mAssetSelectionChangedAction = assetSelectionChangedAction;
|
||||
|
||||
Selection.selectionChanged += SelectionChanged;
|
||||
}
|
||||
|
||||
internal void Dispose()
|
||||
{
|
||||
Selection.selectionChanged -= SelectionChanged;
|
||||
}
|
||||
|
||||
void SelectionChanged()
|
||||
{
|
||||
// Selection.selectionChanged gets triggered on both
|
||||
// project view and scene view. We only want to trigger
|
||||
// the action if user selects on project view (has assets)
|
||||
if (HasSelectedAssets())
|
||||
mAssetSelectionChangedAction();
|
||||
}
|
||||
|
||||
AssetList AssetOperations.IAssetSelection.GetSelectedAssets()
|
||||
{
|
||||
if (Selection.assetGUIDs.Length == 0)
|
||||
return new AssetList();
|
||||
|
||||
AssetList result = new AssetList();
|
||||
|
||||
foreach (string guid in Selection.assetGUIDs)
|
||||
{
|
||||
string assetPath = AssetsPath.GetFullPath.ForGuid(guid);
|
||||
|
||||
if (string.IsNullOrEmpty(assetPath))
|
||||
continue;
|
||||
|
||||
result.Add(new Asset(assetPath));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
bool HasSelectedAssets()
|
||||
{
|
||||
// Objects in project view have GUIDs, objects in scene view don't
|
||||
return Selection.assetGUIDs.Length > 0;
|
||||
}
|
||||
|
||||
Action mAssetSelectionChangedAction;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b8a49294ba135a2408fd1b26bcda6f97
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 491c192b16f732b4983b4a539908ad32
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,102 @@
|
||||
using System;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays
|
||||
{
|
||||
[Flags]
|
||||
internal enum AssetStatus
|
||||
{
|
||||
None = 0,
|
||||
Private = 1 << 0,
|
||||
Ignored = 1 << 2,
|
||||
Added = 1 << 3,
|
||||
Checkout = 1 << 4,
|
||||
Controlled = 1 << 5,
|
||||
UpToDate = 1 << 6,
|
||||
OutOfDate = 1 << 7,
|
||||
Conflicted = 1 << 8,
|
||||
DeletedOnServer = 1 << 9,
|
||||
Locked = 1 << 10,
|
||||
LockedRemote = 1 << 11,
|
||||
HiddenChanged = 1 << 12,
|
||||
}
|
||||
|
||||
internal class LockStatusData
|
||||
{
|
||||
internal readonly AssetStatus Status;
|
||||
internal readonly string LockedBy;
|
||||
internal readonly string WorkspaceName;
|
||||
|
||||
internal LockStatusData(
|
||||
AssetStatus status,
|
||||
string lockedBy,
|
||||
string workspaceName)
|
||||
{
|
||||
Status = status;
|
||||
LockedBy = lockedBy;
|
||||
WorkspaceName = workspaceName;
|
||||
}
|
||||
}
|
||||
|
||||
internal class ClassifyAssetStatus
|
||||
{
|
||||
internal static bool IsPrivate(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Private);
|
||||
}
|
||||
|
||||
internal static bool IsIgnored(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Ignored);
|
||||
}
|
||||
|
||||
internal static bool IsControlled(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Controlled);
|
||||
}
|
||||
|
||||
internal static bool IsLocked(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Locked);
|
||||
}
|
||||
|
||||
internal static bool IsLockedRemote(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.LockedRemote);
|
||||
}
|
||||
|
||||
internal static bool IsOutOfDate(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.OutOfDate);
|
||||
}
|
||||
|
||||
internal static bool IsDeletedOnServer(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.DeletedOnServer);
|
||||
}
|
||||
|
||||
internal static bool IsConflicted(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Conflicted);
|
||||
}
|
||||
|
||||
internal static bool IsAdded(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Added);
|
||||
}
|
||||
|
||||
internal static bool IsCheckedOut(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.Checkout);
|
||||
}
|
||||
|
||||
internal static bool IsHiddenChanged(AssetStatus status)
|
||||
{
|
||||
return ContainsAny(status, AssetStatus.HiddenChanged);
|
||||
}
|
||||
|
||||
static bool ContainsAny(AssetStatus status, AssetStatus matchTo)
|
||||
{
|
||||
return (status & matchTo) != AssetStatus.None;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 062535eac3e5dd1409b6a50b0d043e2c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6a94a55dca335c547ac65bd4b85d2a55
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,60 @@
|
||||
using Codice.CM.Common;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal interface IAssetStatusCache
|
||||
{
|
||||
AssetStatus GetStatus(string fullPath);
|
||||
LockStatusData GetLockStatusData(string fullPath);
|
||||
void Clear();
|
||||
}
|
||||
|
||||
internal class AssetStatusCache : IAssetStatusCache
|
||||
{
|
||||
internal AssetStatusCache(
|
||||
WorkspaceInfo wkInfo,
|
||||
bool isGluonMode)
|
||||
{
|
||||
mLocalStatusCache = new LocalStatusCache(wkInfo);
|
||||
|
||||
mRemoteStatusCache = new RemoteStatusCache(
|
||||
wkInfo,
|
||||
isGluonMode,
|
||||
ProjectWindow.Repaint);
|
||||
|
||||
mLockStatusCache = new LockStatusCache(
|
||||
wkInfo,
|
||||
ProjectWindow.Repaint);
|
||||
}
|
||||
|
||||
AssetStatus IAssetStatusCache.GetStatus(string fullPath)
|
||||
{
|
||||
AssetStatus localStatus = mLocalStatusCache.GetStatus(fullPath);
|
||||
|
||||
if (!ClassifyAssetStatus.IsControlled(localStatus))
|
||||
return localStatus;
|
||||
|
||||
AssetStatus remoteStatus = mRemoteStatusCache.GetStatus(fullPath);
|
||||
|
||||
AssetStatus lockStatus = mLockStatusCache.GetStatus(fullPath);
|
||||
|
||||
return localStatus | remoteStatus | lockStatus;
|
||||
}
|
||||
|
||||
LockStatusData IAssetStatusCache.GetLockStatusData(string fullPath)
|
||||
{
|
||||
return mLockStatusCache.GetLockStatusData(fullPath);
|
||||
}
|
||||
|
||||
void IAssetStatusCache.Clear()
|
||||
{
|
||||
mLocalStatusCache.Clear();
|
||||
mRemoteStatusCache.Clear();
|
||||
mLockStatusCache.Clear();
|
||||
}
|
||||
|
||||
readonly LocalStatusCache mLocalStatusCache;
|
||||
readonly RemoteStatusCache mRemoteStatusCache;
|
||||
readonly LockStatusCache mLockStatusCache;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3f227b28cf424364489edd67fce697bc
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,19 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice.Utils;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal static class BuildPathDictionary
|
||||
{
|
||||
internal static Dictionary<string, T> ForPlatform<T>()
|
||||
{
|
||||
if (PlatformIdentifier.IsWindows())
|
||||
return new Dictionary<string, T>(
|
||||
StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
return new Dictionary<string, T>();
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c963b5d17c74314eb7105e71377cdb8
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,75 @@
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice;
|
||||
using Codice.Client.BaseCommands;
|
||||
using Codice.Client.Commands.WkTree;
|
||||
using Codice.CM.Common;
|
||||
using PlasticGui.WorkspaceWindow;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal class LocalStatusCache
|
||||
{
|
||||
internal LocalStatusCache(WorkspaceInfo wkInfo)
|
||||
{
|
||||
mWkInfo = wkInfo;
|
||||
}
|
||||
|
||||
internal AssetStatus GetStatus(string fullPath)
|
||||
{
|
||||
AssetStatus result;
|
||||
|
||||
if (mStatusByPathCache.TryGetValue(fullPath, out result))
|
||||
return result;
|
||||
|
||||
result = CalculateStatus(
|
||||
fullPath,
|
||||
mWkInfo.ClientPath,
|
||||
FilterManager.Get().GetIgnoredFilter(),
|
||||
FilterManager.Get().GetHiddenChangesFilter());
|
||||
|
||||
mStatusByPathCache.Add(fullPath, result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
internal void Clear()
|
||||
{
|
||||
mStatusByPathCache.Clear();
|
||||
}
|
||||
|
||||
static AssetStatus CalculateStatus(
|
||||
string fullPath,
|
||||
string wkPath,
|
||||
IgnoredFilesFilter ignoredFilter,
|
||||
HiddenChangesFilesFilter hiddenChangesFilter)
|
||||
{
|
||||
WorkspaceTreeNode treeNode = PlasticGui.Plastic.API.GetWorkspaceTreeNode(fullPath);
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsPrivate(treeNode))
|
||||
{
|
||||
return ignoredFilter.IsIgnored(fullPath) ?
|
||||
AssetStatus.Ignored : AssetStatus.Private;
|
||||
}
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsAdded(treeNode))
|
||||
return AssetStatus.Added;
|
||||
|
||||
AssetStatus result = AssetStatus.Controlled;
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsCheckedOut(treeNode) &&
|
||||
!CheckWorkspaceTreeNodeStatus.IsDirectory(treeNode))
|
||||
result |= AssetStatus.Checkout;
|
||||
|
||||
if (hiddenChangesFilter.IsHiddenChanged(fullPath))
|
||||
result |= AssetStatus.HiddenChanged;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
Dictionary<string, AssetStatus> mStatusByPathCache =
|
||||
BuildPathDictionary.ForPlatform<AssetStatus>();
|
||||
|
||||
readonly WorkspaceInfo mWkInfo;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 226459a134855504d841db6b61519d2b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,220 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice;
|
||||
using Codice.Client.BaseCommands;
|
||||
using Codice.Client.Commands.WkTree;
|
||||
using Codice.Client.Common;
|
||||
using Codice.Client.Common.Locks;
|
||||
using Codice.Client.Common.Threading;
|
||||
using Codice.Client.Common.WkTree;
|
||||
using Codice.CM.Common;
|
||||
using Codice.Utils;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal class LockStatusCache
|
||||
{
|
||||
internal LockStatusCache(
|
||||
WorkspaceInfo wkInfo,
|
||||
Action repaintProjectWindow)
|
||||
{
|
||||
mWkInfo = wkInfo;
|
||||
mRepaintProjectWindow = repaintProjectWindow;
|
||||
}
|
||||
|
||||
internal AssetStatus GetStatus(string fullPath)
|
||||
{
|
||||
LockStatusData lockStatusData = GetLockStatusData(fullPath);
|
||||
|
||||
if (lockStatusData == null)
|
||||
return AssetStatus.None;
|
||||
|
||||
return lockStatusData.Status;
|
||||
}
|
||||
|
||||
internal LockStatusData GetLockStatusData(string fullPath)
|
||||
{
|
||||
lock (mLock)
|
||||
{
|
||||
if (mStatusByPathCache == null)
|
||||
{
|
||||
mStatusByPathCache = BuildPathDictionary.ForPlatform<LockStatusData>();
|
||||
|
||||
mCurrentCancelToken.Cancel();
|
||||
mCurrentCancelToken = new CancelToken();
|
||||
AsyncCalculateStatus(mCurrentCancelToken);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
LockStatusData result;
|
||||
|
||||
if (mStatusByPathCache.TryGetValue(fullPath, out result))
|
||||
return result;
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
internal void Clear()
|
||||
{
|
||||
lock (mLock)
|
||||
{
|
||||
mCurrentCancelToken.Cancel();
|
||||
|
||||
mStatusByPathCache = null;
|
||||
}
|
||||
}
|
||||
|
||||
void AsyncCalculateStatus(CancelToken cancelToken)
|
||||
{
|
||||
Dictionary<string, LockStatusData> statusByPathCache = null;
|
||||
|
||||
IThreadWaiter waiter = ThreadWaiter.GetWaiter(50);
|
||||
waiter.Execute(
|
||||
/*threadOperationDelegate*/ delegate
|
||||
{
|
||||
|
||||
Dictionary<RepositorySpec, List<WorkspaceTreeNode>> lockCandidates =
|
||||
new Dictionary<RepositorySpec, List<WorkspaceTreeNode>>();
|
||||
|
||||
FillLockCandidates.ForTree(mWkInfo, lockCandidates);
|
||||
|
||||
if (cancelToken.IsCancelled())
|
||||
return;
|
||||
|
||||
Dictionary<WorkspaceTreeNode, LockInfo> lockInfoByNode =
|
||||
SearchLocks.GetLocksInfo(mWkInfo, lockCandidates);
|
||||
|
||||
if (cancelToken.IsCancelled())
|
||||
return;
|
||||
|
||||
statusByPathCache = BuildStatusByNodeCache.
|
||||
ForLocks(mWkInfo.ClientPath, lockInfoByNode);
|
||||
},
|
||||
/*afterOperationDelegate*/ delegate
|
||||
{
|
||||
if (waiter.Exception != null)
|
||||
{
|
||||
ExceptionsHandler.LogException(
|
||||
"LockStatusCache",
|
||||
waiter.Exception);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cancelToken.IsCancelled())
|
||||
return;
|
||||
|
||||
lock (mLock)
|
||||
{
|
||||
mStatusByPathCache = statusByPathCache;
|
||||
}
|
||||
|
||||
mRepaintProjectWindow();
|
||||
});
|
||||
}
|
||||
|
||||
static class FillLockCandidates
|
||||
{
|
||||
internal static void ForTree(
|
||||
WorkspaceInfo wkInfo,
|
||||
Dictionary<RepositorySpec, List<WorkspaceTreeNode>> lockCandidates)
|
||||
{
|
||||
WorkspaceTreeNode rootNode = CmConnection.Get().GetWorkspaceTreeHandler().
|
||||
GetWorkspaceTree(wkInfo, wkInfo.ClientPath, true);
|
||||
|
||||
Queue<WorkspaceTreeNode> pendingDirectories = new Queue<WorkspaceTreeNode>();
|
||||
pendingDirectories.Enqueue(rootNode);
|
||||
|
||||
while (pendingDirectories.Count > 0)
|
||||
{
|
||||
WorkspaceTreeNode directoryNode = pendingDirectories.Dequeue();
|
||||
|
||||
ForChildren(directoryNode, pendingDirectories, lockCandidates);
|
||||
}
|
||||
}
|
||||
|
||||
static void ForChildren(
|
||||
WorkspaceTreeNode directoryNode,
|
||||
Queue<WorkspaceTreeNode> pendingDirectories,
|
||||
Dictionary<RepositorySpec, List<WorkspaceTreeNode>> lockCandidates)
|
||||
{
|
||||
if (!directoryNode.HasChildren)
|
||||
return;
|
||||
|
||||
foreach (WorkspaceTreeNode child in directoryNode.Children)
|
||||
{
|
||||
if (CheckWorkspaceTreeNodeStatus.IsDirectory(child))
|
||||
{
|
||||
pendingDirectories.Enqueue(child);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CheckWorkspaceTreeNodeStatus.IsAdded(child))
|
||||
continue;
|
||||
|
||||
List<WorkspaceTreeNode> nodes = null;
|
||||
if (!lockCandidates.TryGetValue(child.RepSpec, out nodes))
|
||||
{
|
||||
nodes = new List<WorkspaceTreeNode>();
|
||||
lockCandidates.Add(child.RepSpec, nodes);
|
||||
}
|
||||
|
||||
nodes.Add(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static class BuildStatusByNodeCache
|
||||
{
|
||||
internal static Dictionary<string, LockStatusData> ForLocks(
|
||||
string wkPath,
|
||||
Dictionary<WorkspaceTreeNode, LockInfo> lockInfoByNode)
|
||||
{
|
||||
Dictionary<string, LockStatusData> result =
|
||||
BuildPathDictionary.ForPlatform<LockStatusData>();
|
||||
|
||||
LockOwnerNameResolver nameResolver = new LockOwnerNameResolver();
|
||||
|
||||
foreach (WorkspaceTreeNode node in lockInfoByNode.Keys)
|
||||
{
|
||||
LockStatusData lockStatusData = BuildLockStatusData(
|
||||
node, lockInfoByNode[node], nameResolver);
|
||||
|
||||
string nodeWkPath = WorkspacePath.GetWorkspacePathFromCmPath(
|
||||
wkPath,
|
||||
WorkspaceNodeOperations.GetCmPath(node),
|
||||
PathHelper.GetDirectorySeparatorChar(wkPath));
|
||||
|
||||
result.Add(nodeWkPath, lockStatusData);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static LockStatusData BuildLockStatusData(
|
||||
WorkspaceTreeNode node,
|
||||
LockInfo lockInfo,
|
||||
LockOwnerNameResolver nameResolver)
|
||||
{
|
||||
AssetStatus status = CheckWorkspaceTreeNodeStatus.IsCheckedOut(node) ?
|
||||
AssetStatus.Locked : AssetStatus.LockedRemote;
|
||||
|
||||
return new LockStatusData(
|
||||
status,
|
||||
nameResolver.GetSeidName(lockInfo.SEIDData),
|
||||
LockWkInfo.GetWkCleanName(lockInfo));
|
||||
}
|
||||
}
|
||||
|
||||
CancelToken mCurrentCancelToken = new CancelToken();
|
||||
|
||||
Dictionary<string, LockStatusData> mStatusByPathCache;
|
||||
|
||||
readonly WorkspaceInfo mWkInfo;
|
||||
readonly Action mRepaintProjectWindow;
|
||||
|
||||
static object mLock = new object();
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 953c29d2e0dece647a64940343c91547
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,177 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice.Client.BaseCommands;
|
||||
using Codice.Client.Commands;
|
||||
using Codice.Client.Common;
|
||||
using Codice.Client.Common.Threading;
|
||||
using Codice.Client.GameUI;
|
||||
using Codice.Client.GameUI.Update;
|
||||
using Codice.CM.Common;
|
||||
using Codice.CM.Common.Merge;
|
||||
using Codice.Utils;
|
||||
using GluonGui.WorkspaceWindow.Views;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal class RemoteStatusCache
|
||||
{
|
||||
internal RemoteStatusCache(
|
||||
WorkspaceInfo wkInfo,
|
||||
bool isGluonMode,
|
||||
Action repaintProjectWindow)
|
||||
{
|
||||
mWkInfo = wkInfo;
|
||||
mIsGluonMode = isGluonMode;
|
||||
mRepaintProjectWindow = repaintProjectWindow;
|
||||
}
|
||||
|
||||
internal AssetStatus GetStatus(string fullPath)
|
||||
{
|
||||
if (!mIsGluonMode)
|
||||
return AssetStatus.UpToDate;
|
||||
|
||||
lock(mLock)
|
||||
{
|
||||
if (mStatusByPathCache == null)
|
||||
{
|
||||
mStatusByPathCache = BuildPathDictionary.ForPlatform<AssetStatus>();
|
||||
|
||||
mCurrentCancelToken.Cancel();
|
||||
mCurrentCancelToken = new CancelToken();
|
||||
AsyncCalculateStatus(mCurrentCancelToken);
|
||||
|
||||
return AssetStatus.UpToDate;
|
||||
}
|
||||
|
||||
AssetStatus result;
|
||||
if (mStatusByPathCache.TryGetValue(fullPath, out result))
|
||||
return result;
|
||||
|
||||
return AssetStatus.UpToDate;
|
||||
}
|
||||
}
|
||||
|
||||
internal void Clear()
|
||||
{
|
||||
lock (mLock)
|
||||
{
|
||||
mCurrentCancelToken.Cancel();
|
||||
mStatusByPathCache = null;
|
||||
}
|
||||
}
|
||||
|
||||
void AsyncCalculateStatus(CancelToken cancelToken)
|
||||
{
|
||||
Dictionary<string, AssetStatus> statusByPathCache = null;
|
||||
|
||||
IThreadWaiter waiter = ThreadWaiter.GetWaiter(50);
|
||||
waiter.Execute(
|
||||
/*threadOperationDelegate*/ delegate
|
||||
{
|
||||
OutOfDateItems outOfDateItems =
|
||||
OutOfDateUpdater.CalculateOutOfDateItems(
|
||||
mWkInfo, new List<ErrorMessage>(),
|
||||
OutOfDateCalculator.Options.IsIncomingChanges);
|
||||
|
||||
if (cancelToken.IsCancelled())
|
||||
return;
|
||||
|
||||
statusByPathCache = BuildStatusByPathCache.
|
||||
ForOutOfDateItems(outOfDateItems, mWkInfo.ClientPath);
|
||||
},
|
||||
/*afterOperationDelegate*/ delegate
|
||||
{
|
||||
if (waiter.Exception != null)
|
||||
{
|
||||
ExceptionsHandler.LogException(
|
||||
"RemoteStatusCache",
|
||||
waiter.Exception);
|
||||
return;
|
||||
}
|
||||
|
||||
if (cancelToken.IsCancelled())
|
||||
return;
|
||||
|
||||
lock (mLock)
|
||||
{
|
||||
mStatusByPathCache = statusByPathCache;
|
||||
}
|
||||
|
||||
mRepaintProjectWindow();
|
||||
});
|
||||
}
|
||||
|
||||
static class BuildStatusByPathCache
|
||||
{
|
||||
internal static Dictionary<string, AssetStatus> ForOutOfDateItems(
|
||||
OutOfDateItems outOfDateItems,
|
||||
string wkPath)
|
||||
{
|
||||
Dictionary<string, AssetStatus> result =
|
||||
BuildPathDictionary.ForPlatform<AssetStatus>();
|
||||
|
||||
if (outOfDateItems == null)
|
||||
return result;
|
||||
|
||||
foreach (OutOfDateItemsByMount diffs in
|
||||
outOfDateItems.GetOutOfDateItemsByMountList())
|
||||
{
|
||||
foreach (Difference diff in diffs.Changed)
|
||||
{
|
||||
if (diff is DiffXlinkChanged)
|
||||
continue;
|
||||
|
||||
string path = GetPathForDiff(wkPath, diffs.Mount, diff.Path);
|
||||
result.Add(path, AssetStatus.OutOfDate);
|
||||
}
|
||||
|
||||
foreach (Difference diff in diffs.Deleted)
|
||||
{
|
||||
string path = GetPathForDiff(wkPath, diffs.Mount, diff.Path);
|
||||
result.Add(path, AssetStatus.DeletedOnServer);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (GluonFileConflict fileConflict in
|
||||
outOfDateItems.GetFileConflicts())
|
||||
{
|
||||
string path = GetPathForConflict(wkPath, fileConflict.CmPath);
|
||||
result.Add(path, AssetStatus.Conflicted);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static string GetPathForDiff(
|
||||
string wkPath,
|
||||
MountPointWithPath mountPoint,
|
||||
string cmSubPath)
|
||||
{
|
||||
return WorkspacePath.GetWorkspacePathFromCmPath(
|
||||
wkPath,
|
||||
WorkspacePath.ComposeMountPath(mountPoint.MountPath, cmSubPath),
|
||||
PathHelper.GetDirectorySeparatorChar(wkPath));
|
||||
}
|
||||
|
||||
static string GetPathForConflict(
|
||||
string wkPath,
|
||||
string cmPath)
|
||||
{
|
||||
return WorkspacePath.GetWorkspacePathFromCmPath(
|
||||
wkPath, cmPath,
|
||||
PathHelper.GetDirectorySeparatorChar(wkPath));
|
||||
}
|
||||
}
|
||||
|
||||
CancelToken mCurrentCancelToken = new CancelToken();
|
||||
|
||||
Dictionary<string, AssetStatus> mStatusByPathCache;
|
||||
|
||||
readonly Action mRepaintProjectWindow;
|
||||
readonly bool mIsGluonMode;
|
||||
readonly WorkspaceInfo mWkInfo;
|
||||
|
||||
static object mLock = new object();
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a9acb575a60d7e045ad7fadd3e3e137d
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,120 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
using Codice.Client.Commands.WkTree;
|
||||
using Codice.Client.Common;
|
||||
using Codice.Client.Common.Locks;
|
||||
using Codice.Client.Common.WkTree;
|
||||
using Codice.CM.Common;
|
||||
using Codice.CM.WorkspaceServer.DataStore.Guids;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays.Cache
|
||||
{
|
||||
internal static class SearchLocks
|
||||
{
|
||||
internal static Dictionary<WorkspaceTreeNode, LockInfo> GetLocksInfo(
|
||||
WorkspaceInfo wkInfo,
|
||||
Dictionary<RepositorySpec, List<WorkspaceTreeNode>> locksCandidates)
|
||||
{
|
||||
Dictionary<WorkspaceTreeNode, LockInfo> result =
|
||||
new Dictionary<WorkspaceTreeNode, LockInfo>();
|
||||
|
||||
Dictionary<string, Dictionary<Guid, LockInfo>> locksByItemByServer =
|
||||
new Dictionary<string, Dictionary<Guid, LockInfo>>(
|
||||
StringComparer.InvariantCultureIgnoreCase);
|
||||
|
||||
foreach (KeyValuePair<RepositorySpec, List<WorkspaceTreeNode>> each in locksCandidates)
|
||||
{
|
||||
FillRepositoryLocks(
|
||||
wkInfo, each.Key, each.Value,
|
||||
locksByItemByServer, result);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void FillRepositoryLocks(
|
||||
WorkspaceInfo wkInfo,
|
||||
RepositorySpec repSpec,
|
||||
List<WorkspaceTreeNode> candidates,
|
||||
Dictionary<string, Dictionary<Guid, LockInfo>> locksByItemByServer,
|
||||
Dictionary<WorkspaceTreeNode, LockInfo> locks)
|
||||
{
|
||||
if (candidates.Count == 0)
|
||||
return;
|
||||
|
||||
LockRule lockRule = ServerLocks.GetLockRule(repSpec);
|
||||
|
||||
if (lockRule == null)
|
||||
return;
|
||||
|
||||
candidates = GetLockableCandidates(candidates, lockRule);
|
||||
|
||||
if (candidates.Count == 0)
|
||||
return;
|
||||
|
||||
Dictionary<Guid, LockInfo> serverlocksByItem =
|
||||
ServerLocks.GetServerLocksByItem(
|
||||
repSpec.Server, locksByItemByServer);
|
||||
|
||||
if (serverlocksByItem == null || serverlocksByItem.Count == 0)
|
||||
return;
|
||||
|
||||
IList<Guid> candidatesGuids = GetCandidatesGuids(
|
||||
wkInfo, repSpec, candidates);
|
||||
|
||||
for (int index = 0; index < candidates.Count; index++)
|
||||
{
|
||||
LockInfo serverLock;
|
||||
if (!serverlocksByItem.TryGetValue(
|
||||
candidatesGuids[index], out serverLock))
|
||||
continue;
|
||||
|
||||
locks[candidates[index]] = serverLock;
|
||||
}
|
||||
}
|
||||
|
||||
static List<WorkspaceTreeNode> GetLockableCandidates(
|
||||
List<WorkspaceTreeNode> candidates,
|
||||
LockRule lockRule)
|
||||
{
|
||||
List<WorkspaceTreeNode> result = new List<WorkspaceTreeNode>();
|
||||
|
||||
LockedFilesFilter filter = new LockedFilesFilter(lockRule.Rules);
|
||||
|
||||
foreach (WorkspaceTreeNode candidate in candidates)
|
||||
{
|
||||
string cmPath = WorkspaceNodeOperations.GetCmPath(candidate);
|
||||
|
||||
if (cmPath == null)
|
||||
{
|
||||
//The node could not be on the head tree (like copied items) so when we
|
||||
//cannot calculate the path we assume that it's lockable.
|
||||
result.Add(candidate);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (filter.IsLockable(cmPath))
|
||||
result.Add(candidate);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static IList<Guid> GetCandidatesGuids(
|
||||
WorkspaceInfo wkInfo,
|
||||
RepositorySpec repSpec,
|
||||
List<WorkspaceTreeNode> candidates)
|
||||
{
|
||||
RepositoryInfo repInfo = RepositorySpecResolverProvider.
|
||||
Get().GetRepInfo(repSpec);
|
||||
|
||||
IList<long> ids = new List<long>(candidates.Count);
|
||||
|
||||
foreach (WorkspaceTreeNode candidate in candidates)
|
||||
ids.Add(candidate.RevInfo.ItemId);
|
||||
|
||||
return GuidResolver.Get().GetObjectGuids(repInfo, wkInfo, ids);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cef27b0c65987be4384e16c988465aca
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,251 @@
|
||||
using System;
|
||||
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
|
||||
using PlasticGui;
|
||||
using Unity.PlasticSCM.Editor.AssetsOverlays.Cache;
|
||||
using Unity.PlasticSCM.Editor.AssetUtils;
|
||||
using Unity.PlasticSCM.Editor.UI;
|
||||
|
||||
namespace Unity.PlasticSCM.Editor.AssetsOverlays
|
||||
{
|
||||
internal static class DrawAssetOverlay
|
||||
{
|
||||
internal static void Enable(
|
||||
string wkPath,
|
||||
IAssetStatusCache assetStatusCache)
|
||||
{
|
||||
if (mIsEnabled)
|
||||
return;
|
||||
|
||||
mWkPath = wkPath;
|
||||
mAssetStatusCache = assetStatusCache;
|
||||
|
||||
mIsEnabled = true;
|
||||
|
||||
mRepaintProjectWindow = ProjectWindow.Repaint;
|
||||
|
||||
EditorApplication.projectWindowItemOnGUI += OnProjectWindowItemGUI;
|
||||
|
||||
mRepaintProjectWindow();
|
||||
}
|
||||
|
||||
internal static void Disable()
|
||||
{
|
||||
mIsEnabled = false;
|
||||
|
||||
EditorApplication.projectWindowItemOnGUI -= OnProjectWindowItemGUI;
|
||||
|
||||
mRepaintProjectWindow();
|
||||
|
||||
mWkPath = null;
|
||||
mAssetStatusCache = null;
|
||||
}
|
||||
|
||||
internal static void ClearCache()
|
||||
{
|
||||
if (mAssetStatusCache != null)
|
||||
mAssetStatusCache.Clear();
|
||||
|
||||
mRepaintProjectWindow();
|
||||
}
|
||||
|
||||
internal static string GetStatusString(AssetStatus assetStatus)
|
||||
{
|
||||
if (ClassifyAssetStatus.IsPrivate(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.Private);
|
||||
|
||||
if (ClassifyAssetStatus.IsIgnored(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusIgnored);
|
||||
|
||||
if (ClassifyAssetStatus.IsAdded(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusAdded);
|
||||
|
||||
if (ClassifyAssetStatus.IsConflicted(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusConflicted);
|
||||
|
||||
if (ClassifyAssetStatus.IsDeletedOnServer(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusDeletedOnServer);
|
||||
|
||||
if (ClassifyAssetStatus.IsLockedRemote(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusLockedRemote);
|
||||
|
||||
if (ClassifyAssetStatus.IsOutOfDate(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusOutOfDate);
|
||||
|
||||
if (ClassifyAssetStatus.IsLocked(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusLockedMe);
|
||||
|
||||
if (ClassifyAssetStatus.IsCheckedOut(assetStatus))
|
||||
return PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.StatusCheckout);
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
|
||||
internal static string GetTooltipText(
|
||||
AssetStatus statusValue,
|
||||
LockStatusData lockStatusData)
|
||||
{
|
||||
string statusText = GetStatusString(statusValue);
|
||||
|
||||
if (lockStatusData == null)
|
||||
return statusText;
|
||||
|
||||
// example:
|
||||
// Changed by:
|
||||
// * dani_pen@hotmail.com
|
||||
// * workspace wkLocal"
|
||||
|
||||
char bulletCharacter = '\u25cf';
|
||||
|
||||
string line1 = PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.AssetOverlayTooltipStatus, statusText);
|
||||
|
||||
string line2 = string.Format("{0} {1}",
|
||||
bulletCharacter,
|
||||
lockStatusData.LockedBy);
|
||||
|
||||
string line3 = string.Format("{0} {1}",
|
||||
bulletCharacter,
|
||||
PlasticLocalization.GetString(
|
||||
PlasticLocalization.Name.AssetOverlayTooltipWorkspace,
|
||||
lockStatusData.WorkspaceName));
|
||||
|
||||
return string.Format(
|
||||
"{0}" + Environment.NewLine +
|
||||
"{1}" + Environment.NewLine +
|
||||
"{2}",
|
||||
line1,
|
||||
line2,
|
||||
line3);
|
||||
}
|
||||
|
||||
static void OnProjectWindowItemGUI(string guid, Rect selectionRect)
|
||||
{
|
||||
if (string.IsNullOrEmpty(guid))
|
||||
return;
|
||||
|
||||
if (Event.current.type != EventType.Repaint)
|
||||
return;
|
||||
|
||||
string fullPath = AssetsPath.GetFullPathUnderWorkspace.
|
||||
ForGuid(mWkPath, guid);
|
||||
|
||||
if (fullPath == null)
|
||||
return;
|
||||
|
||||
AssetStatus assetStatus = mAssetStatusCache.GetStatus(fullPath);
|
||||
|
||||
LockStatusData lockStatusData =
|
||||
ClassifyAssetStatus.IsLockedRemote(assetStatus) ?
|
||||
mAssetStatusCache.GetLockStatusData(fullPath) :
|
||||
null;
|
||||
|
||||
string tooltipText = GetTooltipText(
|
||||
assetStatus,
|
||||
lockStatusData);
|
||||
|
||||
DrawOverlayIcon.ForStatus(
|
||||
selectionRect,
|
||||
assetStatus,
|
||||
tooltipText);
|
||||
}
|
||||
|
||||
internal static class DrawOverlayIcon
|
||||
{
|
||||
internal static void ForStatus(
|
||||
Rect selectionRect,
|
||||
AssetStatus status,
|
||||
string tooltipText)
|
||||
{
|
||||
Texture overlayIcon = GetOverlayIcon(status);
|
||||
|
||||
if (overlayIcon == null)
|
||||
return;
|
||||
|
||||
Rect overlayRect = OverlayRect.GetOverlayRect(
|
||||
selectionRect,
|
||||
OVERLAY_ICON_OFFSET);
|
||||
|
||||
GUI.DrawTexture(
|
||||
overlayRect, overlayIcon, ScaleMode.ScaleToFit);
|
||||
|
||||
Rect tooltipRect = GetTooltipRect(selectionRect, overlayRect);
|
||||
|
||||
GUI.Label(tooltipRect, new GUIContent(string.Empty, tooltipText));
|
||||
}
|
||||
|
||||
internal static Texture GetOverlayIcon(AssetStatus assetStatus)
|
||||
{
|
||||
if (ClassifyAssetStatus.IsPrivate(assetStatus))
|
||||
return Images.GetPrivatedOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsIgnored(assetStatus))
|
||||
return Images.GetIgnoredOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsAdded(assetStatus))
|
||||
return Images.GetAddedOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsConflicted(assetStatus))
|
||||
return Images.GetConflictedOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsDeletedOnServer(assetStatus))
|
||||
return Images.GetDeletedRemoteOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsLockedRemote(assetStatus))
|
||||
return Images.GetLockedRemoteOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsOutOfDate(assetStatus))
|
||||
return Images.GetOutOfSyncOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsLocked(assetStatus))
|
||||
return Images.GetLockedLocalOverlayIcon();
|
||||
|
||||
if (ClassifyAssetStatus.IsCheckedOut(assetStatus))
|
||||
return Images.GetCheckedOutOverlayIcon();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
static Rect Inflate(Rect rect, float width, float height)
|
||||
{
|
||||
return new Rect(
|
||||
rect.x - width,
|
||||
rect.y - height,
|
||||
rect.width + 2f * width,
|
||||
rect.height + 2f * height);
|
||||
}
|
||||
|
||||
static Rect GetTooltipRect(
|
||||
Rect selectionRect,
|
||||
Rect overlayRect)
|
||||
{
|
||||
if (selectionRect.width > selectionRect.height)
|
||||
{
|
||||
return overlayRect;
|
||||
}
|
||||
|
||||
return Inflate(overlayRect, 3f, 3f);
|
||||
}
|
||||
}
|
||||
|
||||
static Action mRepaintProjectWindow;
|
||||
|
||||
static bool mIsEnabled;
|
||||
static IAssetStatusCache mAssetStatusCache;
|
||||
static string mWkPath;
|
||||
|
||||
const float OVERLAY_ICON_OFFSET = 20f;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d30dfeb72257204458e1e8e1576b84ba
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b01e5a3d2517b904698dbc9fa0df727f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 8697b23ed1b3db0448e2580433ae07d7
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 442 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d24e7e0b75e1a244bb9687d6fd4315ef
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 770 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ddf2e76e8a1f88f46ae1e42277850b48
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 694 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f09eae8c0ea04254b90c5386a034a225
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 742 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f9161c6c9e06dc445ada3ee16d991f90
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 573 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3086d66a563317b40a20a20da2c64ac0
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 1.1 KiB |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 144aa74618b85974a9a50f612c2fa8fd
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 423 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c6a2a64ca9f9c946a7dbbd1674cf5bd
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 655 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 02800fb9cff14da47a04572790384d8b
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 327 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 73d124bf77e463c45942d14136745d9f
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 478 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a6fbd5a181bc51e42a61a73fe8d727c8
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 272 B |
@ -0,0 +1,135 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 612c5e166a121e3449dad067fbdc37a4
|
||||
TextureImporter:
|
||||
internalIDToNameTable: []
|
||||
externalObjects: {}
|
||||
serializedVersion: 12
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
vTOnly: 0
|
||||
ignoreMasterTextureLimit: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 0
|
||||
aniso: 1
|
||||
mipBias: 0
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
flipbookRows: 1
|
||||
flipbookColumns: 1
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
ignorePngGamma: 0
|
||||
applyGammaDecoding: 0
|
||||
cookieLightType: 1
|
||||
platformSettings:
|
||||
- serializedVersion: 3
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: Server
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
- serializedVersion: 3
|
||||
buildTarget: XboxOne
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
forceMaximumCompressionQuality_BC6H_BC7: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
internalID: 0
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
secondaryTextures: []
|
||||
nameFileIdTable: {}
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
After Width: | Height: | Size: 481 B |