protected override void InitPrefab(string displayName, Vector3 relativePosition, Matrix localOrientation, MyMwcObjectBuilder_PrefabBase objectBuilder, MyPrefabConfiguration prefabConfig) { m_prefabLightConfig = prefabConfig as MyPrefabConfigurationLight; MyMwcObjectBuilder_PrefabLight objectBuilderLight = objectBuilder as MyMwcObjectBuilder_PrefabLight; m_light = MyLights.AddLight(); m_light.LightType = (MyLight.LightTypeEnum)objectBuilderLight.LightType; m_light.Start(m_light.LightType, 1); m_light.UseInForwardRender = true; //grab first dummy and set it as point source //since we dont support yet more lights in one prefab. add just the first one MyModel model = MyModels.GetModelOnlyDummies(m_prefabLightConfig.ModelLod0Enum); m_pointLocalMatrix = Matrix.Identity; bool dummyFound = false; foreach (KeyValuePair <string, MyModelDummy> pair in model.Dummies) { if (pair.Key.StartsWith("Dummy", StringComparison.InvariantCultureIgnoreCase)) { m_pointLocalMatrix = pair.Value.Matrix; dummyFound = true; break; } } Debug.Assert(dummyFound, "Dummy 'POINT_LIGHT_POS' not found in light prefab model: " + model.AssetName); m_light.Color = objectBuilderLight.PointColor; m_light.ReflectorColor = objectBuilderLight.SpotColor; m_light.Falloff = objectBuilderLight.PointFalloff; m_light.ReflectorFalloff = objectBuilderLight.SpotFalloff; m_IntensityMax = m_light.Intensity = objectBuilderLight.PointIntensity; m_light.ReflectorIntensity = ReflectorIntensityMax = objectBuilderLight.SpotIntensity; m_light.ReflectorRange = MathHelper.Clamp(objectBuilderLight.SpotRange, 1, MyLightsConstants.MAX_SPOTLIGHT_RANGE); m_light.Range = MathHelper.Clamp(objectBuilderLight.PointRange, 1, MyLightsConstants.MAX_POINTLIGHT_RADIUS); m_light.PointLightOffset = objectBuilderLight.PointOffset; this.FlashOffset = objectBuilderLight.FlashOffset; //to add reflector range to builders m_light.SpecularColor = objectBuilderLight.PointSpecular; m_light.ReflectorConeDegrees = objectBuilderLight.SpotAgle; m_effect = objectBuilderLight.Effect; //m_light.LightOn = true; m_lastBlickChange = MyMinerGame.TotalGamePlayTimeInMilliseconds; // here set the properties of glare for the prefab light m_light.GlareOn = true; m_light.Glare.Type = MyLightGlare.GlareTypeEnum.Normal; m_light.Glare.QuerySize = .8f; m_light.ShadowDistance = objectBuilderLight.ShadowsDistance; m_light.Glare.Intensity = m_light.Intensity; UpdateEffect(); CastShadows = false; UpdateLightWorldMatrix(); }
public static StringBuilder GetStringFromMyLightEffectTypeEnum(MyLightEffectTypeEnum t) { switch (t) { case MyLightEffectTypeEnum.NORMAL: return(MyTextsWrapper.Get(MyTextsWrapperEnum.Normal)); case MyLightEffectTypeEnum.CONSTANT_FLASHING: return(MyTextsWrapper.Get(MyTextsWrapperEnum.ConstantFlashing)); case MyLightEffectTypeEnum.RANDOM_FLASHING: return(MyTextsWrapper.Get(MyTextsWrapperEnum.RandomFlashing)); case MyLightEffectTypeEnum.DISTANT_GLARE: return(MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlare)); case MyLightEffectTypeEnum.DISTANT_GLARE_FLASHING: return(MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlareFlashing)); case MyLightEffectTypeEnum.DISTANT_GLARE_RANDOM_FLASHING: return(MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlareRandomFlashing)); default: throw new IndexOutOfRangeException(); } }
/// <summary> /// c-tor /// </summary> /// <param name="prefabType"></param> /// <param name="position"></param> /// <param name="anglesInContainer"></param> public MyMwcObjectBuilder_PrefabLight(MyMwcObjectBuilder_PrefabLight_TypesEnum prefabType, MyMwcObjectBuilder_Prefab_AppearanceEnum appearance, MyMwcVector3Short position, Vector3 anglesInContainer, float?prefabMaxHealth, float prefabHealthRatio, string displayName, float electricCapacity, bool?causesAlarm, int aiPriority) : base((int)prefabType, appearance, position, anglesInContainer, prefabMaxHealth, prefabHealthRatio, displayName, electricCapacity, causesAlarm, aiPriority) { PointFalloff = SpotFalloff = 1.0f; PointIntensity = SpotIntensity = 1.0f; SpotRange = SpotRange = 100.0f; PointColor = SpotColor = new Vector4(1, 1, 1, 1); PointSpecular = SpotSpecular = new Vector3(0, 0, 0); PointOffset = 0; Effect = MyLightEffectTypeEnum.NORMAL; SpotAgle = 1; ShadowsDistance = 200; }
// Read this object from message-in internal override bool Read(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion) { if (base.Read(binaryReader, senderEndPoint, gameVersion) == false) { return(NetworkError()); } //////////////////////////////////// POINT PROPERTIES //////////////////////////////////// Vector4?pPC = MyMwcMessageIn.ReadVector4FloatEx(binaryReader, senderEndPoint); if (pPC == null) { return(NetworkError()); } PointColor = pPC.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointColor: " + PointColor); // Vector3?pPS = MyMwcMessageIn.ReadVector3FloatEx(binaryReader, senderEndPoint); if (pPS == null) { return(NetworkError()); } PointSpecular = pPS.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointSpecular: " + PointSpecular); // float?pPI = MyMwcMessageIn.ReadFloat(binaryReader); if (pPI == null) { return(NetworkError()); } PointIntensity = pPI.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointIntensity: " + PointIntensity); // float?pPF = MyMwcMessageIn.ReadFloat(binaryReader); if (pPF == null) { return(NetworkError()); } PointFalloff = pPF.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointFalloff: " + PointFalloff); // float?pPR = MyMwcMessageIn.ReadFloat(binaryReader); if (pPR == null) { return(NetworkError()); } PointRange = pPR.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointRange: " + PointRange); // Point offset float?offset = MyMwcMessageIn.ReadFloat(binaryReader); if (offset == null) { return(NetworkError()); } PointOffset = offset.Value; MyMwcLog.IfNetVerbose_AddToLog("Point offset: " + PointOffset); //////////////////////////////////// SPOT PROPERTIES //////////////////////////////////// Vector4?pSC = MyMwcMessageIn.ReadVector4FloatEx(binaryReader, senderEndPoint); if (pSC == null) { return(NetworkError()); } SpotColor = pSC.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotColor: " + SpotColor); // Vector3?pSS = MyMwcMessageIn.ReadVector3FloatEx(binaryReader, senderEndPoint); if (pSS == null) { return(NetworkError()); } SpotSpecular = pSS.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotSpecular: " + SpotSpecular); float?pSI = MyMwcMessageIn.ReadFloat(binaryReader); if (pSI == null) { return(NetworkError()); } SpotIntensity = pSI.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotIntensity: " + SpotIntensity); // float?pSF = MyMwcMessageIn.ReadFloat(binaryReader); if (pSF == null) { return(NetworkError()); } SpotFalloff = pSF.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotFalloff: " + SpotFalloff); // float?pSR = MyMwcMessageIn.ReadFloat(binaryReader); if (pSR == null) { return(NetworkError()); } SpotRange = pSR.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotRange: " + SpotRange); // float?pSA = MyMwcMessageIn.ReadFloat(binaryReader); if (pSA == null) { return(NetworkError()); } SpotAgle = pSA.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotAgle: " + SpotAgle); // m_Effect short?tEffect = MyMwcMessageIn.ReadInt16Ex(binaryReader, senderEndPoint); if (tEffect == null) { return(NetworkError()); } Effect = (MyLightEffectTypeEnum)tEffect.Value; // light type short?tLightType = MyMwcMessageIn.ReadInt16Ex(binaryReader, senderEndPoint); if (tLightType == null) { return(NetworkError()); } LightType = (MyLightPrefabTypeEnum)tLightType.Value; // FlashOffset float?flashOffset = MyMwcMessageIn.ReadFloat(binaryReader); if (flashOffset == null) { return(NetworkError()); } FlashOffset = flashOffset.Value; // ShadowsEnabled float?shadowsDistance = MyMwcMessageIn.ReadFloat(binaryReader); if (shadowsDistance == null) { return(NetworkError()); } ShadowsDistance = shadowsDistance.Value; return(true); }
/// <summary> /// c-tor /// </summary> /// <param name="prefabType"></param> /// <param name="position"></param> /// <param name="anglesInContainer"></param> public MyMwcObjectBuilder_PrefabLight(MyMwcObjectBuilder_PrefabLight_TypesEnum prefabType, MyMwcObjectBuilder_Prefab_AppearanceEnum appearance, MyMwcVector3Short position, Vector3 anglesInContainer, float? prefabMaxHealth, float prefabHealthRatio, string displayName, float electricCapacity, bool? causesAlarm, int aiPriority) : base((int)prefabType, appearance, position, anglesInContainer, prefabMaxHealth, prefabHealthRatio, displayName, electricCapacity, causesAlarm, aiPriority) { PointFalloff = SpotFalloff = 1.0f; PointIntensity = SpotIntensity = 1.0f; SpotRange = SpotRange = 100.0f; PointColor = SpotColor = new Vector4(1, 1, 1, 1); PointSpecular = SpotSpecular = new Vector3(0, 0, 0); PointOffset = 0; Effect = MyLightEffectTypeEnum.NORMAL; SpotAgle = 1; ShadowsDistance = 200; }
// Read this object from message-in internal override bool Read(BinaryReader binaryReader, EndPoint senderEndPoint, int gameVersion) { if (base.Read(binaryReader, senderEndPoint, gameVersion) == false) return NetworkError(); //////////////////////////////////// POINT PROPERTIES //////////////////////////////////// Vector4 ?pPC = MyMwcMessageIn.ReadVector4FloatEx(binaryReader, senderEndPoint); if (pPC == null) return NetworkError(); PointColor = pPC.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointColor: " + PointColor); // Vector3 ? pPS = MyMwcMessageIn.ReadVector3FloatEx(binaryReader, senderEndPoint); if (pPS == null) return NetworkError(); PointSpecular = pPS.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointSpecular: " + PointSpecular); // float? pPI = MyMwcMessageIn.ReadFloat(binaryReader); if (pPI == null) return NetworkError(); PointIntensity = pPI.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointIntensity: " + PointIntensity); // float? pPF = MyMwcMessageIn.ReadFloat(binaryReader); if (pPF == null) return NetworkError(); PointFalloff = pPF.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointFalloff: " + PointFalloff); // float? pPR = MyMwcMessageIn.ReadFloat(binaryReader); if (pPR == null) return NetworkError(); PointRange = pPR.Value; MyMwcLog.IfNetVerbose_AddToLog("m_PointRange: " + PointRange); // Point offset float? offset = MyMwcMessageIn.ReadFloat(binaryReader); if (offset == null) return NetworkError(); PointOffset = offset.Value; MyMwcLog.IfNetVerbose_AddToLog("Point offset: " + PointOffset); //////////////////////////////////// SPOT PROPERTIES //////////////////////////////////// Vector4? pSC = MyMwcMessageIn.ReadVector4FloatEx(binaryReader, senderEndPoint); if (pSC == null) return NetworkError(); SpotColor = pSC.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotColor: " + SpotColor); // Vector3? pSS = MyMwcMessageIn.ReadVector3FloatEx(binaryReader, senderEndPoint); if (pSS == null) return NetworkError(); SpotSpecular = pSS.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotSpecular: " + SpotSpecular); float? pSI = MyMwcMessageIn.ReadFloat(binaryReader); if (pSI == null) return NetworkError(); SpotIntensity = pSI.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotIntensity: " + SpotIntensity); // float? pSF = MyMwcMessageIn.ReadFloat(binaryReader); if (pSF == null) return NetworkError(); SpotFalloff = pSF.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotFalloff: " + SpotFalloff); // float? pSR = MyMwcMessageIn.ReadFloat(binaryReader); if (pSR == null) return NetworkError(); SpotRange = pSR.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotRange: " + SpotRange); // float? pSA = MyMwcMessageIn.ReadFloat(binaryReader); if (pSA == null) return NetworkError(); SpotAgle = pSA.Value; MyMwcLog.IfNetVerbose_AddToLog("m_SpotAgle: " + SpotAgle); // m_Effect short? tEffect = MyMwcMessageIn.ReadInt16Ex(binaryReader, senderEndPoint); if (tEffect == null) return NetworkError(); Effect = (MyLightEffectTypeEnum)tEffect.Value; // light type short? tLightType = MyMwcMessageIn.ReadInt16Ex(binaryReader, senderEndPoint); if (tLightType == null) return NetworkError(); LightType = (MyLightPrefabTypeEnum) tLightType.Value; // FlashOffset float? flashOffset = MyMwcMessageIn.ReadFloat(binaryReader); if (flashOffset == null) return NetworkError(); FlashOffset = flashOffset.Value; // ShadowsEnabled float? shadowsDistance = MyMwcMessageIn.ReadFloat(binaryReader); if (shadowsDistance == null) return NetworkError(); ShadowsDistance = shadowsDistance.Value; return true; }
protected override void InitPrefab(string displayName, Vector3 relativePosition, Matrix localOrientation, MyMwcObjectBuilder_PrefabBase objectBuilder, MyPrefabConfiguration prefabConfig) { m_prefabLightConfig = prefabConfig as MyPrefabConfigurationLight; MyMwcObjectBuilder_PrefabLight objectBuilderLight = objectBuilder as MyMwcObjectBuilder_PrefabLight; m_light = MyLights.AddLight(); m_light.LightType = (MyLight.LightTypeEnum)objectBuilderLight.LightType; m_light.Start(m_light.LightType, 1); m_light.UseInForwardRender = true; //grab first dummy and set it as point source //since we dont support yet more lights in one prefab. add just the first one MyModel model = MyModels.GetModelOnlyDummies(m_prefabLightConfig.ModelLod0Enum); m_pointLocalMatrix = Matrix.Identity; bool dummyFound = false; foreach (KeyValuePair<string, MyModelDummy> pair in model.Dummies) { if (pair.Key.StartsWith("Dummy", StringComparison.InvariantCultureIgnoreCase)) { m_pointLocalMatrix = pair.Value.Matrix; dummyFound = true; break; } } Debug.Assert(dummyFound, "Dummy 'POINT_LIGHT_POS' not found in light prefab model: " + model.AssetName); m_light.Color = objectBuilderLight.PointColor; m_light.ReflectorColor = objectBuilderLight.SpotColor; m_light.Falloff = objectBuilderLight.PointFalloff; m_light.ReflectorFalloff = objectBuilderLight.SpotFalloff; m_IntensityMax = m_light.Intensity = objectBuilderLight.PointIntensity; m_light.ReflectorIntensity = ReflectorIntensityMax = objectBuilderLight.SpotIntensity; m_light.ReflectorRange = MathHelper.Clamp(objectBuilderLight.SpotRange, 1, MyLightsConstants.MAX_SPOTLIGHT_RANGE); m_light.Range = MathHelper.Clamp(objectBuilderLight.PointRange, 1, MyLightsConstants.MAX_POINTLIGHT_RADIUS); m_light.PointLightOffset = objectBuilderLight.PointOffset; this.FlashOffset = objectBuilderLight.FlashOffset; //to add reflector range to builders m_light.SpecularColor = objectBuilderLight.PointSpecular; m_light.ReflectorConeDegrees = objectBuilderLight.SpotAgle; m_effect = objectBuilderLight.Effect; //m_light.LightOn = true; m_lastBlickChange = MyMinerGame.TotalGamePlayTimeInMilliseconds; // here set the properties of glare for the prefab light m_light.GlareOn = true; m_light.Glare.Type = MyLightGlare.GlareTypeEnum.Normal; m_light.Glare.QuerySize = .8f; m_light.ShadowDistance = objectBuilderLight.ShadowsDistance; m_light.Glare.Intensity = m_light.Intensity; UpdateEffect(); CastShadows = false; UpdateLightWorldMatrix(); }
public static StringBuilder GetStringFromMyLightEffectTypeEnum(MyLightEffectTypeEnum t) { switch (t) { case MyLightEffectTypeEnum.NORMAL: return MyTextsWrapper.Get(MyTextsWrapperEnum.Normal); case MyLightEffectTypeEnum.CONSTANT_FLASHING: return MyTextsWrapper.Get(MyTextsWrapperEnum.ConstantFlashing); case MyLightEffectTypeEnum.RANDOM_FLASHING: return MyTextsWrapper.Get(MyTextsWrapperEnum.RandomFlashing); case MyLightEffectTypeEnum.DISTANT_GLARE: return MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlare); case MyLightEffectTypeEnum.DISTANT_GLARE_FLASHING: return MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlareFlashing); case MyLightEffectTypeEnum.DISTANT_GLARE_RANDOM_FLASHING: return MyTextsWrapper.Get(MyTextsWrapperEnum.DistantGlareRandomFlashing); default: throw new IndexOutOfRangeException(); } }