use of org.terasology.gestalt.assets.ResourceUrn in project Terasology by MovingBlocks.
the class Atlas method doReload.
@Override
protected void doReload(AtlasData data) {
subtextures.clear();
for (Map.Entry<Name, SubtextureData> entry : data.getSubtextures().entrySet()) {
ResourceUrn subtextureUrn = new ResourceUrn(getUrn().getModuleName(), getUrn().getResourceName(), entry.getKey());
subtextures.put(subtextureUrn, entry.getValue());
}
}
use of org.terasology.gestalt.assets.ResourceUrn in project Terasology by MovingBlocks.
the class FontMaterialProducer method getAssetData.
@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("tex", texture.get());
return Optional.of(materialData);
}
}
return Optional.empty();
}
use of org.terasology.gestalt.assets.ResourceUrn in project Terasology by MovingBlocks.
the class GLTFAnimationFormat method load.
@Override
public MeshAnimationBundleData load(ResourceUrn urn, List<AssetDataFile> inputs) throws IOException {
try (Reader in = new InputStreamReader(inputs.get(0).openStream())) {
GLTF gltf = gson.fromJson(in, GLTF.class);
checkVersionSupported(urn, gltf);
List<byte[]> loadedBuffers = loadBinaryBuffers(urn, gltf);
if (gltf.getSkins().isEmpty()) {
throw new IOException("Skeletal mesh '" + urn + "' missing skin");
}
GLTFSkin skin = gltf.getSkins().get(0);
List<String> boneNames = Lists.newArrayList();
TIntList boneParents = new TIntArrayList();
TIntIntMap nodeToJoint = new TIntIntHashMap();
for (int i = 0; i < skin.getJoints().size(); i++) {
nodeToJoint.put(skin.getJoints().get(i), i);
}
List<Bone> bones = loadBones(gltf, skin, loadedBuffers);
bones.forEach(x -> boneNames.add(x.getName()));
bones.forEach(x -> {
if (x.getParentIndex() != -1) {
boneParents.add(x.getParentIndex());
} else {
boneParents.add(MeshAnimationData.NO_PARENT);
}
});
Map<ResourceUrn, MeshAnimationData> animations = new HashMap<>();
for (int index = 0; index < gltf.getAnimations().size(); ++index) {
GLTFAnimation gltfAnimation = gltf.getAnimations().get(index);
String name = gltfAnimation.getName();
if (Strings.isNullOrEmpty(name)) {
name = "anim_" + index;
}
animations.put(new ResourceUrn(urn, name), loadAnimation(gltf, gltfAnimation, loadedBuffers, nodeToJoint, boneNames, boneParents, bones));
}
return new MeshAnimationBundleData(animations);
}
}
use of org.terasology.gestalt.assets.ResourceUrn in project Terasology by MovingBlocks.
the class NUISkinEditorScreen method initialise.
@Override
public void initialise() {
// Retrieve the widgets based on their identifiers.
availableAssetDropdown = find(AVAILABLE_ASSETS_ID, UIDropdownScrollable.class);
UIDropdownScrollable<ResourceUrn> availableScreenDropdown = find(AVAILABLE_SCREENS_ID, UIDropdownScrollable.class);
JsonEditorTreeView editor = find(EDITOR_TREE_VIEW_ID, JsonEditorTreeView.class);
selectedScreenBox = find(SELECTED_SCREEN_ID, UIBox.class);
super.setEditorSystem(nuiSkinEditorSystem);
super.setEditor(editor);
// Populate the list of screens.
List<String> availableAssetList = Lists.newArrayList();
availableAssetList.add(CREATE_NEW_SKIN);
availableAssetList.addAll(assetManager.getAvailableAssets(UISkinAsset.class).stream().map(Object::toString).collect(Collectors.toList()));
Collections.sort(availableAssetList);
if (availableAssetDropdown != null) {
availableAssetDropdown.setOptions(availableAssetList);
availableAssetDropdown.bindSelection(new Binding<String>() {
@Override
public String get() {
return selectedAsset;
}
@Override
public void set(String value) {
// Construct a new skin tree (or de-serialize from an existing asset)
selectedAssetPending = value;
if (CREATE_NEW_SKIN.equals(value)) {
selectedAssetPath = null;
resetState(NUIEditorNodeUtils.createNewSkin());
} else {
selectAsset(new ResourceUrn(value));
}
}
});
}
if (availableScreenDropdown != null) {
List<ResourceUrn> availableScreenList = Lists.newArrayList(assetManager.getAvailableAssets(UIElement.class));
Collections.sort(availableScreenList);
availableScreenDropdown.setOptions(availableScreenList);
availableScreenDropdown.bindEnabled(new ReadOnlyBinding<Boolean>() {
@Override
public Boolean get() {
return selectedAsset != null;
}
});
availableScreenDropdown.bindSelection(new Binding<ResourceUrn>() {
@Override
public ResourceUrn get() {
return selectedScreen;
}
@Override
public void set(ResourceUrn value) {
selectedScreen = value;
resetPreviewWidget();
}
});
}
if (editor != null) {
editor.setContextMenuTreeProducer(node -> {
NUIEditorMenuTreeBuilder nuiEditorMenuTreeBuilder = new NUIEditorMenuTreeBuilder();
nuiEditorMenuTreeBuilder.setManager(getManager());
nuiEditorMenuTreeBuilder.putConsumer(NUIEditorMenuTreeBuilder.OPTION_COPY, getEditor()::copyNode);
nuiEditorMenuTreeBuilder.putConsumer(NUIEditorMenuTreeBuilder.OPTION_PASTE, getEditor()::pasteNode);
nuiEditorMenuTreeBuilder.putConsumer(NUIEditorMenuTreeBuilder.OPTION_EDIT, this::editNode);
nuiEditorMenuTreeBuilder.putConsumer(NUIEditorMenuTreeBuilder.OPTION_DELETE, getEditor()::deleteNode);
nuiEditorMenuTreeBuilder.putConsumer(NUIEditorMenuTreeBuilder.OPTION_ADD_WIDGET, this::addWidget);
nuiEditorMenuTreeBuilder.subscribeAddContextMenu(n -> {
getEditor().fireUpdateListeners();
// Automatically edit a node that's been added.
if (n.getValue().getType() == JsonTreeValue.Type.KEY_VALUE_PAIR) {
getEditor().getModel().getNode(getEditor().getSelectedIndex()).setExpanded(true);
getEditor().getModel().resetNodes();
getEditor().setSelectedIndex(getEditor().getModel().indexOf(n));
editNode(n);
}
});
return nuiEditorMenuTreeBuilder.createPrimarySkinContextMenu(node);
});
editor.setEditor(this::editNode, getManager());
editor.subscribeTreeViewUpdate(() -> {
getEditor().addToHistory();
resetPreviewWidget();
updateConfig();
setUnsavedChangesPresent(true);
updateAutosave();
});
}
UIButton save = find("save", UIButton.class);
save.bindEnabled(new ReadOnlyBinding<Boolean>() {
@Override
public Boolean get() {
return CREATE_NEW_SKIN.equals(selectedAsset) || areUnsavedChangesPresent();
}
});
save.subscribe(button -> {
// Save the current look and feel.
LookAndFeel currentLookAndFeel = UIManager.getLookAndFeel();
// (Temporarily) set the look and feel to the system default.
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException | UnsupportedLookAndFeelException ignored) {
}
// Configure the file chooser.
JFileChooser fileChooser = new JFileChooser() {
@Override
protected JDialog createDialog(Component parent) {
JDialog dialog = super.createDialog(parent);
dialog.setLocationByPlatform(true);
dialog.setAlwaysOnTop(true);
return dialog;
}
};
fileChooser.setSelectedFile(new File(CREATE_NEW_SKIN.equals(selectedAsset) ? "untitled.skin" : selectedAsset.split(":")[1] + ".skin"));
fileChooser.setFileFilter(new FileNameExtensionFilter("Skin asset file (*.skin)", "skin"));
if (fileChooser.showSaveDialog(null) == JFileChooser.APPROVE_OPTION) {
saveToFile(fileChooser.getSelectedFile());
deleteAutosave();
}
// Reload the look and feel.
try {
UIManager.setLookAndFeel(currentLookAndFeel);
} catch (UnsupportedLookAndFeelException ignored) {
}
});
UIButton override = find("override", UIButton.class);
override.bindEnabled(new ReadOnlyBinding<Boolean>() {
@Override
public Boolean get() {
return selectedAssetPath != null && areUnsavedChangesPresent();
}
});
override.subscribe(button -> {
saveToFile(selectedAssetPath);
deleteAutosave();
});
// Set the handlers for the editor buttons.
WidgetUtil.trySubscribe(this, "settings", button -> getManager().pushScreen(NUIEditorSettingsScreen.ASSET_URI, NUIEditorSettingsScreen.class));
WidgetUtil.trySubscribe(this, "copy", button -> copyJson());
WidgetUtil.trySubscribe(this, "paste", button -> pasteJson());
WidgetUtil.trySubscribe(this, "undo", button -> undo());
WidgetUtil.trySubscribe(this, "redo", button -> redo());
WidgetUtil.trySubscribe(this, "close", button -> nuiSkinEditorSystem.toggleEditor());
updateConfig();
}
use of org.terasology.gestalt.assets.ResourceUrn in project Terasology by MovingBlocks.
the class NUISkinEditorScreen method resetStateInternal.
/**
* {@inheritDoc}
*/
@Override
protected void resetStateInternal(JsonTree node) {
getEditor().setTreeViewModel(node, true);
resetPreviewWidget();
getEditor().clearHistory();
updateConfig();
selectedAsset = selectedAssetPending;
try {
ResourceUrn urn = new ResourceUrn(selectedAsset);
setSelectedAssetPath(urn);
} catch (InvalidUrnException ignored) {
}
}
Aggregations