public void Start(float lightSize) { if (lightSize > 0) { Light = MyLights.AddLight(); Light.Color = Vector4.One; Light.Start(MyLight.LightTypeEnum.PointLight, 1.0f); Light.LightOn = lightSize > 0; Light.Intensity = 10; } }
public MyPrefabLamp(Vector3 position, float radiusMin, float radiusMax, int timerForBlic) { Position = position; RadiusMin = radiusMin; RadiusMax = radiusMax; TimerForBlic = timerForBlic; Light = MyLights.AddLight(); Light.Start(MyLight.LightTypeEnum.PointLight, position, Vector4.One, 1, radiusMin); Light.Intensity = 1; Light.LightOn = true; }
private void SetRenderSetup() { return; m_setup = new MyRender.MyRenderSetup(); //m_setup.Fov = MathHelper.ToRadians(75); m_setup.CallerID = MyRenderCallerEnum.GUIPreview; m_setup.RenderTargets = new Texture[1]; m_setup.EnabledModules = new HashSet<MyRenderModuleEnum>(); m_setup.EnabledModules.Add(MyRenderModuleEnum.VoxelHand); m_setup.EnabledModules.Add(MyRenderModuleEnum.Decals); m_setup.EnabledModules.Add(MyRenderModuleEnum.CockpitWeapons); m_setup.EnabledModules.Add(MyRenderModuleEnum.SectorBorder); m_setup.EnabledModules.Add(MyRenderModuleEnum.DrawSectorBBox); m_setup.EnabledModules.Add(MyRenderModuleEnum.DrawCoordSystem); m_setup.EnabledModules.Add(MyRenderModuleEnum.Explosions); m_setup.EnabledModules.Add(MyRenderModuleEnum.BackgroundCube); m_setup.EnabledModules.Add(MyRenderModuleEnum.GPS); m_setup.EnabledModules.Add(MyRenderModuleEnum.TestField); m_setup.EnabledModules.Add(MyRenderModuleEnum.AnimatedParticles); m_setup.EnabledModules.Add(MyRenderModuleEnum.Lights); m_setup.EnabledModules.Add(MyRenderModuleEnum.TransparentGeometryForward); m_setup.EnabledModules.Add(MyRenderModuleEnum.Projectiles); m_setup.EnabledModules.Add(MyRenderModuleEnum.DebrisField); m_setup.EnabledModules.Add(MyRenderModuleEnum.ThirdPerson); m_setup.EnabledModules.Add(MyRenderModuleEnum.Editor); m_setup.EnabledModules.Add(MyRenderModuleEnum.SolarObjects); m_setup.EnabledModules.Add(MyRenderModuleEnum.SolarMapGrid); m_setup.EnabledModules.Add(MyRenderModuleEnum.PrunningStructure); m_setup.EnabledModules.Add(MyRenderModuleEnum.SunWind); m_setup.EnabledModules.Add(MyRenderModuleEnum.IceStormWind); m_setup.EnabledModules.Add(MyRenderModuleEnum.PrefabContainerManager); m_setup.EnabledModules.Add(MyRenderModuleEnum.PhysicsPrunningStructure); m_setup.EnabledRenderStages = new HashSet<MyRenderStage>(); m_setup.EnabledRenderStages.Add(MyRenderStage.PrepareForDraw); m_setup.EnabledRenderStages.Add(MyRenderStage.Background); m_setup.EnabledRenderStages.Add(MyRenderStage.LODDrawStart); m_setup.EnabledRenderStages.Add(MyRenderStage.LODDrawEnd); m_setup.EnabledRenderStages.Add(MyRenderStage.AlphaBlendPreHDR); m_setup.EnabledRenderStages.Add(MyRenderStage.AlphaBlend); m_setup.EnabledPostprocesses = new HashSet<MyPostProcessEnum>(); m_setup.EnabledPostprocesses.Add(MyPostProcessEnum.VolumetricSSAO2); m_setup.EnabledPostprocesses.Add(MyPostProcessEnum.HDR); //m_setup.BackgroundColor = new Color(0.17f, 0.18f, .25f, 0.0f); m_setup.BackgroundColor = new Color(Vector4.Zero); m_setup.EnableHDR = false; m_setup.EnableSun = true; m_setup.ShadowRenderer = MyRender.GetShadowRenderer(); // Default shadow render m_setup.EnableSmallLights = true; m_setup.EnableDebugHelpers = false; m_setup.EnableEnvironmentMapping = false; m_setup.EnableOcclusionQueries = false; m_setup.LodTransitionNear = 20000; m_setup.LodTransitionFar = 21000; m_setup.LodTransitionBackgroundStart = 50000; m_setup.LodTransitionBackgroundStart = 51000; m_setup.RenderElementsToDraw = new List<MyRender.MyRenderElement>(); m_setup.TransparentRenderElementsToDraw = new List<MyRender.MyRenderElement>(); m_setup.LightsToUse = new List<MyLight>(); var fillLight = new MyLight(); fillLight.Start(MyLight.LightTypeEnum.PointLight, .5f * new Vector4(1, 0.95f, 0.8f, 1), 1, 119); // fill light m_setup.LightsToUse.Add(fillLight); var backLight = new MyLight(); backLight.Start(MyLight.LightTypeEnum.PointLight, .5f * new Vector4(1, 0.9f, 0.9f, 1), 1, 119); // back light m_setup.LightsToUse.Add(backLight); }
private void InitLight() { m_pointLight = MyLights.AddLight(); m_pointLight.LightType = MyLight.LightTypeEnum.PointLight; m_pointLight.Start(m_pointLight.LightType, 1); m_pointLight.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(ModelLod0.ModelEnum); m_pointLocalMatrix = Matrix.CreateTranslation(model.BoundingSphere.Center); m_pointLight.Color = new Vector4(1f, 0f, 0f, 1f); m_pointLight.ReflectorColor = Vector4.Zero; m_pointLight.Falloff = 0.1f; m_pointLight.ReflectorFalloff = 0.1f; m_intensityMax = m_pointLight.Intensity = 10f; m_pointLight.ReflectorIntensity = 1f; m_pointLight.ReflectorRange = 1f; m_pointLight.Range = 40f; m_pointLight.PointLightOffset = 0f; //to add reflector range to builders m_pointLight.SpecularColor = new Vector3(1f, 0f, 0f); m_pointLight.ReflectorConeDegrees = 0.1f; m_lastBlickChange = MyMinerGame.TotalGamePlayTimeInMilliseconds; // here set the properties of glare for the prefab light m_pointLight.GlareOn = true; m_pointLight.Glare.Type = MyLightGlare.GlareTypeEnum.Distant; m_pointLight.Glare.QuerySize = .8f; UpdateLightWorldMatrix(); }
// This method realy initiates/starts the missile // IMPORTANT: Direction vector must be normalized! public void Start(Vector3 position, Vector3 initialVelocity, Vector3 directionNormalized, MyMwcObjectBuilder_SmallShip_Ammo usedAmmo, MySmallShip minerShip) { m_usedAmmo = usedAmmo; m_ammoProperties = MyAmmoConstants.GetAmmoProperties(usedAmmo.AmmoType); m_gameplayProperties = MyGameplayConstants.GetGameplayProperties(m_usedAmmo, Faction); m_penetratedVoxelMap = null; m_wasPenetration = false; m_hasExplosion = false; m_isExploded = false; m_collidedEntity = null; m_collisionPoint = null; Matrix orientation = GetWorldRotation(); Vector3 pos = position; // Play missile thrust cue (looping) m_thrusterCue = MyAudio.AddCue3D(MySoundCuesEnum.WepMissileFly, pos, orientation.Forward, orientation.Up, this.Physics.LinearVelocity); m_light = MyLights.AddLight(); if (m_light != null) { m_light.Start(MyLight.LightTypeEnum.PointLight, GetPosition(), MyMissileHelperUtil.GetCannonShotLightColor(), 1, MyMissileConstants.MISSILE_LIGHT_RANGE); } m_diffuseColor = m_ammoProperties.TrailColor; switch (usedAmmo.AmmoType) { case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Basic: case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_High_Speed: case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Armor_Piercing_Incendiary: case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_SAPHEI: case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Proximity_Explosive: m_explosionType = MyExplosionTypeEnum.MISSILE_EXPLOSION; break; case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_BioChem: m_explosionType = MyExplosionTypeEnum.BIOCHEM_EXPLOSION; break; case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_EMP: m_explosionType = MyExplosionTypeEnum.EMP_EXPLOSION; break; case MyMwcObjectBuilder_SmallShip_Ammo_TypesEnum.Cannon_Tunnel_Buster: m_explosionType = MyExplosionTypeEnum.BLASTER_EXPLOSION; break; default: throw new MyMwcExceptionApplicationShouldNotGetHere(); break; } this.Physics.Mass = m_gameplayProperties.WeightPerUnit; Vector3? correctedDirection = null; if (MyGameplayConstants.GameplayDifficultyProfile.EnableAimCorrection) { if (minerShip == MinerWars.AppCode.Game.Managers.Session.MySession.PlayerShip) { correctedDirection = MyEntities.GetDirectionFromStartPointToHitPointOfNearestObject(minerShip, position, m_ammoProperties.MaxTrajectory); } } if (correctedDirection != null) directionNormalized = correctedDirection.Value; base.Start(position, initialVelocity, directionNormalized, m_ammoProperties.DesiredSpeed, minerShip); if (correctedDirection != null) //override the base class behaviour, update the missile direction { Matrix ammoWorld = minerShip.WorldMatrix; ammoWorld.Translation = position; ammoWorld.Forward = correctedDirection.Value; SetWorldMatrix(ammoWorld); } m_smokeEffect = MyParticlesManager.CreateParticleEffect((int)MyParticleEffectsIDEnum.Smoke_CannonShot); m_smokeEffect.AutoDelete = false; m_smokeEffect.WorldMatrix = WorldMatrix; }
void UpdateLight() { float distanceSq = Vector3.DistanceSquared(MyCamera.Position, WorldMatrix.Translation); //float maxTurnOnDistance = 15000; //float maxKeepedDistance = 100; float lightActivationDistanceSq = 4000 * 4000; if (distanceSq > lightActivationDistanceSq) { return; } MyPerformanceCounter.PerCameraDraw.Increment("Small ships with updated lights"); if (/*distance < maxTurnOnDistance && */m_light == null) { m_light = MyLights.AddLight(); if (m_light != null) { m_light.Start(MyLight.LightTypeEnum.PointLight | MyLight.LightTypeEnum.Spotlight, 1.5f); m_light.ShadowDistanceSquared = m_reflectorShadowDistance * m_reflectorShadowDistance; m_light.ReflectorFalloff = MyMinerShipConstants.MINER_SHIP_NEAR_REFLECTOR_FALLOFF; m_light.LightOwner = MyLight.LightOwnerEnum.SmallShip; m_light.UseInForwardRender = true; if (MyFakes.SMALL_SHIPS_GLARE) { m_light.GlareOn = true; m_light.Glare.Type = MyLightGlare.GlareTypeEnum.Normal; m_light.Glare.QuerySize = 2.5f; } switch (m_reflectorType) { case ReflectorTypeEnum.Single: m_light.ReflectorTexture = MyTextureManager.GetTexture<MyTexture2D>("Textures\\Lights\\reflector"); break; case ReflectorTypeEnum.Dual: m_light.ReflectorTexture = MyTextureManager.GetTexture<MyTexture2D>("Textures\\Lights\\dual_reflector"); break; default: { throw new MyMwcExceptionApplicationShouldNotGetHere(); } } } } /* if (distance >= maxTurnOnDistance && m_light != null) { MyLights.RemoveLight(m_light); m_light = null; } */ if (m_light == null) return; if (Fuel <= 0 || !Config.Engine.On) { m_light.ReflectorOn = false; m_light.LightOn = false; return; } var isCameraInsideMinerShip = IsCameraInsideMinerShip(); var positionLightTransformed = GetLightPosition(isCameraInsideMinerShip); // Update light position m_light.SetPosition(positionLightTransformed); if ((MyGuiScreenGamePlay.Static.ControlledEntity != this) && (MyFactions.GetFactionsRelation(this.Faction, MySession.PlayerShip.Faction) == MyFactionRelationEnum.Friend)) { m_light.ShadowDistance = MyLightsConstants.MAX_SPOTLIGHT_SHADOW_RANGE; } else { if (MyRender.DrawPlayerLightShadow || MySession.Is25DSector) { m_light.ShadowDistance = MyLightsConstants.MAX_SPOTLIGHT_SHADOW_RANGE; } else m_light.ShadowDistance = 0; } // Get interpolator between reflector influence and muzzle flash influence. It is because // this one light display reflector or muzzle, so we need to interpolate. int muzzleFlashDeltaTime = MyMinerGame.TotalGamePlayTimeInMilliseconds - Weapons.MuzzleFlashLastTime; float interpolator = 1.0f - (float)Math.Pow(MathHelper.Clamp(((float)muzzleFlashDeltaTime / (float)MyMachineGunConstants.MUZZLE_FLASH_MACHINE_GUN_LIFESPAN), 0, 1), 3); var range = MathHelper.Lerp(MyMinerShipConstants.MINER_SHIP_NEAR_LIGHT_RANGE, MyMinerShipConstants.MINER_SHIP_MUZZLE_FLASH_LIGHT_RANGE, interpolator); range = MathHelper.Clamp(range * MyMinerShipConstants.MINER_SHIP_PLAYER_NEAR_LIGHT_RANGE_MULTIPLIER * LightRangeMultiplier, 0.1f, MyLightsConstants.MAX_POINTLIGHT_RADIUS); if (!isCameraInsideMinerShip) { range *= MyMinerShipConstants.MINER_SHIP_LIGHT_RADIUS_OUTSIDE_MODIFIER; } m_light.Range = range; // Reflector color and range. See that color depends on reflector's level. //Vector4 colorReflector = MyMinerShipConstants.MINER_SHIP_REFLECTOR_LIGHT_COLOR * m_reflectorLevel; Vector4 colorReflector = GetReflectorProperties().CurrentReflectorLightColor * Config.ReflectorLight.Level; // Color and range will be interpolated by current muzzle flash value and by state of reflector m_light.Color = Vector4.Lerp(colorReflector, MyMinerShipConstants.MINER_SHIP_MUZZLE_FLASH_LIGHT_COLOR, interpolator); m_light.SpecularColor = new Vector3(colorReflector.X, colorReflector.Y, colorReflector.Z); m_light.Falloff = MyMinerShipConstants.MINER_SHIP_LIGHT_FALLOFF; //more distant the ship, smaller light is. //float smallerSpeed = 0.1f; //10% on 100m /*float ratio = 1.0f; if (distance > maxKeepedDistance) ratio = 0.7f / (((distance - maxKeepedDistance) / 100.0f) + 1); m_light.Range *= ratio; */ m_light.Intensity = MyMinerShipConstants.MINER_SHIP_NEAR_LIGHT_INTENSITY * System.Math.Max(Config.ReflectorLight.Level, interpolator) * LightIntensityMultiplier; /*if (this != MySession.PlayerShip) { m_light.Intensity *= 1.0f; } */ m_light.ReflectorIntensity = MyMinerShipConstants.MINER_SHIP_NEAR_REFLECTOR_INTENSITY * ReflectorIntensityMultiplier; // Reflector properties m_light.ReflectorOn = Config.ReflectorLight.Level > 0.0f; if (m_light.ReflectorOn) { m_light.ReflectorUp = this.WorldMatrix.Up; m_light.ReflectorDirection = this.WorldMatrix.Forward; m_light.ReflectorColor = Config.ReflectorLight.Level * GetReflectorProperties().CurrentReflectorLightColor; m_light.UpdateReflectorRangeAndAngle(GetReflectorProperties().CurrentReflectorConeAngleForward, GetReflectorProperties().CurrentReflectorRangeForward); } m_light.LightOn = !IsDisabledByEMP(); }
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 void Draw() { if (MyFakes.TEST_MISSION_1_ENABLED) { if (m_remainingPrimaryTargetsCounter == 0) { if (m_russianDropZoneLight != null) { Vector3 dir = MyMwcUtils.Normalize(MyCamera.Position - RUSSIAN_DROP_ZONE_POSITION); float timeBlic = MyMinerGame.TotalGamePlayTimeInMilliseconds % 980; if (timeBlic > 250) timeBlic = 980 - timeBlic; timeBlic = MathHelper.Clamp(1 - timeBlic / 250, 0, 1); float alpha = MathHelper.Lerp(0.1f, 0.6f, timeBlic); m_dropZoneLightColor.W = alpha; m_russianDropZoneLight.Start(MyLight.LightTypeEnum.PointLight, RUSSIAN_DROP_ZONE_POSITION, m_dropZoneLightColor, 1, 200); float radius = MathHelper.Lerp(0.1f, 150f, timeBlic); MyTransparentGeometry.AddPointBillboard(MyTransparentMaterialEnum.ReflectorGlareAlphaBlended, m_dropZoneLightColor, RUSSIAN_DROP_ZONE_POSITION + dir * 5, radius, 0); } else { m_russianDropZoneLight = MyLights.AddLight(); if (m_russianDropZoneLight != null) { m_russianDropZoneLight.Start(MyLight.LightTypeEnum.PointLight, 1); } } } } }