/// <summary> /// Overridden version /// </summary> public override void OnDeserialization() { base.OnDeserialization(); if (_renderer != null) _renderer.Owner = this; if (_customSceneObjects != null) { CustomSceneSerializationArgs customObjArg = new CustomSceneSerializationArgs(_customSceneObjects); EditorManager.OnCustomSceneSerialization(customObjArg); // notify the tools _customSceneObjects = null; } try { MigrateRendererProperties(_renderer); // this can be removed later // new renderer type properties if (RendererNodeClass == IRendererNodeManager.RENDERERNODECLASS_NONE) { RendererNodeClass = IRendererNodeManager.RENDERERNODECLASS_SIMPLE; } { DynamicPropertyCollection oldProperties = _currentSettings._rendererSetup._rendererProperties; DynamicPropertyCollectionType propertiesType = EditorManager.RendererNodeManager.NodeClassTypeManager.GetCollectionType(RendererNodeClass); bool bAddSun = false; if (propertiesType != null) { if (_currentSettings._rendererSetup._rendererProperties == null) _currentSettings._rendererSetup._rendererProperties = propertiesType.CreateInstance(this); else _currentSettings._rendererSetup._rendererProperties = propertiesType.CreateMigratedCollection(oldProperties); } else _currentSettings._rendererSetup._rendererProperties = EditorManager.RendererNodeManager.NodeClassTypeManager.CreateMigratedCollection(oldProperties); if (_currentSettings._rendererSetup._rendererProperties != null) _currentSettings._rendererSetup._rendererProperties.Owner = this; // Vision 8.1: Migrate old time of day properties to a light source that is added to the scene if (RendererNodeClass == IRendererNodeManager.RENDERERNODECLASS_DEFERRED && oldProperties != null) { // migrate old depth fog MigrateFogProperties(); object sun = oldProperties.GetPropertyValue("SunLight", false); if (sun is bool) // seems an 8.0 scene { bAddSun = (bool)sun; if (bAddSun) { // assume that the other properties are there as well: DynLightShape lightShape = new DynLightShape("Sun Light"); lightShape.MakeTimeOfDayLight( (float)oldProperties.GetPropertyValue("SunIntensity", false), (bool)oldProperties.GetPropertyValue("Corona", false), (string)oldProperties.GetPropertyValue("CoronaFilename", false) ); // add shadowmaps? object sunShadow = oldProperties.GetPropertyValue("SunShadowsEnabled", false); if ((sunShadow is bool) && ((bool)sunShadow) == true) { ShapeComponentType t = (ShapeComponentType)EditorManager.EngineManager.ComponentClassManager.GetCollectionType("VShadowMapComponentSpotDirectional"); System.Diagnostics.Debug.Assert(t != null, "Cannot create component of type VShadowMapComponentSpotDirectional"); if (t != null) { ShapeComponent comp = (ShapeComponent)t.CreateInstance(this); float fRange = (float)oldProperties.GetPropertyValue("ShadowRange", false); object oldCascades = oldProperties.GetPropertyValue("ShadowCascades", false); // there might be old maps without this property int iCascades = (oldCascades == null) ? 1 : (int)oldCascades; float fOffset = (float)oldProperties.GetPropertyValue("ShadowOffset", false); comp.SetPropertyValue("CascadeCount", iCascades); if (iCascades == 1) fRange *= 2.0f; comp.SetPropertyValue("CascadeRange[0]", fRange * 0.5f); comp.SetPropertyValue("CascadeRange[1]", fRange); object oldInterval = oldProperties.GetPropertyValue("ShadowCenterUpdateDistance", false); if (oldInterval is float) comp.SetPropertyValue("CameraUpdateInterval", (float)oldInterval, false); comp.SetPropertyValue("ShadowMapSize", (int)oldProperties.GetPropertyValue("ShadowTextureSize", false), false); comp.SetPropertyValue("Bias[0]", fOffset, false); comp.SetPropertyValue("Bias[1]", fOffset, false); object oldMask = oldProperties.GetPropertyValue("ShadowContextFilterBitmask", false); if (oldMask is int) comp.SetPropertyValue("FilterBitmask", (int)oldMask, false); // more properties from lighting pp component? lightShape.AddComponentInternal(comp); } } AddPendingAction(AddShapeAction.CreateAddShapeAction(lightShape, this.Root, this, true)); } } object backLight = oldProperties.GetPropertyValue("BackLight", false); if ((backLight is bool) && ((bool)backLight) == true) { DynLightShape backLightShape = new DynLightShape("Back Light"); AddPendingAction(AddShapeAction.CreateAddShapeAction(backLightShape, this.Root, this, true)); } } } } catch (Exception ex) { EditorManager.DumpException(ex, true); } if (_currentSettings._rendererSetup._rendererComponents != null) _currentSettings._rendererSetup._rendererComponents.MigrateProperties(this, EditorManager.EngineManager.ComponentClassManager); }
public override ShapeBase CreateShapeInstance() { if (!TestManager.IsRunning) { CreateTimeOfDayLightDlg dlg = new CreateTimeOfDayLightDlg(); if (dlg.ShowDialog() != DialogResult.OK) return null; _bShadows = dlg.Shadows; _bBackLight = dlg.BackLight; } ShapeBase returnShape = null; DynLightShape light = new DynLightShape("Sunlight"); returnShape = light; light.LightType = LightSourceType_e.Directional; light.Position = EditorManager.Scene.CurrentShapeSpawnPosition; light.ExportAsStatic = false; light.CastModelShadows = _bShadows; light.CastWorldShadows = _bShadows; light.MakeTimeOfDayLight(1.0f, true, null); if (_bShadows) { #if HK_ANARCHY ShapeComponentType t = (ShapeComponentType)EditorManager.EngineManager.ComponentClassManager.GetCollectionType("VMobileShadowMapComponentSpotDirectional"); System.Diagnostics.Debug.Assert(t != null, "Cannot create component of type VMobileShadowMapComponentSpotDirectional"); #else ShapeComponentType t = (ShapeComponentType)EditorManager.EngineManager.ComponentClassManager.GetCollectionType("VShadowMapComponentSpotDirectional"); System.Diagnostics.Debug.Assert(t != null, "Cannot create component of type VShadowMapComponentSpotDirectional"); #endif System.Diagnostics.Debug.Assert(t != null, "Cannot create component of type VShadowMapComponentSpotDirectional"); if (t != null) { ShapeComponent comp = (ShapeComponent)t.CreateInstance(light); light.AddComponentInternal(comp); } } if (_bBackLight) { DynLightShape backlight = new DynLightShape("Back light"); backlight.LightType = LightSourceType_e.Directional; backlight.Position = EditorManager.Scene.CurrentShapeSpawnPosition; backlight.ExportAsStatic = false; backlight.MakeTimeOfDayBackLight(); // return a group instead Group3DShape group = new Group3DShape("Sunlight shapes"); group.Position = EditorManager.Scene.CurrentShapeSpawnPosition; group.AddChild(light); group.AddChild(backlight); returnShape = group; } return returnShape; }