2019-08-14 12:15:57 -05:00
#!/usr/bin/env python3
2019-05-06 03:59:06 -05:00
import sys
import re
import os
if len ( sys . argv ) != 2 :
2019-06-23 04:23:27 -05:00
name = input ( ' element name: ' )
else :
name = sys . argv [ 1 ]
if re . search ( ' [^A-Z0-9-] ' , name ) :
2019-06-23 05:11:01 -05:00
sys . exit ( ' element names should only contain uppercase letters, digits and hyphens (you can change the Name property of the element to whatever later though, which is what shows up in menus) ' )
2019-05-06 03:59:06 -05:00
path = ' src/simulation/elements/ ' + name + ' .cpp '
if os . path . isfile ( path ) :
sys . exit ( ' element already exists ' )
with open ( " generator.py " ) as f :
exec ( compile ( f . read ( ) , " generator.py " , ' exec ' ) )
max_id = 0
with open ( ' generated/ElementClasses.h ' , ' r ' ) as classes :
for pt in re . findall ( ' #define PT_ \\ S+ ( \\ d+) ' , classes . read ( ) ) :
pt_id = int ( pt )
if max_id < pt_id :
max_id = pt_id
with open ( path , ' w ' ) as elem :
elem . write ( r """ #include " simulation/ElementCommon.h "
2019-06-23 04:23:27 -05:00
2019-05-06 03:59:06 -05:00
/ / #TPT-Directive ElementClass Element_{0} PT_{0} {1}
Element_ { 0 } : : Element_ { 0 } ( )
{ {
Identifier = " DEFAULT_PT_ {0} " ;
Name = " {0} " ;
Colour = PIXPACK ( 0xFFFFFF ) ;
MenuVisible = 1 ;
MenuSection = SC_SPECIAL ;
Enabled = 1 ;
/ / element properties here
Update = & Element_ { 0 } : : update ;
Graphics = & Element_ { 0 } : : graphics ;
} }
/ / #TPT-Directive ElementHeader Element_{0} static int update(UPDATE_FUNC_ARGS)
int Element_ { 0 } : : update ( UPDATE_FUNC_ARGS )
{ {
/ / update code here
return 0 ;
} }
/ / #TPT-Directive ElementHeader Element_{0} static int graphics(GRAPHICS_FUNC_ARGS)
int Element_ { 0 } : : graphics ( GRAPHICS_FUNC_ARGS )
{ {
/ / graphics code here
/ / return 1 if nothing dymanic happens here
return 0 ;
} }
Element_ { 0 } : : ~ Element_ { 0 } ( ) { { } }
""" .format(name, str(max_id + 1)))
elem . close ( )
with open ( " generator.py " ) as f :
exec ( compile ( f . read ( ) , " generator.py " , ' exec ' ) )