/* * Copyright 2015 MovingBlocks * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.terasology.rendering.assets.font; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.terasology.assets.AssetDataProducer; import org.terasology.assets.ResourceUrn; import org.terasology.assets.management.AssetManager; import org.terasology.assets.module.annotations.RegisterAssetDataProducer; import org.terasology.naming.Name; import org.terasology.rendering.assets.material.MaterialData; import org.terasology.rendering.assets.shader.Shader; import org.terasology.rendering.assets.texture.Texture; import java.io.IOException; import java.util.Collections; import java.util.Optional; import java.util.Set; /** */ @RegisterAssetDataProducer public class FontMaterialProducer implements AssetDataProducer<MaterialData> { private static final Logger logger = LoggerFactory.getLogger(FontMaterialProducer.class); private static final Name RESOURCE_NAME = new Name("font"); private static final ResourceUrn FONT_SHADER_URN = new ResourceUrn("engine", "font"); private AssetManager assetManager; public FontMaterialProducer(AssetManager assetManager) { this.assetManager = assetManager; } @Override public Set<ResourceUrn> getAvailableAssetUrns() { return Collections.emptySet(); } @Override public Set<Name> getModulesProviding(Name resourceName) { return Collections.emptySet(); } @Override public ResourceUrn redirect(ResourceUrn urn) { return urn; } @Override public Optional<MaterialData> getAssetData(ResourceUrn urn) throws IOException { if (RESOURCE_NAME.equals(urn.getResourceName()) && !urn.getFragmentName().isEmpty()) { Optional<? extends Shader> fontShader = assetManager.getAsset(FONT_SHADER_URN, Shader.class); if (!fontShader.isPresent()) { logger.error("Unable to resolve font shader"); return Optional.empty(); } Optional<Texture> texture = assetManager.getAsset(new ResourceUrn(urn.getModuleName(), urn.getFragmentName()), Texture.class); if (texture.isPresent()) { MaterialData materialData = new MaterialData(fontShader.get()); materialData.setParam("texture", texture.get()); return Optional.of(materialData); } } return Optional.empty(); } }