lib/u3d/installation.rb in u3d-1.0.11 vs lib/u3d/installation.rb in u3d-1.0.12
- old
+ new
@@ -27,10 +27,28 @@
UNITY_DIR_CHECK_LINUX = /unity-editor-\d+\.\d+\.\d+[a-z]\d+\z/
class Installation
attr_reader :root_path
+ NOT_PLAYBACKENGINE_PACKAGES = %w[Documentation StandardAssets MonoDevelop].freeze
+ PACKAGE_ALIASES =
+ {
+ 'Android' => [],
+ 'iOS' => ['iPhone'],
+ 'AppleTV' => ['tvOS'],
+ 'Linux' => ['StandaloneLinux'],
+ 'Mac' => %w[StandaloneOSXIntel StandaloneOSXIntel64 StandaloneOSX],
+ 'Windows' => ['StandaloneWindows'],
+ 'Metro' => [],
+ 'UWP-IL2CPP' => [],
+ 'Samsung-TV' => [],
+ 'Tizen' => [],
+ 'WebGL' => [],
+ 'Facebook-Games' => ['Facebook'],
+ 'Vuforia-AR' => ['UnityExtensions']
+ }.freeze
+
def initialize(root_path: nil, path: nil)
@root_path = root_path
@path = path
end
@@ -42,10 +60,26 @@
LinuxInstallation.new(root_path: root_path, path: path)
else
WindowsInstallation.new(root_path: root_path, path: path)
end
end
+
+ def packages
+ false
+ end
+
+ def package_installed?(package)
+ return true if (packages || []).include?(package)
+
+ aliases = PACKAGE_ALIASES[package]
+
+ # If no aliases for the package are found, then it's a new package not yet known by Unity
+ # If the exact name doesn't match then we have to suppose it's not installed
+ return false unless aliases
+
+ return !(aliases & packages).empty?
+ end
end
class PlaybackEngineUtils
def self.list_module_configs(playbackengine_parent_path)
Dir.glob("#{playbackengine_parent_path}/PlaybackEngines/*/ivy.xml")
@@ -88,15 +122,33 @@
return @path if @path
"#{@root_path}/Unity.app"
end
def packages
- PlaybackEngineUtils.list_module_configs(root_path).map do |mpath|
- PlaybackEngineUtils.module_name(mpath)
+ pack = []
+ PlaybackEngineUtils.list_module_configs(root_path).each do |mpath|
+ pack << PlaybackEngineUtils.module_name(mpath)
end
+ NOT_PLAYBACKENGINE_PACKAGES.each do |module_name|
+ pack << module_name unless Dir[module_name_pattern(module_name)].empty?
+ end
+ pack
end
+ def module_name_pattern(module_name)
+ case module_name
+ when 'Documentation'
+ return "#{root_path}/Documentation/"
+ when 'StandardAssets'
+ return "#{root_path}/Standard Assets/"
+ when 'MonoDevelop'
+ return "#{root_path}/MonoDevelop.app/"
+ else
+ UI.crash! "No pattern is known for #{module_name} on Mac"
+ end
+ end
+
def clean_install?
!(root_path =~ UNITY_DIR_CHECK).nil?
end
private
@@ -135,14 +187,10 @@
def path
UI.deprecated("path is deprecated. Use root_path instead")
@root_path || @path
end
- def packages
- false
- end
-
def clean_install?
!(root_path =~ UNITY_DIR_CHECK_LINUX).nil?
end
end
@@ -177,11 +225,29 @@
@root_path || @path
end
def packages
path = "#{root_path}/Editor/Data/"
- PlaybackEngineUtils.list_module_configs(path).map do |mpath|
- PlaybackEngineUtils.module_name(mpath)
+ pack = []
+ PlaybackEngineUtils.list_module_configs(path).each do |mpath|
+ pack << PlaybackEngineUtils.module_name(mpath)
+ end
+ NOT_PLAYBACKENGINE_PACKAGES.each do |module_name|
+ pack << module_name unless Dir[module_name_pattern(module_name)].empty?
+ end
+ pack
+ end
+
+ def module_name_pattern(module_name)
+ case module_name
+ when 'Documentation'
+ return "#{root_path}/Editor/Data/Documentation/"
+ when 'StandardAssets'
+ return "#{root_path}/Editor/Standard Assets/"
+ when 'MonoDevelop'
+ return "#{root_path}/MonoDevelop/"
+ else
+ UI.crash! "No pattern is known for #{module_name} on Windows"
end
end
def clean_install?
!(root_path =~ UNITY_DIR_CHECK).nil?