private void updateProbe(ReflectionProbeData data)
 {
     data.skyboxMateral.SetTexture("_Tex", data.renderedCube);
     data.reflectionSphere.transform.rotation = Quaternion.identity;//align to world space
     data.render.material = data.skyboxMateral;
     data.probe.RenderProbe();
 }
 private void init()
 {
     if (cameraObject == null)
     {
         cameraObject             = new GameObject("TRReflectionCamera");
         reflectionCamera         = cameraObject.AddComponent <Camera>();
         eveCameraFix             = cameraObject.AddComponent <CameraAlphaFix>();
         reflectionCamera.enabled = false;
     }
     if (skyboxShader == null)
     {
         skyboxShader = KSPShaderTools.TexturesUnlimitedLoader.getShader("SSTU/Skybox/Cubemap");
         if (skyboxShader == null)
         {
             MonoBehaviour.print("ERROR: SSTUReflectionManager - Could not find skybox shader.");
         }
     }
     probeData = createProbe();
     if (HighLogic.LoadedSceneIsEditor)
     {
         probeData.reflectionSphere.transform.position = new Vector3(0, 10, 0);
     }
     else if (HighLogic.LoadedSceneIsFlight)
     {
         //probe position updated during Update()
     }
 }
        public void vesselCreated(Vessel vessel)
        {
            ReflectionProbeData data = createProbe();

            data.reflectionSphere.transform.position = vessel.transform.position;
            VesselReflectionData d = new VesselReflectionData(vessel, data);

            vesselReflectionProbeDict.Add(vessel, d);
            MonoBehaviour.print("SSTUReflectionManager vesselCreated() : " + vessel + " :: " + d);
        }
        private ReflectionProbeData createProbe()
        {
            GameObject refSphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);

            GameObject.DestroyImmediate(refSphere.GetComponent <Collider>());
            refSphere.transform.localScale = new Vector3(10, 10, 10);
            refSphere.layer = skyboxLayer;
            refSphere.name  = "SSTUReflectionProbe";

            MeshRenderer rend = refSphere.GetComponent <MeshRenderer>();
            Material     mat  = new Material(skyboxShader);

            rend.material = mat;//still has to be updated later
            ReflectionProbe     probe = createReflectionProbe(refSphere);
            RenderTexture       tex   = createTexture(envMapSize);
            ReflectionProbeData data  = new ReflectionProbeData(refSphere, rend, mat, probe, tex);

            data.updateTime = mapUpdateSpacing;//force update on the first frame it is 'loaded'
            return(data);
        }
        private void init()
        {
            MonoBehaviour.print("SSTUReflectionManager init()");
            if (cameraObject == null)
            {
                cameraObject             = new GameObject("TRReflectionCamera");
                reflectionCamera         = cameraObject.AddComponent <Camera>();
                eveCameraFix             = cameraObject.AddComponent <CameraAlphaFix>();
                reflectionCamera.enabled = false;
                MonoBehaviour.print("SSTUReflectionManager created camera: " + reflectionCamera);
            }
            if (skyboxShader == null)
            {
                skyboxShader = KSPShaderTools.KSPShaderLoader.getShader("SSTU/Skybox/Cubemap");
                if (skyboxShader == null)
                {
                    MonoBehaviour.print("ERROR: SSTUReflectionManager - Could not find skybox shader.");
                }
            }
            if (HighLogic.LoadedSceneIsEditor)
            {
                ReflectionProbeData data = createProbe();
                data.reflectionSphere.transform.position = new Vector3(0, 10, 0);
                editorReflectionData = new EditorReflectionData(data);
                MonoBehaviour.print("SSTUReflectionManager created editor reflection data: " + data + " :: " + editorReflectionData);
            }
            else if (HighLogic.LoadedSceneIsFlight)
            {
                //vessels are added thorugh an event as they are loaded
            }

            //TODO -- replace with custom baked skybox...
            //use in areas where other reflection probes don't make sense (space?)
            //RenderSettings.customReflection = customCubemap;

            //TODO -- pre-bake cubemap to use as the custom skybox in the reflection probe camera; this can be higher res and updated far less often (every couple of seconds?)
        }
 public EditorReflectionData(ReflectionProbeData data)
 {
     this.probeData = data;
 }
 public VesselReflectionData(Vessel v, ReflectionProbeData data)
 {
     this.vessel    = v;
     this.probeData = data;
 }