//============= Copyright (c) Ludic GmbH, All rights reserved. ============== // // Purpose: Part of the My Behaviour Tree Controller Code // //============================================================================= using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using MyBT; #if UNITY_EDITOR using UnityEditor; [CustomEditor(typeof(NamedSkybox2TexStereo))] public class NamedSkybox2TexStereoInspector : ComponentHandlerInspector { } #endif [System.Serializable] public class SkyboxItem2TexStereo { public string skyboxLabel; public Texture2D skyboxTexture_L0; public Texture2D skyboxTexture_L1; public Texture2D skyboxTexture_R0; public Texture2D skyboxTexture_R1; public float rotation; } [System.Serializable] public class NamedSkybox2TexStereo : ComponentHandler { public override string TypeLabel () { return "Skybox"; } public override string ContentLabel() { UpdateComponent(); return ""; } public override void UpdateComponent() { base.UpdateComponent(); } public List skyboxes; public Material skyboxInterpolationMaterialPrefab; private Material skyboxInterpolationMaterialInstance; public Material skyboxStaticMaterialPrefab; private Material skyboxStaticMaterialInstanceA; private Material skyboxStaticMaterialInstanceB; // public float rotation; // public float exposure = 1.0f; public override string titleText { get { return "Set \"TexName1\" \"TexName2\" , FadeIn/FadeOut between"; } } public override string[][] helpText { get { return new string[][] { new string[] {"Set", "Set Panoramic Image", $"BTC.Set(\"{roomId}\", \"{gameObject.name}\", \"TextureName1\", \"TextureName2\")"}, new string[] {"Show", "Show Texture 1", $"BTC.Show(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"Hide", "Show Texture 2", $"BTC.Hide(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"FadeIn", "Fade From Texture 1 to 2", $"BTC.FadeIn(\"{roomId}\", \"{gameObject.name}\")"}, new string[] {"FadeOut", "Fade From Texture 2 to 1", $"BTC.FadeOut(\"{roomId}\", \"{gameObject.name}\")"}, }; } } public override void Start() { skyboxInterpolationMaterialInstance = new Material(skyboxInterpolationMaterialPrefab); skyboxStaticMaterialInstanceA = new Material(skyboxStaticMaterialPrefab); skyboxStaticMaterialInstanceB = new Material(skyboxStaticMaterialPrefab); } public override void Set(NodeState nodeState, string texName1, string texName2) { if ((nodeState == NodeState.FirstRun) || (nodeState == NodeState.Running)) { Texture2D texL0_A = null; Texture2D texL1_A = null; Texture2D texR0_A = null; Texture2D texR1_A = null; float rotation_A = 0; foreach (SkyboxItem2TexStereo skyboxItem in skyboxes) { if (skyboxItem.skyboxLabel == texName1) { texL0_A = skyboxItem.skyboxTexture_L0; texL1_A = skyboxItem.skyboxTexture_L1; texR0_A = skyboxItem.skyboxTexture_R0; texR1_A = skyboxItem.skyboxTexture_R0; rotation_A = skyboxItem.rotation; } } Texture2D texL0_B = null; Texture2D texL1_B = null; Texture2D texR0_B = null; Texture2D texR1_B = null; float rotation_B = 0; foreach (SkyboxItem2TexStereo skyboxItem in skyboxes) { if (skyboxItem.skyboxLabel == texName2) { texL0_B = skyboxItem.skyboxTexture_L0; texL1_B = skyboxItem.skyboxTexture_L1; texR0_B = skyboxItem.skyboxTexture_R0; texR1_B = skyboxItem.skyboxTexture_R1; rotation_B = skyboxItem.rotation; } } if ((texL0_A != null) && (texL0_B != null)) { skyboxInterpolationMaterialInstance.SetTexture("_MainTexL1_A", texL0_A); skyboxInterpolationMaterialInstance.SetTexture("_MainTexL2_A", texL1_A); skyboxInterpolationMaterialInstance.SetTexture("_MainTexR1_A", texR0_A); skyboxInterpolationMaterialInstance.SetTexture("_MainTexR2_A", texR1_A); skyboxInterpolationMaterialInstance.SetFloat("_x_offset_A", rotation_A); skyboxInterpolationMaterialInstance.SetTexture("_MainTexL1_B", texL0_B); skyboxInterpolationMaterialInstance.SetTexture("_MainTexL2_B", texL1_B); skyboxInterpolationMaterialInstance.SetTexture("_MainTexR1_B", texR0_B); skyboxInterpolationMaterialInstance.SetTexture("_MainTexR2_B", texR1_B); skyboxInterpolationMaterialInstance.SetFloat("_x_offset_B", rotation_B); skyboxStaticMaterialInstanceA.SetTexture("_MainTexL1", texL0_A); skyboxStaticMaterialInstanceA.SetTexture("_MainTexL2", texL1_A); skyboxStaticMaterialInstanceA.SetTexture("_MainTexR1", texR0_A); skyboxStaticMaterialInstanceA.SetTexture("_MainTexR2", texR1_A); skyboxStaticMaterialInstanceA.SetFloat("_x_offset", rotation_A); skyboxStaticMaterialInstanceB.SetTexture("_MainTexL1", texL0_B); skyboxStaticMaterialInstanceB.SetTexture("_MainTexL2", texL1_B); skyboxStaticMaterialInstanceB.SetTexture("_MainTexR1", texR0_B); skyboxStaticMaterialInstanceB.SetTexture("_MainTexR2", texR1_B); skyboxStaticMaterialInstanceB.SetFloat("_x_offset", rotation_B); SetAlpha(0); Task.SetSucceeded(); return; } else { Debug.LogError($"NamedSkybox.Set: skybox with name {texName1} or {texName2} not available"); Task.SetFailed(); return; } } } public override void Update() { base.Update(); } #region both values setting public override void SetAlpha(float alpha) { Task.log = $"{alpha}"; skyboxInterpolationMaterialInstance.SetFloat("_Blend", alpha); if (alpha <= 0) { RenderSettings.skybox = skyboxStaticMaterialInstanceA; } else if (alpha >= 1) { RenderSettings.skybox = skyboxStaticMaterialInstanceB; } else { RenderSettings.skybox = skyboxInterpolationMaterialInstance; } DynamicGI.UpdateEnvironment(); } public override float GetAlpha() { return skyboxInterpolationMaterialInstance.GetFloat("_Blend"); } #endregion }