Skip to content

Commit 8ba86fe

Browse files
committed
feat(managed): Non generic cvars
1 parent 07d6811 commit 8ba86fe

File tree

9 files changed

+901
-368
lines changed

9 files changed

+901
-368
lines changed

managed/src/SwiftlyS2.Core/Modules/Convars/ConVar.cs

Lines changed: 465 additions & 317 deletions
Large diffs are not rendered by default.

managed/src/SwiftlyS2.Core/Modules/Convars/ConVarService.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,16 @@ internal class ConVarService : IConVarService
3737
}
3838

3939
return new ConVar<T>(name);
40+
}
41+
42+
public IConVar? FindAsString( string name )
43+
{
44+
if (!NativeConvars.ExistsConvar(name))
45+
{
46+
return null;
47+
}
4048

49+
return new ConVar(name);
4150
}
4251

4352
public IConVar<T> Create<T>( string name, string helpMessage, T defaultValue, ConvarFlags flags = ConvarFlags.NONE )

managed/src/SwiftlyS2.Core/Services/StartupService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ internal class StartupService : IHostedService
1111
public StartupService( IServiceProvider provider )
1212
{
1313
// this.provider = provider;
14-
// provider.UseTestService();
1514
provider.UseCoreHookService();
1615
provider.UsePermissionManager();
1716
provider.UseCommandTrackerService();
@@ -20,6 +19,7 @@ public StartupService( IServiceProvider provider )
2019
provider.UseCoreCommandService();
2120
// Initialize PluginManager after everything is ready
2221
provider.UsePluginManager();
22+
// provider.UseTestService();
2323
}
2424

2525
public Task StartAsync( CancellationToken cancellationToken )

managed/src/SwiftlyS2.Core/Services/TestService.cs

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -48,27 +48,23 @@ ISwiftlyCore core
4848
_Logger.LogWarning("TestService created");
4949
_Logger.LogWarning("TestService created");
5050

51-
Test2();
51+
Test();
5252
}
5353

5454

5555
public void Test()
5656
{
57-
_Core.Event.OnEntityCreated += (@event) =>
58-
{
59-
var name = _Core.Memory.GetObjectPtrVtableName(@event.Entity.Address);
60-
Console.WriteLine("Entity spawned: " + name);
61-
var hasVtable = _Core.Memory.ObjectPtrHasVtable(@event.Entity.Address + 1);
62-
Console.WriteLine("Has vtable: " + hasVtable);
63-
var vtable = _Core.Memory.ObjectPtrHasBaseClass(@event.Entity.Address, "CBaseEntity");
64-
Console.WriteLine("Has base class: " + vtable);
65-
var handle = _Core.EntitySystem.GetRefEHandle(@event.Entity);
66-
};
67-
// _Core.Event.OnItemServicesCanAcquireHook += (@event) => {
68-
// Console.WriteLine(@event.EconItemView.ItemDefinitionIndex);
57+
_Core.Command.RegisterCommand("tc", (args) => {
58+
var cvar = _Core.ConVar.FindAsString("mp_warmuptime");
6959

70-
// @event.SetAcquireResult(AcquireResult.NotAllowedByProhibition);
71-
// };
60+
61+
cvar!.ValueAsString = "10";
62+
cvar!.DefaultValueAsString = "50";
63+
cvar!.MaxValueAsString = "100";
64+
cvar!.MinValueAsString = "10";
65+
Console.WriteLine("Set cvar.");
66+
Console.WriteLine(cvar.HasDefaultValue);
67+
});
7268

7369

7470
}

managed/src/SwiftlyS2.Generated/Natives/Convars.cs

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -642,4 +642,197 @@ public unsafe static void SetValueInternalPtr(string cvarName, nint value) {
642642
pool.Return(cvarNameBuffer);
643643
}
644644
}
645+
646+
private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetValueAsString;
647+
648+
public unsafe static bool SetValueAsString(string cvarName, string value) {
649+
var pool = ArrayPool<byte>.Shared;
650+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
651+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
652+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
653+
cvarNameBuffer[cvarNameLength] = 0;
654+
var valueLength = Encoding.UTF8.GetByteCount(value);
655+
var valueBuffer = pool.Rent(valueLength + 1);
656+
Encoding.UTF8.GetBytes(value, valueBuffer);
657+
valueBuffer[valueLength] = 0;
658+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
659+
fixed (byte* valueBufferPtr = valueBuffer) {
660+
var ret = _SetValueAsString(cvarNameBufferPtr, valueBufferPtr);
661+
pool.Return(cvarNameBuffer);
662+
pool.Return(valueBuffer);
663+
return ret == 1;
664+
}
665+
}
666+
}
667+
668+
private unsafe static delegate* unmanaged<byte*, byte*, int> _GetValueAsString;
669+
670+
public unsafe static string GetValueAsString(string cvarName) {
671+
var pool = ArrayPool<byte>.Shared;
672+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
673+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
674+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
675+
cvarNameBuffer[cvarNameLength] = 0;
676+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
677+
var ret = _GetValueAsString(null, cvarNameBufferPtr);
678+
var retBuffer = pool.Rent(ret + 1);
679+
fixed (byte* retBufferPtr = retBuffer) {
680+
ret = _GetValueAsString(retBufferPtr, cvarNameBufferPtr);
681+
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
682+
pool.Return(retBuffer);
683+
pool.Return(cvarNameBuffer);
684+
return retString;
685+
}
686+
}
687+
}
688+
689+
private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetDefaultValueAsString;
690+
691+
public unsafe static bool SetDefaultValueAsString(string cvarName, string value) {
692+
var pool = ArrayPool<byte>.Shared;
693+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
694+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
695+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
696+
cvarNameBuffer[cvarNameLength] = 0;
697+
var valueLength = Encoding.UTF8.GetByteCount(value);
698+
var valueBuffer = pool.Rent(valueLength + 1);
699+
Encoding.UTF8.GetBytes(value, valueBuffer);
700+
valueBuffer[valueLength] = 0;
701+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
702+
fixed (byte* valueBufferPtr = valueBuffer) {
703+
var ret = _SetDefaultValueAsString(cvarNameBufferPtr, valueBufferPtr);
704+
pool.Return(cvarNameBuffer);
705+
pool.Return(valueBuffer);
706+
return ret == 1;
707+
}
708+
}
709+
}
710+
711+
private unsafe static delegate* unmanaged<byte*, byte*, int> _GetDefaultValueAsString;
712+
713+
public unsafe static string GetDefaultValueAsString(string cvarName) {
714+
var pool = ArrayPool<byte>.Shared;
715+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
716+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
717+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
718+
cvarNameBuffer[cvarNameLength] = 0;
719+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
720+
var ret = _GetDefaultValueAsString(null, cvarNameBufferPtr);
721+
var retBuffer = pool.Rent(ret + 1);
722+
fixed (byte* retBufferPtr = retBuffer) {
723+
ret = _GetDefaultValueAsString(retBufferPtr, cvarNameBufferPtr);
724+
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
725+
pool.Return(retBuffer);
726+
pool.Return(cvarNameBuffer);
727+
return retString;
728+
}
729+
}
730+
}
731+
732+
private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetMinValueAsString;
733+
734+
public unsafe static bool SetMinValueAsString(string cvarName, string value) {
735+
var pool = ArrayPool<byte>.Shared;
736+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
737+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
738+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
739+
cvarNameBuffer[cvarNameLength] = 0;
740+
var valueLength = Encoding.UTF8.GetByteCount(value);
741+
var valueBuffer = pool.Rent(valueLength + 1);
742+
Encoding.UTF8.GetBytes(value, valueBuffer);
743+
valueBuffer[valueLength] = 0;
744+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
745+
fixed (byte* valueBufferPtr = valueBuffer) {
746+
var ret = _SetMinValueAsString(cvarNameBufferPtr, valueBufferPtr);
747+
pool.Return(cvarNameBuffer);
748+
pool.Return(valueBuffer);
749+
return ret == 1;
750+
}
751+
}
752+
}
753+
754+
private unsafe static delegate* unmanaged<byte*, byte*, int> _GetMinValueAsString;
755+
756+
public unsafe static string GetMinValueAsString(string cvarName) {
757+
var pool = ArrayPool<byte>.Shared;
758+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
759+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
760+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
761+
cvarNameBuffer[cvarNameLength] = 0;
762+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
763+
var ret = _GetMinValueAsString(null, cvarNameBufferPtr);
764+
var retBuffer = pool.Rent(ret + 1);
765+
fixed (byte* retBufferPtr = retBuffer) {
766+
ret = _GetMinValueAsString(retBufferPtr, cvarNameBufferPtr);
767+
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
768+
pool.Return(retBuffer);
769+
pool.Return(cvarNameBuffer);
770+
return retString;
771+
}
772+
}
773+
}
774+
775+
private unsafe static delegate* unmanaged<byte*, byte*, byte> _SetMaxValueAsString;
776+
777+
public unsafe static bool SetMaxValueAsString(string cvarName, string value) {
778+
var pool = ArrayPool<byte>.Shared;
779+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
780+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
781+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
782+
cvarNameBuffer[cvarNameLength] = 0;
783+
var valueLength = Encoding.UTF8.GetByteCount(value);
784+
var valueBuffer = pool.Rent(valueLength + 1);
785+
Encoding.UTF8.GetBytes(value, valueBuffer);
786+
valueBuffer[valueLength] = 0;
787+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
788+
fixed (byte* valueBufferPtr = valueBuffer) {
789+
var ret = _SetMaxValueAsString(cvarNameBufferPtr, valueBufferPtr);
790+
pool.Return(cvarNameBuffer);
791+
pool.Return(valueBuffer);
792+
return ret == 1;
793+
}
794+
}
795+
}
796+
797+
private unsafe static delegate* unmanaged<byte*, byte*, int> _GetMaxValueAsString;
798+
799+
public unsafe static string GetMaxValueAsString(string cvarName) {
800+
var pool = ArrayPool<byte>.Shared;
801+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
802+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
803+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
804+
cvarNameBuffer[cvarNameLength] = 0;
805+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
806+
var ret = _GetMaxValueAsString(null, cvarNameBufferPtr);
807+
var retBuffer = pool.Rent(ret + 1);
808+
fixed (byte* retBufferPtr = retBuffer) {
809+
ret = _GetMaxValueAsString(retBufferPtr, cvarNameBufferPtr);
810+
var retString = Encoding.UTF8.GetString(retBufferPtr, ret);
811+
pool.Return(retBuffer);
812+
pool.Return(cvarNameBuffer);
813+
return retString;
814+
}
815+
}
816+
}
817+
818+
private unsafe static delegate* unmanaged<byte*, byte*, void> _SetValueInternalAsString;
819+
820+
public unsafe static void SetValueInternalAsString(string cvarName, string value) {
821+
var pool = ArrayPool<byte>.Shared;
822+
var cvarNameLength = Encoding.UTF8.GetByteCount(cvarName);
823+
var cvarNameBuffer = pool.Rent(cvarNameLength + 1);
824+
Encoding.UTF8.GetBytes(cvarName, cvarNameBuffer);
825+
cvarNameBuffer[cvarNameLength] = 0;
826+
var valueLength = Encoding.UTF8.GetByteCount(value);
827+
var valueBuffer = pool.Rent(valueLength + 1);
828+
Encoding.UTF8.GetBytes(value, valueBuffer);
829+
valueBuffer[valueLength] = 0;
830+
fixed (byte* cvarNameBufferPtr = cvarNameBuffer) {
831+
fixed (byte* valueBufferPtr = valueBuffer) {
832+
_SetValueInternalAsString(cvarNameBufferPtr, valueBufferPtr);
833+
pool.Return(cvarNameBuffer);
834+
pool.Return(valueBuffer);
835+
}
836+
}
837+
}
645838
}

0 commit comments

Comments
 (0)