def write_foreach(self, writer): writer.start_brace() eval_name = self.convert_index(0) obj_param = self.parameters[1].loader obj = (obj_param.objectInfo, obj_param.objectType) obj = self.converter.filter_object_type(obj) object_class = self.converter.get_object_class(obj[1]) foreach = self.converter.get_object_writer(self.get_object()) loop_names = foreach.loop_names name = None try: exp, = self.parameters[0].loader.items[:-1] real_name = exp.loader.value if real_name not in loop_names: print 'invalid foreach loop:', real_name, loop_names writer.end_brace() return name = get_method_name(real_name) func_call = loop_names[real_name] except ValueError: raise NotImplementedError() writer.putln('std::string name = %s;' % eval_name) func_call = 'call_dynamic_foreach(name, ' object_class = 'FrameObject*' obj_param = self.parameters[1].loader obj = (obj_param.objectInfo, obj_param.objectType) with self.converter.iterate_object(obj, writer, 'selected'): if name is not None: selected = self.converter.get_object(obj) writer.putlnc('foreach_instance_%s = %s;', name, selected) writer.putlnc('%s();', func_call) writer.end_brace()
def write_frame(self, writer): loops = defaultdict(list) loop_objects = {} for loop in self.get_conditions(LOOP_FOR_OBJECT, ON_LOOP): parameters = loop.conditions[0].data.items exp, = parameters[0].loader.items[:-1] real_name = exp.loader.value try: object_info = parameters[1].loader.objectInfo object_type = parameters[1].loader.objectType obj = (object_info, object_type) obj = self.converter.filter_object_type(obj) loop_objects[real_name] = obj except IndexError: # for ON_LOOP pass loops[real_name].append(loop) self.loop_names = {} self.converter.begin_events() for real_name, groups in loops.iteritems(): obj = loop_objects[real_name] name = get_method_name(real_name) instance_name = 'foreach_instance_' + name writer.add_member('FrameObject * %s' % instance_name) name = 'foreach_%s_%s' % (name, self.converter.current_frame_index) object_class = self.converter.get_object_class(obj[1]) set_value = '((%s)%s)' % (object_class, instance_name) self.converter.set_object(obj, set_value) for qual_obj in self.converter.resolve_qualifier(obj): self.converter.set_object(qual_obj, set_value) name = self.converter.write_generated(name, writer, groups) self.loop_names[real_name] = name
def write_shader_param(): header = CodeWriter(os.path.join(get_base_path(), 'shaderparam.h')) code = CodeWriter(os.path.join(get_base_path(), 'shaderparam.cpp')) parameters = [] for shader in SHADERS: for param in shader.uniforms: parameters.append(param[0]) if shader.tex_param: parameters.append(shader.tex_param) parameters = list(set(parameters)) hash_data = get_hash_function('hash_shader_parameter', parameters, False) code.putln(hash_data.code.replace('inline ', '')) header.start_guard('CHOWDREN_SHADERPARAM_H') header.putln('unsigned int hash_shader_parameter(const char * str, ' 'unsigned int len);') header.putln('') for k, v in hash_data.strings.iteritems(): name = 'SHADER_PARAM_%s' % get_method_name(k).upper() header.putdefine(name, v) header.close_guard('CHOWDREN_SHADERPARAM_H') header.close() code.close()
def get_string(self): converter = self.converter name = converter.expression_items[converter.item_index+1].loader.value foreach_instance = 'foreach_instance_' + get_method_name(name) fixed = foreach_instance + '->get_fixed()' converter.item_index += 2 return fixed
def write_init(self, writer): name_id = 'BACK_ID_' + get_method_name(self.data.name).upper() writer.putraw('#ifdef %s' % name_id) writer.putlnc('manager.frame->back_instances[%s].push_back(this);', name_id) writer.putraw('#endif') image = self.converter.get_image(self.common.image) writer.putln('image = %s;' % image) if self.data.name.endswith('(DRC)'): writer.putraw('#if defined(CHOWDREN_IS_WIIU) || ' 'defined(CHOWDREN_EMULATE_WIIU)') writer.putln('remote = CHOWDREN_REMOTE_TARGET;') writer.putraw('#endif') writer.putln('width = image->width;') writer.putln('height = image->height;') obstacle_type = self.common.obstacleType if obstacle_type == NONE_OBSTACLE: return if self.common.collisionMode == FINE_COLLISION: writer.putln('collision = new BackdropCollision(this, image);') else: writer.putln('collision = new InstanceBox(this);') if obstacle_type == LADDER_OBSTACLE: writer.putln('collision->flags |= LADDER_OBSTACLE;')
def write_init(self, writer): name_id = 'BACK_ID_' + get_method_name(self.data.name).upper() writer.putraw('#ifdef %s' % name_id) writer.putlnc('manager.frame->back_instances[%s].push_back(this);', name_id) writer.putraw('#endif') image = self.converter.get_image(self.common.image) writer.putln('image = %s;' % image) if self.data.name.endswith('(DRC)'): writer.putraw('#if defined(CHOWDREN_IS_WIIU) || ' 'defined(CHOWDREN_EMULATE_WIIU)') writer.putln('remote = CHOWDREN_REMOTE_TARGET;') writer.putraw('#endif') writer.putln('width = image->width;') writer.putln('height = image->height;') obstacle_type = self.common.obstacleType if obstacle_type == NONE_OBSTACLE: return if self.common.collisionMode == FINE_COLLISION: writer.putln('collision = new BackdropCollision(this, image);') else: writer.putln('collision = new InstanceBox(this);') if obstacle_type == LADDER_OBSTACLE: writer.putln('collision->flags |= LADDER_OBSTACLE;')
def get_string(self): converter = self.converter name = converter.expression_items[converter.item_index + 1].loader.value foreach_instance = 'foreach_instance_' + get_method_name(name) fixed = foreach_instance + '->get_fixed()' converter.item_index += 2 return fixed
def get_list_name(self, name): name_id = self.converter.back_ids.get(name.lower(), None) if name_id is None: name_id = 'BACK_ID_' + get_method_name(name).upper() next_id = len(self.converter.back_ids) self.converter.back_ids[name] = name_id self.converter.add_define(name_id, next_id) list_name = 'back_instances[%s]' % name_id return list_name
def get_list_name(self, name): name_id = self.converter.back_ids.get(name.lower(), None) if name_id is None: name_id = 'BACK_ID_' + get_method_name(name).upper() next_id = len(self.converter.back_ids) self.converter.back_ids[name] = name_id self.converter.add_define(name_id, next_id) list_name = 'back_instances[%s]' % name_id return list_name
def get_global(self, typ): data = self.converter.global_object_data key = (self.data.name, self.class_name, typ) try: return data[key] except KeyError: pass name = 'global_data_%s_%s' % (len(data), get_method_name(self.data.name)) data[key] = name self.converter.global_object_header.putlnc('extern %s %s;', typ, name) self.converter.global_object_code.putlnc('%s %s;', typ, name) return name
def get_global(self, typ): data = self.converter.global_object_data key = (self.data.name, self.class_name, typ) try: return data[key] except KeyError: pass name = 'global_data_%s_%s' % (len(data), get_method_name(self.data.name)) data[key] = name self.converter.global_object_header.putlnc('extern %s %s;', typ, name) self.converter.global_object_code.putlnc('%s %s;', typ, name) return name
def write_init(self, writer): name_id = "BACK_ID_" + get_method_name(self.data.name).upper() writer.putraw("#ifdef %s" % name_id) writer.putlnc("manager.frame->back_instances[%s].push_back(this);", name_id) writer.putraw("#endif") image = self.converter.get_image(self.common.image) writer.putln("image = %s;" % image) if self.data.name.endswith("(DRC)"): writer.putraw("#if defined(CHOWDREN_IS_WIIU) || " "defined(CHOWDREN_EMULATE_WIIU)") writer.putln("remote = CHOWDREN_REMOTE_TARGET;") writer.putraw("#endif") writer.putln("width = image->width;") writer.putln("height = image->height;") obstacle_type = self.common.obstacleType if obstacle_type == NONE_OBSTACLE: return if self.common.collisionMode == FINE_COLLISION: writer.putln("collision = new BackdropCollision(this, image);") else: writer.putln("collision = new InstanceBox(this);") if obstacle_type == LADDER_OBSTACLE: writer.putln("collision->flags |= LADDER_OBSTACLE;")
def get_asset_name(typ, name, index=None): name = get_method_name(name).upper() if index is None: return '%s_%s' % (typ, name) return '%s_%s_%s' % (typ, name, index)
def get_asset_name(typ, name, index=None): name = get_method_name(name).upper() if index is None: return '%s_%s' % (typ, name) return '%s_%s_%s' % (typ, name, index)
def get_pool(self): return '%s_pool' % get_method_name(self.class_name)