Skip to content

Commit 4252ed1

Browse files
committed
feat: add fromNetworkId classes
1 parent 3d6dd31 commit 4252ed1

4 files changed

Lines changed: 39 additions & 0 deletions

File tree

src/NativeCodeGen.Core/Generation/ILanguageEmitter.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,11 @@ public interface ILanguageEmitter
8888
/// </summary>
8989
void EmitFromHandleMethod(CodeBuilder cb, string className);
9090

91+
/// <summary>
92+
/// Emits a static fromNetworkId factory method for entity classes.
93+
/// </summary>
94+
void EmitFromNetworkIdMethod(CodeBuilder cb, string className);
95+
9196
/// <summary>
9297
/// Emits a constructor for a task class (takes entity).
9398
/// </summary>

src/NativeCodeGen.Core/Generation/SharedClassGenerator.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,12 @@ private void GenerateStandardHandleClass(CodeBuilder cb, string className, strin
136136
_emitter.EmitHandleConstructor(cb, className, baseClass);
137137
_emitter.EmitFromHandleMethod(cb, className);
138138

139+
// Entity and its subclasses get fromNetworkId
140+
if (className == "Entity" || NativeClassifier.EntitySubclasses.Contains(className))
141+
{
142+
_emitter.EmitFromNetworkIdMethod(cb, className);
143+
}
144+
139145
foreach (var native in natives)
140146
{
141147
GenerateInstanceMethod(cb, native, className);

src/NativeCodeGen.Lua/LuaEmitter.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,21 @@ public void EmitFromHandleMethod(CodeBuilder cb, string className)
191191
cb.AppendLine();
192192
}
193193

194+
public void EmitFromNetworkIdMethod(CodeBuilder cb, string className)
195+
{
196+
cb.AppendLine($"---@param netId number");
197+
cb.AppendLine($"---@return {className}|nil");
198+
cb.AppendLine($"function {className}.fromNetworkId(netId)");
199+
cb.Indent();
200+
// NETWORK_DOES_ENTITY_EXIST_WITH_NETWORK_ID = 0x38CE16C96BD11F2C
201+
// NETWORK_GET_ENTITY_FROM_NETWORK_ID = 0x5B912C3F653822E6
202+
cb.AppendLine("if not Citizen.InvokeNative(0x38CE16C96BD11F2C, netId) then return nil end");
203+
cb.AppendLine($"return {className}.fromHandle(Citizen.InvokeNative(0x5B912C3F653822E6, netId))");
204+
cb.Dedent();
205+
cb.AppendLine("end");
206+
cb.AppendLine();
207+
}
208+
194209
public void EmitTaskConstructor(CodeBuilder cb, string className, string entityType, string? baseClass)
195210
{
196211
cb.AppendLine($"---@param entity {entityType}");

src/NativeCodeGen.TypeScript/TypeScriptEmitter.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,19 @@ public void EmitFromHandleMethod(CodeBuilder cb, string className)
256256
cb.AppendLine();
257257
}
258258

259+
public void EmitFromNetworkIdMethod(CodeBuilder cb, string className)
260+
{
261+
cb.AppendLine($"static fromNetworkId(netId: number): {className} | null {{");
262+
cb.Indent();
263+
// NETWORK_DOES_ENTITY_EXIST_WITH_NETWORK_ID = 0x38CE16C96BD11F2C
264+
// NETWORK_GET_ENTITY_FROM_NETWORK_ID = 0x5B912C3F653822E6
265+
cb.AppendLine("if (!inv<number>('0x38CE16C96BD11F2C', netId, rai())) return null;");
266+
cb.AppendLine($"return {className}.fromHandle(inv<number>('0x5B912C3F653822E6', netId, rai()));");
267+
cb.Dedent();
268+
cb.AppendLine("}");
269+
cb.AppendLine();
270+
}
271+
259272
public void EmitTaskConstructor(CodeBuilder cb, string className, string entityType, string? baseClass)
260273
{
261274
if (baseClass == null)

0 commit comments

Comments
 (0)