/// <summary> /// When overridden in the derived class, saves misc map information specific to the derived class. /// </summary> /// <param name="w">IValueWriter to write to.</param> /// <param name="saveFlags">The flags to modify the map save behavior.</param> protected override void SaveMisc(IValueWriter w, MapSaveFlags saveFlags) { SaveGrhs(w, saveFlags); SaveBackgroundImages(w, saveFlags); SaveLighting(w, saveFlags); SaveParticleEffects(w, saveFlags); SaveRefractionEffects(w, saveFlags); }
/// <summary> /// Writes all the BackgroundImages. /// </summary> /// <param name="w">IValueWriter to write to.</param> /// <param name="saveFlags">The flags to modify the map save behavior.</param> void SaveBackgroundImages(IValueWriter w, MapSaveFlags saveFlags) { var bgImages = _backgroundImages.Where(x => x != null); if ((saveFlags & MapSaveFlags.DoNotSort) == 0) { bgImages = bgImages.OrderBy(x => x.Sprite.GrhData.GrhIndex).ThenBy(x => (int)x.MapRenderLayer); } bgImages = bgImages.ToImmutable(); w.WriteManyNodes(_bgImagesNodeName, bgImages, ((writer, item) => item.Write(writer))); }
void SaveRefractionEffects(IValueWriter w, MapSaveFlags saveFlags) { var validFx = _refractionEffects.Where(x => RefractionEffectFactory.IsValidType(x.GetType())); if ((saveFlags & MapSaveFlags.DoNotSort) == 0) { validFx = validFx.OrderBy(x => x, new BasicSpatialComparer()); } validFx = validFx.ToImmutable(); w.WriteStartNode(_refractionEffectsNodeName); { w.WriteManyNodes(_refractionEffectListNodeName, validFx, RefractionEffectFactory.Write); } w.WriteEndNode(_refractionEffectsNodeName); }
/// <summary> /// Writes all the lighting to an <see cref="IValueWriter"/>. /// </summary> /// <param name="w">IValueWriter to write to.</param> /// <param name="saveFlags">The flags to modify the map save behavior.</param> void SaveLighting(IValueWriter w, MapSaveFlags saveFlags) { IEnumerable <ILight> lights = _lights; if ((saveFlags & MapSaveFlags.DoNotSort) == 0) { lights = lights.OrderBy(x => x, new BasicSpatialComparer()); } lights = lights.ToImmutable(); w.WriteStartNode(_lightingNodeName); { w.Write("Ambient", AmbientLight); w.WriteManyNodes(_lightsNodeName, lights, (wr, l) => l.WriteState(wr)); } w.WriteEndNode(_lightingNodeName); }
/// <summary> /// Writes all the MapGrhs to an <see cref="IValueWriter"/>. /// </summary> /// <param name="w">IValueWriter to write to.</param> /// <param name="saveFlags">The flags to modify the map save behavior.</param> void SaveGrhs(IValueWriter w, MapSaveFlags saveFlags) { var mapGrhs = Spatial.GetMany <MapGrh>(); if ((saveFlags & MapSaveFlags.DoNotSort) == 0) { mapGrhs = mapGrhs.OrderBy(x => x, new BasicMapGrhComparer()); } mapGrhs = mapGrhs.ToImmutable(); w.WriteStartNode(_mapGrhsNodeName); { // Used GrhIndexes w.WriteMany(_usedIndiciesNodeName, GetMapGrhList(), w.Write); // MapGrhs w.WriteManyNodes(_mapGrhsNodeName, mapGrhs, ((writer, mapGrh) => mapGrh.WriteState(writer))); } w.WriteEndNode(_mapGrhsNodeName); }
void SaveParticleEffects(IValueWriter w, MapSaveFlags saveFlags) { _particleEffects.Write(w, _particleEffectsNodeName); }