The-Powder-Toy/newelement.py

70 lines
1.6 KiB
Python
Executable File

import sys
import re
import os
if len(sys.argv) != 2:
name = input('element name: ')
else:
name = sys.argv[1]
if re.search('[^A-Z0-9-]', name):
sys.exit('element names should only contain uppercase letters, numbers and hyphens (you can change the Name property of the element to whatever later though, which is what shows up in menus)')
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"
//#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'))