From b2bba09366729c5a932d84e52785962678012255 Mon Sep 17 00:00:00 2001 From: Thomas Gravgaard Date: Tue, 28 Feb 2012 23:12:01 +0100 Subject: [PATCH] Added a basic demo, which show an error in lighting with the DynamicBatchRenderer. --- .gitignore | 4 +- .../Assembly-CSharp-Editor-vs.csproj | 66 ++ .../Assembly-CSharp-Editor.csproj | 66 ++ .../Assembly-CSharp-vs.csproj | 65 ++ .../AnimationAndLight/Assembly-CSharp.csproj | 65 ++ Demos/AnimationAndLight/Assembly-CSharp.pidb | Bin 0 -> 6496 bytes .../Assets/CubeAnimation.anim | Bin 0 -> 18160 bytes .../Editor/FFWD/ExportSceneWizard.config | 30 + .../Assets/Editor/FFWD/ExportSceneWizard.cs | 586 ++++++++++++++++++ .../Editor/FFWD/PolygonColliderEditor.cs | 30 + .../Editor/FFWD/PressPlay.FFWD.Exporter.dll | Bin 0 -> 54784 bytes .../FFWD/PressPlay.FFWD.Exporter.dll.config | 39 ++ .../FFWD/ContentSerializerIgnoreAttribute.cs | 12 + .../Assets/FFWD/FFWD_DontExportAttribute.cs | 14 + .../FFWD/FFWD_ExportAsResourceAttribute.cs | 11 + .../FFWD/FFWD_ExportOptionsAttribute.cs | 20 + .../Assets/FFWD/FFWD_PolygonCollider.cs | 78 +++ .../FFWD/XNAEllipsoidParticleEmitter.cs | 23 + .../Assets/FFWD/XNALineRendererExport.cs | 42 ++ .../Assets/FFWD/XNAMeshCollider.cs | 13 + .../Assets/Scenes/TestScene.unity | Bin 0 -> 19896 bytes .../ProjectSettings/AudioManager.asset | Bin 0 -> 458 bytes .../ProjectSettings/DynamicsManager.asset | Bin 0 -> 1148 bytes .../ProjectSettings/EditorBuildSettings.asset | Bin 0 -> 502 bytes .../ProjectSettings/EditorSettings.asset | Bin 0 -> 504 bytes .../ProjectSettings/InputManager.asset | Bin 0 -> 2968 bytes .../ProjectSettings/NavMeshLayers.asset | Bin 0 -> 9196 bytes .../ProjectSettings/NetworkManager.asset | Bin 0 -> 730 bytes .../ProjectSettings/ProjectSettings.asset | Bin 0 -> 11116 bytes .../ProjectSettings/QualitySettings.asset | Bin 0 -> 4297 bytes .../ProjectSettings/TagManager.asset | Bin 0 -> 5390 bytes .../ProjectSettings/TimeManager.asset | Bin 0 -> 318 bytes Demos/AnimationAndLight/Unity-csharp.sln | 45 ++ Demos/AnimationAndLight/Unity.sln | 45 ++ Demos/AnimationAndLight/Unity.userprefs | 12 + 35 files changed, 1265 insertions(+), 1 deletion(-) create mode 100644 Demos/AnimationAndLight/Assembly-CSharp-Editor-vs.csproj create mode 100644 Demos/AnimationAndLight/Assembly-CSharp-Editor.csproj create mode 100644 Demos/AnimationAndLight/Assembly-CSharp-vs.csproj create mode 100644 Demos/AnimationAndLight/Assembly-CSharp.csproj create mode 100644 Demos/AnimationAndLight/Assembly-CSharp.pidb create mode 100644 Demos/AnimationAndLight/Assets/CubeAnimation.anim create mode 100644 Demos/AnimationAndLight/Assets/Editor/FFWD/ExportSceneWizard.config create mode 100644 Demos/AnimationAndLight/Assets/Editor/FFWD/ExportSceneWizard.cs create mode 100644 Demos/AnimationAndLight/Assets/Editor/FFWD/PolygonColliderEditor.cs create mode 100644 Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll create mode 100644 Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll.config create mode 100644 Demos/AnimationAndLight/Assets/FFWD/ContentSerializerIgnoreAttribute.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/FFWD_DontExportAttribute.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportAsResourceAttribute.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportOptionsAttribute.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/FFWD_PolygonCollider.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/XNAEllipsoidParticleEmitter.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/XNALineRendererExport.cs create mode 100644 Demos/AnimationAndLight/Assets/FFWD/XNAMeshCollider.cs create mode 100644 Demos/AnimationAndLight/Assets/Scenes/TestScene.unity create mode 100644 Demos/AnimationAndLight/ProjectSettings/AudioManager.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/DynamicsManager.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/EditorBuildSettings.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/EditorSettings.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/InputManager.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/NavMeshLayers.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/NetworkManager.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/ProjectSettings.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/QualitySettings.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/TagManager.asset create mode 100644 Demos/AnimationAndLight/ProjectSettings/TimeManager.asset create mode 100644 Demos/AnimationAndLight/Unity-csharp.sln create mode 100644 Demos/AnimationAndLight/Unity.sln create mode 100644 Demos/AnimationAndLight/Unity.userprefs diff --git a/.gitignore b/.gitignore index f267a309..bd1cd3f7 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,6 @@ obj/ /Tests/Unity.Tests/Library /Tests/Unity.Tests/Temp /Exporter/PressPlay.FFWD.Unity.AfterBuild.bat -/Exporter/PressPlay.FFWD.Exporter.AfterBuild.bat \ No newline at end of file +/Exporter/PressPlay.FFWD.Exporter.AfterBuild.bat +/Demos/*/Temp +/Demos/*/Library \ No newline at end of file diff --git a/Demos/AnimationAndLight/Assembly-CSharp-Editor-vs.csproj b/Demos/AnimationAndLight/Assembly-CSharp-Editor-vs.csproj new file mode 100644 index 00000000..73e267ad --- /dev/null +++ b/Demos/AnimationAndLight/Assembly-CSharp-Editor-vs.csproj @@ -0,0 +1,66 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {6311E6C6-0A20-383B-320B-694068DE37A5} + Library + Properties + + Assembly-CSharp-Editor + v3.5 + 512 + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_3_5_0;UNITY_3_5;UNITY_EDITOR;ENABLE_PROFILER;UNITY_STANDALONE_WIN;ENABLE_GENERICS;ENABLE_DUCK_TYPING;ENABLE_TERRAIN;ENABLE_MOVIES;ENABLE_WEBCAM;ENABLE_MICROPHONE;ENABLE_NETWORK;ENABLE_CLOTH;ENABLE_WWW;ENABLE_SUBSTANCE + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + TRACE + prompt + 4 + 0169 + + + + + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEngine.dll + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEditor.dll + + + + + + + Assets\Editor\FFWD\PressPlay.FFWD.Exporter.dll + + + + + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A} Assembly-CSharp-vs + + + + + diff --git a/Demos/AnimationAndLight/Assembly-CSharp-Editor.csproj b/Demos/AnimationAndLight/Assembly-CSharp-Editor.csproj new file mode 100644 index 00000000..e4859f6d --- /dev/null +++ b/Demos/AnimationAndLight/Assembly-CSharp-Editor.csproj @@ -0,0 +1,66 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {6311E6C6-0A20-383B-320B-694068DE37A5} + Library + Properties + + Assembly-CSharp-Editor + v3.5 + 512 + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_3_5_0;UNITY_3_5;UNITY_EDITOR;ENABLE_PROFILER;UNITY_STANDALONE_WIN;ENABLE_GENERICS;ENABLE_DUCK_TYPING;ENABLE_TERRAIN;ENABLE_MOVIES;ENABLE_WEBCAM;ENABLE_MICROPHONE;ENABLE_NETWORK;ENABLE_CLOTH;ENABLE_WWW;ENABLE_SUBSTANCE + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + TRACE + prompt + 4 + 0169 + + + + + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEngine.dll + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEditor.dll + + + + + + + Assets\Editor\FFWD\PressPlay.FFWD.Exporter.dll + + + + + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A} Assembly-CSharp + + + + + diff --git a/Demos/AnimationAndLight/Assembly-CSharp-vs.csproj b/Demos/AnimationAndLight/Assembly-CSharp-vs.csproj new file mode 100644 index 00000000..cad3fec7 --- /dev/null +++ b/Demos/AnimationAndLight/Assembly-CSharp-vs.csproj @@ -0,0 +1,65 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A} + Library + Properties + + Assembly-CSharp + v3.5 + 512 + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_3_5_0;UNITY_3_5;UNITY_EDITOR;ENABLE_PROFILER;UNITY_STANDALONE_WIN;ENABLE_GENERICS;ENABLE_DUCK_TYPING;ENABLE_TERRAIN;ENABLE_MOVIES;ENABLE_WEBCAM;ENABLE_MICROPHONE;ENABLE_NETWORK;ENABLE_CLOTH;ENABLE_WWW;ENABLE_SUBSTANCE + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + TRACE + prompt + 4 + 0169 + + + + + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEngine.dll + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEditor.dll + + + + + + + + + + + + + + + + diff --git a/Demos/AnimationAndLight/Assembly-CSharp.csproj b/Demos/AnimationAndLight/Assembly-CSharp.csproj new file mode 100644 index 00000000..cad3fec7 --- /dev/null +++ b/Demos/AnimationAndLight/Assembly-CSharp.csproj @@ -0,0 +1,65 @@ + + + + Debug + AnyCPU + 10.0.20506 + 2.0 + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A} + Library + Properties + + Assembly-CSharp + v3.5 + 512 + + + true + full + false + Temp\bin\Debug\ + DEBUG;TRACE;UNITY_3_5_0;UNITY_3_5;UNITY_EDITOR;ENABLE_PROFILER;UNITY_STANDALONE_WIN;ENABLE_GENERICS;ENABLE_DUCK_TYPING;ENABLE_TERRAIN;ENABLE_MOVIES;ENABLE_WEBCAM;ENABLE_MICROPHONE;ENABLE_NETWORK;ENABLE_CLOTH;ENABLE_WWW;ENABLE_SUBSTANCE + prompt + 4 + 0169 + + + pdbonly + true + Temp\bin\Release\ + TRACE + prompt + 4 + 0169 + + + + + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEngine.dll + + + C:/Program Files (x86)/Unity 3.5.0f5/Editor/Data/Managed/UnityEditor.dll + + + + + + + + + + + + + + + + diff --git a/Demos/AnimationAndLight/Assembly-CSharp.pidb b/Demos/AnimationAndLight/Assembly-CSharp.pidb new file mode 100644 index 0000000000000000000000000000000000000000..a86db4d0ea2d89e56502d5204cdde09f67bbede6 GIT binary patch literal 6496 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 + + + + FFWD.Template.Content + FFWD.Template.Content + FFWD.Template.XmlContent + FFWD.Template.Scripts + FFWD.Template.XmlContent + + Scripts + FFWD.Template.XmlContent + Editor\FFWD\PressPlay.FFWD.Exporter.dll.config + true + + + Main scenes + Assets\Scenes + + + TestScene + + + + + + AssemblyInfo + + + \ No newline at end of file diff --git a/Demos/AnimationAndLight/Assets/Editor/FFWD/ExportSceneWizard.cs b/Demos/AnimationAndLight/Assets/Editor/FFWD/ExportSceneWizard.cs new file mode 100644 index 00000000..130d1dec --- /dev/null +++ b/Demos/AnimationAndLight/Assets/Editor/FFWD/ExportSceneWizard.cs @@ -0,0 +1,586 @@ +using System.IO; +using PressPlay.FFWD.Exporter; +using PressPlay.FFWD.Exporter.Writers; +using UnityEditor; +using UnityEngine; +using System.Collections.Generic; +using System; +using System.Xml.Serialization; +using System.Text; +using System.Linq; +using PressPlay.FFWD.Exporter.Interfaces; + +public class ExportSceneWizard : ScriptableWizard +{ + [Serializable] + public class SceneGroup + { + public string name; + public string baseSceneDir; + public string validationScript; + public List scenes; + } + + [Serializable] + public class ExportConfig + { + public string scriptNamespace = ""; + public AssetHelper xnaAssets = new AssetHelper(); + public string unityScriptDir = "Scripts"; + public string exportDir = ""; + public string configSource = @"Editor\FFWD\PressPlay.FFWD.Exporter.dll.config"; + public bool showComponentsNotWritten = true; + public List groups; + public List allowedSkippedComponents = new List(); + + public List excludedScripts = new List(); + public List excludedPaths = new List(); + + private static XmlSerializer xmlSer = new XmlSerializer(typeof(ExportConfig)); + public static ExportConfig Load() + { + ExportConfig config; + try + { + using (StreamReader sr = new StreamReader(Path.Combine(Application.dataPath, @"Editor\FFWD\ExportSceneWizard.config"))) + { + config = (ExportConfig)xmlSer.Deserialize(sr); + } + } + catch (Exception ex) + { + Debug.LogError("Could not read configuration data. " + ex.Message); + config = new ExportConfig(); + config.Save(); + } + return config; + } + + public void Save() + { + using (StreamWriter sw = new StreamWriter(Path.Combine(Application.dataPath, @"Editor\FFWD\ExportSceneWizard.config"))) + { + xmlSer.Serialize(sw, this); + } + } + } + + public class ExportCommands + { + public ExportCommands() + { + config = ExportConfig.Load(); + if (EditorPrefs.HasKey("FFWD XNA dir " + PlayerSettings.productName)) + { + xnaBaseDir = EditorPrefs.GetString("FFWD XNA dir " + PlayerSettings.productName); + } + if (EditorPrefs.HasKey("FFWD active group")) + { + activeGroup = EditorPrefs.GetInt("FFWD active group"); + } + + string configPath = Path.Combine(Application.dataPath, config.configSource); + if (File.Exists(configPath)) + { + resolver = TypeResolver.ReadConfiguration(configPath); + } + if (resolver == null) + { + Debug.LogWarning("We have no TypeResolver so we will not export any components"); + } + + assets = new AssetHelper(); + assets.TextureDir = Path.Combine(xnaBaseDir, config.xnaAssets.TextureDir); + assets.ScriptDir = Path.Combine(xnaBaseDir, config.xnaAssets.ScriptDir); + assets.MeshDir = Path.Combine(xnaBaseDir, config.xnaAssets.MeshDir); + assets.AudioDir = Path.Combine(xnaBaseDir, config.xnaAssets.AudioDir); + assets.XmlDir = Path.Combine(xnaBaseDir, config.exportDir); + } + + public ExportConfig config; + public string xnaBaseDir = ""; + public int activeGroup = 0; + private TypeResolver resolver; + public AssetHelper assets; + private List allComponentsNotWritten = new List(); + + public void ExportResource(GameObject go) + { + if (go == null) + { + Debug.LogError("FFWD: Cannot export null resource"); + return; + } + + SceneWriter scene = new SceneWriter(resolver, assets); + scene.ExportDir = Path.Combine(assets.XmlDir, "Scenes"); + ScriptTranslator.ScriptNamespace = config.scriptNamespace; + + string path = Path.ChangeExtension(AssetDatabase.GetAssetPath(go).Replace("Assets/", "../"), "xml"); + //Debug.Log("Start resource export of " + path); + scene.WriteResource(path, go); + } + + public void ExportScript(MonoBehaviour monoBehaviour) + { + Debug.Log("Start script export of " + monoBehaviour.GetType()); + assets.ExportScript(monoBehaviour.GetType(), false, true); + } + + public void ExportTextAsset(TextAsset asset) + { + string assetPath = AssetDatabase.GetAssetPath(asset.GetInstanceID()).Replace("Assets/", ""); + string exportPath = Path.Combine(assets.XmlDir, assetPath); + if (!Directory.Exists(Path.GetDirectoryName(exportPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(exportPath)); + } + File.WriteAllBytes(exportPath, asset.bytes); + //Debug.Log("Exported Text asset to " + exportPath); + } + + public void ExportMaterial(Material mat) + { + if (mat == null) + { + Debug.LogError("FFWD: Cannot export null material"); + return; + } + + SceneWriter scene = new SceneWriter(resolver, assets); + scene.ExportDir = Path.Combine(assets.XmlDir, "Scenes"); + ScriptTranslator.ScriptNamespace = config.scriptNamespace; + + string path = Path.ChangeExtension(AssetDatabase.GetAssetPath(mat).Replace("Assets/", "../"), "xml"); + //Debug.Log("Start resource export of " + path); + scene.WriteResource(path, mat); + } + + public void ExportAudio(AudioClip asset) + { + string assetPath = AssetDatabase.GetAssetPath(asset.GetInstanceID()); + string exportPath = Path.Combine(Path.Combine(assets.AudioDir, ".."), assetPath.Replace("Assets/", "")); + if (!Directory.Exists(Path.GetDirectoryName(exportPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(exportPath)); + } + File.Copy(assetPath, exportPath, true); + //Debug.Log("Exported Audio asset to " + exportPath); + } + + public void ExportTexture(Texture2D asset) + { + string assetPath = AssetDatabase.GetAssetPath(asset.GetInstanceID()); + string exportPath = Path.Combine(assets.TextureDir, assetPath.Replace("Assets/", "")); + if (!Directory.Exists(Path.GetDirectoryName(exportPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(exportPath)); + } + if (Path.GetExtension(assetPath) == ".png") + { + File.Copy(assetPath, exportPath, true); + } + else + { + if (asset.format == TextureFormat.ARGB32 || asset.format == TextureFormat.RGB24) + { + File.WriteAllBytes(exportPath, asset.EncodeToPNG()); + } + else + { + Color[] texPixels = asset.GetPixels(); + Texture2D tex2 = new Texture2D(asset.width, asset.height, TextureFormat.ARGB32, false); + tex2.SetPixels(texPixels); + File.WriteAllBytes(exportPath, tex2.EncodeToPNG()); + } + } + //Debug.Log("Exported Texture asset to " + exportPath); + } + + public void ExportTags() + { + StringBuilder sb = new StringBuilder(); + sb.Append(""); + for (int i = 0; i < 31; i++) + { + sb.AppendFormat("{0}", LayerMask.LayerToName(i)); + } + sb.Append(""); + string exportPath = Path.Combine(assets.XmlDir, "LayerNames.xml"); + File.WriteAllText(exportPath, sb.ToString()); + Debug.Log("Exported all tags to " + exportPath); + } + + public void ExportOpenScene() + { + SceneWriter scene = new SceneWriter(resolver, assets); + scene.ExportDir = Path.Combine(assets.XmlDir, "Scenes"); + ScriptTranslator.ScriptNamespace = config.scriptNamespace; + + Debug.Log("----------------------- " + Path.GetFileName(EditorApplication.currentScene) + " -------------------------Start scene export"); + + if (ValidateOpenScene()) + { + scene.Write(Path.ChangeExtension(Path.GetFileName(EditorApplication.currentScene), "xml")); + } + else + { + Debug.LogError("Scene validation failed. Scene not exported!"); + return; + } + + if (config.showComponentsNotWritten) + { + string skippedComponents = ""; + foreach (string item in scene.componentsNotWritten) + { + if (config.allowedSkippedComponents.Contains(item)) { continue; } + + if (!allComponentsNotWritten.Contains(item)) + { + allComponentsNotWritten.Add(item); + } + skippedComponents += item + ", "; + } + if (skippedComponents != "") + { + Debug.Log("Skipped component: " + skippedComponents); + } + } + scene.componentsNotWritten.Clear(); + } + + private bool ValidateOpenScene() + { + foreach (var group in config.groups) + { + string levelName = Path.GetFileNameWithoutExtension(EditorApplication.currentScene); + if (!String.IsNullOrEmpty(group.validationScript) && group.scenes.Contains(levelName)) + { + ILevelValidation validator = (ILevelValidation)Activator.CreateInstance(null, group.validationScript).Unwrap(); + return validator.ValidateLevel(levelName); + } + } + return true; + } + + public void ExportAllScenes() + { + allComponentsNotWritten.Clear(); + + foreach (SceneGroup group in config.groups) + { + Debug.Log("************************ START LEVEL EXPORT FOR GROUP " + group.name + " ****************************"); + + // Find all Unity scenes starting from the base path and record the path to the scene + Dictionary scenePaths = new Dictionary(); + foreach (string file in Directory.GetFiles(group.baseSceneDir, "*.unity", SearchOption.AllDirectories)) + { + scenePaths[Path.GetFileNameWithoutExtension(file)] = file; + } + + foreach (string name in group.scenes) + { + if (!scenePaths.ContainsKey(name)) + { + Debug.Log("Could not find scene " + name); + continue; + } + if (EditorApplication.OpenScene(scenePaths[name])) + { + ExportOpenScene(); + } + else + { + Debug.Log("Could not open scene " + scenePaths[name]); + } + } + } + + string notWritten = ""; + foreach (string item in allComponentsNotWritten) + { + notWritten += item + ", "; + } + + Debug.Log(notWritten); + } + + public void ExportActiveScenes() + { + allComponentsNotWritten.Clear(); + + SceneGroup group = null; + if (activeGroup >= 0 && activeGroup < config.groups.Count) + { + group = config.groups[activeGroup]; + } + + if (group == null) + { + Debug.LogError("Export failed: Active group " + activeGroup + " does not exist."); + return; + } + + Debug.Log("************************ START LEVEL EXPORT FOR GROUP " + group.name + " ****************************"); + + // Find all Unity scenes starting from the base path and record the path to the scene + Dictionary scenePaths = new Dictionary(); + foreach (string file in Directory.GetFiles(group.baseSceneDir, "*.unity", SearchOption.AllDirectories)) + { + scenePaths[Path.GetFileNameWithoutExtension(file)] = file; + } + + foreach (string name in group.scenes) + { + if (!scenePaths.ContainsKey(name)) + { + Debug.Log("Could not find scene " + name); + continue; + } + if (EditorApplication.OpenScene(scenePaths[name])) + { + ExportOpenScene(); + } + else + { + Debug.Log("Could not open scene " + scenePaths[name]); + } + } + + string notWritten = ""; + foreach (string item in allComponentsNotWritten) + { + notWritten += item + ", "; + } + + Debug.Log(notWritten); + } + + private Dictionary unityScriptFiles = new Dictionary(); + private Dictionary xnaScriptFiles = new Dictionary(); + + private void FindAllUnityScripts() + { + foreach (string file in Directory.GetFiles(Path.Combine(Application.dataPath, config.unityScriptDir), "*.cs", SearchOption.AllDirectories)) + { + unityScriptFiles[Path.GetFileNameWithoutExtension(file)] = file; + } + } + + private void FindAllXnaScripts() + { + foreach (string file in Directory.GetFiles(Path.Combine(xnaBaseDir, config.xnaAssets.ScriptDir), "*.cs", SearchOption.AllDirectories)) + { + xnaScriptFiles[Path.GetFileNameWithoutExtension(file)] = file; + } + } + + internal void ExportAllScripts() + { + FindAllUnityScripts(); + Debug.Log("Found " + unityScriptFiles.Count + " unity scripts"); + FindAllXnaScripts(); + Debug.Log("Found " + xnaScriptFiles.Count + " XNA scripts"); + + int converted = 0; + foreach (var className in unityScriptFiles.Keys) + { + if (config.excludedScripts.Contains(className)) + { + continue; + } + string scriptFile = unityScriptFiles[className]; + if (config.excludedPaths.Any(s => scriptFile.Contains("\\" + s + "\\"))) + { + continue; + } + TranslateScriptFile(scriptFile); + converted++; + } + Debug.Log("Converted " + converted + " scripts"); + int purged = 0; + foreach (var className in xnaScriptFiles.Keys) + { + if (config.excludedScripts.Contains(className)) + { + continue; + } + if (!unityScriptFiles.ContainsKey(className)) + { + File.Delete(xnaScriptFiles[className]); + purged++; + } + } + Debug.Log("Purged " + purged + " script files"); + } + + private void TranslateScriptFile(string scriptFile) + { + try + { + string scriptText = File.ReadAllText(scriptFile); + string[] textLines = scriptText.Split('\n'); + PressPlay.FFWD.Exporter.ScriptTranslator trans = new ScriptTranslator(textLines); + trans.Translate(); + string newText = trans.ToString(); + string newPath = scriptFile.Replace(Path.Combine(Application.dataPath, config.unityScriptDir), Path.Combine(xnaBaseDir, config.xnaAssets.ScriptDir)); + if (!Directory.Exists(Path.GetDirectoryName(newPath))) + { + Directory.CreateDirectory(Path.GetDirectoryName(newPath)); + } + File.WriteAllText(newPath, newText); + } + catch (Exception ex) + { + Debug.Log("Error when converting script " + Path.GetFileName(scriptFile) + ": " + ex.Message); + } + } + } + + public ExportConfig config; + public string xnaBaseDir = ""; + public int activeGroup = 0; + + public ExportSceneWizard() + { + config = ExportConfig.Load(); + if (EditorPrefs.HasKey("FFWD XNA dir " + PlayerSettings.productName)) + { + xnaBaseDir = EditorPrefs.GetString("FFWD XNA dir " + PlayerSettings.productName); + } + if (EditorPrefs.HasKey("FFWD active group")) + { + activeGroup = EditorPrefs.GetInt("FFWD active group"); + } + } + + public void OnWizardCreate() + { + config.Save(); + EditorPrefs.SetString("FFWD XNA dir " + PlayerSettings.productName, xnaBaseDir); + EditorPrefs.SetInt("FFWD active group", activeGroup); + } + + public void OnWizardOtherButton() + { + } + + [MenuItem("Press Play/FFWD/Configuration")] + static void CreateWizard() + { + ScriptableWizard.DisplayWizard("Edit FFWD Configuration", typeof(ExportSceneWizard), "Save", "Cancel"); + } + + [MenuItem("Press Play/FFWD/Export settings")] + static void ExportRenderSettings() + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportTags(); + } + + [MenuItem("Press Play/FFWD/Export all resources")] + static void ExportAllResources() + { + ExportCommands cmd = new ExportCommands(); + UnityEngine.Object[] os = Resources.LoadAll(""); + foreach (var item in os) + { + try + { + if (item is GameObject) + { + cmd.ExportResource(item as GameObject); + } + if (item is TextAsset) + { + cmd.ExportTextAsset(item as TextAsset); + } + if (item is Texture2D) + { + cmd.ExportTexture(item as Texture2D); + } + if (item is AudioClip) + { + cmd.ExportAudio(item as AudioClip); + } + if (item is Material) + { + cmd.ExportMaterial(item as Material); + } + } + catch (Exception ex) + { + Debug.Log("Could not export " + item.name + ". " + ex.Message); + } + } + Resources.UnloadUnusedAssets(); + } + + [MenuItem("Press Play/FFWD/Export open scene")] + static void ExportOpenScene() + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportOpenScene(); + } + + [MenuItem("Press Play/FFWD/Export all scenes")] + static void ExportAllScenes() + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportAllScenes(); + } + + [MenuItem("Press Play/FFWD/Export active scene group")] + static void ExportActiveScenes() + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportActiveScenes(); + } + + [MenuItem("Press Play/FFWD/Export all scripts")] + static void ExportAllScripts() + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportAllScripts(); + } + + [MenuItem("Press Play/FFWD/Full export")] + static void FullExport() + { + ExportAllScenes(); + ExportAllScripts(); + ExportAllResources(); + ExportTags(null); + } + + [MenuItem("CONTEXT/Transform/FFWD export resource")] + static void ExportTransform(MenuCommand command) + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportResource(((Transform)command.context).gameObject); + } + + [MenuItem("CONTEXT/MonoBehaviour/FFWD export script")] + static void ExportScript(MenuCommand command) + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportScript(command.context as MonoBehaviour); + } + + [MenuItem("CONTEXT/TextAsset/FFWD export resource")] + static void ExportTextAsset(MenuCommand command) + { + ExportCommands cmd = new ExportCommands(); + TextAsset asset = command.context as TextAsset; + cmd.ExportTextAsset(asset); + } + + [MenuItem("CONTEXT/TagManager/FFWD export tags")] + static void ExportTags(MenuCommand command) + { + ExportCommands cmd = new ExportCommands(); + cmd.ExportTags(); + } +} + diff --git a/Demos/AnimationAndLight/Assets/Editor/FFWD/PolygonColliderEditor.cs b/Demos/AnimationAndLight/Assets/Editor/FFWD/PolygonColliderEditor.cs new file mode 100644 index 00000000..fb626394 --- /dev/null +++ b/Demos/AnimationAndLight/Assets/Editor/FFWD/PolygonColliderEditor.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UnityEditor; +using UnityEngine; + +[CustomEditor(typeof(FFWD_PolygonCollider))] +public class PolygonColliderEditor : Editor +{ + void OnSceneGUI() + { + FFWD_PolygonCollider pc = (FFWD_PolygonCollider)target; + if (pc.relativePoints == null) + { + return; + } + for (int i = 0; i < pc.relativePoints.Length; i++) + { + Vector3 absPos = pc.transform.position + pc.convertPoint(pc.relativePoints[i]); + Vector3 v = Handles.PositionHandle(absPos, Quaternion.identity); + pc.relativePoints[i] = pc.convertPoint(v - pc.transform.position); + } + + if (GUI.changed) + { + EditorUtility.SetDirty(target); + } + } +} diff --git a/Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll b/Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll new file mode 100644 index 0000000000000000000000000000000000000000..43eb24a25976a85dc37a42c1910ff8c900fdfb9a GIT binary patch literal 54784 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 literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll.config b/Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll.config new file mode 100644 index 00000000..29b63755 --- /dev/null +++ b/Demos/AnimationAndLight/Assets/Editor/FFWD/PressPlay.FFWD.Exporter.dll.config @@ -0,0 +1,39 @@ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Demos/AnimationAndLight/Assets/FFWD/ContentSerializerIgnoreAttribute.cs b/Demos/AnimationAndLight/Assets/FFWD/ContentSerializerIgnoreAttribute.cs new file mode 100644 index 00000000..fb547c9c --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/ContentSerializerIgnoreAttribute.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// This attribute controls that XNA will not try to load this member from XML. It will also not be exported. +/// At the moment it is required on all properties as XNA will try to serialize them in if they are not marked. +/// +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] +sealed class ContentSerializerIgnoreAttribute : Attribute +{ +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/FFWD_DontExportAttribute.cs b/Demos/AnimationAndLight/Assets/FFWD/FFWD_DontExportAttribute.cs new file mode 100644 index 00000000..cd2ee0f4 --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/FFWD_DontExportAttribute.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// This attribute is placed on the MonoBehaviours that you don't want to export to FFWD. +/// When applied to a method, that method will be removed when the script is converted. +/// When applied to a field, the value of that property will be excluded in the XML and the field will be marked as ContentSerializerIgnore in XNA. +/// Note that this will automatically happen to fields marked with HideInInspector. +/// +[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method | AttributeTargets.Field, Inherited = false, AllowMultiple = false)] +sealed class FFWD_DontExportAttribute : Attribute +{ +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportAsResourceAttribute.cs b/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportAsResourceAttribute.cs new file mode 100644 index 00000000..804be892 --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportAsResourceAttribute.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// This attribute is placed on a script to control how it is converted to FFWD. +/// +[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] +sealed class FFWD_ExportAsResourceAttribute : Attribute +{ +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportOptionsAttribute.cs b/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportOptionsAttribute.cs new file mode 100644 index 00000000..af3b501a --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/FFWD_ExportOptionsAttribute.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Text; + +/// +/// This attribute is placed on a script to control how it is converted to FFWD. +/// +[AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] +sealed class FFWD_ExportOptionsAttribute : Attribute +{ + /// + /// Use a specific component writer class to write the component with. + /// + public string UseComponentWriter { get; set; } + /// + /// If the script is already present in the target directory, do not overwrite it. + /// This is to make sure that scripts that need heavy customization in XNA do not get overwritten. + /// + public bool DontOverwrite { get; set; } +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/FFWD_PolygonCollider.cs b/Demos/AnimationAndLight/Assets/FFWD/FFWD_PolygonCollider.cs new file mode 100644 index 00000000..0fcfb8f5 --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/FFWD_PolygonCollider.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using System.Collections; + +[ExecuteInEditMode] +public class FFWD_PolygonCollider : MonoBehaviour +{ + public enum Plane2d { XY, XZ, YZ } + + public bool isTrigger; + public Plane2d plane2d = Plane2d.XZ; + [ContentSerializerIgnore] + public bool snapToPlane = false; + public Vector2[] relativePoints; + + void OnDrawGizmosSelected() + { + if (relativePoints != null && relativePoints.Length > 1) { + Gizmos.color = Color.green; + for (int i = 1; i < relativePoints.Length; i++) { + Gizmos.DrawLine(transform.position + convertPoint(relativePoints[i - 1]), transform.position + convertPoint(relativePoints[i])); + } + Gizmos.DrawLine(transform.position + convertPoint(relativePoints[relativePoints.Length - 1]), transform.position + convertPoint(relativePoints[0])); + Gizmos.DrawSphere(transform.position, 0.5f); + } else { + Gizmos.color = Color.red; + Gizmos.DrawSphere(transform.position, 1f); + } + } + + public Vector3 convertPoint(Vector2 point) + { + switch (plane2d) { + case Plane2d.XY: + return new Vector3(point.x, point.y, 0); + case Plane2d.XZ: + return new Vector3(point.x, 0, point.y); + case Plane2d.YZ: + return new Vector3(0, point.x, point.y); + } + return Vector3.zero; + } + + public Vector2 convertPoint(Vector3 point) + { + switch (plane2d) + { + case Plane2d.XY: + return new Vector2(point.x, point.y); + case Plane2d.XZ: + return new Vector2(point.x, point.z); + case Plane2d.YZ: + return new Vector2(point.y, point.z); + } + return Vector2.zero; + } + + void Update() + { + if (snapToPlane) { + Vector3 newPos = transform.position; + switch (plane2d) { + case Plane2d.XY: + newPos.z = 0; + break; + case Plane2d.XZ: + newPos.y = 0; + break; + case Plane2d.YZ: + newPos.x = 0; + break; + } + if (transform.position != newPos) { + transform.position = newPos; + } + } + } +} + diff --git a/Demos/AnimationAndLight/Assets/FFWD/XNAEllipsoidParticleEmitter.cs b/Demos/AnimationAndLight/Assets/FFWD/XNAEllipsoidParticleEmitter.cs new file mode 100644 index 00000000..26c51e3a --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/XNAEllipsoidParticleEmitter.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using System.Collections; + +[FFWD_DontExport] +public class XNAEllipsoidParticleEmitter : MonoBehaviour { + public Vector3 ellipsoid; + public bool oneShot = false; + public Vector3 tangentVelocity; + public float minEmitterRange; + + public StretchParticles stretchParticles = StretchParticles.Billboard; + + public enum StretchParticles{ + Billboard, + Stretched, + HorizontalBillboard + } + + // Use this for initialization + void Awake () { + Destroy(this); + } +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/XNALineRendererExport.cs b/Demos/AnimationAndLight/Assets/FFWD/XNALineRendererExport.cs new file mode 100644 index 00000000..491f6b3d --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/XNALineRendererExport.cs @@ -0,0 +1,42 @@ +using UnityEngine; +using System.Collections; + +[FFWD_DontExport] +[ExecuteInEditMode] +public class XNALineRendererExport : MonoBehaviour { + public float startWidth; + public float endWidth; + public Color startColor = Color.white; + public Color endColor = Color.white; + + public Vector3[] positions; + + LineRenderer l; + + void Start() + { + Destroy(this); + } + + void Update() + { + //if (!Application.isEditor){return;} + + if (l == null) + { + l = GetComponent(); + } + + if (l != null) + { + l.SetWidth(startWidth, endWidth); + l.SetColors(startColor, endColor); + + l.SetVertexCount(positions.Length); + for (int i = 0; i < positions.Length; i++) { + l.SetPosition(i,positions[i]); + } + } + + } +} diff --git a/Demos/AnimationAndLight/Assets/FFWD/XNAMeshCollider.cs b/Demos/AnimationAndLight/Assets/FFWD/XNAMeshCollider.cs new file mode 100644 index 00000000..e896f73f --- /dev/null +++ b/Demos/AnimationAndLight/Assets/FFWD/XNAMeshCollider.cs @@ -0,0 +1,13 @@ +using UnityEngine; +using System.Collections; + +/// +/// This is a marker script to tell U2X to export this collider to XNA. Normal mesh colliders are not exported. +/// +public class XNAMeshCollider : MonoBehaviour { + + void Start () { + //gameObject.active = false; + Destroy(gameObject); + } +} \ No newline at end of file diff --git a/Demos/AnimationAndLight/Assets/Scenes/TestScene.unity b/Demos/AnimationAndLight/Assets/Scenes/TestScene.unity new file mode 100644 index 0000000000000000000000000000000000000000..3d1d6a984f36273819b19abd7311885220d7c95d GIT binary patch literal 19896 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 literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/AudioManager.asset b/Demos/AnimationAndLight/ProjectSettings/AudioManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..af3241ba2d81903843d6f9a14266eb3ce615d9bb GIT binary patch literal 458 zcmYk2O-{ow5QQiFOKdm*i=3c~lzl~sDp*uSSagd_Jgx$69HsV#RZhYUxCnm5%tWHGYo)i*ZJL z44g30BC3rR);B7^$Fa>{@Bf~qZCis~zLJ%*U4S_RD+S@Th>1(o(i@l41@fIvt*we_ zQqbv{nC8hEW3|pjB~4_{xFKoE)(tQeJC^%5i8R6gcP}(Nit}%gJvdCw(6mO z1AYewu81GOl|R9?#rDodTZq&nmb|kbf1k%5djM9y0<4_@z#Y2E{c5{5tic5(!b!a*O~$#`sqbQjBjsQhy^=)9 zCBis32e?PeQ6~%a8ch1{PClwM9O!{+8ytC9Bc}l4dXrX`V?tS19}?w_!#9YVa#Owi1Ze7<@T&G+EaeiY^Uck<&P>XE{t`@In3jiU+m+!U-~QK j;Pt7JgrEEsht2p}1{hE>J2_0G!ME$6~&m=Px;ayROTmeSHGlTA$jme)qL4TuQ!qjaZxLAe?TL9dzX`#74qt{J z5BKUR9BPU_Jo+!EdCVlnT-F)`Ym(8Zag3==*|s%YW6IiD)t*r(P|`|E#1!N;urq0+ vMzg-%bM}X4=6lma*Xr=h7jjRGJl565gnndpFWC}I8PoHX9GJxa$EElK=z>`v literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/EditorSettings.asset b/Demos/AnimationAndLight/ProjectSettings/EditorSettings.asset new file mode 100644 index 0000000000000000000000000000000000000000..c6c024ee8bdb8f99912271ee6dac39fe0121fe83 GIT binary patch literal 504 zcmZuuOHRZv40ZW0IR(pB>aakp_^4=Dv8V=?C~d+_P(D@as+1Ks;R+mqW3i&xDW5@_ zC%wA1-%ITjAbA5wJ^vtq_~jEbIF|wS)9lXqVRBW_DN#tJ2PC9A=V)v-CL4 zA9DB{$1$P&l~_oPK9mYkyJZU(qE$fcky;U~gBO4u3X5xpvmEUGP4%d1oNKABj35^` zqwqWKQe^lwH&KfYG}($$!uI^WLedRCO0`{&JqvQ8_B?3r+B3AdgL|9j>=ZBP>5c!WVBfbEJ*J*bE literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/InputManager.asset b/Demos/AnimationAndLight/ProjectSettings/InputManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..42df01f75f1d4cd2d9ae854b676b2d644129155b GIT binary patch literal 2968 zcma)8TW`}a6!y4`!MKibzm+?@OwjR!1Z>kZbx0dX6AUCIP{KFWVpr-5!JKU7xi>7|PMUQW`A;?z|OW(^_!C8-X!V}bY+L|w+F?@HZ z9mNM7OMWa~D_r(COGD_acrrHf&(K^e>LjA_ibnlKt+BtDdFheitQI~%yW->lmd!Fg zL?6vJ3n$Bld|peXE#pJvaz5niW2Z%#$_$#5Hupp}MWb>K#9C3g_?GiB*a`yrK3Wv$7#MP>AonBh68 z81&;1&*-J)c+A?$&W;soIQ;Q@;XPw}A24CogR$$JV7_QWe+mwNqrud0@mwJ9TTw5e z1Grt;=tvob>NI4$*V@=VP-oZ)U2SRrYT% z7$CtHs4a)>j$Gj(Z-|&J@I)~BI525c+pwp%XRECB^V7zb@MO)ei=}`!5_OlF z{X&oY!n%ZtVse<@6^WuXm7&o4dY9+pnD>}|A~Y%)-wg&nYdUn|_l1gv%)k@|B}S$e zGQaC5tj;A@;fxSuJEH!gFSVoDLIp1Mf9*l$a}D~7^w{$PN!eccy@O{U)!Wz8+@Jp9S*uz6u91elF* z2onvS6Nrljc9cNmT+yO05qKFSWOn$xK$JbqMx+A6RMmpI1k}DyY4DM{t{OJ<)+RUterL-=8r{(vgXGaEz24D&n!5XT!)F`$Audw^L%xZ?<>TM!YDpaNpX;cgEW_U>?Z4?Rq4&N(aQoO8}O z=bZI-{|3+MF!KIVYj(C`RLur^(9F<+Qo8P3yX0zVWznp19h%d_Fg8@} zOR|dU(96@a>$+JaI?Fv-O||z_Yo^E`KwPLw-8EJ0DAnfmEw^V{51^qgj`GYza`lde6uFYO&JrS=kD*Lf6LDjM49z ze^$1kx!lEof_!ak3w1QBN281F?Bwc7dY8G_9uOD$E_MJY#fANx> z>;+JYix%^Ju{UIeT#RIl5X{9aKwRj%m<>>hiwVZX9LNf}Fh3=TGwZM0 zE$=T5cgKy7g4|ymL5v=`GaWbf7jyL#4J4S0d6uw?ak1BX&Ic&P#YE%cNXQDgSil&) zQtsj?n#PIZ+kxH_~Niu8)`VFLo zWPHmQNyc}?#AJLAbz~Vo2n3VyBOosHW&8wCk__8{{tRg$8NV<_lJP4sF&V!>9a+Zj z0>Nbb0f-BI8Gizl%g|H#3U$1ScJxnR{SwC@nw?VY%zDfE`9!^KE&4l{UbA~@O$)N} nvTRYA9(&c>Xv+LYi5b0J`e92!b9U6*2Ie7g|HoR!fA{bYiByYl literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/NetworkManager.asset b/Demos/AnimationAndLight/ProjectSettings/NetworkManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..2d58674dfac6be9c56976ceea47592d736a614d6 GIT binary patch literal 730 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 U>36Bx!{3Y%bpkKX>;+2x1G1~OfB*mh literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/TagManager.asset b/Demos/AnimationAndLight/ProjectSettings/TagManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..27837b844b634ead4c3134a5146fd1a8118cae8a GIT binary patch literal 5390 zcmchbXIB$J6ov;Yc2TgGV6P|%_6lObE`r!~j7yAS(9NR8-sLCx>x^^fW;{3Ky(jz0 zIcKu&?z8WGcCy^F#+ddq#&j$+#3hnqjq8}F$>(khhkeQzp!ysO3vJL z`*guTp)?*xnL%60+j8O#xG~es5t~G@-}{drxvrkB>}b~fsaC6W6PMi_vV}{wWDCxw z&z2+OPE~`FztPXebh-ntqI@zQo5U8%o(YTKx0Admy>VSysbC)4#QIvq(Fi%Tomz_)m5%#)&KOi{mOD?wGqqaz zCpP9vbd~3v)7B&GCaO`k}sPoHYdcnZJQ!Cmuk8}W!s?G zJb%8PfMVTVY`(xXF?wYEeNs_Hj2>Ycy4WHH>If*7^qsHCOypp(<$!=Aunv2`K` zi>(I)6x;8`G6L7cIvvyO;ol%~u-HaGK(PZ}Y?Ht>vCS#Owul@owiOUHvEj07U);nF zdaG@MHIuw7Q=8a!Vb!AiN$wCiEv>v$-(7bCqS5M*x7sCG&1$z}!k4I7b%`8owFeN5 zR^8n3_X=3k>Q14R6**Wd2MD0W{k})Qn%2G)TKh!~);a(PpvB$(pnx^4Ln*WliyW+V z1Q0-rd;L)XYg)%rXdM?hSnC8JfEIW9lLFSXdL7g3k?#{ZSnCuZfEM@pegSJ*r&DOT zcW6JnKI{)?0RgnQ%eyZ0FHX}Ma744!IxlkYYFz*X(Bd9{QNWtkr4(B9ZcamAtt$-F z5kQNZ{8a&KTGv83+A2+cP~_m%x(*1S#a(_#z?#-D>4d3h-4HogYXlIDT3PP$^uIS6 zR94fvRXgw16s_BIy&L+Mc!z;H0%&oUzbjx(>s}~FTSe=>$ib`i01!ZnyZl1|Yg*PZ zeidk|Xgv}+SSt?*pv7JOv4AzLh;+hKv_?e^)+zu3XmOW+B4ACc7?fzMXgw7HjaoVG@}C8)X?<}_vq%1`$iZ6Q00FeP%YPTJru8F*)=!axwSEDD4uu=0A8UTQ LN$(=zeZ>3)o`24X literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/ProjectSettings/TimeManager.asset b/Demos/AnimationAndLight/ProjectSettings/TimeManager.asset new file mode 100644 index 0000000000000000000000000000000000000000..c6bbefd5cdfbf0f0d2ab59f3c4d1b2afa77d0e06 GIT binary patch literal 318 zcmZQzV3cEEV6%T zZ(?3zdTJ4aQ(|!{g8)P$m;@;T0Tv(*^~@_VHe$$)_fN`7O)l}sOi6XiNlY&WOTrYw zOa*C5%gIkHVQ|Z=NKH`y*-~7RS^!qe1d;^;uqLQWA&PwyD>8FSa}^wOa`Ma3wJ}3< lVbPWw4>CVEIWZ>{Yyrr*Ab@NEj1Lk6c@cy`{s&<&0046cGI9U_ literal 0 HcmV?d00001 diff --git a/Demos/AnimationAndLight/Unity-csharp.sln b/Demos/AnimationAndLight/Unity-csharp.sln new file mode 100644 index 00000000..5e963519 --- /dev/null +++ b/Demos/AnimationAndLight/Unity-csharp.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2008 + +Project("{82DD98F1-D663-ACC3-18E6-A8EC4AB69B7A}") = "Unity", "Assembly-CSharp-vs.csproj", "{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}" +EndProject +Project("{82DD98F1-D663-ACC3-18E6-A8EC4AB69B7A}") = "Unity", "Assembly-CSharp-Editor-vs.csproj", "{6311E6C6-0A20-383B-320B-694068DE37A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.Build.0 = Release|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Assembly-CSharp.csproj + Policies = $0 + $0.TextStylePolicy = $1 + $1.inheritsSet = null + $1.scope = text/x-csharp + $0.CSharpFormattingPolicy = $2 + $2.inheritsSet = Mono + $2.inheritsScope = text/x-csharp + $2.scope = text/x-csharp + $0.TextStylePolicy = $3 + $3.FileWidth = 120 + $3.TabWidth = 4 + $3.EolMarker = Unix + $3.inheritsSet = Mono + $3.inheritsScope = text/plain + $3.scope = text/plain + EndGlobalSection + +EndGlobal diff --git a/Demos/AnimationAndLight/Unity.sln b/Demos/AnimationAndLight/Unity.sln new file mode 100644 index 00000000..09ae1b6f --- /dev/null +++ b/Demos/AnimationAndLight/Unity.sln @@ -0,0 +1,45 @@ +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2008 + +Project("{82DD98F1-D663-ACC3-18E6-A8EC4AB69B7A}") = "Unity", "Assembly-CSharp.csproj", "{CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}" +EndProject +Project("{82DD98F1-D663-ACC3-18E6-A8EC4AB69B7A}") = "Unity", "Assembly-CSharp-Editor.csproj", "{6311E6C6-0A20-383B-320B-694068DE37A5}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CD8C9303-404B-FB8D-6B9B-21988D5CAC0A}.Release|Any CPU.Build.0 = Release|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6311E6C6-0A20-383B-320B-694068DE37A5}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = Assembly-CSharp.csproj + Policies = $0 + $0.TextStylePolicy = $1 + $1.inheritsSet = null + $1.scope = text/x-csharp + $0.CSharpFormattingPolicy = $2 + $2.inheritsSet = Mono + $2.inheritsScope = text/x-csharp + $2.scope = text/x-csharp + $0.TextStylePolicy = $3 + $3.FileWidth = 120 + $3.TabWidth = 4 + $3.EolMarker = Unix + $3.inheritsSet = Mono + $3.inheritsScope = text/plain + $3.scope = text/plain + EndGlobalSection + +EndGlobal diff --git a/Demos/AnimationAndLight/Unity.userprefs b/Demos/AnimationAndLight/Unity.userprefs new file mode 100644 index 00000000..0e0aceff --- /dev/null +++ b/Demos/AnimationAndLight/Unity.userprefs @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file