Ejemplo n.º 1
0
        protected override bool DumpAsset(string calculatedModificationPath, ScenarioData asset,
                                          IAssetOrResourceLoadedContext context)
        {
            var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt");
            var cache = new SimpleTextTranslationCache(
                defaultTranslationFile,
                false);

            foreach (var param in asset.list)
            {
                if (!TextResourceHelper.IsSupportedCommand(param.Command))
                {
                    continue;
                }

                if (param.Command == Command.Text)
                {
                    foreach (var key in param.Args)
                    {
                        if (!string.IsNullOrEmpty(key) && !TextResourceHelper.TextKeysBlacklist.Contains(key) &&
                            LanguageHelper.IsTranslatable(key))
                        {
                            cache.AddTranslationToCache(key, key);
                        }
                    }
                }
                else if (param.Command == Command.Calc)
                {
                    if (param.Args.Length >= 3 && TextResourceHelper.CalcKeys.Contains(param.Args[0]))
                    {
                        cache.AddTranslationToCache(param.Args[2], param.Args[2]);
                    }
                }
                else if (param.Command == Command.Format)
                {
                    if (param.Args.Length >= 2 && TextResourceHelper.FormatKeys.Contains(param.Args[0]))
                    {
                        cache.AddTranslationToCache(param.Args[1], param.Args[1]);
                    }
                }
                else if (param.Command == Command.Choice)
                {
                    for (var i = 0; i < param.Args.Length; i++)
                    {
                        var key = TextResourceHelper.GetSpecializedKey(param, i, out var value);

                        if (!key.IsNullOrEmpty())
                        {
                            cache.AddTranslationToCache(key, value);
                        }
                    }
                }
#if false
                else if (param.Command == ADV.Command.Switch)
                {
                    for (int i
                             = 1; i < param.Args.Length; i += 1)
                    {
                        cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]);
                    }
                }
#endif
#if false
                else if (param.Command == ADV.Command.InfoText)
                {
                    for (int i
                             = 1; i < param.Args.Length; i += 1)
                    {
                        cache.AddTokenTranslationToCache(param.Args[i], param.Args[i]);
                    }
                }
#endif
#if false
                else if (param.Command == ADV.Command.Jump)
                {
                    // TODO: detect if should be dumped
                    if (param.Args.Length >= 1)
                    {
                        cache.AddTokenTranslationToCache(param.Args[0], param.Args[0]);
                    }
                }
#endif
            }

            return(true);
        }
Ejemplo n.º 2
0
        protected override bool ReplaceOrUpdateAsset(string calculatedModificationPath, ref ScenarioData asset,
                                                     IAssetOrResourceLoadedContext context)
        {
            Logger.DebugLogDebug($"{GetType()} attempt to handle {calculatedModificationPath}");
            var defaultTranslationFile = Path.Combine(calculatedModificationPath, "translation.txt");
            var redirectedResources    = RedirectedDirectory.GetFilesInDirectory(calculatedModificationPath, ".txt");
            var streams = redirectedResources.Select(x => x.OpenStream());
            var cache   = new SimpleTextTranslationCache(
                defaultTranslationFile,
                streams,
                false,
                true);

            if (cache.IsEmpty)
            {
                Logger.DebugLogDebug($"{GetType()} unable to handle {calculatedModificationPath} (no cache)");
                return(false);
            }

            var result = false;

            foreach (var param in asset.list)
            {
                if (!TextResourceHelper.IsSupportedCommand(param.Command))
                {
                    Logger.DebugLogDebug($"{GetType()} skipping unsupported command: {param.Command}");
                    continue;
                }

                switch (param.Command)
                {
                case Command.Text:

                    // Text: 0 - jp speaker (if present), 1 - text
                    for (var i = 0; i < param.Args.Length && i < 2; i++)
                    {
                        var key = param.Args[i];
                        if (key.IsNullOrEmpty() || TextResourceHelper.TextKeysBlacklist.Contains(key) ||
                            StringIsSingleReplacement(key))
                        {
                            continue;
                        }
                        if (TryRegisterTranslation(cache, param, i, calculatedModificationPath))
                        {
                            result = true;
                        }
                    }

                    break;

                case Command.Calc:
                {
                    if (param.Args.Length >= 3 && TextResourceHelper.CalcKeys.Contains(param.Args[0]))
                    {
                        if (TryRegisterTranslation(cache, param, 2, calculatedModificationPath))
                        {
                            result = true;
                        }
                    }

                    break;
                }

                case Command.Format:
                {
                    if (param.Args.Length >= 2 && TextResourceHelper.FormatKeys.Contains(param.Args[0]))
                    {
                        if (TryRegisterTranslation(cache, param, 1, calculatedModificationPath))
                        {
                            result = true;
                        }
                    }

                    break;
                }

                case Command.Choice:
                {
                    for (var i = 0; i < param.Args.Length; i++)
                    {
                        if (TryRegisterTranslation(cache, param, i, calculatedModificationPath))
                        {
                            result = true;
                        }
                    }

                    break;
                }

#if false
                case ADV.Command.Switch:
                    // TODO
                    break;

#if AI
                case ADV.Command.InfoText:
                    // TODO
                    break;
#endif
                case ADV.Command.Jump:
                    // TODO
                    break;
#endif
                default:
                {
                    Logger.LogWarning(
                        $"{GetType()} expected to handle {param.Command}, but support not implemented");

                    break;
                }
                }
            }

            Logger.DebugLogDebug(result
                ? $"{GetType()} handled {calculatedModificationPath}"
                : $"{GetType()} unable to handle {calculatedModificationPath}");

            return(result);
        }