Skip to content

Commit dd476c2

Browse files
committed
Add --preferred-project arg for generator scripts
1 parent 28bba54 commit dd476c2

4 files changed

Lines changed: 24 additions & 8 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ This plugin comes with a set of particular python generator scripts located in t
4040
* ``-g`` ``--generate-classes``: A list of class/enum definitions to generate. Use "all" to generate all classes (Default).
4141
* ``-a`` ``--static-assert``: Generate static assertions of resulting class/enum definitions to ensure their validity.
4242
* ``-d`` ``--supply-hl2sdk``: Supplies hl2sdk class/enum definitions if applicable to the generated file.
43+
* ``-p`` ``--preferred-project``: Prefer server or client project for generation. (Could only be ``server`` or ``client``). Default is ``server``.
4344
> [!NOTE]
4445
> Schema dumps with parent scope, might not generate correct code without supplying [hl2sdk](https://github.com/alliedmodders/hl2sdk) definitions!
4546
@@ -51,6 +52,7 @@ This plugin comes with a set of particular python generator scripts located in t
5152
* ``-s`` ``--silent``: Disables stdout output.
5253
* ``-c`` ``--comments``: Generate help comments for resulting class/enum definitions.
5354
* ``-g`` ``--generate-classes``: A list of class/enum definitions to generate. Doesn't default to "all" and expects you to provide classes to generate.
55+
* ``-p`` ``--preferred-project``: Prefer server or client project for generation. (Could only be ``server`` or ``client``). Default is ``server``.
5456
> [!NOTE]
5557
> This script is mostly an example of how you can automate dumping schema to macro headers for plugins that use [s2ze](https://github.com/Source2ZE/CS2Fixes) alike schema systems.
5658

generator_scripts/generate_cpp.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ def main():
496496
parser.add_argument('-g', '--generate-classes', help = 'A list of class/enum definitions to generate. Use "all" to generate all classes (Default).', nargs = '+', type = str, dest = 'generate_classes', default = 'all')
497497
parser.add_argument('-a', '--static-assert', help = 'Generate static assertions of resulting class/enum definitions to ensure their validity.', action = 'store_true', dest = 'static_assert')
498498
parser.add_argument('-d', '--supply-hl2sdk', help = 'Supplies hl2sdk class/enum definitions if applicable to the generated file.', action = 'store_true', dest = 'supply_hl2sdk')
499+
parser.add_argument('-p', '--preferred-project', help = 'Prefer server or client project for generation.', type = str, dest = 'preferred_project', choices=['server', 'client'], default = 'server')
499500

500501
args = parser.parse_args()
501502
flags = parse_args_as_flags(args)
@@ -629,6 +630,9 @@ def main():
629630
print_stdout('Generating all class definitions...')
630631

631632
for defn in schema_file.defs:
633+
if defn.project in ['server', 'client'] and defn.project != args.preferred_project:
634+
continue
635+
632636
total_generated += 1
633637
context.process_object(defn)
634638
else:

generator_scripts/generate_cpp_defs.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ def main():
124124
parser.add_argument('-s', '--silent', help = 'Disables stdout output.', action = 'store_true', dest = 'silent')
125125
parser.add_argument('-c', '--comments', help = 'Generate help comments for resulting class/enum definitions.', action = 'store_true', dest = 'add_comments')
126126
parser.add_argument('-g', '--generate-classes', help = 'A list of class/enum definitions to generate.', required = True, nargs = '+', type = str, dest = 'generate_classes', default = None)
127+
parser.add_argument('-p', '--preferred-project', help = 'Prefer server or client project for generation.', type = str, dest = 'preferred_project', choices=['server', 'client'], default = 'server')
127128

128129
args = parser.parse_args()
129130
flags = parse_args_as_flags(args)
@@ -144,14 +145,23 @@ def main():
144145
print_stdout(f'Generating ({", ".join(args.generate_classes)}) class definitions...')
145146

146147
for class_name in args.generate_classes:
147-
defn = schema_file.defs.get_def_at_name(class_name)
148+
start_at = 0
148149

149-
if defn == None:
150-
print_stdout(f'Class definition ({class_name}) not found in schema file, failed to generate!')
151-
continue
150+
while start_at < len(schema_file.defs):
151+
defn = schema_file.defs.get_def_at_name(class_name, start_at)
152152

153-
total_generated += 1
154-
context.process_object(defn)
153+
if defn == None:
154+
print_stdout(f'Class definition ({class_name}) not found in schema file, failed to generate! {start_at}')
155+
break
156+
157+
start_at = schema_file.defs.get_def_idx(defn) + 1
158+
159+
if defn.project in ['server', 'client'] and defn.project != args.preferred_project:
160+
continue
161+
162+
total_generated += 1
163+
context.process_object(defn)
164+
break
155165

156166
print_stdout(f'Successfully generated C++ file at {os.path.abspath(args.out_path)} (Total objects processed: {total_generated})')
157167

generator_scripts/generator_scripts/obj_defs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -669,8 +669,8 @@ def get_def_at_name_or_synth(self, name):
669669
self.synth_defs.append(ObjectDefinition.generate_synthetic_class(name))
670670
return self.synth_defs[-1]
671671

672-
def get_def_at_name(self, name):
673-
for defn in self.defs:
672+
def get_def_at_name(self, name, start_at = 0):
673+
for defn in self.defs[start_at:]:
674674
if defn.name == name:
675675
return defn
676676
return None

0 commit comments

Comments
 (0)