public GeometryToObjectConverter( GameCacheHaloOnlineBase destCache, Stream destStream, GameCache sourceCache, Stream sourceStream, Scenario scenario, int structureBspIndex) { DestCache = destCache; DestStream = destStream; SourceCache = sourceCache; SourceStream = sourceStream; StructureBspIndex = structureBspIndex; PortTag = new PortTagCommand(destCache, sourceCache); PortTag.SetFlags(PortTagCommand.PortingFlags.Default); Scenario = scenario; StructureBspIndex = structureBspIndex; StructureBsp = SourceCache.Deserialize <ScenarioStructureBsp>(SourceStream, Scenario.StructureBsps[structureBspIndex].StructureBsp); sLdT = SourceCache.Deserialize <ScenarioLightmap>(SourceStream, Scenario.Lightmap); if (SourceCache.Version >= CacheVersion.Halo3ODST) { Lbsp = SourceCache.Deserialize <ScenarioLightmapBspData>(SourceStream, sLdT.LightmapDataReferences[StructureBspIndex]); } else { Lbsp = sLdT.Lightmaps[StructureBspIndex]; } var resourceDefinition = SourceCache.ResourceCache.GetRenderGeometryApiResourceDefinition(Lbsp.Geometry.Resource); Lbsp.Geometry.SetResourceBuffers(resourceDefinition); StructureBspResources = SourceCache.ResourceCache.GetStructureBspTagResources(StructureBsp.CollisionBspResource); }
private ScenarioLightmap ConvertScenarioLightmap(Stream cacheStream, Dictionary <ResourceLocation, Stream> resourceStreams, string blamTagName, ScenarioLightmap scenarioLightmap) { if (BlamCache.Version > CacheVersion.Halo3Retail) { return(scenarioLightmap); } scenarioLightmap.LightmapDataReferences = new List <ScenarioLightmap.LightmapDataReference>(); foreach (var entry in scenarioLightmap.Lightmaps) { var wasReplacing = FlagIsSet(PortingFlags.Replace); RemoveFlags(PortingFlags.Replace); var Lbsp = ConvertStructure(cacheStream, resourceStreams, entry, scenarioLightmap, blamTagName); if (wasReplacing) { SetFlags(PortingFlags.Replace); } Lbsp.Airprobes = new List <ScenarioLightmap.Airprobe>(); Lbsp.Airprobes.AddRange(scenarioLightmap.Airprobes); CachedTagInstance edTag = null; TagGroup edGroup = null; var groupTag = new Tag("Lbsp"); if (TagGroup.Instances.ContainsKey(groupTag)) { edGroup = TagGroup.Instances[groupTag]; } else { edGroup = new TagGroup(groupTag, Tag.Null, Tag.Null, CacheContext.GetStringId("scenario_lightmap_bsp_data")); } edTag = CacheContext.TagCache.AllocateTag(edGroup); edTag.Name = blamTagName + "_data"; CacheContext.Serialize(cacheStream, edTag, Lbsp); scenarioLightmap.LightmapDataReferences.Add(new ScenarioLightmap.LightmapDataReference { LightmapData = edTag }); } scenarioLightmap.Airprobes.Clear(); return(scenarioLightmap); }
private ScenarioLightmap ConvertScenarioLightmap(Stream cacheStream, Stream blamCacheStream, Dictionary <ResourceLocation, Stream> resourceStreams, string blamTagName, ScenarioLightmap scenarioLightmap) { if (BlamCache.Version > CacheVersion.Halo3Retail) { return(scenarioLightmap); } scenarioLightmap.LightmapDataReferences = new List <CachedTag>(); for (int i = 0; i < scenarioLightmap.Lightmaps.Count; i++) { var entry = scenarioLightmap.Lightmaps[i]; var wasReplacing = FlagIsSet(PortingFlags.Replace); RemoveFlags(PortingFlags.Replace); var Lbsp = ConvertStructure(cacheStream, blamCacheStream, resourceStreams, entry, scenarioLightmap, blamTagName); Lbsp = ConvertScenarioLightmapBspData(Lbsp); if (wasReplacing) { SetFlags(PortingFlags.Replace); } Lbsp.Airprobes = new List <Airprobe>(); Lbsp.Airprobes.AddRange(scenarioLightmap.Airprobes); CachedTag edTag = null; TagGroup edGroup = null; var groupTag = new Tag("Lbsp"); if (TagGroup.Instances.ContainsKey(groupTag)) { edGroup = TagGroup.Instances[groupTag]; } else { edGroup = new TagGroup(groupTag, Tag.Null, Tag.Null, CacheContext.StringTable.GetStringId("scenario_lightmap_bsp_data")); } edTag = CacheContext.TagCacheGenHO.AllocateTag(edGroup); if (scenarioLightmap.Lightmaps.Count != 1) { edTag.Name = $"{blamTagName}_{i}_data"; } else { edTag.Name = $"{blamTagName}_data"; } CacheContext.Serialize(cacheStream, edTag, Lbsp); scenarioLightmap.LightmapDataReferences.Add(edTag); } scenarioLightmap.Airprobes.Clear(); return(scenarioLightmap); }