コード例 #1
0
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;
}
コード例 #2
0
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");
        }
    }
}
コード例 #3
0
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"));
}