def write_init(self, writer): data = self.get_data() if self.is_active_picture: width = data.readInt() height = data.readInt() flags_int = data.readInt(True) transparent_color = data.readColor() image = data.readString(260) or None else: width = data.readShort(True) height = data.readShort(True) flags_int = data.readShort(True) image = data.readString(260) or None transparent_color = data.readColor() flags = FLAGS.copy() flags.setFlags(flags_int) visible = not flags['HideOnStart'] if not flags['TransparentFirstPixel']: writer.putln('set_transparent_color(%s);' % make_color(transparent_color)) writer.putlnc('sprite_col.width = width = %s;', width) writer.putlnc('sprite_col.height = height = %s;', height) if flags['Resize']: writer.putlnc('picture_flags |= FORCE_RESIZE;')
def write_init(self, writer): text = self.common.text lines = [paragraph.value for paragraph in text.items] for paragraph in text.items: writer.putln(to_c('add_line(%r);', paragraph.value)) # objects_file.putln('font = font%s' % text.items[0].font) writer.putln('width = %s;' % text.width) writer.putln('height = %s;' % text.height) writer.putln('blend_color = %s;' % make_color(text.items[0].color)) font = text.items[0].font writer.putln('bold = font%s.bold;' % font) writer.putln('italic = font%s.italic;' % font) writer.putln('font = get_font(font%s.size);' % font) paragraph = text.items[0] if paragraph.flags['HorizontalCenter']: horizontal = 'ALIGN_HCENTER' elif paragraph.flags['RightAligned']: horizontal = 'ALIGN_RIGHT' else: horizontal = 'ALIGN_LEFT' if paragraph.flags['VerticalCenter']: vertical = 'ALIGN_VCENTER' elif paragraph.flags['BottomAligned']: vertical = 'ALIGN_BOTTOM' else: vertical = 'ALIGN_TOP' writer.putln('alignment = %s | %s;' % (horizontal, vertical))
def write_scene(self, data): index = self.data.scenes.index(data) scene = self.open_code('scene%s.h' % (index+1)) scene.put_includes('common.h', 'objects.h') class_name = 'Scene%s' % (index+1) scene.put_class(class_name, 'Scene') scene.put_access('public') scene.put_line(to_c('%s(GameManager * manager) : ' 'Scene(%r, %s, %s, %s, %s, manager)', class_name, data.name, data.width, data.height, make_color(data.background), index)) scene.start_brace() scene.end_brace() scene.put_func('void on_start') for instance in data.instances: scene.put_line('add_object(new %s(%s, %s));' % (self.object_type_names[instance.object_type], instance.x, instance.y)) scene.end_brace() scene.end_brace(True) scene.close()
def write(writer, fade, out): fade_dir = 1.0 / (fade.duration / 1000.0) if not out: fade_dir = -fade_dir color = fade.color fade_type = 'Transition::%s' % FADE_TYPES.get(fade.name, 'FADE') writer.putlnc('manager.set_fade(%s, %s, %s);', fade_type, make_color(color), fade_dir)
def write_init(self, writer): shape = self.common.shape color1 = shape.color1 color2 = shape.color2 fill = shape.getFill() if fill == 'Motif': try: color1 = self.converter.get_solid_image(shape.image) fill = 'Solid' except KeyError: pass writer.putln('width = %s;' % self.common.width) writer.putln('height = %s;' % self.common.height) if fill != 'Motif': writer.putln('color = %s;' % make_color(color1)) if fill == 'Gradient': gradient = shape.getGradientType() if gradient == 'Horizontal': writer.putln('gradient_type = HORIZONTAL_GRADIENT;') else: writer.putln('gradient_type = VERTICAL_GRADIENT;') writer.putln('color2 = %s;' % make_color(color2)) elif fill == 'Motif': self.image = shape.image writer.putlnc('image = %s;', self.converter.get_image(shape.image)) elif color2 is not None: raise NotImplementedError else: writer.putln('gradient_type = NONE_GRADIENT;') writer.putlnc('outline = %s;', self.border) if self.border: writer.putlnc('outline_color = %s;', make_color(self.border_color)) obstacle_type = self.common.obstacleType if obstacle_type == NONE_OBSTACLE: return writer.putln('collision = new InstanceBox(this);') if obstacle_type == LADDER_OBSTACLE: writer.putln('collision->flags |= LADDER_OBSTACLE;')
def write_init(self, writer): shape = self.common.shape color1 = shape.color1 color2 = shape.color2 fill = shape.getFill() if fill == "Motif": try: color1 = self.converter.get_solid_image(shape.image) fill = "Solid" except KeyError: pass writer.putln("width = %s;" % self.common.width) writer.putln("height = %s;" % self.common.height) if fill != "Motif": writer.putln("color = %s;" % make_color(color1)) if fill == "Gradient": gradient = shape.getGradientType() if gradient == "Horizontal": writer.putln("gradient_type = HORIZONTAL_GRADIENT;") else: writer.putln("gradient_type = VERTICAL_GRADIENT;") writer.putln("color2 = %s;" % make_color(color2)) elif fill == "Motif": self.image = shape.image writer.putlnc("image = %s;", self.converter.get_image(shape.image)) elif color2 is not None: raise NotImplementedError else: writer.putln("gradient_type = NONE_GRADIENT;") writer.putlnc("outline = %s;", self.border) if self.border: writer.putlnc("outline_color = %s;", make_color(self.border_color)) obstacle_type = self.common.obstacleType if obstacle_type == NONE_OBSTACLE: return writer.putln("collision = new InstanceBox(this);") if obstacle_type == LADDER_OBSTACLE: writer.putln("collision->flags |= LADDER_OBSTACLE;")
def write_init(self, writer): data = self.get_data() width = data.readInt() height = data.readInt() self.flags = BitDict( 'Resize', 'HideOnStart', 'TransparentBlack', 'TransparentFirstPixel', 'FlippedHorizontally', 'FlippedVertically', 'Resample', 'WrapModeOff', ) self.flags.setFlags(data.readInt(True)) visible = not self.flags['HideOnStart'] transparent_color = data.readColor() if not self.flags['TransparentFirstPixel']: writer.putln('set_transparent_color(%s);' % make_color(transparent_color)) image = data.readString(260) or None
def write_init(self, writer): text = self.common.text writer.putln('width = %s;' % text.width) writer.putln('height = %s;' % text.height) writer.putln('blend_color = %s;' % make_color(text.items[0].color)) font = text.items[0].font font_info = self.converter.fonts[font] writer.putlnc('bold = %s;', font_info.isBold()) writer.putlnc('italic = %s;', bool(font_info.italic)) writer.putlnc('font_name = %r;', font_info.faceName) flags = [] if font_info.isBold(): flags.append('FTTextureFont::BOLD') flags = ' | '.join(flags) if not flags: flags = '0' writer.putlnc('font = get_font(%s, %s);', font_info.getSize(), flags) paragraph = text.items[0] if paragraph.flags['HorizontalCenter']: horizontal = 'ALIGN_HCENTER' elif paragraph.flags['RightAligned']: horizontal = 'ALIGN_RIGHT' else: horizontal = 'ALIGN_LEFT' if paragraph.flags['VerticalCenter']: vertical = 'ALIGN_VCENTER' elif paragraph.flags['BottomAligned']: vertical = 'ALIGN_BOTTOM' else: vertical = 'ALIGN_TOP' writer.putln('alignment = %s | %s;' % (horizontal, vertical)) for paragraph in text.items: text = self.converter.config.get_string(paragraph.value) writer.putln(to_c('add_line(%r);', text))
def write_init(self, writer): text = self.common.text lines = [paragraph.value for paragraph in text.items] writer.putln('width = %s;' % text.width) writer.putln('height = %s;' % text.height) writer.putln('blend_color = %s;' % make_color(text.items[0].color)) font = text.items[0].font font_info = self.converter.fonts[font] writer.putlnc('bold = %s;', font_info.isBold()) writer.putlnc('italic = %s;', bool(font_info.italic)) writer.putlnc('font_name = %r;', font_info.faceName) flags = [] if font_info.isBold(): flags.append('FTTextureFont::BOLD') flags = ' | '.join(flags) if not flags: flags = '0' writer.putlnc('font = get_font(%s, %s);', font_info.getSize(), flags) paragraph = text.items[0] if paragraph.flags['HorizontalCenter']: horizontal = 'ALIGN_HCENTER' elif paragraph.flags['RightAligned']: horizontal = 'ALIGN_RIGHT' else: horizontal = 'ALIGN_LEFT' if paragraph.flags['VerticalCenter']: vertical = 'ALIGN_VCENTER' elif paragraph.flags['BottomAligned']: vertical = 'ALIGN_BOTTOM' else: vertical = 'ALIGN_TOP' writer.putln('alignment = %s | %s;' % (horizontal, vertical)) for paragraph in text.items: writer.putln(to_c('add_line(%r);', paragraph.value))
def write_init(self, writer): text = self.common.text lines = [paragraph.value for paragraph in text.items] writer.putln("width = %s;" % text.width) writer.putln("height = %s;" % text.height) writer.putln("blend_color = %s;" % make_color(text.items[0].color)) font = text.items[0].font font_info = self.converter.fonts[font] writer.putlnc("bold = %s;", font_info.isBold()) writer.putlnc("italic = %s;", bool(font_info.italic)) writer.putlnc("font_name = %r;", font_info.faceName) flags = [] if font_info.isBold(): flags.append("FTTextureFont::BOLD") flags = " | ".join(flags) if not flags: flags = "0" writer.putlnc("font = get_font(%s, %s);", font_info.getSize(), flags) paragraph = text.items[0] if paragraph.flags["HorizontalCenter"]: horizontal = "ALIGN_HCENTER" elif paragraph.flags["RightAligned"]: horizontal = "ALIGN_RIGHT" else: horizontal = "ALIGN_LEFT" if paragraph.flags["VerticalCenter"]: vertical = "ALIGN_VCENTER" elif paragraph.flags["BottomAligned"]: vertical = "ALIGN_BOTTOM" else: vertical = "ALIGN_TOP" writer.putln("alignment = %s | %s;" % (horizontal, vertical)) for paragraph in text.items: writer.putln(to_c("add_line(%r);", paragraph.value))
def write_init(self, writer): data = self.get_data() # data.skipBytes(4) width = data.readShort(True) height = data.readShort(True) writer.putlnc('width = %s;', width) writer.putlnc('height = %s;', height) flags = FLAGS.copy() flags.setFlags(data.readInt()) self.show_border = flags['ShowButtonBorder'] self.image_checkbox = flags['ImageCheckbox'] if flags['Hyperlink']: display_type = HYPERLINK elif flags['Button']: if flags['Checkbox']: display_type = CHECKBOX else: display_type = BUTTON else: display_type = NONE align_top_left = flags['AlignImageTopLeft'] align_center = flags['AlignImageCenter'] pattern = flags['AlignImagePattern'] fill = read_system_color(data) border1 = read_system_color(data) border2 = read_system_color(data) self.image = data.readShort() if self.image == -1: writer.putln('image = NULL;') writer.putlnc('blend_color = %s;', make_color(fill)) else: writer.putln('image = %s;' % self.converter.get_image(self.image)) if pattern: writer.putln('type = PATTERN_IMAGE;') elif align_center: writer.putln('type = CENTER_IMAGE;') elif align_top_left: writer.putln('type = TOPLEFT_IMAGE;') else: raise NotImplementedError() data.skipBytes(2) # rData_wFree text_color = read_system_color(data) margin_left = data.readShort() margin_top = data.readShort() margin_right = data.readShort() margin_bottom = data.readShort() font = LogFont(data, old=True) data.skipBytes(40) # file.readStringSize(40) data.adjust(8) text = data.readReader(data.readInt(True)).readString().rsplit( '\\n', 1) if len(text) == 1: text, = text tooltip = None else: text, tooltip = text new_width = width - margin_left - margin_right new_height = height - margin_top - margin_bottom if text: writer.putlnc('text = %r;', text) if flags['AlignTop']: y_align = 'top' elif flags['AlignVerticalCenter']: y_align = 'center' elif flags['AlignBottom']: y_align = 'bottom' if flags['AlignLeft']: x_align = 'left' elif flags['AlignHorizontalCenter']: x_align = 'center' elif flags['AlignRight']: x_align = 'right' version = data.readInt() hyperlink_color = read_system_color(data)
def write_init(self, writer): common = self.common counters = common.counters counter = common.counter if counters: writer.putln('width = %s;' % counters.width) writer.putln('height = %s;' % counters.height) if counters.integerDigits > 0: writer.putlnc('zero_pad = %s;', counters.integerDigits) display_type = counters.displayType if display_type == NUMBERS: writer.putln('type = IMAGE_COUNTER;') writer.putln('static Image * counter_images[14];') writer.putln('static bool initialized = false;') writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') for char_index, char in enumerate(COUNTER_FRAMES): writer.putlnc( 'counter_images[%s] = %s;', char_index, self.converter.get_image(counters.frames[char_index])) writer.end_brace() writer.putln('images = (Image**)&counter_images;') writer.putln('image_count = 14;') elif display_type == HORIZONTAL_BAR: shape_object = counters.shape shape = shape_object.shape if shape != RECTANGLE_SHAPE: print 'horizontal rectangle shape not implemented' return count_right = counters.inverse if count_right: print 'horizontal count direction not implemented' return writer.putln('type = HORIZONTAL_LEFT_COUNTER;') elif display_type == VERTICAL_BAR: shape_object = counters.shape shape = shape_object.shape if shape != RECTANGLE_SHAPE: print 'vertical rectangle shape not implemented' return count_up = counters.inverse if not count_up: print 'vertical count direction not implemented' return writer.putln('type = VERTICAL_UP_COUNTER;') elif display_type == ANIMATION: writer.putln('type = ANIMATION_COUNTER;') size = len(counters.frames) writer.putlnc('static Image * counter_images[%s];', size) writer.putlnc('static bool initialized = false;') writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') for index, image in enumerate(counters.frames): image = self.converter.get_image(image) writer.putlnc('counter_images[%s] = %s;', index, image) writer.end_brace() writer.putln('images = (Image**)&counter_images;') writer.putlnc('image_count = %s;', size) else: print 'type', counters.getDisplayType(), 'not implemented' writer.putln('type = HIDDEN_COUNTER;') writer.putln('width = height = 0;') if display_type in (VERTICAL_BAR, HORIZONTAL_BAR): fill_type = shape_object.fillType if fill_type == GRADIENT_FILL: if shape_object.getGradientType() == 'Horizontal': writer.putlnc('gradient_type = HORIZONTAL_GRADIENT;') else: writer.putlnc('gradient_type = VERTICAL_GRADIENT;') writer.putlnc('color1 = %s;', make_color(shape_object.color1)) writer.putlnc('color2 = %s;', make_color(shape_object.color2)) elif fill_type == SOLID_FILL: writer.putlnc('gradient_type = NONE_GRADIENT;') writer.putlnc('color1 = %s;', make_color(shape_object.color1)) else: raise NotImplementedError else: writer.putln('type = HIDDEN_COUNTER;') writer.putln('width = height = 0;') writer.putlnc('minimum = %s;', counter.minimum) writer.putlnc('maximum = %s;', counter.maximum) if self.is_global(): self.global_name = self.get_global('Counter::SavedCounter') writer.putlnc('if (%s.init)', self.global_name) writer.indent() writer.putlnc('set(%s.value);', self.global_name) writer.dedent() writer.putln('else') writer.indent() writer.putlnc('set(%s);', counter.initial) writer.dedent() else: writer.putlnc('set(%s);', counter.initial)
def write_init(self, writer): data = self.get_data() # data.skipBytes(4) width = data.readShort(True) height = data.readShort(True) writer.putlnc("width = %s;", width) writer.putlnc("height = %s;", height) flags = FLAGS.copy() flags.setFlags(data.readInt()) self.show_border = flags["ShowButtonBorder"] self.image_checkbox = flags["ImageCheckbox"] if flags["Hyperlink"]: display_type = HYPERLINK elif flags["Button"]: if flags["Checkbox"]: display_type = CHECKBOX else: display_type = BUTTON else: display_type = NONE align_top_left = flags["AlignImageTopLeft"] align_center = flags["AlignImageCenter"] pattern = flags["AlignImagePattern"] fill = read_system_color(data) border1 = read_system_color(data) border2 = read_system_color(data) self.image = data.readShort() data.skipBytes(2) # rData_wFree text_color = read_system_color(data) margin_left = data.readShort() margin_top = data.readShort() margin_right = data.readShort() margin_bottom = data.readShort() font = LogFont(data, old=True) data.skipBytes(40) # file.readStringSize(40) data.adjust(8) text = data.readReader(data.readInt(True)).readString().rsplit("\\n", 1) if len(text) == 1: text, = text tooltip = None else: text, tooltip = text new_width = width - margin_left - margin_right new_height = height - margin_top - margin_bottom alignment = [] if flags["AlignTop"]: alignment.append("ALIGN_TOP") elif flags["AlignVerticalCenter"]: alignment.append("ALIGN_VCENTER") elif flags["AlignBottom"]: alignment.append("ALIGN_BOTTOM") if flags["AlignLeft"]: alignment.append("ALIGN_LEFT") elif flags["AlignHorizontalCenter"]: alignment.append("ALIGN_HCENTER") elif flags["AlignRight"]: alignment.append("ALIGN_RIGHT") if alignment: alignment = " | ".join(alignment) else: alignment = "0" if self.image == -1: writer.putln("image = NULL;") if border1 is None or fill is None: color = (0, 0, 0, 0) else: color = fill + (255,) writer.putlnc("box_color = %s;", make_color(color)) writer.putlnc("blend_color = %s;", make_color(text_color)) writer.putlnc("alignment = %s;", alignment) else: writer.putln("image = %s;" % self.converter.get_image(self.image)) if pattern: writer.putln("type = PATTERN_IMAGE;") elif align_center: writer.putln("type = CENTER_IMAGE;") elif align_top_left: writer.putln("type = TOPLEFT_IMAGE;") else: raise NotImplementedError() if text: writer.putlnc("text = %r;", text) version = data.readInt() hyperlink_color = read_system_color(data)
def write_init(self, writer): common = self.common counters = common.counters counter = common.counter if counters: writer.putln('width = %s;' % counters.width) writer.putln('height = %s;' % counters.height) if counters.integerDigits > 0: writer.putlnc('zero_pad = %s;', counters.integerDigits) display_type = counters.displayType if display_type == NUMBERS: writer.putln('type = IMAGE_COUNTER;') writer.putln('static Image * counter_images[14];') writer.putln('static bool initialized = false;') writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') for char_index, char in enumerate(COUNTER_FRAMES): writer.putlnc('counter_images[%s] = %s;', char_index, self.converter.get_image(counters.frames[char_index])) writer.end_brace() writer.putln('images = (Image**)&counter_images;') writer.putln('image_count = 14;') elif display_type == HORIZONTAL_BAR: shape_object = counters.shape shape = shape_object.shape if shape != RECTANGLE_SHAPE: print 'horizontal rectangle shape not implemented' return count_right = counters.inverse if count_right: print 'horizontal count direction not implemented' return writer.putln('type = HORIZONTAL_LEFT_COUNTER;') elif display_type == VERTICAL_BAR: shape_object = counters.shape shape = shape_object.shape if shape != RECTANGLE_SHAPE: print 'vertical rectangle shape not implemented' return count_up = counters.inverse if not count_up: print 'vertical count direction not implemented' return writer.putln('type = VERTICAL_UP_COUNTER;') elif display_type == ANIMATION: writer.putln('type = ANIMATION_COUNTER;') size = len(counters.frames) writer.putlnc('static Image * counter_images[%s];', size) writer.putlnc('static bool initialized = false;') writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') for index, image in enumerate(counters.frames): image = self.converter.get_image(image) writer.putlnc('counter_images[%s] = %s;', index, image) writer.end_brace() writer.putln('images = (Image**)&counter_images;') writer.putlnc('image_count = %s;', size) else: print 'type', counters.getDisplayType(), 'not implemented' return raise NotImplementedError if display_type in (VERTICAL_BAR, HORIZONTAL_BAR): fill_type = shape_object.fillType if fill_type == GRADIENT_FILL: if shape_object.getGradientType() == 'Horizontal': writer.putlnc('gradient_type = HORIZONTAL_GRADIENT;') else: writer.putlnc('gradient_type = VERTICAL_GRADIENT;') writer.putlnc('color1 = %s;', make_color(shape_object.color1)) writer.putlnc('color2 = %s;', make_color(shape_object.color2)) elif fill_type == SOLID_FILL: writer.putlnc('gradient_type = NONE_GRADIENT;') writer.putlnc('color1 = %s;', make_color(shape_object.color1)) else: raise NotImplementedError else: writer.putln('type = HIDDEN_COUNTER;') writer.putln('width = height = 0;') writer.putlnc('minimum = %s;', counter.minimum) writer.putlnc('maximum = %s;', counter.maximum) if self.is_global(): self.global_name = self.get_global('Counter::SavedCounter') writer.putlnc('if (%s.init)', self.global_name) writer.indent() writer.putlnc('set(%s.value);', self.global_name) writer.dedent() writer.putln('else') writer.indent() writer.putlnc('set(%s);', counter.initial) writer.dedent() else: writer.putlnc('set(%s);', counter.initial)
def write_init(self, writer): data = self.get_data() # data.skipBytes(4) width = data.readShort(True) height = data.readShort(True) writer.putlnc('width = %s;', width) writer.putlnc('height = %s;', height) flags = FLAGS.copy() flags.setFlags(data.readInt()) self.show_border = flags['ShowButtonBorder'] self.image_checkbox = flags['ImageCheckbox'] if flags['Hyperlink']: display_type = HYPERLINK elif flags['Button']: if flags['Checkbox']: display_type = CHECKBOX else: display_type = BUTTON else: display_type = NONE align_top_left = flags['AlignImageTopLeft'] align_center = flags['AlignImageCenter'] pattern = flags['AlignImagePattern'] fill = read_system_color(data) border1 = read_system_color(data) border2 = read_system_color(data) self.image = data.readShort() data.skipBytes(2) # rData_wFree text_color = read_system_color(data) margin_left = data.readShort() margin_top = data.readShort() margin_right = data.readShort() margin_bottom = data.readShort() font = LogFont(data, old=True) data.skipBytes(40) # file.readStringSize(40) data.adjust(8) text = data.readReader(data.readInt(True)).readString().rsplit('\\n', 1) if len(text) == 1: text, = text tooltip = None else: text, tooltip = text new_width = width - margin_left - margin_right new_height = height - margin_top - margin_bottom alignment = [] if flags['AlignTop']: alignment.append('ALIGN_TOP') elif flags['AlignVerticalCenter']: alignment.append('ALIGN_VCENTER') elif flags['AlignBottom']: alignment.append('ALIGN_BOTTOM') if flags['AlignLeft']: alignment.append('ALIGN_LEFT') elif flags['AlignHorizontalCenter']: alignment.append('ALIGN_HCENTER') elif flags['AlignRight']: alignment.append('ALIGN_RIGHT') if alignment: alignment = ' | '.join(alignment) else: alignment = '0' if self.image == -1: writer.putln('image = NULL;') if border1 is None or fill is None: color = (0, 0, 0, 0) else: color = fill + (255,) writer.putlnc('box_color = %s;', make_color(color)) writer.putlnc('blend_color = %s;', make_color(text_color)) writer.putlnc('box_flags = %s;', alignment) else: writer.putln('image = %s;' % self.converter.get_image(self.image)) if pattern: writer.putln('type = PATTERN_IMAGE;') elif align_center: writer.putln('type = CENTER_IMAGE;') elif align_top_left: writer.putln('type = TOPLEFT_IMAGE;') else: raise NotImplementedError() if text: writer.putlnc('text = %r;', text) version = data.readInt() hyperlink_color = read_system_color(data) if self.converter.config.use_gwen(): writer.putlnc('margin[0] = %s;', margin_left) writer.putlnc('margin[1] = %s;', margin_top) writer.putlnc('margin[2] = %s;', margin_right) writer.putlnc('margin[3] = %s;', margin_bottom) if flags['Button']: writer.putlnc('init_button();')
def write_init(self, writer): data = self.get_data() # data.skipBytes(4) width = data.readShort(True) height = data.readShort(True) writer.putlnc('width = %s;', width) writer.putlnc('height = %s;', height) flags = FLAGS.copy() flags.setFlags(data.readInt()) self.show_border = flags['ShowButtonBorder'] self.image_checkbox = flags['ImageCheckbox'] if flags['Hyperlink']: display_type = HYPERLINK elif flags['Button']: if flags['Checkbox']: display_type = CHECKBOX else: display_type = BUTTON else: display_type = NONE align_top_left = flags['AlignImageTopLeft'] align_center = flags['AlignImageCenter'] pattern = flags['AlignImagePattern'] fill = read_system_color(data) border1 = read_system_color(data) border2 = read_system_color(data) self.image = data.readShort() data.skipBytes(2) # rData_wFree text_color = read_system_color(data) margin_left = data.readShort() margin_top = data.readShort() margin_right = data.readShort() margin_bottom = data.readShort() font = LogFont(data, old=True) data.skipBytes(40) # file.readStringSize(40) data.adjust(8) text = data.readReader(data.readInt(True)).readString().rsplit( '\\n', 1) if len(text) == 1: text, = text tooltip = None else: text, tooltip = text new_width = width - margin_left - margin_right new_height = height - margin_top - margin_bottom alignment = [] if flags['AlignTop']: alignment.append('ALIGN_TOP') elif flags['AlignVerticalCenter']: alignment.append('ALIGN_VCENTER') elif flags['AlignBottom']: alignment.append('ALIGN_BOTTOM') if flags['AlignLeft']: alignment.append('ALIGN_LEFT') elif flags['AlignHorizontalCenter']: alignment.append('ALIGN_HCENTER') elif flags['AlignRight']: alignment.append('ALIGN_RIGHT') if alignment: alignment = ' | '.join(alignment) else: alignment = '0' if self.image == -1: writer.putln('image = NULL;') if border1 is None or fill is None: color = (0, 0, 0, 0) else: color = fill + (255, ) writer.putlnc('box_color = %s;', make_color(color)) writer.putlnc('blend_color = %s;', make_color(text_color)) writer.putlnc('box_flags = %s;', alignment) else: writer.putln('image = %s;' % self.converter.get_image(self.image)) if pattern: writer.putln('type = PATTERN_IMAGE;') elif align_center: writer.putln('type = CENTER_IMAGE;') elif align_top_left: writer.putln('type = TOPLEFT_IMAGE;') else: raise NotImplementedError() if text: writer.putlnc('text = %r;', text) version = data.readInt() hyperlink_color = read_system_color(data) if self.converter.config.use_gwen(): writer.putlnc('margin[0] = %s;', margin_left) writer.putlnc('margin[1] = %s;', margin_top) writer.putlnc('margin[2] = %s;', margin_right) writer.putlnc('margin[3] = %s;', margin_bottom) if flags['Button']: writer.putlnc('init_button();')
def write_init(self, writer): data = self.get_data() data.skipBytes(4) width = data.readShort() height = data.readShort() data.skipBytes(128) data.skipBytes(4) text = fix_string(data.read(1024)) data.skipBytes(256) trans_color = data.readColor() char_size = (data.readInt(), data.readInt()) char_spacing = (data.readInt(), data.readInt()) char_offset = data.readInt() % 255 image_size = (data.readInt(), data.readInt()) image_offset = (data.readInt(), data.readInt()) flags = data.readInt() tab_width = data.readInt() image = data.readShort() character_map = fix_string(data.read(256)) data.skipBytes(256) data.skipBytes(4096) data.skipBytes(1024) data.skipBytes(2) left = data.readInt() top = data.readInt() right = data.readInt() bottom = data.readInt() horizontal_align = data.readInt() vertical_align = data.readInt() data.skipBytes(4) # read animation animation_type = data.readByte() data.skipBytes(3) animation_speed = data.readInt() speed_count = data.readInt() param = [data.readInt() for _ in xrange(16)] options = data.readInt() p1 = data.readInt() ball_left = data.readInt() ball_top = data.readInt() ball_right = data.readInt() ball_bottom = data.readInt() ball_source = (data.readInt(), data.readInt()) ball_min = (data.readInt(), data.readInt()) ball_max = (data.readInt(), data.readInt()) type_name = ANIMATION_NAMES[animation_type] if type_name not in ('None', 'Sin Wave'): raise NotImplementedError('invalid blitter animation: %s' % type_name) if type_name == 'Sin Wave': writer.putln('anim_type = BLITTER_ANIMATION_SINWAVE;') writer.putlnc('anim_frame = 0;') writer.putlnc('anim_speed = %s;', animation_speed) writer.putlnc('wave_freq = %s;', param[1]) writer.putlnc('wave_height = %s;', param[2]) writer.putln('width = %s;' % width) writer.putln('height = %s;' % height) writer.putln('char_width = %s;' % char_size[0]) writer.putln('char_height = %s;' % char_size[1]) writer.putlnc('x_spacing = %s;', char_spacing[0]) writer.putlnc('y_spacing = %s;', char_spacing[1]) writer.putlnc('char_offset = %s;', char_offset) writer.putlnc('x_off = %s;', image_offset[0]) writer.putlnc('y_off = %s;', image_offset[1]) writer.putln('image = %s;' % self.converter.get_image(image)) align_flags = [] if horizontal_align == 0: align_flags.append('ALIGN_LEFT') elif horizontal_align == 1: align_flags.append('ALIGN_HCENTER') elif horizontal_align == 2: align_flags.append('ALIGN_RIGHT') if vertical_align == 0: align_flags.append('ALIGN_TOP') elif vertical_align == 1: align_flags.append('ALIGN_VCENTER') elif vertical_align == 2: align_flags.append('ALIGN_BOTTOM') if not align_flags: align_flags.append('0') writer.putln('alignment = %s;' % ' | '.join(align_flags)) writer.putln('static int charmap[256];') writer.putlnc('static std::string charmap_str = %r;', character_map) writer.putln('static bool initialized = false;') writer.putln('this->charmap = &charmap[0];') writer.putln('this->charmap_str = &charmap_str;') writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') writer.putln('initialize(charmap_str);') writer.end_brace() # other data if flags & FLAGS_TRANSPARENT: writer.putlnc('transparent_color = %s;', make_color(trans_color)) writer.putlnc('wrap = %s;', bool(flags & FLAGS_WORDWRAPPING)) writer.putlnc('set_text(%r);', text)
def write_init(self, writer): type_name = ANIMATION_NAMES[self.animation_type] if type_name not in ('None', 'Sin Wave'): print 'invalid blitter animation: %s' % type_name # raise NotImplementedError('invalid blitter animation: %s' # % type_name) if type_name == 'Sin Wave': writer.putln('anim_type = BLITTER_ANIMATION_SINWAVE;') writer.putlnc('anim_frame = 0;') writer.putlnc('anim_speed = %s;', self.animation_speed) writer.putlnc('wave_freq = %s;', self.param[1]) writer.putlnc('wave_height = %s;', self.param[2]) writer.putln('width = %s;' % self.width) writer.putln('height = %s;' % self.height) writer.putln('char_width = %s;' % self.char_size[0]) writer.putln('char_height = %s;' % self.char_size[1]) writer.putlnc('x_spacing = %s;', self.char_spacing[0]) writer.putlnc('y_spacing = %s;', self.char_spacing[1]) writer.putlnc('char_offset = %s;', self.char_offset) writer.putlnc('x_off = %s;', self.image_offset[0]) writer.putlnc('y_off = %s;', self.image_offset[1]) writer.putln('image = %s;' % self.converter.get_image(self.image)) writer.putlnc('image_width = %s;', self.image_size[0]) align_flags = [] if self.horizontal_align == 0: align_flags.append('ALIGN_LEFT') elif self.horizontal_align == 1: align_flags.append('ALIGN_HCENTER') elif self.horizontal_align == 2: align_flags.append('ALIGN_RIGHT') if self.vertical_align == 0: align_flags.append('ALIGN_TOP') elif self.vertical_align == 1: align_flags.append('ALIGN_VCENTER') elif self.vertical_align == 2: align_flags.append('ALIGN_BOTTOM') if not align_flags: align_flags.append('0') writer.putln('alignment = %s;' % ' | '.join(align_flags)) writer.putln('static int charmap[256];') writer.putln('static bool initialized = false;') writer.putln('this->charmap = &charmap[0];') interned_map = self.converter.intern_string(self.character_map) writer.putlnc('charmap_str = &%s;', interned_map) writer.putln('if (!initialized) {') writer.indent() writer.putln('initialized = true;') writer.putln('initialize(*charmap_str);') writer.end_brace() # other data if self.flags & FLAGS_TRANSPARENT: writer.putlnc('transparent_color = %s;', make_color(self.trans_color)) writer.putlnc('wrap = %s;', bool(self.flags & FLAGS_WORDWRAPPING)) writer.putlnc('set_text(%s);', self.converter.intern_string(self.text)) writer.putlnc('has_callback = %s;', self.has_callback)