private static bool TryCreateAnyNamespaceTexture(UpperString name, out Texture texture, out ResourceNamespace newNamespace) { if (loadedImages.TryGetAnyValue(name, out RgbaImage loadedImage, out newNamespace)) { texture = CreateAndTrackTexture(name, newNamespace, loadedImage); return(true); } if (TextureDefinitionManager.TryGetAny(name, out TextureDefinition definition, out ResourceNamespace definitionNamespace)) { RgbaImage compiledImage = TextureDefinitionToImage(definition); loadedImages.Add(name, definitionNamespace, compiledImage); texture = CreateAndTrackTexture(name, definitionNamespace, compiledImage); return(true); } if (Data.TryFindAny(name, out IEntry entry)) { if (TryReadImageEntry(entry, entry.Namespace, out RgbaImage newImage)) { loadedImages.Add(name, entry.Namespace, newImage); texture = CreateAndTrackTexture(name, entry.Namespace, newImage); return(true); } } texture = null; newNamespace = ResourceNamespace.Global; return(false); }
private static bool TryCreateExactNamespaceTexture(UpperString name, ResourceNamespace resourceNamespace, out Texture texture) { if (loadedImages.TryGetValue(name, resourceNamespace, out RgbaImage loadedImage)) { texture = CreateAndTrackTexture(name, resourceNamespace, loadedImage); return(true); } if (TextureDefinitionManager.TryGetExact(name, resourceNamespace, out TextureDefinition definition)) { RgbaImage compiledImage = TextureDefinitionToImage(definition); loadedImages.Add(name, resourceNamespace, compiledImage); texture = CreateAndTrackTexture(name, resourceNamespace, compiledImage); return(true); } if (Data.TryFindExact(name, resourceNamespace, out IEntry entry)) { if (TryReadImageEntry(entry, resourceNamespace, out RgbaImage newImage)) { loadedImages.Add(name, resourceNamespace, newImage); texture = CreateAndTrackTexture(name, resourceNamespace, newImage); return(true); } } texture = null; return(false); }
private static bool ProcessArchives() { try { entries.Clear(); nameToEntry.Clear(); pathToEntry.Clear(); TextureManager.Clear(); TextureDefinitionManager.Clear(); SpriteManager.Clear(); DecorateManager.Clear(); foreach (IArchive archive in Archives) { Log.Info("Loading ", archive.Uri); // We want every entry to be tracked before processing any // definition files. foreach (IEntry entry in archive) { entries.Add(entry.Name, entry.Namespace, entry); nameToEntry[entry.Name] = entry; pathToEntry[entry.Path.ToString()] = entry; } foreach (IEntry entry in archive) { switch (entry.Name.String) { case "DECORATE": DecorateManager.HandleDefinitionsOrThrow(entry, archive); continue; case "PLAYPAL": TextureManager.TrackPalette(entry); continue; case "PNAMES": case "TEXTURE1": case "TEXTURE2": TextureDefinitionManager.TrackVanillaDefinition(entry); continue; } } TextureDefinitionManager.CompileAnyNewVanillaDefinitions(); } DecorateManager.AttachSpriteRotationsToFrames(); return(true); } catch (Exception e) { Log.Error($"Unexpected error when reading archive: {e.Message}"); return(false); } }