Jsm.GameScript.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. namespace OpenVIII.Fields.Scripts
  2. {
  3. public static partial class Jsm
  4. {
  5. #region Classes
  6. public sealed class GameScript
  7. {
  8. #region Constructors
  9. public GameScript(int scriptId, ExecutableSegment segment)
  10. {
  11. ScriptId = scriptId;
  12. Segment = segment;
  13. }
  14. #endregion Constructors
  15. #region Properties
  16. public int ScriptId { get; }
  17. public ExecutableSegment Segment { get; }
  18. #endregion Properties
  19. #region Methods
  20. public void FormatMethod(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices executionContext)
  21. {
  22. var methodName = GetMethodName(formatterContext);
  23. sw.AppendLine($"public void {methodName}()");
  24. {
  25. sw.AppendLine("{");
  26. sw.Indent++;
  27. FormatMethodBody(sw, formatterContext, executionContext);
  28. sw.Indent--;
  29. sw.AppendLine("}");
  30. }
  31. }
  32. public void FormatMethodBody(ScriptWriter sw, IScriptFormatterContext formatterContext, IServices executionContext) => Segment.Format(sw, formatterContext, executionContext);
  33. public override string ToString() => $"{{{ScriptId}, {Segment}}}";
  34. private string GetMethodName(IScriptFormatterContext formatterContext)
  35. {
  36. formatterContext.GetObjectScriptNamesById(ScriptId, out _, out var methodName);
  37. if (char.IsLower(methodName[0]))
  38. methodName = char.ToUpperInvariant(methodName[0]) + methodName.Substring(1);
  39. return methodName;
  40. }
  41. #endregion Methods
  42. }
  43. #endregion Classes
  44. }
  45. }