mirror of
https://github.com/maxartz15/TextureCombiner.git
synced 2024-11-21 20:05:36 +01:00
Init.
P4 -> GitHub sync.
This commit is contained in:
parent
e6b8bcef3c
commit
1165a4e4a8
5
.gitignore
vendored
5
.gitignore
vendored
@ -14,13 +14,14 @@
|
|||||||
!/[Aa]ssets/**/*.meta
|
!/[Aa]ssets/**/*.meta
|
||||||
|
|
||||||
# Uncomment this line if you wish to ignore the asset store tools plugin
|
# Uncomment this line if you wish to ignore the asset store tools plugin
|
||||||
# /[Aa]ssets/AssetStoreTools*
|
/[Aa]ssets/AssetStoreTools*
|
||||||
|
|
||||||
# Autogenerated Jetbrains Rider plugin
|
# Autogenerated Jetbrains Rider plugin
|
||||||
[Aa]ssets/Plugins/Editor/JetBrains*
|
[Aa]ssets/Plugins/Editor/JetBrains*
|
||||||
|
|
||||||
# Visual Studio cache directory
|
# Visual Studio cache directory
|
||||||
.vs/
|
.vs/
|
||||||
|
.vscode/
|
||||||
|
|
||||||
# Gradle cache directory
|
# Gradle cache directory
|
||||||
.gradle/
|
.gradle/
|
||||||
@ -58,3 +59,5 @@ sysinfo.txt
|
|||||||
# Crashlytics generated file
|
# Crashlytics generated file
|
||||||
crashlytics-build.properties
|
crashlytics-build.properties
|
||||||
|
|
||||||
|
# p4ignore
|
||||||
|
*.p4ignore
|
8
Assets/Materials.meta
Normal file
8
Assets/Materials.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0a97efa44a47b1b4f8dc4cc4858bc4ce
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
67
Assets/Materials/CombineShader.mat
Normal file
67
Assets/Materials/CombineShader.mat
Normal file
@ -0,0 +1,67 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
%TAG !u! tag:unity3d.com,2011:
|
||||||
|
--- !u!21 &2100000
|
||||||
|
Material:
|
||||||
|
serializedVersion: 6
|
||||||
|
m_ObjectHideFlags: 0
|
||||||
|
m_CorrespondingSourceObject: {fileID: 0}
|
||||||
|
m_PrefabInstance: {fileID: 0}
|
||||||
|
m_PrefabAsset: {fileID: 0}
|
||||||
|
m_Name: CombineShader
|
||||||
|
m_Shader: {fileID: 4800000, guid: 549aae9fe3b32db48804f14851ff0f48, type: 3}
|
||||||
|
m_ShaderKeywords:
|
||||||
|
m_LightmapFlags: 4
|
||||||
|
m_EnableInstancingVariants: 0
|
||||||
|
m_DoubleSidedGI: 0
|
||||||
|
m_CustomRenderQueue: -1
|
||||||
|
stringTagMap: {}
|
||||||
|
disabledShaderPasses: []
|
||||||
|
m_SavedProperties:
|
||||||
|
serializedVersion: 3
|
||||||
|
m_TexEnvs:
|
||||||
|
- _MainTex:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _Tex0:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _Tex1:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _Tex2:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _Tex3:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _TexA:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _TexB:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _TexG:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
- _TexR:
|
||||||
|
m_Texture: {fileID: 0}
|
||||||
|
m_Scale: {x: 1, y: 1}
|
||||||
|
m_Offset: {x: 0, y: 0}
|
||||||
|
m_Floats:
|
||||||
|
- _Source0: 0
|
||||||
|
- _Target0: 0
|
||||||
|
m_Colors:
|
||||||
|
- _Add: {r: 0, g: 0, b: 0, a: 0}
|
||||||
|
- _Mask0: {r: 1, g: 0, b: 0, a: 0}
|
||||||
|
- _Mask1: {r: 1, g: 0, b: 0, a: 0}
|
||||||
|
- _Mask2: {r: 1, g: 0, b: 0, a: 0}
|
||||||
|
- _Mask3: {r: 1, g: 0, b: 0, a: 0}
|
||||||
|
- _MaskR: {r: 1, g: 1, b: 1, a: 1}
|
8
Assets/Materials/CombineShader.mat.meta
Normal file
8
Assets/Materials/CombineShader.mat.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 911f5ac4d693b154ab7bb551aa77a33c
|
||||||
|
NativeFormatImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
mainObjectFileID: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Plugins.meta
Normal file
8
Assets/Plugins.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b88a1dd15b3636c4487c3d11cf2546c4
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Plugins/StandaloneFileBrowser.meta
Normal file
8
Assets/Plugins/StandaloneFileBrowser.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 57e25b4a578dba94c9353f4633b20549
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,13 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
public interface IStandaloneFileBrowser {
|
||||||
|
string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect);
|
||||||
|
string[] OpenFolderPanel(string title, string directory, bool multiselect);
|
||||||
|
string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions);
|
||||||
|
|
||||||
|
void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb);
|
||||||
|
void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb);
|
||||||
|
void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7609f7b6787a54496aa41a3053fcc76a
|
||||||
|
timeCreated: 1483902788
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Plugins/StandaloneFileBrowser/Plugins.meta
Normal file
8
Assets/Plugins/StandaloneFileBrowser/Plugins.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ddc4e7b83981f244ba9a26b88c18cb67
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
10
Assets/Plugins/StandaloneFileBrowser/Plugins/Linux.meta
Normal file
10
Assets/Plugins/StandaloneFileBrowser/Plugins/Linux.meta
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 82666e520ab4d4cf08bebbb8059cd6f4
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1538224809
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,10 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bd198408642944765b9305bd99404136
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1538230728
|
||||||
|
licenseType: Free
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
@ -0,0 +1,126 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b8c465928f1784a3fac8dc3766f7201c
|
||||||
|
timeCreated: 1538230728
|
||||||
|
licenseType: Free
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
'': Any
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
Exclude Android: 1
|
||||||
|
Exclude Editor: 0
|
||||||
|
Exclude Linux: 1
|
||||||
|
Exclude Linux64: 0
|
||||||
|
Exclude LinuxUniversal: 0
|
||||||
|
Exclude OSXIntel: 1
|
||||||
|
Exclude OSXIntel64: 1
|
||||||
|
Exclude OSXUniversal: 1
|
||||||
|
Exclude SamsungTV: 1
|
||||||
|
Exclude Tizen: 1
|
||||||
|
Exclude WebGL: 1
|
||||||
|
Exclude Win: 0
|
||||||
|
Exclude Win64: 0
|
||||||
|
Exclude iOS: 1
|
||||||
|
- first:
|
||||||
|
Android: Android
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: ARMv7
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: x86_64
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
OS: Linux
|
||||||
|
- first:
|
||||||
|
Facebook: Win
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Facebook: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Samsung TV: SamsungTV
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
STV_MODEL: STANDARD_15
|
||||||
|
- first:
|
||||||
|
Standalone: Linux
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Linux64
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: x86_64
|
||||||
|
- first:
|
||||||
|
Standalone: LinuxUniversal
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: x86_64
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Win
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Win64
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
iPhone: iOS
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CompileFlags:
|
||||||
|
FrameworkDependencies:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
BIN
Assets/Plugins/StandaloneFileBrowser/Plugins/Ookii.Dialogs.dll
Normal file
BIN
Assets/Plugins/StandaloneFileBrowser/Plugins/Ookii.Dialogs.dll
Normal file
Binary file not shown.
@ -0,0 +1,130 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: e60958662eed5413d86143a0a69b731e
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
: Any
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
Exclude Android: 1
|
||||||
|
Exclude Editor: 0
|
||||||
|
Exclude Linux: 1
|
||||||
|
Exclude Linux64: 1
|
||||||
|
Exclude LinuxUniversal: 1
|
||||||
|
Exclude OSXIntel: 1
|
||||||
|
Exclude OSXIntel64: 1
|
||||||
|
Exclude OSXUniversal: 1
|
||||||
|
Exclude WebGL: 1
|
||||||
|
Exclude Win: 0
|
||||||
|
Exclude Win64: 0
|
||||||
|
Exclude iOS: 1
|
||||||
|
- first:
|
||||||
|
: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
OS: AnyOS
|
||||||
|
- first:
|
||||||
|
Android: Android
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: ARMv7
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Facebook: Win
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Facebook: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Linux
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Linux64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: LinuxUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Win
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Win64
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
iPhone: iOS
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CompileFlags:
|
||||||
|
FrameworkDependencies:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,43 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 110fdfb459db4fc448a2ccd37e200fa4
|
||||||
|
folderAsset: yes
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel64
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Standalone: OSXUniversal
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 996ea0b0fb9804844ba9595686ee3e7a
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,46 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>BuildMachineOSBuild</key>
|
||||||
|
<string>18A391</string>
|
||||||
|
<key>CFBundleDevelopmentRegion</key>
|
||||||
|
<string>English</string>
|
||||||
|
<key>CFBundleExecutable</key>
|
||||||
|
<string>StandaloneFileBrowser</string>
|
||||||
|
<key>CFBundleIdentifier</key>
|
||||||
|
<string>com.gkngkc.sfb</string>
|
||||||
|
<key>CFBundleInfoDictionaryVersion</key>
|
||||||
|
<string>6.0</string>
|
||||||
|
<key>CFBundleName</key>
|
||||||
|
<string>StandaloneFileBrowser</string>
|
||||||
|
<key>CFBundlePackageType</key>
|
||||||
|
<string>BNDL</string>
|
||||||
|
<key>CFBundleShortVersionString</key>
|
||||||
|
<string>1.0 </string>
|
||||||
|
<key>CFBundleSignature</key>
|
||||||
|
<string>????</string>
|
||||||
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
|
<array>
|
||||||
|
<string>MacOSX</string>
|
||||||
|
</array>
|
||||||
|
<key>CFBundleVersion</key>
|
||||||
|
<string>1.0</string>
|
||||||
|
<key>CSResourcesFileMapped</key>
|
||||||
|
<true/>
|
||||||
|
<key>DTCompiler</key>
|
||||||
|
<string>com.apple.compilers.llvm.clang.1_0</string>
|
||||||
|
<key>DTPlatformBuild</key>
|
||||||
|
<string>10A255</string>
|
||||||
|
<key>DTPlatformVersion</key>
|
||||||
|
<string>GM</string>
|
||||||
|
<key>DTSDKBuild</key>
|
||||||
|
<string>18A384</string>
|
||||||
|
<key>DTSDKName</key>
|
||||||
|
<string>macosx10.14</string>
|
||||||
|
<key>DTXcode</key>
|
||||||
|
<string>1000</string>
|
||||||
|
<key>DTXcodeBuild</key>
|
||||||
|
<string>10A255</string>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ce685769797f44046afa3e567860c94c
|
||||||
|
timeCreated: 1505756861
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: a5a66f5db020f344c9327188aec2c060
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: ddf122e0e89124ce78aacfeecb3ec554
|
||||||
|
timeCreated: 1508179371
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,90 @@
|
|||||||
|
var StandaloneFileBrowserWebGLPlugin = {
|
||||||
|
// Open file.
|
||||||
|
// gameObjectNamePtr: Unique GameObject name. Required for calling back unity with SendMessage.
|
||||||
|
// methodNamePtr: Callback method name on given GameObject.
|
||||||
|
// filter: Filter files. Example filters:
|
||||||
|
// Match all image files: "image/*"
|
||||||
|
// Match all video files: "video/*"
|
||||||
|
// Match all audio files: "audio/*"
|
||||||
|
// Custom: ".plist, .xml, .yaml"
|
||||||
|
// multiselect: Allows multiple file selection
|
||||||
|
UploadFile: function(gameObjectNamePtr, methodNamePtr, filterPtr, multiselect) {
|
||||||
|
gameObjectName = Pointer_stringify(gameObjectNamePtr);
|
||||||
|
methodName = Pointer_stringify(methodNamePtr);
|
||||||
|
filter = Pointer_stringify(filterPtr);
|
||||||
|
|
||||||
|
// Delete if element exist
|
||||||
|
var fileInput = document.getElementById(gameObjectName)
|
||||||
|
if (fileInput) {
|
||||||
|
document.body.removeChild(fileInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
fileInput = document.createElement('input');
|
||||||
|
fileInput.setAttribute('id', gameObjectName);
|
||||||
|
fileInput.setAttribute('type', 'file');
|
||||||
|
fileInput.setAttribute('style','display:none;');
|
||||||
|
fileInput.setAttribute('style','visibility:hidden;');
|
||||||
|
if (multiselect) {
|
||||||
|
fileInput.setAttribute('multiple', '');
|
||||||
|
}
|
||||||
|
if (filter) {
|
||||||
|
fileInput.setAttribute('accept', filter);
|
||||||
|
}
|
||||||
|
fileInput.onclick = function (event) {
|
||||||
|
// File dialog opened
|
||||||
|
this.value = null;
|
||||||
|
};
|
||||||
|
fileInput.onchange = function (event) {
|
||||||
|
// multiselect works
|
||||||
|
var urls = [];
|
||||||
|
for (var i = 0; i < event.target.files.length; i++) {
|
||||||
|
urls.push(URL.createObjectURL(event.target.files[i]));
|
||||||
|
}
|
||||||
|
// File selected
|
||||||
|
SendMessage(gameObjectName, methodName, urls.join());
|
||||||
|
|
||||||
|
// Remove after file selected
|
||||||
|
document.body.removeChild(fileInput);
|
||||||
|
}
|
||||||
|
document.body.appendChild(fileInput);
|
||||||
|
|
||||||
|
document.onmouseup = function() {
|
||||||
|
fileInput.click();
|
||||||
|
document.onmouseup = null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
// Save file
|
||||||
|
// DownloadFile method does not open SaveFileDialog like standalone builds, its just allows user to download file
|
||||||
|
// gameObjectNamePtr: Unique GameObject name. Required for calling back unity with SendMessage.
|
||||||
|
// methodNamePtr: Callback method name on given GameObject.
|
||||||
|
// filenamePtr: Filename with extension
|
||||||
|
// byteArray: byte[]
|
||||||
|
// byteArraySize: byte[].Length
|
||||||
|
DownloadFile: function(gameObjectNamePtr, methodNamePtr, filenamePtr, byteArray, byteArraySize) {
|
||||||
|
gameObjectName = Pointer_stringify(gameObjectNamePtr);
|
||||||
|
methodName = Pointer_stringify(methodNamePtr);
|
||||||
|
filename = Pointer_stringify(filenamePtr);
|
||||||
|
|
||||||
|
var bytes = new Uint8Array(byteArraySize);
|
||||||
|
for (var i = 0; i < byteArraySize; i++) {
|
||||||
|
bytes[i] = HEAPU8[byteArray + i];
|
||||||
|
}
|
||||||
|
|
||||||
|
var downloader = window.document.createElement('a');
|
||||||
|
downloader.setAttribute('id', gameObjectName);
|
||||||
|
downloader.href = window.URL.createObjectURL(new Blob([bytes], { type: 'application/octet-stream' }));
|
||||||
|
downloader.download = filename;
|
||||||
|
document.body.appendChild(downloader);
|
||||||
|
|
||||||
|
document.onmouseup = function() {
|
||||||
|
downloader.click();
|
||||||
|
document.body.removeChild(downloader);
|
||||||
|
document.onmouseup = null;
|
||||||
|
|
||||||
|
SendMessage(gameObjectName, methodName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
mergeInto(LibraryManager.library, StandaloneFileBrowserWebGLPlugin);
|
@ -0,0 +1,99 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 265aaf20a6d564e0fb00a9c4a7a9c300
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
: Any
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
Exclude Editor: 1
|
||||||
|
Exclude Linux: 1
|
||||||
|
Exclude Linux64: 1
|
||||||
|
Exclude LinuxUniversal: 1
|
||||||
|
Exclude OSXUniversal: 1
|
||||||
|
Exclude Win: 1
|
||||||
|
Exclude Win64: 1
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
OS: AnyOS
|
||||||
|
- first:
|
||||||
|
Facebook: WebGL
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Facebook: Win
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Facebook: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Linux
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: x86
|
||||||
|
- first:
|
||||||
|
Standalone: Linux64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: LinuxUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Win
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
WebGL: WebGL
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Binary file not shown.
@ -0,0 +1,130 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7d459a96865cc4aaab657012c6dc4833
|
||||||
|
PluginImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
iconMap: {}
|
||||||
|
executionOrder: {}
|
||||||
|
defineConstraints: []
|
||||||
|
isPreloaded: 0
|
||||||
|
isOverridable: 0
|
||||||
|
isExplicitlyReferenced: 0
|
||||||
|
validateReferences: 1
|
||||||
|
platformData:
|
||||||
|
- first:
|
||||||
|
: Any
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
Exclude Android: 1
|
||||||
|
Exclude Editor: 0
|
||||||
|
Exclude Linux: 1
|
||||||
|
Exclude Linux64: 1
|
||||||
|
Exclude LinuxUniversal: 1
|
||||||
|
Exclude OSXIntel: 1
|
||||||
|
Exclude OSXIntel64: 1
|
||||||
|
Exclude OSXUniversal: 1
|
||||||
|
Exclude WebGL: 1
|
||||||
|
Exclude Win: 0
|
||||||
|
Exclude Win64: 0
|
||||||
|
Exclude iOS: 1
|
||||||
|
- first:
|
||||||
|
: Editor
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
OS: AnyOS
|
||||||
|
- first:
|
||||||
|
Android: Android
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: ARMv7
|
||||||
|
- first:
|
||||||
|
Any:
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings: {}
|
||||||
|
- first:
|
||||||
|
Editor: Editor
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
DefaultValueInitialized: true
|
||||||
|
- first:
|
||||||
|
Facebook: Win
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Facebook: Win64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Linux
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Linux64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: LinuxUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXIntel64
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: OSXUniversal
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: None
|
||||||
|
- first:
|
||||||
|
Standalone: Win
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Standalone: Win64
|
||||||
|
second:
|
||||||
|
enabled: 1
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
Windows Store Apps: WindowsStoreApps
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CPU: AnyCPU
|
||||||
|
- first:
|
||||||
|
iPhone: iOS
|
||||||
|
second:
|
||||||
|
enabled: 0
|
||||||
|
settings:
|
||||||
|
CompileFlags:
|
||||||
|
FrameworkDependencies:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
153
Assets/Plugins/StandaloneFileBrowser/StandaloneFileBrowser.cs
Normal file
153
Assets/Plugins/StandaloneFileBrowser/StandaloneFileBrowser.cs
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
public struct ExtensionFilter {
|
||||||
|
public string Name;
|
||||||
|
public string[] Extensions;
|
||||||
|
|
||||||
|
public ExtensionFilter(string filterName, params string[] filterExtensions) {
|
||||||
|
Name = filterName;
|
||||||
|
Extensions = filterExtensions;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StandaloneFileBrowser {
|
||||||
|
private static IStandaloneFileBrowser _platformWrapper = null;
|
||||||
|
|
||||||
|
static StandaloneFileBrowser() {
|
||||||
|
#if UNITY_STANDALONE_OSX
|
||||||
|
_platformWrapper = new StandaloneFileBrowserMac();
|
||||||
|
#elif UNITY_STANDALONE_WIN
|
||||||
|
_platformWrapper = new StandaloneFileBrowserWindows();
|
||||||
|
#elif UNITY_STANDALONE_LINUX
|
||||||
|
_platformWrapper = new StandaloneFileBrowserLinux();
|
||||||
|
#elif UNITY_EDITOR
|
||||||
|
_platformWrapper = new StandaloneFileBrowserEditor();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open file dialog
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="extension">Allowed extension</param>
|
||||||
|
/// <param name="multiselect">Allow multiple file selection</param>
|
||||||
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns>
|
||||||
|
public static string[] OpenFilePanel(string title, string directory, string extension, bool multiselect) {
|
||||||
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) };
|
||||||
|
return OpenFilePanel(title, directory, extensions, multiselect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open file dialog
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param>
|
||||||
|
/// <param name="multiselect">Allow multiple file selection</param>
|
||||||
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns>
|
||||||
|
public static string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) {
|
||||||
|
return _platformWrapper.OpenFilePanel(title, directory, extensions, multiselect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open file dialog async
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="extension">Allowed extension</param>
|
||||||
|
/// <param name="multiselect">Allow multiple file selection</param>
|
||||||
|
/// <param name="cb">Callback")</param>
|
||||||
|
public static void OpenFilePanelAsync(string title, string directory, string extension, bool multiselect, Action<string[]> cb) {
|
||||||
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) };
|
||||||
|
OpenFilePanelAsync(title, directory, extensions, multiselect, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open file dialog async
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param>
|
||||||
|
/// <param name="multiselect">Allow multiple file selection</param>
|
||||||
|
/// <param name="cb">Callback")</param>
|
||||||
|
public static void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) {
|
||||||
|
_platformWrapper.OpenFilePanelAsync(title, directory, extensions, multiselect, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open folder dialog
|
||||||
|
/// NOTE: Multiple folder selection doesn't supported on Windows
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title"></param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="multiselect"></param>
|
||||||
|
/// <returns>Returns array of chosen paths. Zero length array when cancelled</returns>
|
||||||
|
public static string[] OpenFolderPanel(string title, string directory, bool multiselect) {
|
||||||
|
return _platformWrapper.OpenFolderPanel(title, directory, multiselect);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native open folder dialog async
|
||||||
|
/// NOTE: Multiple folder selection doesn't supported on Windows
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title"></param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="multiselect"></param>
|
||||||
|
/// <param name="cb">Callback")</param>
|
||||||
|
public static void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) {
|
||||||
|
_platformWrapper.OpenFolderPanelAsync(title, directory, multiselect, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native save file dialog
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="defaultName">Default file name</param>
|
||||||
|
/// <param name="extension">File extension</param>
|
||||||
|
/// <returns>Returns chosen path. Empty string when cancelled</returns>
|
||||||
|
public static string SaveFilePanel(string title, string directory, string defaultName , string extension) {
|
||||||
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) };
|
||||||
|
return SaveFilePanel(title, directory, defaultName, extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native save file dialog
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="defaultName">Default file name</param>
|
||||||
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param>
|
||||||
|
/// <returns>Returns chosen path. Empty string when cancelled</returns>
|
||||||
|
public static string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) {
|
||||||
|
return _platformWrapper.SaveFilePanel(title, directory, defaultName, extensions);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native save file dialog async
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="defaultName">Default file name</param>
|
||||||
|
/// <param name="extension">File extension</param>
|
||||||
|
/// <param name="cb">Callback")</param>
|
||||||
|
public static void SaveFilePanelAsync(string title, string directory, string defaultName , string extension, Action<string> cb) {
|
||||||
|
var extensions = string.IsNullOrEmpty(extension) ? null : new [] { new ExtensionFilter("", extension) };
|
||||||
|
SaveFilePanelAsync(title, directory, defaultName, extensions, cb);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Native save file dialog async
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="title">Dialog title</param>
|
||||||
|
/// <param name="directory">Root directory</param>
|
||||||
|
/// <param name="defaultName">Default file name</param>
|
||||||
|
/// <param name="extensions">List of extension filters. Filter Example: new ExtensionFilter("Image Files", "jpg", "png")</param>
|
||||||
|
/// <param name="cb">Callback")</param>
|
||||||
|
public static void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) {
|
||||||
|
_platformWrapper.SaveFilePanelAsync(title, directory, defaultName, extensions, cb);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3c708be74128e4ced9b79eaaf80e8443
|
||||||
|
timeCreated: 1483902788
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,56 @@
|
|||||||
|
#if UNITY_EDITOR
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using UnityEditor;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
public class StandaloneFileBrowserEditor : IStandaloneFileBrowser {
|
||||||
|
public string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) {
|
||||||
|
string path = "";
|
||||||
|
|
||||||
|
if (extensions == null) {
|
||||||
|
path = EditorUtility.OpenFilePanel(title, directory, "");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
path = EditorUtility.OpenFilePanelWithFilters(title, directory, GetFilterFromFileExtensionList(extensions));
|
||||||
|
}
|
||||||
|
|
||||||
|
return string.IsNullOrEmpty(path) ? new string[0] : new[] { path };
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) {
|
||||||
|
cb.Invoke(OpenFilePanel(title, directory, extensions, multiselect));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] OpenFolderPanel(string title, string directory, bool multiselect) {
|
||||||
|
var path = EditorUtility.OpenFolderPanel(title, directory, "");
|
||||||
|
return string.IsNullOrEmpty(path) ? new string[0] : new[] {path};
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) {
|
||||||
|
cb.Invoke(OpenFolderPanel(title, directory, multiselect));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) {
|
||||||
|
var ext = extensions != null ? extensions[0].Extensions[0] : "";
|
||||||
|
var name = string.IsNullOrEmpty(ext) ? defaultName : defaultName + "." + ext;
|
||||||
|
return EditorUtility.SaveFilePanel(title, directory, name, ext);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) {
|
||||||
|
cb.Invoke(SaveFilePanel(title, directory, defaultName, extensions));
|
||||||
|
}
|
||||||
|
|
||||||
|
// EditorUtility.OpenFilePanelWithFilters extension filter format
|
||||||
|
private static string[] GetFilterFromFileExtensionList(ExtensionFilter[] extensions) {
|
||||||
|
var filters = new string[extensions.Length * 2];
|
||||||
|
for (int i = 0; i < extensions.Length; i++) {
|
||||||
|
filters[(i * 2)] = extensions[i].Name;
|
||||||
|
filters[(i * 2) + 1] = string.Join(",", extensions[i].Extensions);
|
||||||
|
}
|
||||||
|
return filters;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2650af8de2cda46b99b1bc7cf5d30ca5
|
||||||
|
timeCreated: 1483902788
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,115 @@
|
|||||||
|
#if UNITY_STANDALONE_LINUX
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
|
||||||
|
public class StandaloneFileBrowserLinux : IStandaloneFileBrowser {
|
||||||
|
|
||||||
|
private static Action<string[]> _openFileCb;
|
||||||
|
private static Action<string[]> _openFolderCb;
|
||||||
|
private static Action<string> _saveFileCb;
|
||||||
|
|
||||||
|
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
|
||||||
|
public delegate void AsyncCallback(string path);
|
||||||
|
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogInit();
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogOpenFilePanel(string title, string directory, string extension, bool multiselect);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogOpenFilePanelAsync(string title, string directory, string extension, bool multiselect, AsyncCallback callback);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogOpenFolderPanel(string title, string directory, bool multiselect);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogOpenFolderPanelAsync(string title, string directory, bool multiselect, AsyncCallback callback);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogSaveFilePanel(string title, string directory, string defaultName, string extension);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogSaveFilePanelAsync(string title, string directory, string defaultName, string extension, AsyncCallback callback);
|
||||||
|
|
||||||
|
public StandaloneFileBrowserLinux()
|
||||||
|
{
|
||||||
|
DialogInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) {
|
||||||
|
var paths = Marshal.PtrToStringAnsi(DialogOpenFilePanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
multiselect));
|
||||||
|
return paths.Split((char)28);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) {
|
||||||
|
_openFileCb = cb;
|
||||||
|
DialogOpenFilePanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
multiselect,
|
||||||
|
(string result) => { _openFileCb.Invoke(result.Split((char)28)); });
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] OpenFolderPanel(string title, string directory, bool multiselect) {
|
||||||
|
var paths = Marshal.PtrToStringAnsi(DialogOpenFolderPanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
multiselect));
|
||||||
|
return paths.Split((char)28);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) {
|
||||||
|
_openFolderCb = cb;
|
||||||
|
DialogOpenFolderPanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
multiselect,
|
||||||
|
(string result) => { _openFolderCb.Invoke(result.Split((char)28)); });
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) {
|
||||||
|
return Marshal.PtrToStringAnsi(DialogSaveFilePanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
defaultName,
|
||||||
|
GetFilterFromFileExtensionList(extensions)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) {
|
||||||
|
_saveFileCb = cb;
|
||||||
|
DialogSaveFilePanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
defaultName,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
(string result) => { _saveFileCb.Invoke(result); });
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetFilterFromFileExtensionList(ExtensionFilter[] extensions) {
|
||||||
|
if (extensions == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var filterString = "";
|
||||||
|
foreach (var filter in extensions) {
|
||||||
|
filterString += filter.Name + ";";
|
||||||
|
|
||||||
|
foreach (var ext in filter.Extensions) {
|
||||||
|
filterString += ext + ",";
|
||||||
|
}
|
||||||
|
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
filterString += "|";
|
||||||
|
}
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
return filterString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,3 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5d3a668018554b8a89c3fe12de72b60c
|
||||||
|
timeCreated: 1538067919
|
119
Assets/Plugins/StandaloneFileBrowser/StandaloneFileBrowserMac.cs
Normal file
119
Assets/Plugins/StandaloneFileBrowser/StandaloneFileBrowserMac.cs
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#if UNITY_STANDALONE_OSX
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
public class StandaloneFileBrowserMac : IStandaloneFileBrowser {
|
||||||
|
private static Action<string[]> _openFileCb;
|
||||||
|
private static Action<string[]> _openFolderCb;
|
||||||
|
private static Action<string> _saveFileCb;
|
||||||
|
|
||||||
|
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
|
||||||
|
public delegate void AsyncCallback(string path);
|
||||||
|
|
||||||
|
[AOT.MonoPInvokeCallback(typeof(AsyncCallback))]
|
||||||
|
private static void openFileCb(string result) {
|
||||||
|
_openFileCb.Invoke(result.Split((char)28));
|
||||||
|
}
|
||||||
|
|
||||||
|
[AOT.MonoPInvokeCallback(typeof(AsyncCallback))]
|
||||||
|
private static void openFolderCb(string result) {
|
||||||
|
_openFolderCb.Invoke(result.Split((char)28));
|
||||||
|
}
|
||||||
|
|
||||||
|
[AOT.MonoPInvokeCallback(typeof(AsyncCallback))]
|
||||||
|
private static void saveFileCb(string result) {
|
||||||
|
_saveFileCb.Invoke(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogOpenFilePanel(string title, string directory, string extension, bool multiselect);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogOpenFilePanelAsync(string title, string directory, string extension, bool multiselect, AsyncCallback callback);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogOpenFolderPanel(string title, string directory, bool multiselect);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogOpenFolderPanelAsync(string title, string directory, bool multiselect, AsyncCallback callback);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern IntPtr DialogSaveFilePanel(string title, string directory, string defaultName, string extension);
|
||||||
|
[DllImport("StandaloneFileBrowser")]
|
||||||
|
private static extern void DialogSaveFilePanelAsync(string title, string directory, string defaultName, string extension, AsyncCallback callback);
|
||||||
|
|
||||||
|
public string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) {
|
||||||
|
var paths = Marshal.PtrToStringAnsi(DialogOpenFilePanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
multiselect));
|
||||||
|
return paths.Split((char)28);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) {
|
||||||
|
_openFileCb = cb;
|
||||||
|
DialogOpenFilePanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
multiselect,
|
||||||
|
openFileCb);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] OpenFolderPanel(string title, string directory, bool multiselect) {
|
||||||
|
var paths = Marshal.PtrToStringAnsi(DialogOpenFolderPanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
multiselect));
|
||||||
|
return paths.Split((char)28);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) {
|
||||||
|
_openFolderCb = cb;
|
||||||
|
DialogOpenFolderPanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
multiselect,
|
||||||
|
openFolderCb);
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) {
|
||||||
|
return Marshal.PtrToStringAnsi(DialogSaveFilePanel(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
defaultName,
|
||||||
|
GetFilterFromFileExtensionList(extensions)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) {
|
||||||
|
_saveFileCb = cb;
|
||||||
|
DialogSaveFilePanelAsync(
|
||||||
|
title,
|
||||||
|
directory,
|
||||||
|
defaultName,
|
||||||
|
GetFilterFromFileExtensionList(extensions),
|
||||||
|
saveFileCb);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetFilterFromFileExtensionList(ExtensionFilter[] extensions) {
|
||||||
|
if (extensions == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
var filterString = "";
|
||||||
|
foreach (var filter in extensions) {
|
||||||
|
filterString += filter.Name + ";";
|
||||||
|
|
||||||
|
foreach (var ext in filter.Extensions) {
|
||||||
|
filterString += ext + ",";
|
||||||
|
}
|
||||||
|
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
filterString += "|";
|
||||||
|
}
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
return filterString;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: bcb49ddb0ed5644fda9c3b055cafa27a
|
||||||
|
timeCreated: 1483902788
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
@ -0,0 +1,137 @@
|
|||||||
|
#if UNITY_STANDALONE_WIN
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using Ookii.Dialogs;
|
||||||
|
|
||||||
|
namespace SFB {
|
||||||
|
// For fullscreen support
|
||||||
|
// - WindowWrapper class and GetActiveWindow() are required for modal file dialog.
|
||||||
|
// - "PlayerSettings/Visible In Background" should be enabled, otherwise when file dialog opened app window minimizes automatically.
|
||||||
|
|
||||||
|
public class WindowWrapper : IWin32Window {
|
||||||
|
private IntPtr _hwnd;
|
||||||
|
public WindowWrapper(IntPtr handle) { _hwnd = handle; }
|
||||||
|
public IntPtr Handle { get { return _hwnd; } }
|
||||||
|
}
|
||||||
|
|
||||||
|
public class StandaloneFileBrowserWindows : IStandaloneFileBrowser {
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
private static extern IntPtr GetActiveWindow();
|
||||||
|
|
||||||
|
public string[] OpenFilePanel(string title, string directory, ExtensionFilter[] extensions, bool multiselect) {
|
||||||
|
var fd = new VistaOpenFileDialog();
|
||||||
|
fd.Title = title;
|
||||||
|
if (extensions != null) {
|
||||||
|
fd.Filter = GetFilterFromFileExtensionList(extensions);
|
||||||
|
fd.FilterIndex = 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fd.Filter = string.Empty;
|
||||||
|
}
|
||||||
|
fd.Multiselect = multiselect;
|
||||||
|
if (!string.IsNullOrEmpty(directory)) {
|
||||||
|
fd.FileName = GetDirectoryPath(directory);
|
||||||
|
}
|
||||||
|
var res = fd.ShowDialog(new WindowWrapper(GetActiveWindow()));
|
||||||
|
var filenames = res == DialogResult.OK ? fd.FileNames : new string[0];
|
||||||
|
fd.Dispose();
|
||||||
|
return filenames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFilePanelAsync(string title, string directory, ExtensionFilter[] extensions, bool multiselect, Action<string[]> cb) {
|
||||||
|
cb.Invoke(OpenFilePanel(title, directory, extensions, multiselect));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string[] OpenFolderPanel(string title, string directory, bool multiselect) {
|
||||||
|
var fd = new VistaFolderBrowserDialog();
|
||||||
|
fd.Description = title;
|
||||||
|
if (!string.IsNullOrEmpty(directory)) {
|
||||||
|
fd.SelectedPath = GetDirectoryPath(directory);
|
||||||
|
}
|
||||||
|
var res = fd.ShowDialog(new WindowWrapper(GetActiveWindow()));
|
||||||
|
var filenames = res == DialogResult.OK ? new []{ fd.SelectedPath } : new string[0];
|
||||||
|
fd.Dispose();
|
||||||
|
return filenames;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OpenFolderPanelAsync(string title, string directory, bool multiselect, Action<string[]> cb) {
|
||||||
|
cb.Invoke(OpenFolderPanel(title, directory, multiselect));
|
||||||
|
}
|
||||||
|
|
||||||
|
public string SaveFilePanel(string title, string directory, string defaultName, ExtensionFilter[] extensions) {
|
||||||
|
var fd = new VistaSaveFileDialog();
|
||||||
|
fd.Title = title;
|
||||||
|
|
||||||
|
var finalFilename = "";
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(directory)) {
|
||||||
|
finalFilename = GetDirectoryPath(directory);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!string.IsNullOrEmpty(defaultName)) {
|
||||||
|
finalFilename += defaultName;
|
||||||
|
}
|
||||||
|
|
||||||
|
fd.FileName = finalFilename;
|
||||||
|
if (extensions != null) {
|
||||||
|
fd.Filter = GetFilterFromFileExtensionList(extensions);
|
||||||
|
fd.FilterIndex = 1;
|
||||||
|
fd.DefaultExt = extensions[0].Extensions[0];
|
||||||
|
fd.AddExtension = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fd.DefaultExt = string.Empty;
|
||||||
|
fd.Filter = string.Empty;
|
||||||
|
fd.AddExtension = false;
|
||||||
|
}
|
||||||
|
var res = fd.ShowDialog(new WindowWrapper(GetActiveWindow()));
|
||||||
|
var filename = res == DialogResult.OK ? fd.FileName : "";
|
||||||
|
fd.Dispose();
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveFilePanelAsync(string title, string directory, string defaultName, ExtensionFilter[] extensions, Action<string> cb) {
|
||||||
|
cb.Invoke(SaveFilePanel(title, directory, defaultName, extensions));
|
||||||
|
}
|
||||||
|
|
||||||
|
// .NET Framework FileDialog Filter format
|
||||||
|
// https://msdn.microsoft.com/en-us/library/microsoft.win32.filedialog.filter
|
||||||
|
private static string GetFilterFromFileExtensionList(ExtensionFilter[] extensions) {
|
||||||
|
var filterString = "";
|
||||||
|
foreach (var filter in extensions) {
|
||||||
|
filterString += filter.Name + "(";
|
||||||
|
|
||||||
|
foreach (var ext in filter.Extensions) {
|
||||||
|
filterString += "*." + ext + ",";
|
||||||
|
}
|
||||||
|
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
filterString += ") |";
|
||||||
|
|
||||||
|
foreach (var ext in filter.Extensions) {
|
||||||
|
filterString += "*." + ext + "; ";
|
||||||
|
}
|
||||||
|
|
||||||
|
filterString += "|";
|
||||||
|
}
|
||||||
|
filterString = filterString.Remove(filterString.Length - 1);
|
||||||
|
return filterString;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetDirectoryPath(string directory) {
|
||||||
|
var directoryPath = Path.GetFullPath(directory);
|
||||||
|
if (!directoryPath.EndsWith("\\")) {
|
||||||
|
directoryPath += "\\";
|
||||||
|
}
|
||||||
|
if (Path.GetPathRoot(directoryPath) == directoryPath) {
|
||||||
|
return directory;
|
||||||
|
}
|
||||||
|
return Path.GetDirectoryName(directoryPath) + Path.DirectorySeparatorChar;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,12 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 194e247414a78461d83ae606c1b96917
|
||||||
|
timeCreated: 1483902788
|
||||||
|
licenseType: Pro
|
||||||
|
MonoImporter:
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Plugins/UnityWindowsFileDrag-Drop.meta
Normal file
8
Assets/Plugins/UnityWindowsFileDrag-Drop.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 6bdd66e9646020e4f87e93d796c27b9c
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
494
Assets/Plugins/UnityWindowsFileDrag-Drop/B83.Win32.cs
Normal file
494
Assets/Plugins/UnityWindowsFileDrag-Drop/B83.Win32.cs
Normal file
@ -0,0 +1,494 @@
|
|||||||
|
/* * * * *
|
||||||
|
* This is a collection of Win API helpers. Mainly dealing with window message hooks
|
||||||
|
* and file drag&drop support for Windows standalone Unity applications.
|
||||||
|
*
|
||||||
|
* 2019.11.28 - Changed the "UnityDragAndDropHook" class to a static class. This
|
||||||
|
* has been done for IL2CPP support. IL2CPP can not marshall instance method
|
||||||
|
* callbacks passed to native code. So the callbacks must be static methods.
|
||||||
|
* Therefore all fields involved also need to be static.
|
||||||
|
*
|
||||||
|
* The MIT License (MIT)
|
||||||
|
*
|
||||||
|
* Copyright (c) 2018 Markus Göbel (Bunny83)
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
|
* in the Software without restriction, including without limitation the rights
|
||||||
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the Software is
|
||||||
|
* furnished to do so, subject to the following conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be included in all
|
||||||
|
* copies or substantial portions of the Software.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
* SOFTWARE.
|
||||||
|
*
|
||||||
|
* * * * */
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
|
namespace B83.Win32
|
||||||
|
{
|
||||||
|
public enum HookType : int
|
||||||
|
{
|
||||||
|
WH_JOURNALRECORD = 0,
|
||||||
|
WH_JOURNALPLAYBACK = 1,
|
||||||
|
WH_KEYBOARD = 2,
|
||||||
|
WH_GETMESSAGE = 3,
|
||||||
|
WH_CALLWNDPROC = 4,
|
||||||
|
WH_CBT = 5,
|
||||||
|
WH_SYSMSGFILTER = 6,
|
||||||
|
WH_MOUSE = 7,
|
||||||
|
WH_HARDWARE = 8,
|
||||||
|
WH_DEBUG = 9,
|
||||||
|
WH_SHELL = 10,
|
||||||
|
WH_FOREGROUNDIDLE = 11,
|
||||||
|
WH_CALLWNDPROCRET = 12,
|
||||||
|
WH_KEYBOARD_LL = 13,
|
||||||
|
WH_MOUSE_LL = 14
|
||||||
|
}
|
||||||
|
|
||||||
|
// windows messages
|
||||||
|
public enum WM : uint
|
||||||
|
{
|
||||||
|
NULL = 0x0000,
|
||||||
|
CREATE = 0x0001,
|
||||||
|
DESTROY = 0x0002,
|
||||||
|
MOVE = 0x0003,
|
||||||
|
SIZE = 0x0005,
|
||||||
|
ACTIVATE = 0x0006,
|
||||||
|
SETFOCUS = 0x0007,
|
||||||
|
KILLFOCUS = 0x0008,
|
||||||
|
ENABLE = 0x000A,
|
||||||
|
SETREDRAW = 0x000B,
|
||||||
|
SETTEXT = 0x000C,
|
||||||
|
GETTEXT = 0x000D,
|
||||||
|
GETTEXTLENGTH = 0x000E,
|
||||||
|
PAINT = 0x000F,
|
||||||
|
CLOSE = 0x0010,
|
||||||
|
QUERYENDSESSION = 0x0011,
|
||||||
|
QUERYOPEN = 0x0013,
|
||||||
|
ENDSESSION = 0x0016,
|
||||||
|
QUIT = 0x0012,
|
||||||
|
ERASEBKGND = 0x0014,
|
||||||
|
SYSCOLORCHANGE = 0x0015,
|
||||||
|
SHOWWINDOW = 0x0018,
|
||||||
|
WININICHANGE = 0x001A,
|
||||||
|
SETTINGCHANGE = WININICHANGE,
|
||||||
|
DEVMODECHANGE = 0x001B,
|
||||||
|
ACTIVATEAPP = 0x001C,
|
||||||
|
FONTCHANGE = 0x001D,
|
||||||
|
TIMECHANGE = 0x001E,
|
||||||
|
CANCELMODE = 0x001F,
|
||||||
|
SETCURSOR = 0x0020,
|
||||||
|
MOUSEACTIVATE = 0x0021,
|
||||||
|
CHILDACTIVATE = 0x0022,
|
||||||
|
QUEUESYNC = 0x0023,
|
||||||
|
GETMINMAXINFO = 0x0024,
|
||||||
|
PAINTICON = 0x0026,
|
||||||
|
ICONERASEBKGND = 0x0027,
|
||||||
|
NEXTDLGCTL = 0x0028,
|
||||||
|
SPOOLERSTATUS = 0x002A,
|
||||||
|
DRAWITEM = 0x002B,
|
||||||
|
MEASUREITEM = 0x002C,
|
||||||
|
DELETEITEM = 0x002D,
|
||||||
|
VKEYTOITEM = 0x002E,
|
||||||
|
CHARTOITEM = 0x002F,
|
||||||
|
SETFONT = 0x0030,
|
||||||
|
GETFONT = 0x0031,
|
||||||
|
SETHOTKEY = 0x0032,
|
||||||
|
GETHOTKEY = 0x0033,
|
||||||
|
QUERYDRAGICON = 0x0037,
|
||||||
|
COMPAREITEM = 0x0039,
|
||||||
|
GETOBJECT = 0x003D,
|
||||||
|
COMPACTING = 0x0041,
|
||||||
|
[Obsolete]
|
||||||
|
COMMNOTIFY = 0x0044,
|
||||||
|
WINDOWPOSCHANGING = 0x0046,
|
||||||
|
WINDOWPOSCHANGED = 0x0047,
|
||||||
|
[Obsolete]
|
||||||
|
POWER = 0x0048,
|
||||||
|
COPYDATA = 0x004A,
|
||||||
|
CANCELJOURNAL = 0x004B,
|
||||||
|
NOTIFY = 0x004E,
|
||||||
|
INPUTLANGCHANGEREQUEST = 0x0050,
|
||||||
|
INPUTLANGCHANGE = 0x0051,
|
||||||
|
TCARD = 0x0052,
|
||||||
|
HELP = 0x0053,
|
||||||
|
USERCHANGED = 0x0054,
|
||||||
|
NOTIFYFORMAT = 0x0055,
|
||||||
|
CONTEXTMENU = 0x007B,
|
||||||
|
STYLECHANGING = 0x007C,
|
||||||
|
STYLECHANGED = 0x007D,
|
||||||
|
DISPLAYCHANGE = 0x007E,
|
||||||
|
GETICON = 0x007F,
|
||||||
|
SETICON = 0x0080,
|
||||||
|
NCCREATE = 0x0081,
|
||||||
|
NCDESTROY = 0x0082,
|
||||||
|
NCCALCSIZE = 0x0083,
|
||||||
|
NCHITTEST = 0x0084,
|
||||||
|
NCPAINT = 0x0085,
|
||||||
|
NCACTIVATE = 0x0086,
|
||||||
|
GETDLGCODE = 0x0087,
|
||||||
|
SYNCPAINT = 0x0088,
|
||||||
|
NCMOUSEMOVE = 0x00A0,
|
||||||
|
NCLBUTTONDOWN = 0x00A1,
|
||||||
|
NCLBUTTONUP = 0x00A2,
|
||||||
|
NCLBUTTONDBLCLK = 0x00A3,
|
||||||
|
NCRBUTTONDOWN = 0x00A4,
|
||||||
|
NCRBUTTONUP = 0x00A5,
|
||||||
|
NCRBUTTONDBLCLK = 0x00A6,
|
||||||
|
NCMBUTTONDOWN = 0x00A7,
|
||||||
|
NCMBUTTONUP = 0x00A8,
|
||||||
|
NCMBUTTONDBLCLK = 0x00A9,
|
||||||
|
NCXBUTTONDOWN = 0x00AB,
|
||||||
|
NCXBUTTONUP = 0x00AC,
|
||||||
|
NCXBUTTONDBLCLK = 0x00AD,
|
||||||
|
INPUT_DEVICE_CHANGE = 0x00FE,
|
||||||
|
INPUT = 0x00FF,
|
||||||
|
KEYFIRST = 0x0100,
|
||||||
|
KEYDOWN = 0x0100,
|
||||||
|
KEYUP = 0x0101,
|
||||||
|
CHAR = 0x0102,
|
||||||
|
DEADCHAR = 0x0103,
|
||||||
|
SYSKEYDOWN = 0x0104,
|
||||||
|
SYSKEYUP = 0x0105,
|
||||||
|
SYSCHAR = 0x0106,
|
||||||
|
SYSDEADCHAR = 0x0107,
|
||||||
|
UNICHAR = 0x0109,
|
||||||
|
KEYLAST = 0x0108,
|
||||||
|
IME_STARTCOMPOSITION = 0x010D,
|
||||||
|
IME_ENDCOMPOSITION = 0x010E,
|
||||||
|
IME_COMPOSITION = 0x010F,
|
||||||
|
IME_KEYLAST = 0x010F,
|
||||||
|
INITDIALOG = 0x0110,
|
||||||
|
COMMAND = 0x0111,
|
||||||
|
SYSCOMMAND = 0x0112,
|
||||||
|
TIMER = 0x0113,
|
||||||
|
HSCROLL = 0x0114,
|
||||||
|
VSCROLL = 0x0115,
|
||||||
|
INITMENU = 0x0116,
|
||||||
|
INITMENUPOPUP = 0x0117,
|
||||||
|
MENUSELECT = 0x011F,
|
||||||
|
MENUCHAR = 0x0120,
|
||||||
|
ENTERIDLE = 0x0121,
|
||||||
|
MENURBUTTONUP = 0x0122,
|
||||||
|
MENUDRAG = 0x0123,
|
||||||
|
MENUGETOBJECT = 0x0124,
|
||||||
|
UNINITMENUPOPUP = 0x0125,
|
||||||
|
MENUCOMMAND = 0x0126,
|
||||||
|
CHANGEUISTATE = 0x0127,
|
||||||
|
UPDATEUISTATE = 0x0128,
|
||||||
|
QUERYUISTATE = 0x0129,
|
||||||
|
CTLCOLORMSGBOX = 0x0132,
|
||||||
|
CTLCOLOREDIT = 0x0133,
|
||||||
|
CTLCOLORLISTBOX = 0x0134,
|
||||||
|
CTLCOLORBTN = 0x0135,
|
||||||
|
CTLCOLORDLG = 0x0136,
|
||||||
|
CTLCOLORSCROLLBAR = 0x0137,
|
||||||
|
CTLCOLORSTATIC = 0x0138,
|
||||||
|
MOUSEFIRST = 0x0200,
|
||||||
|
MOUSEMOVE = 0x0200,
|
||||||
|
LBUTTONDOWN = 0x0201,
|
||||||
|
LBUTTONUP = 0x0202,
|
||||||
|
LBUTTONDBLCLK = 0x0203,
|
||||||
|
RBUTTONDOWN = 0x0204,
|
||||||
|
RBUTTONUP = 0x0205,
|
||||||
|
RBUTTONDBLCLK = 0x0206,
|
||||||
|
MBUTTONDOWN = 0x0207,
|
||||||
|
MBUTTONUP = 0x0208,
|
||||||
|
MBUTTONDBLCLK = 0x0209,
|
||||||
|
MOUSEWHEEL = 0x020A,
|
||||||
|
XBUTTONDOWN = 0x020B,
|
||||||
|
XBUTTONUP = 0x020C,
|
||||||
|
XBUTTONDBLCLK = 0x020D,
|
||||||
|
MOUSEHWHEEL = 0x020E,
|
||||||
|
MOUSELAST = 0x020E,
|
||||||
|
PARENTNOTIFY = 0x0210,
|
||||||
|
ENTERMENULOOP = 0x0211,
|
||||||
|
EXITMENULOOP = 0x0212,
|
||||||
|
NEXTMENU = 0x0213,
|
||||||
|
SIZING = 0x0214,
|
||||||
|
CAPTURECHANGED = 0x0215,
|
||||||
|
MOVING = 0x0216,
|
||||||
|
POWERBROADCAST = 0x0218,
|
||||||
|
DEVICECHANGE = 0x0219,
|
||||||
|
MDICREATE = 0x0220,
|
||||||
|
MDIDESTROY = 0x0221,
|
||||||
|
MDIACTIVATE = 0x0222,
|
||||||
|
MDIRESTORE = 0x0223,
|
||||||
|
MDINEXT = 0x0224,
|
||||||
|
MDIMAXIMIZE = 0x0225,
|
||||||
|
MDITILE = 0x0226,
|
||||||
|
MDICASCADE = 0x0227,
|
||||||
|
MDIICONARRANGE = 0x0228,
|
||||||
|
MDIGETACTIVE = 0x0229,
|
||||||
|
MDISETMENU = 0x0230,
|
||||||
|
ENTERSIZEMOVE = 0x0231,
|
||||||
|
EXITSIZEMOVE = 0x0232,
|
||||||
|
DROPFILES = 0x0233,
|
||||||
|
MDIREFRESHMENU = 0x0234,
|
||||||
|
IME_SETCONTEXT = 0x0281,
|
||||||
|
IME_NOTIFY = 0x0282,
|
||||||
|
IME_CONTROL = 0x0283,
|
||||||
|
IME_COMPOSITIONFULL = 0x0284,
|
||||||
|
IME_SELECT = 0x0285,
|
||||||
|
IME_CHAR = 0x0286,
|
||||||
|
IME_REQUEST = 0x0288,
|
||||||
|
IME_KEYDOWN = 0x0290,
|
||||||
|
IME_KEYUP = 0x0291,
|
||||||
|
MOUSEHOVER = 0x02A1,
|
||||||
|
MOUSELEAVE = 0x02A3,
|
||||||
|
NCMOUSEHOVER = 0x02A0,
|
||||||
|
NCMOUSELEAVE = 0x02A2,
|
||||||
|
WTSSESSION_CHANGE = 0x02B1,
|
||||||
|
TABLET_FIRST = 0x02c0,
|
||||||
|
TABLET_LAST = 0x02df,
|
||||||
|
CUT = 0x0300,
|
||||||
|
COPY = 0x0301,
|
||||||
|
PASTE = 0x0302,
|
||||||
|
CLEAR = 0x0303,
|
||||||
|
UNDO = 0x0304,
|
||||||
|
RENDERFORMAT = 0x0305,
|
||||||
|
RENDERALLFORMATS = 0x0306,
|
||||||
|
DESTROYCLIPBOARD = 0x0307,
|
||||||
|
DRAWCLIPBOARD = 0x0308,
|
||||||
|
PAINTCLIPBOARD = 0x0309,
|
||||||
|
VSCROLLCLIPBOARD = 0x030A,
|
||||||
|
SIZECLIPBOARD = 0x030B,
|
||||||
|
ASKCBFORMATNAME = 0x030C,
|
||||||
|
CHANGECBCHAIN = 0x030D,
|
||||||
|
HSCROLLCLIPBOARD = 0x030E,
|
||||||
|
QUERYNEWPALETTE = 0x030F,
|
||||||
|
PALETTEISCHANGING = 0x0310,
|
||||||
|
PALETTECHANGED = 0x0311,
|
||||||
|
HOTKEY = 0x0312,
|
||||||
|
PRINT = 0x0317,
|
||||||
|
PRINTCLIENT = 0x0318,
|
||||||
|
APPCOMMAND = 0x0319,
|
||||||
|
THEMECHANGED = 0x031A,
|
||||||
|
CLIPBOARDUPDATE = 0x031D,
|
||||||
|
DWMCOMPOSITIONCHANGED = 0x031E,
|
||||||
|
DWMNCRENDERINGCHANGED = 0x031F,
|
||||||
|
DWMCOLORIZATIONCOLORCHANGED = 0x0320,
|
||||||
|
DWMWINDOWMAXIMIZEDCHANGE = 0x0321,
|
||||||
|
GETTITLEBARINFOEX = 0x033F,
|
||||||
|
HANDHELDFIRST = 0x0358,
|
||||||
|
HANDHELDLAST = 0x035F,
|
||||||
|
AFXFIRST = 0x0360,
|
||||||
|
AFXLAST = 0x037F,
|
||||||
|
PENWINFIRST = 0x0380,
|
||||||
|
PENWINLAST = 0x038F,
|
||||||
|
APP = 0x8000,
|
||||||
|
USER = 0x0400,
|
||||||
|
CPL_LAUNCH = USER + 0x1000,
|
||||||
|
CPL_LAUNCHED = USER + 0x1001,
|
||||||
|
SYSTIMER = 0x118,
|
||||||
|
}
|
||||||
|
|
||||||
|
// WH_CALLWNDPROC
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct CWPSTRUCT
|
||||||
|
{
|
||||||
|
public IntPtr lParam;
|
||||||
|
public IntPtr wParam;
|
||||||
|
public WM message;
|
||||||
|
public IntPtr hwnd;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct POINT
|
||||||
|
{
|
||||||
|
public int x, y;
|
||||||
|
public POINT(int aX, int aY)
|
||||||
|
{
|
||||||
|
x = aX;
|
||||||
|
y = aY;
|
||||||
|
}
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "(" + x + ", " + y + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//WH_GETMESSAGE
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct MSG
|
||||||
|
{
|
||||||
|
public IntPtr hwnd;
|
||||||
|
public WM message;
|
||||||
|
public IntPtr wParam;
|
||||||
|
public IntPtr lParam;
|
||||||
|
public ushort time;
|
||||||
|
public POINT pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
[StructLayout(LayoutKind.Sequential)]
|
||||||
|
public struct RECT
|
||||||
|
{
|
||||||
|
public int Left, Top, Right, Bottom;
|
||||||
|
|
||||||
|
public RECT(int left, int top, int right, int bottom)
|
||||||
|
{
|
||||||
|
Left = left;
|
||||||
|
Top = top;
|
||||||
|
Right = right;
|
||||||
|
Bottom = bottom;
|
||||||
|
}
|
||||||
|
public override string ToString()
|
||||||
|
{
|
||||||
|
return "(" + Left + ", " + Top + ", " + Right + ", " + Bottom + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public delegate IntPtr HookProc(int code, IntPtr wParam, ref MSG lParam);
|
||||||
|
public delegate bool EnumThreadDelegate(IntPtr Hwnd, IntPtr lParam);
|
||||||
|
|
||||||
|
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
|
||||||
|
|
||||||
|
public static class Window
|
||||||
|
{
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool EnumThreadWindows(uint dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
public static extern bool GetWindowRect(IntPtr hwnd, out RECT lpRect);
|
||||||
|
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern bool IsWindowVisible(IntPtr hWnd);
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
static extern int GetClassName(IntPtr hWnd, System.Text.StringBuilder lpClassName, int nMaxCount);
|
||||||
|
public static string GetClassName(IntPtr hWnd)
|
||||||
|
{
|
||||||
|
var sb = new System.Text.StringBuilder(256);
|
||||||
|
int count = GetClassName(hWnd, sb, 256);
|
||||||
|
return sb.ToString(0, count);
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
|
||||||
|
static extern int GetWindowTextLength(IntPtr hWnd);
|
||||||
|
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||||
|
static extern int GetWindowText(IntPtr hWnd, System.Text.StringBuilder lpString, int nMaxCount);
|
||||||
|
public static string GetWindowText(IntPtr hWnd)
|
||||||
|
{
|
||||||
|
int length = GetWindowTextLength(hWnd) + 2;
|
||||||
|
var sb = new System.Text.StringBuilder(length);
|
||||||
|
int count = GetWindowText(hWnd, sb, length);
|
||||||
|
return sb.ToString(0, count);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class WinAPI
|
||||||
|
{
|
||||||
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
|
||||||
|
public static extern IntPtr GetModuleHandle(string lpModuleName);
|
||||||
|
[DllImport("kernel32.dll")]
|
||||||
|
public static extern uint GetCurrentThreadId();
|
||||||
|
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
public static extern IntPtr SetWindowsHookEx(HookType hookType, HookProc lpfn, IntPtr hMod, uint dwThreadId);
|
||||||
|
[DllImport("user32.dll", SetLastError = true)]
|
||||||
|
public static extern bool UnhookWindowsHookEx(IntPtr hhk);
|
||||||
|
[DllImport("user32.dll")]
|
||||||
|
public static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, ref MSG lParam);
|
||||||
|
|
||||||
|
[DllImport("shell32.dll")]
|
||||||
|
public static extern void DragAcceptFiles(IntPtr hwnd, bool fAccept);
|
||||||
|
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
|
||||||
|
public static extern uint DragQueryFile(IntPtr hDrop, uint iFile, System.Text.StringBuilder lpszFile, uint cch);
|
||||||
|
[DllImport("shell32.dll")]
|
||||||
|
public static extern void DragFinish(IntPtr hDrop);
|
||||||
|
|
||||||
|
[DllImport("shell32.dll")]
|
||||||
|
public static extern void DragQueryPoint(IntPtr hDrop, out POINT pos);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
public static class UnityDragAndDropHook
|
||||||
|
{
|
||||||
|
public delegate void DroppedFilesEvent(List<string> aPathNames, POINT aDropPoint);
|
||||||
|
#pragma warning disable CS0067
|
||||||
|
public static event DroppedFilesEvent OnDroppedFiles;
|
||||||
|
#pragma warning restore CS0067
|
||||||
|
|
||||||
|
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR_WIN
|
||||||
|
|
||||||
|
private static uint threadId;
|
||||||
|
private static IntPtr mainWindow = IntPtr.Zero;
|
||||||
|
private static IntPtr m_Hook;
|
||||||
|
private static string m_ClassName = "UnityWndClass";
|
||||||
|
|
||||||
|
// attribute required for IL2CPP, also has to be a static method
|
||||||
|
[AOT.MonoPInvokeCallback(typeof(EnumThreadDelegate))]
|
||||||
|
private static bool EnumCallback(IntPtr W, IntPtr _)
|
||||||
|
{
|
||||||
|
if (Window.IsWindowVisible(W) && (mainWindow == IntPtr.Zero || (m_ClassName != null && Window.GetClassName(W) == m_ClassName)))
|
||||||
|
{
|
||||||
|
mainWindow = W;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void InstallHook()
|
||||||
|
{
|
||||||
|
threadId = WinAPI.GetCurrentThreadId();
|
||||||
|
if (threadId > 0)
|
||||||
|
Window.EnumThreadWindows(threadId, EnumCallback, IntPtr.Zero);
|
||||||
|
|
||||||
|
var hModule = WinAPI.GetModuleHandle(null);
|
||||||
|
m_Hook = WinAPI.SetWindowsHookEx(HookType.WH_GETMESSAGE, Callback, hModule, threadId);
|
||||||
|
// Allow dragging of files onto the main window. generates the WM_DROPFILES message
|
||||||
|
WinAPI.DragAcceptFiles(mainWindow, true);
|
||||||
|
}
|
||||||
|
public static void UninstallHook()
|
||||||
|
{
|
||||||
|
WinAPI.UnhookWindowsHookEx(m_Hook);
|
||||||
|
WinAPI.DragAcceptFiles(mainWindow, false);
|
||||||
|
m_Hook = IntPtr.Zero;
|
||||||
|
}
|
||||||
|
|
||||||
|
// attribute required for IL2CPP, also has to be a static method
|
||||||
|
[AOT.MonoPInvokeCallback(typeof(HookProc))]
|
||||||
|
private static IntPtr Callback(int code, IntPtr wParam, ref MSG lParam)
|
||||||
|
{
|
||||||
|
if (code == 0 && lParam.message == WM.DROPFILES)
|
||||||
|
{
|
||||||
|
POINT pos;
|
||||||
|
WinAPI.DragQueryPoint(lParam.wParam, out pos);
|
||||||
|
|
||||||
|
// 0xFFFFFFFF as index makes the method return the number of files
|
||||||
|
uint n = WinAPI.DragQueryFile(lParam.wParam, 0xFFFFFFFF, null, 0);
|
||||||
|
var sb = new System.Text.StringBuilder(1024);
|
||||||
|
|
||||||
|
List<string> result = new List<string>();
|
||||||
|
for (uint i = 0; i < n; i++)
|
||||||
|
{
|
||||||
|
int len = (int)WinAPI.DragQueryFile(lParam.wParam, i, sb, 1024);
|
||||||
|
result.Add(sb.ToString(0, len));
|
||||||
|
sb.Length = 0;
|
||||||
|
}
|
||||||
|
WinAPI.DragFinish(lParam.wParam);
|
||||||
|
if (OnDroppedFiles != null)
|
||||||
|
OnDroppedFiles(result, pos);
|
||||||
|
}
|
||||||
|
return WinAPI.CallNextHookEx(m_Hook, code, wParam, ref lParam);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
public static void InstallHook()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
public static void UninstallHook()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Plugins/UnityWindowsFileDrag-Drop/B83.Win32.cs.meta
Normal file
11
Assets/Plugins/UnityWindowsFileDrag-Drop/B83.Win32.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fc411cd2c138a56498372ffcbebd36c3
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/Plugins/UnityWindowsFileDrag-Drop/LICENSE
Normal file
21
Assets/Plugins/UnityWindowsFileDrag-Drop/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2018 Markus Göbel (Bunny83)
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
7
Assets/Plugins/UnityWindowsFileDrag-Drop/LICENSE.meta
Normal file
7
Assets/Plugins/UnityWindowsFileDrag-Drop/LICENSE.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: b35cced8fc9e63e4aa13ce409bf135de
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Plugins/UnityWindowsFileDrag-Drop/README.md
Normal file
8
Assets/Plugins/UnityWindowsFileDrag-Drop/README.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# UnityWindowsFileDrag&Drop
|
||||||
|
Adds file drag and drop support for Unity standalone builds on windows.
|
||||||
|
|
||||||
|
It uses the GetMessage hook to intercept the WM_DROPFILES message
|
||||||
|
|
||||||
|
See the "FileDragAndDrop.cs" or "ImageExample.cs" file for an example usage.
|
||||||
|
|
||||||
|
Due to too many issues in the Unity editor (causes random silent crashes) I have disabled the hook when tested in playmode inside the editor. So this feature only works in a build.
|
7
Assets/Plugins/UnityWindowsFileDrag-Drop/README.md.meta
Normal file
7
Assets/Plugins/UnityWindowsFileDrag-Drop/README.md.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9b1ee3ab5cbedc74381027f3dcb952e3
|
||||||
|
TextScriptImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Prefabs.meta
Normal file
8
Assets/Prefabs.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 337fa7a7d4fc21742a52b86025861f73
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
3467
Assets/Prefabs/TextureSlot.prefab
Normal file
3467
Assets/Prefabs/TextureSlot.prefab
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Prefabs/TextureSlot.prefab.meta
Normal file
7
Assets/Prefabs/TextureSlot.prefab.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 061da2632e52755418cfea332c751f33
|
||||||
|
PrefabImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Scenes.meta
Normal file
8
Assets/Scenes.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fedb96967b918da46ae80950725bf87d
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
6859
Assets/Scenes/SampleScene.unity
Normal file
6859
Assets/Scenes/SampleScene.unity
Normal file
File diff suppressed because it is too large
Load Diff
7
Assets/Scenes/SampleScene.unity.meta
Normal file
7
Assets/Scenes/SampleScene.unity.meta
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2cda990e2423bbf4892e6590ba056729
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Scripts.meta
Normal file
8
Assets/Scripts.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2f428e279a560ef44aea5fa06243828e
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
14
Assets/Scripts/Options.cs
Normal file
14
Assets/Scripts/Options.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public abstract class Options : MonoBehaviour
|
||||||
|
{
|
||||||
|
protected virtual void OnDisable()
|
||||||
|
{
|
||||||
|
PlayerPrefs.Save();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/Options.cs.meta
Normal file
11
Assets/Scripts/Options.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7a83b90928bd7b3409c2aad736f20f28
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Scripts/Options.meta
Normal file
8
Assets/Scripts/Options.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fcc26bc422be36d4ba05f437c7ea52f6
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
47
Assets/Scripts/Options/AddOptions.cs
Normal file
47
Assets/Scripts/Options/AddOptions.cs
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class AddOptions : Options
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private Slider inputFieldR = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Slider inputFieldG = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Slider inputFieldB = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Slider inputFieldA = null;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
inputFieldR.value = PlayerPrefs.GetFloat("addR", 0);
|
||||||
|
inputFieldG.value = PlayerPrefs.GetFloat("addG", 0);
|
||||||
|
inputFieldB.value = PlayerPrefs.GetFloat("addB", 0);
|
||||||
|
inputFieldA.value = PlayerPrefs.GetFloat("addA", 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
PlayerPrefs.SetFloat("addR", inputFieldR.value);
|
||||||
|
PlayerPrefs.SetFloat("addG", inputFieldG.value);
|
||||||
|
PlayerPrefs.SetFloat("addB", inputFieldB.value);
|
||||||
|
PlayerPrefs.SetFloat("addA", inputFieldA.value);
|
||||||
|
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector4 GetAddValues()
|
||||||
|
{
|
||||||
|
return new Vector4(
|
||||||
|
inputFieldR.value,
|
||||||
|
inputFieldG.value,
|
||||||
|
inputFieldB.value,
|
||||||
|
inputFieldA.value
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/Options/AddOptions.cs.meta
Normal file
11
Assets/Scripts/Options/AddOptions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: cfd2b97d613d4f04f8b3b11e66ad23e2
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
30
Assets/Scripts/Options/CombineOptions.cs
Normal file
30
Assets/Scripts/Options/CombineOptions.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class CombineOptions : Options
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private Toggle autoCombineToggle = null;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
autoCombineToggle.isOn = PlayerPrefs.GetInt("autoCombine", 1) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
PlayerPrefs.SetInt("autoCombine", autoCombineToggle.isOn ? 1 : 0);
|
||||||
|
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool GetAutoCombine()
|
||||||
|
{
|
||||||
|
return autoCombineToggle.isOn;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/Options/CombineOptions.cs.meta
Normal file
11
Assets/Scripts/Options/CombineOptions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: d2d913ba40069e249affef31f3f9ed72
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
30
Assets/Scripts/Options/SaveOptions.cs
Normal file
30
Assets/Scripts/Options/SaveOptions.cs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class SaveOptions : Options
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private InputField inputFieldName = null;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
inputFieldName.text = PlayerPrefs.GetString("outputName", "_RMAH");
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
PlayerPrefs.SetString("outputName", inputFieldName.text);
|
||||||
|
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GetOutputName()
|
||||||
|
{
|
||||||
|
return inputFieldName.text + ".png";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/Options/SaveOptions.cs.meta
Normal file
11
Assets/Scripts/Options/SaveOptions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f3d24c2bb90ddd24fa229a7f3429b868
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
48
Assets/Scripts/Options/SizeOptions.cs
Normal file
48
Assets/Scripts/Options/SizeOptions.cs
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class SizeOptions : Options
|
||||||
|
{
|
||||||
|
public int width = 512;
|
||||||
|
public int height = 512;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private InputField inputFieldWidth = null;
|
||||||
|
[SerializeField]
|
||||||
|
private InputField inputFieldHeight = null;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
width = PlayerPrefs.GetInt("width", 512);
|
||||||
|
height = PlayerPrefs.GetInt("height", 512);
|
||||||
|
|
||||||
|
inputFieldWidth.text = width.ToString();
|
||||||
|
inputFieldHeight.text = height.ToString();
|
||||||
|
|
||||||
|
inputFieldWidth.onValueChanged.AddListener(UpdateWidth);
|
||||||
|
inputFieldHeight.onValueChanged.AddListener(UpdateHeight);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
PlayerPrefs.SetInt("width", width);
|
||||||
|
PlayerPrefs.SetInt("height", height);
|
||||||
|
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateWidth(string _width)
|
||||||
|
{
|
||||||
|
int.TryParse(_width, out width);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void UpdateHeight(string _height)
|
||||||
|
{
|
||||||
|
int.TryParse(_height, out height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/Options/SizeOptions.cs.meta
Normal file
11
Assets/Scripts/Options/SizeOptions.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 8eaea5168b73e1a4790b4a86e6bc5aac
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
173
Assets/Scripts/TextureCombiner.cs
Normal file
173
Assets/Scripts/TextureCombiner.cs
Normal file
@ -0,0 +1,173 @@
|
|||||||
|
using System.Text;
|
||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using System;
|
||||||
|
using SFB;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class TextureCombiner : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private TextureSlot m_textureSlotPrefab = null;
|
||||||
|
[SerializeField]
|
||||||
|
private RectTransform m_parent = null;
|
||||||
|
|
||||||
|
[Space]
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Button m_openButton = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Button m_combineButton = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Button m_saveButton = null;
|
||||||
|
|
||||||
|
[Space]
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Shader m_combineShader = null;
|
||||||
|
[SerializeField]
|
||||||
|
private RawImage m_imageOutput = null;
|
||||||
|
|
||||||
|
private Texture2D m_source = null;
|
||||||
|
private RenderTexture m_dest = null;
|
||||||
|
|
||||||
|
private SizeOptions m_sizeOptions = null;
|
||||||
|
private AddOptions m_addOptions = null;
|
||||||
|
private CombineOptions m_combineOptions = null;
|
||||||
|
private SaveOptions m_saveOptions = null;
|
||||||
|
|
||||||
|
public Action m_loadDialogAction = null;
|
||||||
|
public Action<string> m_saveDialogAction = null;
|
||||||
|
public Action<string, byte[]> m_saveTextureAction = null;
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
m_openButton.onClick.AddListener(Load);
|
||||||
|
m_combineButton.onClick.AddListener(CombineTextures);
|
||||||
|
m_saveButton.onClick.AddListener(Save);
|
||||||
|
|
||||||
|
m_sizeOptions = GetComponentInChildren<SizeOptions>();
|
||||||
|
m_addOptions = GetComponentInChildren<AddOptions>();
|
||||||
|
m_combineOptions = GetComponentInChildren<CombineOptions>();
|
||||||
|
m_saveOptions = GetComponentInChildren<SaveOptions>();
|
||||||
|
|
||||||
|
m_source = new Texture2D(2, 2);
|
||||||
|
m_source.Apply();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
m_openButton.onClick.RemoveListener(Load);
|
||||||
|
m_combineButton.onClick.RemoveListener(CombineTextures);
|
||||||
|
m_saveButton.onClick.RemoveListener(Save);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
if(m_combineOptions.GetAutoCombine())
|
||||||
|
{
|
||||||
|
CombineTextures();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void CombineTextures()
|
||||||
|
{
|
||||||
|
Material mat = new Material(m_combineShader);
|
||||||
|
|
||||||
|
// Set material textures.
|
||||||
|
foreach (TextureSlot ts in GetComponentsInChildren<TextureSlot>())
|
||||||
|
{
|
||||||
|
Vector4 sourceChannel = ts.GetSourceChannels();
|
||||||
|
TextureSlot.Channels targetChannel = ts.GetTargetChannels();
|
||||||
|
|
||||||
|
if (targetChannel.r)
|
||||||
|
{
|
||||||
|
mat.SetVector("_Mask0", sourceChannel);
|
||||||
|
mat.SetTexture("_Tex0", ts.texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetChannel.g)
|
||||||
|
{
|
||||||
|
mat.SetVector("_Mask1", sourceChannel);
|
||||||
|
mat.SetTexture("_Tex1", ts.texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetChannel.b)
|
||||||
|
{
|
||||||
|
mat.SetVector("_Mask2", sourceChannel);
|
||||||
|
mat.SetTexture("_Tex2", ts.texture);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetChannel.a)
|
||||||
|
{
|
||||||
|
mat.SetVector("_Mask3", sourceChannel);
|
||||||
|
mat.SetTexture("_Tex3", ts.texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mat.SetVector("_Add", m_addOptions.GetAddValues());
|
||||||
|
|
||||||
|
if (m_dest)
|
||||||
|
{
|
||||||
|
if (RenderTexture.active == m_dest)
|
||||||
|
{
|
||||||
|
RenderTexture.active = null;
|
||||||
|
}
|
||||||
|
m_dest.Release();
|
||||||
|
m_dest = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_dest = new RenderTexture(m_sizeOptions.width, m_sizeOptions.height, 0);
|
||||||
|
m_dest.Create();
|
||||||
|
|
||||||
|
Graphics.Blit(m_source, m_dest, mat);
|
||||||
|
|
||||||
|
m_imageOutput.texture = m_dest;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Load()
|
||||||
|
{
|
||||||
|
m_loadDialogAction.Invoke();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadTextureSlot(Texture2D texture2D)
|
||||||
|
{
|
||||||
|
TextureSlot ts = Instantiate(m_textureSlotPrefab, m_parent);
|
||||||
|
ts.Init(texture2D);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Save()
|
||||||
|
{
|
||||||
|
m_saveDialogAction.Invoke(m_saveOptions.GetOutputName());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SaveTextureBytes(string path)
|
||||||
|
{
|
||||||
|
if (m_dest)
|
||||||
|
{
|
||||||
|
// Get texture from renderTexture.
|
||||||
|
RenderTexture curRT = RenderTexture.active;
|
||||||
|
RenderTexture.active = m_dest;
|
||||||
|
|
||||||
|
Texture2D tex = new Texture2D(m_dest.width, m_dest.height);
|
||||||
|
tex.hideFlags = HideFlags.HideAndDontSave;
|
||||||
|
tex.ReadPixels(new Rect(0, 0, m_dest.width, m_dest.height), 0, 0);
|
||||||
|
tex.Apply();
|
||||||
|
|
||||||
|
RenderTexture.active = curRT;
|
||||||
|
|
||||||
|
// Convert texture to bytes.
|
||||||
|
byte[] bytes;
|
||||||
|
bytes = tex.EncodeToPNG();
|
||||||
|
|
||||||
|
Destroy(tex);
|
||||||
|
|
||||||
|
m_saveTextureAction.Invoke(path, bytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/TextureCombiner.cs.meta
Normal file
11
Assets/Scripts/TextureCombiner.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 60a1dc9732b768841b8eaadcac6860c2
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
44
Assets/Scripts/TextureHandler.cs
Normal file
44
Assets/Scripts/TextureHandler.cs
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(TextureCombiner))]
|
||||||
|
public abstract class TextureHandler : MonoBehaviour
|
||||||
|
{
|
||||||
|
protected TextureCombiner m_textureCombiner = null;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
m_textureCombiner = this.GetComponent<TextureCombiner>();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnEnable()
|
||||||
|
{
|
||||||
|
m_textureCombiner.m_loadDialogAction += Load;
|
||||||
|
m_textureCombiner.m_saveDialogAction += Save;
|
||||||
|
m_textureCombiner.m_saveTextureAction += SaveTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnDisable()
|
||||||
|
{
|
||||||
|
m_textureCombiner.m_loadDialogAction -= Load;
|
||||||
|
m_textureCombiner.m_saveDialogAction -= Save;
|
||||||
|
m_textureCombiner.m_saveTextureAction -= SaveTexture;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Load()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void Save(string name)
|
||||||
|
{
|
||||||
|
m_textureCombiner.SaveTextureBytes(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void SaveTexture(string path, byte[] bytes)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/TextureHandler.cs.meta
Normal file
11
Assets/Scripts/TextureHandler.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 63c231cd38eac57429b1091348882930
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Scripts/TextureHandlers.meta
Normal file
8
Assets/Scripts/TextureHandlers.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 977a2b7b6c2ca034aa201c687f8e0150
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
72
Assets/Scripts/TextureHandlers/TextureHandlerWeb.cs
Normal file
72
Assets/Scripts/TextureHandlers/TextureHandlerWeb.cs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
#if UNITY_WEBGL
|
||||||
|
using System.Text;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class TextureHandlerWeb : TextureHandler
|
||||||
|
{
|
||||||
|
#if UNITY_WEBGL
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
base.OnEnable();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Load()
|
||||||
|
{
|
||||||
|
UploadFile(this.gameObject.name, "OnLoadTexturesWWW", ".png, .jpg, .jpeg", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnLoadTexturesWWW(string path)
|
||||||
|
{
|
||||||
|
string[] paths = path.Split(',');
|
||||||
|
StartCoroutine(LoadTexturesWWW(paths));
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerator LoadTexturesWWW(string[] paths)
|
||||||
|
{
|
||||||
|
if (paths.Length != 0)
|
||||||
|
{
|
||||||
|
foreach (string p in paths)
|
||||||
|
{
|
||||||
|
Debug.Log(p);
|
||||||
|
|
||||||
|
// Load Image.
|
||||||
|
var loader = new WWW(p);
|
||||||
|
yield return loader;
|
||||||
|
m_textureCombiner.LoadTextureSlot(loader.texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnSaveTextureWWW()
|
||||||
|
{
|
||||||
|
Debug.Log("OnSaveTextureWWW");
|
||||||
|
}
|
||||||
|
|
||||||
|
[DllImport("__Internal")]
|
||||||
|
private static extern void UploadFile(string gameObjectName, string methodName, string filter, bool multiple);
|
||||||
|
[DllImport("__Internal")]
|
||||||
|
private static extern void DownloadFile(string gameObjectName, string methodName, string filename, byte[] byteArray, int byteArraySize);
|
||||||
|
|
||||||
|
protected override void Save(string name)
|
||||||
|
{
|
||||||
|
base.Save(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SaveTexture(string path, byte[] bytes)
|
||||||
|
{
|
||||||
|
DownloadFile(this.gameObject.name, "OnSaveTextureWWW", path, bytes, bytes.Length);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/TextureHandlers/TextureHandlerWeb.cs.meta
Normal file
11
Assets/Scripts/TextureHandlers/TextureHandlerWeb.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 978cb2b8bd47605408384d0375fe2e82
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
114
Assets/Scripts/TextureHandlers/TextureHandlerWin.cs
Normal file
114
Assets/Scripts/TextureHandlers/TextureHandlerWin.cs
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
#if UNITY_STANDALONE_WIN
|
||||||
|
using B83.Win32;
|
||||||
|
#endif
|
||||||
|
#if UNITY_STANDALONE
|
||||||
|
using SFB;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class TextureHandlerWin : TextureHandler
|
||||||
|
{
|
||||||
|
#if UNITY_STANDALONE
|
||||||
|
protected override void OnEnable()
|
||||||
|
{
|
||||||
|
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
|
||||||
|
UnityDragAndDropHook.InstallHook();
|
||||||
|
UnityDragAndDropHook.OnDroppedFiles += LoadDropPaths;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
base.OnEnable();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnDisable()
|
||||||
|
{
|
||||||
|
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
|
||||||
|
UnityDragAndDropHook.OnDroppedFiles -= LoadDropPaths;
|
||||||
|
UnityDragAndDropHook.UninstallHook();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
base.OnDisable();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Load()
|
||||||
|
{
|
||||||
|
// Open file with filter
|
||||||
|
var extensions = new[]
|
||||||
|
{
|
||||||
|
new ExtensionFilter("Image Files", "png", "jpg", "jpeg" )
|
||||||
|
};
|
||||||
|
|
||||||
|
StandaloneFileBrowser.OpenFilePanelAsync("Open File", "", extensions, true, LoadPaths);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if UNITY_STANDALONE_WIN && !UNITY_EDITOR
|
||||||
|
private void LoadDropPaths(List<string> paths, POINT aPos)
|
||||||
|
{
|
||||||
|
List<string> outPaths = new List<string>();
|
||||||
|
|
||||||
|
foreach (string p in paths)
|
||||||
|
{
|
||||||
|
var fi = new System.IO.FileInfo(p);
|
||||||
|
var ext = fi.Extension.ToLower();
|
||||||
|
if (ext == ".png" || ext == ".jpg" || ext == ".jpeg")
|
||||||
|
{
|
||||||
|
outPaths.Add(p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(outPaths.Count > 0)
|
||||||
|
{
|
||||||
|
LoadPaths(outPaths.ToArray());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private void LoadPaths(string[] paths)
|
||||||
|
{
|
||||||
|
if(paths.Length != 0)
|
||||||
|
{
|
||||||
|
LoadTextures(paths);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void LoadTextures(string[] paths)
|
||||||
|
{
|
||||||
|
if(paths.Length != 0)
|
||||||
|
{
|
||||||
|
foreach (string p in paths)
|
||||||
|
{
|
||||||
|
Debug.Log(p);
|
||||||
|
|
||||||
|
// Load Image.
|
||||||
|
var bytes = System.IO.File.ReadAllBytes(p);
|
||||||
|
Texture2D texture = new Texture2D(2, 2);
|
||||||
|
texture.hideFlags = HideFlags.HideAndDontSave;
|
||||||
|
texture.LoadImage(bytes);
|
||||||
|
texture.Apply();
|
||||||
|
|
||||||
|
m_textureCombiner.LoadTextureSlot(texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void Save(string name)
|
||||||
|
{
|
||||||
|
// Open file with filter
|
||||||
|
var extensions = new[]
|
||||||
|
{
|
||||||
|
new ExtensionFilter("Image Files", "png")
|
||||||
|
};
|
||||||
|
|
||||||
|
StandaloneFileBrowser.SaveFilePanelAsync("Save file", "", name, extensions, base.Save);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void SaveTexture(string path, byte[] bytes)
|
||||||
|
{
|
||||||
|
System.IO.File.WriteAllBytes(path, bytes);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/TextureHandlers/TextureHandlerWin.cs.meta
Normal file
11
Assets/Scripts/TextureHandlers/TextureHandlerWin.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 1a52e2fdc38fe1f47ba34b6f5818afca
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
74
Assets/Scripts/TextureSlot.cs
Normal file
74
Assets/Scripts/TextureSlot.cs
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class TextureSlot : MonoBehaviour
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private Toggle[] sourceToggles = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Toggle[] targetToggles = null;
|
||||||
|
|
||||||
|
public Texture2D texture
|
||||||
|
{
|
||||||
|
get;
|
||||||
|
private set;
|
||||||
|
}
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private Button removeButton = null;
|
||||||
|
[SerializeField]
|
||||||
|
private RawImage rawImage = null;
|
||||||
|
|
||||||
|
public void Init(Texture2D tex)
|
||||||
|
{
|
||||||
|
texture = tex;
|
||||||
|
rawImage.texture = texture;
|
||||||
|
|
||||||
|
removeButton.onClick.AddListener(()=>
|
||||||
|
{
|
||||||
|
Destroy(texture);
|
||||||
|
Destroy(this.gameObject);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public Channels GetTargetChannels()
|
||||||
|
{
|
||||||
|
return new Channels(
|
||||||
|
targetToggles[0].isOn,
|
||||||
|
targetToggles[1].isOn,
|
||||||
|
targetToggles[2].isOn,
|
||||||
|
targetToggles[3].isOn
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Vector4 GetSourceChannels()
|
||||||
|
{
|
||||||
|
return new Vector4(
|
||||||
|
sourceToggles[0].isOn ? 1.0f : 0.0f,
|
||||||
|
sourceToggles[1].isOn ? 1.0f : 0.0f,
|
||||||
|
sourceToggles[2].isOn ? 1.0f : 0.0f,
|
||||||
|
sourceToggles[3].isOn ? 1.0f : 0.0f
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public struct Channels
|
||||||
|
{
|
||||||
|
public Channels(bool _r, bool _g, bool _b, bool _a)
|
||||||
|
{
|
||||||
|
r = _r;
|
||||||
|
g = _g;
|
||||||
|
b = _b;
|
||||||
|
a = _a;
|
||||||
|
}
|
||||||
|
|
||||||
|
public bool r;
|
||||||
|
public bool g;
|
||||||
|
public bool b;
|
||||||
|
public bool a;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/TextureSlot.cs.meta
Normal file
11
Assets/Scripts/TextureSlot.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 7b24b75b037be27489d584dbb0e9b3e8
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Scripts/UI.meta
Normal file
8
Assets/Scripts/UI.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 723da6917db88b04bbaa4424be50b1a2
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
53
Assets/Scripts/UI/ButtonHandlerWeb.cs
Normal file
53
Assets/Scripts/UI/ButtonHandlerWeb.cs
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(Button))]
|
||||||
|
public class ButtonHandlerWeb : MonoBehaviour, IPointerDownHandler
|
||||||
|
{
|
||||||
|
public enum ButtonType
|
||||||
|
{
|
||||||
|
Load,
|
||||||
|
Save
|
||||||
|
}
|
||||||
|
|
||||||
|
#pragma warning disable CS0414
|
||||||
|
[SerializeField]
|
||||||
|
private ButtonType m_buttonType = ButtonType.Load;
|
||||||
|
#pragma warning restore CS0414
|
||||||
|
|
||||||
|
#if UNITY_WEBGL
|
||||||
|
private TextureCombiner m_textureCombiner = null;
|
||||||
|
private Button m_button = null;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
m_textureCombiner = FindObjectOfType<TextureCombiner>();
|
||||||
|
m_button = this.GetComponent<Button>();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public void OnPointerDown(UnityEngine.EventSystems.PointerEventData eventData)
|
||||||
|
{
|
||||||
|
#if UNITY_WEBGL
|
||||||
|
m_button.onClick.RemoveAllListeners();
|
||||||
|
|
||||||
|
switch (m_buttonType)
|
||||||
|
{
|
||||||
|
case ButtonType.Load:
|
||||||
|
m_textureCombiner.Load();
|
||||||
|
break;
|
||||||
|
case ButtonType.Save:
|
||||||
|
m_textureCombiner.Save();
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/ButtonHandlerWeb.cs.meta
Normal file
11
Assets/Scripts/UI/ButtonHandlerWeb.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c1fd32c98211f8744bbb554e3fd928d7
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
39
Assets/Scripts/UI/FitRect.cs
Normal file
39
Assets/Scripts/UI/FitRect.cs
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(RectTransform)), ExecuteInEditMode]
|
||||||
|
public class FitRect : MonoBehaviour
|
||||||
|
{
|
||||||
|
public bool m_fitHeight = false;
|
||||||
|
public bool m_fitWidth = false;
|
||||||
|
public RectTransform m_rectToFit = null;
|
||||||
|
|
||||||
|
private RectTransform m_rectTransform = null;
|
||||||
|
private Rect m_prevRect = new Rect();
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
m_rectTransform = GetComponent<RectTransform>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void Update()
|
||||||
|
{
|
||||||
|
if(!m_rectToFit)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(m_prevRect != m_rectToFit.rect)
|
||||||
|
{
|
||||||
|
m_prevRect = m_rectToFit.rect;
|
||||||
|
|
||||||
|
m_rectTransform.sizeDelta = new Vector2(
|
||||||
|
m_fitWidth ? m_rectToFit.rect.width : m_rectTransform.rect.width,
|
||||||
|
m_fitHeight ? m_rectToFit.rect.height : m_rectToFit.rect.height
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/FitRect.cs.meta
Normal file
11
Assets/Scripts/UI/FitRect.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3df6f29a361ab574789d62241d8f0310
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
21
Assets/Scripts/UI/HoverInfo.cs
Normal file
21
Assets/Scripts/UI/HoverInfo.cs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class HoverInfo : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
|
||||||
|
{
|
||||||
|
[SerializeField, Multiline]
|
||||||
|
private string m_text = "";
|
||||||
|
|
||||||
|
public void OnPointerEnter(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
HoverInfoBox.s_hoverInfoBox.Show(m_text, eventData.position);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void OnPointerExit(PointerEventData eventData)
|
||||||
|
{
|
||||||
|
HoverInfoBox.s_hoverInfoBox.Hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/HoverInfo.cs.meta
Normal file
11
Assets/Scripts/UI/HoverInfo.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 4777ae165e0fc384c9b2f40261e50fb0
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
82
Assets/Scripts/UI/HoverInfoBox.cs
Normal file
82
Assets/Scripts/UI/HoverInfoBox.cs
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class HoverInfoBox : MonoBehaviour
|
||||||
|
{
|
||||||
|
public static HoverInfoBox s_hoverInfoBox { get; private set; } = null;
|
||||||
|
|
||||||
|
[SerializeField]
|
||||||
|
private RectTransform m_infoBoxParent = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Text m_text = null;
|
||||||
|
[SerializeField]
|
||||||
|
private Vector2 m_offset = new Vector2(0, 0);
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
if(s_hoverInfoBox)
|
||||||
|
{
|
||||||
|
DestroyImmediate(gameObject);
|
||||||
|
}
|
||||||
|
|
||||||
|
s_hoverInfoBox = this;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnDisable()
|
||||||
|
{
|
||||||
|
Hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Show(string a_text, Vector2 a_position)
|
||||||
|
{
|
||||||
|
if(!enabled)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set text.
|
||||||
|
m_text.text = a_text;
|
||||||
|
m_text.SetLayoutDirty();
|
||||||
|
|
||||||
|
// Flip when above 50% of the screen.
|
||||||
|
if(Input.mousePosition.y < (Screen.height / 2))
|
||||||
|
{
|
||||||
|
a_position += new Vector2(m_offset.x - (m_infoBoxParent.rect.width / 2), m_offset.y);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
a_position += new Vector2(m_offset.x - (m_infoBoxParent.rect.width / 2), -m_offset.y - m_infoBoxParent.rect.height);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clamp borders.
|
||||||
|
if(a_position.x < 0)
|
||||||
|
{
|
||||||
|
a_position.x = 0;
|
||||||
|
}
|
||||||
|
else if (a_position.x + m_infoBoxParent.rect.width > Screen.width)
|
||||||
|
{
|
||||||
|
a_position.x = Screen.width - m_infoBoxParent.rect.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (a_position.y < 0)
|
||||||
|
{
|
||||||
|
a_position.y = 0;
|
||||||
|
}
|
||||||
|
else if (a_position.y + m_infoBoxParent.rect.height > Screen.height)
|
||||||
|
{
|
||||||
|
a_position.y = Screen.height - m_infoBoxParent.rect.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable object.
|
||||||
|
m_infoBoxParent.gameObject.SetActive(true);
|
||||||
|
m_infoBoxParent.position = a_position;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void Hide()
|
||||||
|
{
|
||||||
|
m_infoBoxParent.gameObject.SetActive(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/HoverInfoBox.cs.meta
Normal file
11
Assets/Scripts/UI/HoverInfoBox.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: f517fa6682ad6dd4ebec0f35cd3cfc1a
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
24
Assets/Scripts/UI/OpenURL.cs
Normal file
24
Assets/Scripts/UI/OpenURL.cs
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.EventSystems;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
public class OpenURL : MonoBehaviour, IPointerClickHandler
|
||||||
|
{
|
||||||
|
[SerializeField]
|
||||||
|
private string m_url = "";
|
||||||
|
[SerializeField]
|
||||||
|
private bool m_httpsOnly = true;
|
||||||
|
|
||||||
|
public void OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData)
|
||||||
|
{
|
||||||
|
if(m_httpsOnly && !m_url.StartsWith("https://"))
|
||||||
|
{
|
||||||
|
m_url = "https://" + m_url;
|
||||||
|
}
|
||||||
|
|
||||||
|
Application.OpenURL(m_url);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/OpenURL.cs.meta
Normal file
11
Assets/Scripts/UI/OpenURL.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 0de3abbefbab004458d0b32fa4794c61
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
23
Assets/Scripts/UI/ToggleInvoke.cs
Normal file
23
Assets/Scripts/UI/ToggleInvoke.cs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
using System.Collections;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using UnityEngine;
|
||||||
|
using UnityEngine.UI;
|
||||||
|
|
||||||
|
namespace TextureCombiner
|
||||||
|
{
|
||||||
|
[RequireComponent(typeof(Toggle))]
|
||||||
|
public class ToggleInvoke : MonoBehaviour
|
||||||
|
{
|
||||||
|
private Toggle m_toggle = null;
|
||||||
|
|
||||||
|
private void Awake()
|
||||||
|
{
|
||||||
|
m_toggle = GetComponent<Toggle>();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnEnable()
|
||||||
|
{
|
||||||
|
m_toggle.onValueChanged.Invoke(m_toggle.isOn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
Assets/Scripts/UI/ToggleInvoke.cs.meta
Normal file
11
Assets/Scripts/UI/ToggleInvoke.cs.meta
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9695356589cdfd24f9058351ac2f48e3
|
||||||
|
MonoImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 2
|
||||||
|
defaultReferences: []
|
||||||
|
executionOrder: 0
|
||||||
|
icon: {instanceID: 0}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Shaders.meta
Normal file
8
Assets/Shaders.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 61291a71f409dcf429855aa0a506d4ba
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
80
Assets/Shaders/CombineShader.shader
Normal file
80
Assets/Shaders/CombineShader.shader
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
Shader "TextureCombiner/CombineShader"
|
||||||
|
{
|
||||||
|
Properties
|
||||||
|
{
|
||||||
|
_MainTex("MainTex", 2D) = "white" {}
|
||||||
|
_Tex0("TexR", 2D) = "black" {}
|
||||||
|
_Tex1("TexG", 2D) = "black" {}
|
||||||
|
_Tex2("TexB", 2D) = "black" {}
|
||||||
|
_Tex3("TexA", 2D) = "black" {}
|
||||||
|
_Mask0("MaskR", Vector) = (0, 0, 0, 0)
|
||||||
|
_Mask1("MaskG", Vector) = (0, 0, 0, 0)
|
||||||
|
_Mask2("MaskB", Vector) = (0, 0, 0, 0)
|
||||||
|
_Mask3("MaskA", Vector) = (0, 0, 0, 0)
|
||||||
|
_Add("Add", Vector) = (0, 0, 0, 0)
|
||||||
|
}
|
||||||
|
SubShader
|
||||||
|
{
|
||||||
|
Tags { "RenderType"="Opaque" }
|
||||||
|
LOD 100
|
||||||
|
|
||||||
|
Pass
|
||||||
|
{
|
||||||
|
CGPROGRAM
|
||||||
|
#pragma vertex vert
|
||||||
|
#pragma fragment frag
|
||||||
|
|
||||||
|
#include "UnityCG.cginc"
|
||||||
|
|
||||||
|
struct appdata
|
||||||
|
{
|
||||||
|
float4 vertex : POSITION;
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct v2f
|
||||||
|
{
|
||||||
|
float2 uv : TEXCOORD0;
|
||||||
|
float4 vertex : SV_POSITION;
|
||||||
|
};
|
||||||
|
|
||||||
|
sampler2D _MainTex;
|
||||||
|
float4 _MainTex_ST;
|
||||||
|
sampler2D _Tex0;
|
||||||
|
sampler2D _Tex1;
|
||||||
|
sampler2D _Tex2;
|
||||||
|
sampler2D _Tex3;
|
||||||
|
float4 _Mask0;
|
||||||
|
float4 _Mask1;
|
||||||
|
float4 _Mask2;
|
||||||
|
float4 _Mask3;
|
||||||
|
float4 _Add;
|
||||||
|
|
||||||
|
v2f vert (appdata v)
|
||||||
|
{
|
||||||
|
v2f o;
|
||||||
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
||||||
|
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
|
||||||
|
float GetChannelColor(float4 col, float4 mask)
|
||||||
|
{
|
||||||
|
return (col.r * mask.r) + (col.g * mask.g) + (col.b * mask.b) + (col.a * mask.a);
|
||||||
|
}
|
||||||
|
|
||||||
|
fixed4 frag(v2f i) : SV_Target
|
||||||
|
{
|
||||||
|
fixed4 col = fixed4(0, 0, 0, 0);
|
||||||
|
|
||||||
|
col.r = clamp(GetChannelColor(tex2D(_Tex0, i.uv).rgba, _Mask0) + _Add.r, 0, 1);
|
||||||
|
col.g = clamp(GetChannelColor(tex2D(_Tex1, i.uv).rgba, _Mask1) + _Add.g, 0, 1);
|
||||||
|
col.b = clamp(GetChannelColor(tex2D(_Tex2, i.uv).rgba, _Mask2) + _Add.b, 0, 1);
|
||||||
|
col.a = clamp(GetChannelColor(tex2D(_Tex3, i.uv).rgba, _Mask3) + _Add.a, 0, 1);
|
||||||
|
|
||||||
|
return col;
|
||||||
|
}
|
||||||
|
ENDCG
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
9
Assets/Shaders/CombineShader.shader.meta
Normal file
9
Assets/Shaders/CombineShader.shader.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 549aae9fe3b32db48804f14851ff0f48
|
||||||
|
ShaderImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
defaultTextures: []
|
||||||
|
nonModifiableTextures: []
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/Sprites.meta
Normal file
8
Assets/Sprites.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 08452dbad88f4094598d2fb38aae1822
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
BIN
Assets/Sprites/Arrow.png
Normal file
BIN
Assets/Sprites/Arrow.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.1 KiB |
92
Assets/Sprites/Arrow.png.meta
Normal file
92
Assets/Sprites/Arrow.png.meta
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fd7eaf5d07fc49249aef617718fc0586
|
||||||
|
TextureImporter:
|
||||||
|
internalIDToNameTable: []
|
||||||
|
externalObjects: {}
|
||||||
|
serializedVersion: 11
|
||||||
|
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
|
||||||
|
grayScaleToAlpha: 0
|
||||||
|
generateCubemap: 6
|
||||||
|
cubemapConvolution: 0
|
||||||
|
seamlessCubemap: 0
|
||||||
|
textureFormat: 1
|
||||||
|
maxTextureSize: 2048
|
||||||
|
textureSettings:
|
||||||
|
serializedVersion: 2
|
||||||
|
filterMode: -1
|
||||||
|
aniso: -1
|
||||||
|
mipBias: -100
|
||||||
|
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: 8
|
||||||
|
textureShape: 1
|
||||||
|
singleChannelComponent: 0
|
||||||
|
maxTextureSizeSet: 0
|
||||||
|
compressionQualitySet: 0
|
||||||
|
textureFormatSet: 0
|
||||||
|
applyGammaDecoding: 0
|
||||||
|
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
|
||||||
|
spriteSheet:
|
||||||
|
serializedVersion: 2
|
||||||
|
sprites: []
|
||||||
|
outline: []
|
||||||
|
physicsShape: []
|
||||||
|
bones: []
|
||||||
|
spriteID: 5e97eb03825dee720800000000000000
|
||||||
|
internalID: 0
|
||||||
|
vertices: []
|
||||||
|
indices:
|
||||||
|
edges: []
|
||||||
|
weights: []
|
||||||
|
secondaryTextures: []
|
||||||
|
spritePackingTag:
|
||||||
|
pSDRemoveMatte: 0
|
||||||
|
pSDShowRemoveMatteOption: 0
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
8
Assets/WebGLTemplates.meta
Normal file
8
Assets/WebGLTemplates.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: fe9cde33d3c89a1418dadad15e421367
|
||||||
|
folderAsset: yes
|
||||||
|
DefaultImporter:
|
||||||
|
externalObjects: {}
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
9
Assets/WebGLTemplates/FS_Adaptive.meta
Normal file
9
Assets/WebGLTemplates/FS_Adaptive.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: c9500305085e4cc48a63a560b3aca5cd
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1483014353
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
9
Assets/WebGLTemplates/FS_Adaptive/TemplateData.meta
Normal file
9
Assets/WebGLTemplates/FS_Adaptive/TemplateData.meta
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 9e12a3068ac5eb846ad50539469f5580
|
||||||
|
folderAsset: yes
|
||||||
|
timeCreated: 1483014763
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
2
Assets/WebGLTemplates/FS_Adaptive/TemplateData/style.css
Normal file
2
Assets/WebGLTemplates/FS_Adaptive/TemplateData/style.css
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
.webgl-content * {border: 0; margin: 0; padding: 0}
|
||||||
|
.webgl-content {position: relative; top: 50%; left: 50%; -webkit-transform: translate(-50%, -50%); transform: translate(-50%, -50%);}
|
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 3080dfbadcb748c44b8bff806aaf74e8
|
||||||
|
timeCreated: 1483014763
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
27
Assets/WebGLTemplates/FS_Adaptive/index.html
Normal file
27
Assets/WebGLTemplates/FS_Adaptive/index.html
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-us">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||||
|
<style type="text/css">
|
||||||
|
* {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
canvas {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
position: absolute;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<title>%UNITY_WEB_NAME%</title>
|
||||||
|
<script src="%UNITY_WEBGL_LOADER_URL%"></script>
|
||||||
|
<script>
|
||||||
|
var gameInstance = UnityLoader.instantiate("gameContainer", "%UNITY_WEBGL_BUILD_URL%");
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="gameContainer" style="width: 100vw; height: 100vh; margin: auto"></div>
|
||||||
|
</body>
|
||||||
|
</html>
|
8
Assets/WebGLTemplates/FS_Adaptive/index.html.meta
Normal file
8
Assets/WebGLTemplates/FS_Adaptive/index.html.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 2825144ff7011e341ad1b899285b1c21
|
||||||
|
timeCreated: 1483014353
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
BIN
Assets/WebGLTemplates/FS_Adaptive/thumbnail.png
Normal file
BIN
Assets/WebGLTemplates/FS_Adaptive/thumbnail.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
8
Assets/WebGLTemplates/FS_Adaptive/thumbnail.png.meta
Normal file
8
Assets/WebGLTemplates/FS_Adaptive/thumbnail.png.meta
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
fileFormatVersion: 2
|
||||||
|
guid: 5cdb63f1232777c4cb75ef4ec05f88da
|
||||||
|
timeCreated: 1483014353
|
||||||
|
licenseType: Pro
|
||||||
|
DefaultImporter:
|
||||||
|
userData:
|
||||||
|
assetBundleName:
|
||||||
|
assetBundleVariant:
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user