Compare commits

...

1 Commits

Author SHA1 Message Date
Michael Wilson
1ad1828e30 feat: Add SchemaMember attribute to schema objects` (#208) 2023-12-17 13:12:26 +10:00
5 changed files with 9244 additions and 4730 deletions

View File

@@ -0,0 +1,14 @@
namespace CounterStrikeSharp.API.Core.Attributes;
[AttributeUsage(AttributeTargets.Property)]
public class SchemaMemberAttribute : Attribute
{
public string ClassName { get; }
public string MemberName { get; }
public SchemaMemberAttribute(string className, string memberName)
{
ClassName = className;
MemberName = memberName;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -233,7 +233,9 @@ internal static partial class Program
continue;
// Putting these in the too hard basket for now.
if (field.Name == "m_VoteOptions" || field.Name == "m_aShootSounds") continue;
if (field.Name == "m_VoteOptions" || field.Name == "m_aShootSounds" || field.Name == "m_pVecRelationships") continue;
if (IgnoreClasses.Contains(field.Type.Name)) continue;
if (field.Type.Category == SchemaTypeCategory.Bitfield) continue;
if (field.Type is { Category: SchemaTypeCategory.Atomic, Atomic: SchemaAtomicCategory.Collection })
{
@@ -242,9 +244,10 @@ internal static partial class Program
var handleParams = $"this.Handle, \"{schemaClassName}\", \"{field.Name}\"";
builder.AppendLine($" // {field.Name}");
builder.AppendLine($"\t// {field.Name}");
builder.AppendLine($"\t[SchemaMember(\"{schemaClassName}\", \"{field.Name}\")]");
if (field.Type is { Category: SchemaTypeCategory.FixedArray, CsTypeName: "string" })
if (field.Type is { Category: SchemaTypeCategory.FixedArray, CsTypeName: "string" } or { Category: SchemaTypeCategory.Ptr, CsTypeName: "string" })
{
var getter = $"return Schema.GetString({handleParams});";
var setter = $"Schema.SetString({handleParams}, value);";

View File

@@ -4816,10 +4816,10 @@
}
},
{
"name": "m_eThrowStatus",
"name": "m_bThrowAnimating",
"type": {
"category": 6,
"name": "EGrenadeThrowState"
"category": 0,
"name": "bool"
}
},
{
@@ -4849,6 +4849,40 @@
"category": 5,
"name": "GameTime_t"
}
},
{
"name": "m_bJustPulledPin",
"type": {
"category": 0,
"name": "bool"
}
},
{
"name": "m_nNextHoldTick",
"type": {
"category": 5,
"name": "GameTick_t"
}
},
{
"name": "m_flNextHoldFrac",
"type": {
"category": 0,
"name": "float32"
}
},
{
"name": "m_hSwitchToWeaponAfterThrow",
"type": {
"atomic": 1,
"category": 4,
"inner": {
"category": 5,
"name": "CCSWeaponBase"
},
"name": "CHandle< CCSWeaponBase >",
"outer": "CHandle"
}
}
],
"parent": "CCSWeaponBase"
@@ -6312,7 +6346,7 @@
"category": 0,
"name": "char"
},
"name": "char[4096]"
"name": "char[260]"
}
},
{
@@ -6842,6 +6876,13 @@
"name": "int64"
}
},
{
"name": "m_nLastRealCommandNumberExecuted",
"type": {
"category": 0,
"name": "int32"
}
},
{
"name": "m_iIgnoreGlobalChat",
"type": {
@@ -16738,10 +16779,17 @@
}
},
{
"name": "m_bPlayerFireEventIsPrimary",
"name": "m_ePlayerFireEvent",
"type": {
"category": 0,
"name": "bool"
"category": 6,
"name": "PlayerAnimEvent_t"
}
},
{
"name": "m_ePlayerFireEventAttackType",
"type": {
"category": 6,
"name": "WeaponAttackType_t"
}
},
{
@@ -16799,7 +16847,7 @@
"category": 5,
"name": "HSequence"
},
"name": "HSequence[6]"
"name": "HSequence[7]"
}
},
{
@@ -16951,10 +16999,17 @@
}
},
{
"name": "m_flPostponeFireReadyTime",
"name": "m_nPostponeFireReadyTicks",
"type": {
"category": 5,
"name": "GameTime_t"
"name": "GameTick_t"
}
},
{
"name": "m_flPostponeFireReadyFrac",
"type": {
"category": 0,
"name": "float32"
}
},
{
@@ -32791,40 +32846,6 @@
],
"parent": "CLogicalEntity"
},
"CLogicEventListener": {
"fields": [
{
"name": "m_strEventName",
"type": {
"atomic": 0,
"category": 4,
"name": "CUtlString"
}
},
{
"name": "m_bIsEnabled",
"type": {
"category": 0,
"name": "bool"
}
},
{
"name": "m_nTeam",
"type": {
"category": 0,
"name": "int32"
}
},
{
"name": "m_OnEventFired",
"type": {
"category": 5,
"name": "CEntityIOOutput"
}
}
],
"parent": "CLogicalEntity"
},
"CLogicGameEvent": {
"fields": [
{
@@ -34452,35 +34473,7 @@
"parent": "CLogicalEntity"
},
"CMelee": {
"fields": [
{
"name": "m_flThrowAt",
"type": {
"category": 5,
"name": "GameTime_t"
}
},
{
"name": "m_hThrower",
"type": {
"atomic": 1,
"category": 4,
"inner": {
"category": 5,
"name": "CBaseEntity"
},
"name": "CHandle< CBaseEntity >",
"outer": "CHandle"
}
},
{
"name": "m_bDidThrowDamage",
"type": {
"category": 0,
"name": "bool"
}
}
],
"fields": [],
"parent": "CCSWeaponBase"
},
"CMeshletDescriptor": {
@@ -54566,10 +54559,6 @@
"fields": [],
"parent": "CBaseTrigger"
},
"CTriggerHostageReset": {
"fields": [],
"parent": "CBaseTrigger"
},
"CTriggerHurt": {
"fields": [
{
@@ -70344,7 +70333,7 @@
"category": 0,
"name": "char"
},
"name": "char[4096]"
"name": "char[260]"
}
},
{
@@ -76074,6 +76063,20 @@
"category": 0,
"name": "float32"
}
},
{
"name": "m_flTickInterval",
"type": {
"category": 0,
"name": "float32"
}
},
{
"name": "m_flTickStartTime",
"type": {
"category": 0,
"name": "float64"
}
}
]
},
@@ -90386,23 +90389,6 @@
}
]
},
"C4LightEffect_t": {
"align": 4,
"items": [
{
"name": "eLightEffectNone",
"value": 0
},
{
"name": "eLightEffectDropped",
"value": 1
},
{
"name": "eLightEffectThirdPersonHeld",
"value": 2
}
]
},
"CAnimationGraphVisualizerPrimitiveType": {
"align": 4,
"items": [
@@ -91374,23 +91360,6 @@
}
]
},
"EGrenadeThrowState": {
"align": 4,
"items": [
{
"name": "NotThrowing",
"value": 0
},
{
"name": "Throwing",
"value": 1
},
{
"name": "ThrowComplete",
"value": 2
}
]
},
"EInButtonState": {
"align": 4,
"items": [
@@ -96428,7 +96397,7 @@
},
{
"name": "ALL_CONTEXTS",
"value": 4293918720
"value": 18446744073708503040
},
{
"name": "ALL_SCENTS",

View File

@@ -40,7 +40,7 @@ public record SchemaFieldType
}
public bool IsString =>
Category == SchemaTypeCategory.FixedArray
(Category == SchemaTypeCategory.FixedArray || Category == SchemaTypeCategory.Ptr)
&& Inner!.Category == SchemaTypeCategory.Builtin
&& Inner.Name == "char";
@@ -98,7 +98,8 @@ public record SchemaFieldType
public string CsTypeName => Category switch
{
SchemaTypeCategory.Builtin => BuiltinToCsKeyword(Name),
SchemaTypeCategory.Ptr => $"{Inner!.CsTypeName}?",
SchemaTypeCategory.Ptr => IsString
? "string" : $"{Inner!.CsTypeName}?",
SchemaTypeCategory.FixedArray => IsString
? "string"
: $"{Inner!.CsTypeName}[]",