213 lines
5.1 KiB
C#
213 lines
5.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Text;
|
|
using MoonSharp.Interpreter;
|
|
using Microsoft.Xna.Framework;
|
|
using Barotrauma.Networking;
|
|
using System.Threading.Tasks;
|
|
using Barotrauma.Items.Components;
|
|
using System.IO;
|
|
using System.Net;
|
|
using System.Linq;
|
|
using System.Xml.Linq;
|
|
using System.Reflection;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
|
|
public static class LuaDocs
|
|
{
|
|
|
|
public static string ConvertTypeName(string type)
|
|
{
|
|
switch (type)
|
|
{
|
|
case "Boolean":
|
|
return "bool";
|
|
case "String":
|
|
return "string";
|
|
case "int":
|
|
return "number";
|
|
case "Single":
|
|
return "number";
|
|
case "Double":
|
|
return "number";
|
|
case "float":
|
|
return "number";
|
|
case "UInt16":
|
|
return "number";
|
|
case "UInt32":
|
|
return "number";
|
|
case "UInt64":
|
|
return "number";
|
|
case "Int32":
|
|
return "number";
|
|
case "List`1":
|
|
return "table";
|
|
case "Dictionary`2":
|
|
return "table";
|
|
}
|
|
|
|
if (type.StartsWith("Action"))
|
|
return "function";
|
|
|
|
if (type.StartsWith("Func"))
|
|
return "function";
|
|
|
|
return type;
|
|
}
|
|
|
|
public static string EscapeName(string n)
|
|
{
|
|
if (n == "end")
|
|
return "endparam";
|
|
|
|
return n;
|
|
}
|
|
|
|
public static void GenerateDocsAll()
|
|
{
|
|
GenerateDocs(typeof(Character), "Character.lua");
|
|
GenerateDocs(typeof(CharacterInfo), "CharacterInfo.lua");
|
|
GenerateDocs(typeof(Client), "Client.lua");
|
|
GenerateDocs(typeof(Entity), "Entity.lua");
|
|
GenerateDocs(typeof(EntitySpawner), "Entity.Spawner.lua", "Entity.Spawner");
|
|
GenerateDocs(typeof(Item), "Item.lua");
|
|
GenerateDocs(typeof(ItemPrefab), "ItemPrefab.lua");
|
|
GenerateDocs(typeof(Submarine), "Submarine.lua");
|
|
GenerateDocs(typeof(Job), "Job.lua");
|
|
GenerateDocs(typeof(JobPrefab), "JobPrefab.lua");
|
|
GenerateDocs(typeof(GameSession), "GameSession.lua", "Game.GameSession");
|
|
GenerateDocs(typeof(NetLobbyScreen), "NetLobbyScreen.lua", "Game.NetLobbyScreen");
|
|
GenerateDocs(typeof(GameScreen), "GameScreen.lua", "Game.GameScreen");
|
|
GenerateDocs(typeof(FarseerPhysics.Dynamics.World), "World.lua", "Game.World");
|
|
}
|
|
|
|
public static void GenerateDocs(Type type, string name, string? categoryName = null)
|
|
{
|
|
GenerateDocs(type, "../../../../docs/baseluadocs/" + name, "../../../../docs/lua/generated/" + name, categoryName);
|
|
}
|
|
|
|
public static void GenerateDocs(Type type, string baselua, string fileresult, string? categoryName = null)
|
|
{
|
|
var sb = new StringBuilder();
|
|
|
|
if (categoryName == null)
|
|
categoryName = type.Name;
|
|
|
|
var baseluatext = "";
|
|
|
|
if (!File.Exists(baselua))
|
|
{
|
|
const string EMPTY_TABLE = "{}";
|
|
|
|
baseluatext = @$"-- luacheck: ignore 111
|
|
|
|
--[[--
|
|
{type.FullName}
|
|
]]
|
|
-- @code {categoryName}
|
|
-- @pragma nostrip
|
|
local {type.Name} = {EMPTY_TABLE}";
|
|
|
|
File.WriteAllText(baselua, baseluatext);
|
|
}
|
|
else
|
|
baseluatext = File.ReadAllText(baselua);
|
|
|
|
sb.Append(baseluatext + "\n\n");
|
|
|
|
var members = type.GetMembers();
|
|
|
|
foreach(var member in members)
|
|
{
|
|
Console.WriteLine("'{0}' is a {1}", member.Name, member.MemberType);
|
|
|
|
if (member.MemberType == MemberTypes.Method)
|
|
{
|
|
var method = (MethodInfo)member;
|
|
|
|
if (method.Name.StartsWith("get_") || method.Name.StartsWith("set_"))
|
|
continue;
|
|
|
|
sb.Append($"--- {method.Name}\n");
|
|
sb.Append($"-- @realm shared\n");
|
|
|
|
var paramNames = "";
|
|
|
|
var parameters = method.GetParameters();
|
|
for(var i=0; i < parameters.Length; i++)
|
|
{
|
|
var parameter = parameters[i];
|
|
|
|
if(i == parameters.Length - 1)
|
|
paramNames = paramNames + EscapeName(parameter.Name);
|
|
else
|
|
paramNames = paramNames + EscapeName(parameter.Name) + ", ";
|
|
|
|
sb.Append($"-- @tparam {ConvertTypeName(parameter.ParameterType.Name)} {EscapeName(parameter.Name)}\n");
|
|
}
|
|
|
|
if (method.ReturnType != typeof(void))
|
|
{
|
|
sb.Append($"-- @treturn {ConvertTypeName(method.ReturnType.Name)}\n");
|
|
}
|
|
|
|
if (method.IsStatic)
|
|
sb.Append($"function {type.Name}.{method.Name}({paramNames})");
|
|
else
|
|
sb.Append($"function {method.Name}({paramNames})");
|
|
sb.Append(" end\n");
|
|
|
|
sb.Append("\n");
|
|
}
|
|
|
|
if (member.MemberType == MemberTypes.Field)
|
|
{
|
|
var field = (FieldInfo)member;
|
|
|
|
sb.Append($"---\n");
|
|
sb.Append($"-- ");
|
|
|
|
var name = EscapeName(field.Name);
|
|
|
|
var returnName = ConvertTypeName(field.FieldType.Name);
|
|
|
|
if (field.IsStatic)
|
|
name = type.Name + "." + field.Name;
|
|
|
|
sb.Append(name);
|
|
sb.Append($", Field of type {returnName}\n");
|
|
sb.Append($"-- @realm shared\n");
|
|
sb.Append($"-- @{returnName} {name}\n");
|
|
|
|
sb.Append("\n");
|
|
}
|
|
|
|
if (member.MemberType == MemberTypes.Property)
|
|
{
|
|
var property = (PropertyInfo)member;
|
|
|
|
sb.Append($"---\n");
|
|
sb.Append($"-- ");
|
|
|
|
var name = EscapeName(property.Name);
|
|
|
|
var returnName = ConvertTypeName(property.PropertyType.Name);
|
|
|
|
if (property.GetGetMethod().IsStatic)
|
|
name = type.Name + "." + property.Name;
|
|
|
|
sb.Append(name);
|
|
sb.Append($", Field of type {returnName}\n");
|
|
sb.Append($"-- @realm shared\n");
|
|
sb.Append($"-- @{returnName} {name}\n");
|
|
|
|
sb.Append("\n");
|
|
}
|
|
}
|
|
|
|
File.WriteAllText(fileresult, sb.ToString());
|
|
}
|
|
}
|
|
} |