void FontResource::load() { assert(!mLoaded && "Attempted to load font that is already loaded"); std::ifstream input(this->getFile().string().c_str(), std::ios::in | std::ios::binary); std::string textureName; readString(input, textureName); readF32(input, mBaseline); readF32(input, mPadding); mGlyphs = new GlyphData[256]; for(uint32_t i = 0; i < 256; ++ i) { mGlyphs[i].width = readF32(input); mGlyphs[i].startX = readF32(input); } mShaderProg = ShaderProgramResource::gallop(Resources::find("Font.shaderProgram")); mShaderProg->grab(); const std::vector<ShaderProgramResource::Control>& sampler2DControls = mShaderProg->getUniformSampler2Ds(); for(std::vector<ShaderProgramResource::Control>::const_iterator iter = sampler2DControls.begin(); iter != sampler2DControls.end(); ++ iter) { const ShaderProgramResource::Control& entry = *iter; mTextureHandle = entry.handle; // (Might want other samplers in the future) break; } mTexture = TextureResource::gallop(Resources::find(textureName)); mTexture->grab(); mLoaded = true; }
void ContentFeatures::deSerialize(std::istream &is) { // version detection const u8 version = readU8(is); if (version < CONTENTFEATURES_VERSION) throw SerializationError("unsupported ContentFeatures version"); // general name = deSerializeString(is); groups.clear(); u32 groups_size = readU16(is); for (u32 i = 0; i < groups_size; i++) { std::string name = deSerializeString(is); int value = readS16(is); groups[name] = value; } param_type = (enum ContentParamType) readU8(is); param_type_2 = (enum ContentParamType2) readU8(is); // visual drawtype = (enum NodeDrawType) readU8(is); mesh = deSerializeString(is); visual_scale = readF32(is); if (readU8(is) != 6) throw SerializationError("unsupported tile count"); for (TileDef &td : tiledef) td.deSerialize(is, version, drawtype); for (TileDef &td : tiledef_overlay) td.deSerialize(is, version, drawtype); if (readU8(is) != CF_SPECIAL_COUNT) throw SerializationError("unsupported CF_SPECIAL_COUNT"); for (TileDef &td : tiledef_special) td.deSerialize(is, version, drawtype); alpha = readU8(is); color.setRed(readU8(is)); color.setGreen(readU8(is)); color.setBlue(readU8(is)); palette_name = deSerializeString(is); waving = readU8(is); connect_sides = readU8(is); u16 connects_to_size = readU16(is); connects_to_ids.clear(); for (u16 i = 0; i < connects_to_size; i++) connects_to_ids.push_back(readU16(is)); post_effect_color = readARGB8(is); leveled = readU8(is); // lighting-related light_propagates = readU8(is); sunlight_propagates = readU8(is); light_source = readU8(is); light_source = MYMIN(light_source, LIGHT_MAX); // map generation is_ground_content = readU8(is); // interaction walkable = readU8(is); pointable = readU8(is); diggable = readU8(is); climbable = readU8(is); buildable_to = readU8(is); rightclickable = readU8(is); damage_per_second = readU32(is); // liquid liquid_type = (enum LiquidType) readU8(is); liquid_alternative_flowing = deSerializeString(is); liquid_alternative_source = deSerializeString(is); liquid_viscosity = readU8(is); liquid_renewable = readU8(is); liquid_range = readU8(is); drowning = readU8(is); floodable = readU8(is); // node boxes node_box.deSerialize(is); selection_box.deSerialize(is); collision_box.deSerialize(is); // sounds sound_footstep.deSerialize(is, version); sound_dig.deSerialize(is, version); sound_dug.deSerialize(is, version); // read legacy properties legacy_facedir_simple = readU8(is); legacy_wallmounted = readU8(is); try { node_dig_prediction = deSerializeString(is); } catch(SerializationError &e) {}; }