in rts/engine/compile_cmds.py [0:0]
def read_cmd_def(def_filename, content, classes):
idx = None
for line in open(def_filename, "r"):
line = line.strip()
# Simply parse the line and construct the Cmd definition.
m = re.match(r"CMD_(.*?)\((.*?)\);", line)
if not m: continue
if m.group(1) == "DURATIVE":
baseclass = "CmdDurative"
override_run = " bool run(const GameEnv& env, CmdReceiver *) override;"
elif m.group(1) == "IMMEDIATE":
baseclass = "CmdImmediate"
override_run = " bool run(GameEnv* env, CmdReceiver *) override;"
elif m.group(1) == "START":
idx = int(m.group(2))
continue
else:
continue
items = [v.strip() for v in m.group(2).split(",")]
classname, enum_name = get_class_and_enum_name(items[0])
classes[classname] = dict(bases=["CmdBase", baseclass], enum=enum_name)
types = items[1::2]
names = items[2::2]
# Check default argument.
defaults = map(lambda x: x.split("=")[1].strip() if len(x.split("=")) == 2 else None, names)
names = [ n.split("=")[0].strip() for n in names ]
s_name = "SERIALIZER_DERIVED"
if len(names) == 0: s_name += "0"
serializer = " " + s_name + "(%s, %s" % (classname, baseclass) + "".join(", _%s" % n for n in names) + ");"
# Compute the variable declaration and variable assignments.
symbols = dict(
idx = str(idx),
baseclass = baseclass,
override_run = override_run,
enum_name = enum_name,
classname = classname,
var_decl = "\n".join(" %s _%s;" % (t, n) for t, n in zip(types, names)) + "\n",
var_init_list = "".join(", " + init_modifier(t, n, d) for t, n, d in zip(types, names, defaults)),
serializer = serializer,
var_initializer = "".join(", _%s(%s)" % (n, n) for n in names),
var_ostream = " ".join("<< \" [%s]: \" << _%s" % (n, n) for n in names),
accessors = "\n".join(" %s %s() const { return _%s; }" % (type_modifier(t), n, n) for t, n in zip(types, names))
)
text = template
for k, v in symbols.items():
text = text.replace("$" + k, v)
content.append(text)
idx += 1