namespace etoy
{
///
/// 客户端特殊定义脚本
/// guide_引导 target 目标key
///
class CSharpGuideTargetKeyGenerater : IGenerater
{
private const string TableName = "guideStep";
private const string KeyName = "GuideTargetKey";
public void Generate(Context context)
{
var tables = context.Blackboard.Tables;
foreach (var table in tables)
{
if (table.Name.Equals(TableName, StringComparison.OrdinalIgnoreCase))
{
GenGuideTargetKey(context, table);
break;
}
}
}
private void GenGuideTargetKey(Context context, Table table)
{
var filePath = $"{context.Option.ClientCodeOutput}/{KeyName}.cs";
var hashTable = new List();
using var writer = new CodeWriter(filePath);
writer.WriteLine("// Generate By EToy");
writer.WriteLine("// Don't Edit It!!");
writer.WriteLine();
writer.Bracket("namespace XGame.Database");
{
writer.Summary($"生成引导UI对象Key");
writer.Bracket($"public static class {KeyName}");
{
for (int i = 0, rowCount = table.Rows.Count; i < rowCount; i++)
{
var row = table.Rows[i];
GetKeyProperty(row, out var key, out var value, out var summary);
if (string.IsNullOrEmpty(key))
continue;
if (hashTable.Contains(key))
continue;
writer.Summary(summary);
writer.WriteLine($"public readonly static string {key} = \"{value}\";");
hashTable.Add(key);
}
writer.EndBracket();
}
writer.EndBracket();
}
}
private void GetKeyProperty(Row row, out string key, out string value, out string summary)
{
key = value = summary = string.Empty;
foreach (var cell in row.Cells)
{
if ("target".Equals(cell.FieldInfo.FieldName, StringComparison.OrdinalIgnoreCase))
{
key = cell.Value.ToTitleCase();
value = cell.Value;
}
else if ("id".Equals(cell.FieldInfo.FieldName, StringComparison.OrdinalIgnoreCase))
{
summary = cell.Value;
}
}
}
}
}