public void ReplaceSkyLight(LevelSkyLight oldLight, LevelSkyLight newLight) { lock (instanceMutationLock) { skyLights.Replace(oldLight, newLight); ResetSkyLight(oldLight); ResetSkyLight(newLight); } }
protected override void ChildDeserialize(XDocument root) { skyLights.Clear(); foreach (XElement skyLightElement in root.Root.Element(SKY_LIGHTS_ELEMENT_NAME).Elements()) { skyLights.Add(LevelSkyLight.Deserialize(skyLightElement)); } }
public LevelSkyLight AddSkyLight(Vector3 position) { lock (instanceMutationLock) { LevelSkyLight newLight = new LevelSkyLight(position, Vector3.ONE, PhysicsManager.ONE_METRE_SCALED * 0.15f, 1.0f); skyLights.Add(newLight); ResetSkyLight(newLight); return(newLight); } }
public void RemoveSkyLight(LevelSkyLight light) { lock (instanceMutationLock) { if (!skyLights.Contains(light)) { throw new KeyNotFoundException("Given light is not added to this skylevel."); } skyLights.Remove(light); ResetSkyLight(light); } }
public void ResetSkyLight(LevelSkyLight lsl) { using (RenderingModule.RenderStateBarrier.AcquirePermit(withLock: instanceMutationLock)) { if (activeSkyLights.ContainsKey(lsl)) { AssetLocator.LightPass.RemoveLight(activeSkyLights.Pop(lsl)); } if (skyLights.Contains(lsl)) { activeSkyLights.Add(lsl, new Light(lsl.Position, lsl.Radius * SKY_SCALE, lsl.Color * lsl.LuminanceMultiplier)); AssetLocator.LightPass.AddLight(activeSkyLights[lsl]); } } }