CL_ResourceData_CollisionOutline::CL_ResourceData_CollisionOutline(CL_Resource &resource) { CL_String filename = resource.get_element().get_attribute("file"); int alpha_limit = CL_StringHelp::text_to_int( (resource.get_element().get_attribute("alpha_value", "128"))); CL_String accuracy_str = resource.get_element().get_attribute("accuracy", "medium"); CL_OutlineAccuracy accuracy; if(accuracy_str == "high") accuracy = accuracy_high; else if(accuracy_str == "medium") accuracy = accuracy_medium; else if(accuracy_str == "low") accuracy = accuracy_low; else if(accuracy_str == "poor") accuracy = accuracy_poor; else accuracy = accuracy_raw; CL_CollisionOutline_Generic *outline; if (filename.length() >= 3 && filename.substr(filename.length()-3, 3) == "out" ) { outline = new CL_CollisionOutline_Generic( new CL_OutlineProviderFile(filename, resource.get_manager().get_directory(resource)), accuracy_raw); } else { CL_PixelBuffer pbuf = CL_ImageProviderFactory::load(filename, resource.get_manager().get_directory(resource), ""); outline = new CL_CollisionOutline_Generic( new CL_OutlineProviderBitmap(pbuf, alpha_limit), accuracy ); } CL_CollisionOutline *collision_outline_tmp = new CL_CollisionOutline(outline->contours, outline->width, outline->height); collision_outline = *collision_outline_tmp; delete collision_outline_tmp; collision_outline.calculate_radius(); delete outline; }
void CL_ResourceData_TextStyler::on_load() { CL_Resource resource = get_resource(); CL_ResourceManager manager = resource.get_manager(); ts = CL_TextStyler(); std::map<std::string, CL_Font>& fnt_map = ts.get_fonts(); for ( CL_DomNode cur_node = resource.get_element().get_first_child(); !cur_node.is_null(); cur_node = cur_node.get_next_sibling()) { if (!cur_node.is_element()) continue; CL_DomElement cur_element = cur_node.to_element(); if ( cur_element.get_tag_name() == "font" && cur_element.has_attribute("name") && cur_element.has_attribute("font")) { if (manager.exists(cur_element.get_attribute("font"))) { fnt_map[cur_element.get_attribute("name")] = CL_Font(cur_element.get_attribute("font"), &manager); } else { throw CL_Error(std::string("CL_TextStyler: Unable to find sub-font named ") + cur_element.get_attribute("font")); } } else { throw CL_Error("CL_TextStyler: Unknown sub-element of a text_styler resource"); } } }
void CL_ResourceData_Font::on_load() { CL_Resource resource = get_resource(); CL_ResourceManager manager = resource.get_manager(); CL_DomElement system_element = resource.get_element().named_item("system").to_element(); CL_DomElement bitmap_element = resource.get_element().named_item("bitmap").to_element(); // First check if it's a system font if (!system_element.is_null()) { if (!system_element.has_attribute("height")) throw CL_Error("System font resource " + resource.get_name() + " has no 'height' attribute."); const std::string font_name = system_element.get_attribute("font_name"); const int height = CL_String::to_int(system_element.get_attribute("height")); int width = 0; bool bold = false; bool italic = false; bool underline = false; bool strikeout = false; if (system_element.has_attribute("width")) width = CL_String::to_int(system_element.get_attribute("width")); if (system_element.has_attribute("bold")) bold = (CL_String::to_int(system_element.get_attribute("bold")) != 0); if (system_element.has_attribute("italic")) italic = (CL_String::to_int(system_element.get_attribute("italic")) != 0); if (system_element.has_attribute("underline")) underline = (CL_String::to_int(system_element.get_attribute("underline")) != 0); if (system_element.has_attribute("strikeout")) strikeout = (CL_String::to_int(system_element.get_attribute("strikeout")) != 0); if (system_element.has_attribute("letters")) { font = CL_Font( font_name, system_element.get_attribute("letters"), height, width, bold, italic, underline, strikeout); } else { font = CL_Font( font_name, height, width, bold, italic, underline, strikeout); } } else if (!bitmap_element.is_null()) { if (!bitmap_element.has_attribute("glyphs")) throw CL_Error("Font resource " + resource.get_name() + " has no 'glyphs' attribute."); if (!bitmap_element.has_attribute("letters")) throw CL_Error("Font resource " + resource.get_name() + " has no 'letters' attribute."); //Set most values to CL_Font defaults, then we can override them with options if they exist const CL_Sprite spr_glyphs(bitmap_element.get_attribute("glyphs"), &manager); const std::string letters = bitmap_element.get_attribute("letters"); int spacelen = -1; bool monospace = false; if (bitmap_element.has_attribute("spacelen")) spacelen = CL_String::to_int(bitmap_element.get_attribute("spacelen")); if (bitmap_element.has_attribute("monospace")) monospace = (CL_String::to_int(bitmap_element.get_attribute("monospace")) != 0); font = CL_Font( spr_glyphs, letters, spacelen, monospace); } else { throw CL_Error(CL_String::format("Font resource %1 did not have a <system> or <bitmap> child element!", resource.get_name())); } if (resource.get_element().has_attribute("width_offset")) font.set_width_offset(CL_String::to_int(resource.get_element().get_attribute("width_offset"))); if (resource.get_element().has_attribute("height_offset")) font.set_height_offset(CL_String::to_int(resource.get_element().get_attribute("height_offset"))); if (resource.get_element().has_attribute("delims")) font.set_delims(resource.get_element().get_attribute("delims")); }