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();
            }
        }
Beispiel #3
0
 /// <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;
 }
Beispiel #4
0
        //  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;
        }
Beispiel #7
0
        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();            
        }
Beispiel #8
0
 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();
     }
 }