diff --git a/src/main/java/com/QYun/Spine/Spine32.java b/src/main/java/com/QYun/Spine/Spine32.java index 5cc74a7..7b07f17 100644 --- a/src/main/java/com/QYun/Spine/Spine32.java +++ b/src/main/java/com/QYun/Spine/Spine32.java @@ -2,10 +2,14 @@ import com.QYun.SuperSpineViewer.GUI.Controller; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch; import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData; import com.badlogic.gdx.utils.Array; import com.esotericsoftware.spine32.*; import com.esotericsoftware.spine32.AnimationState.TrackEntry; @@ -31,6 +35,25 @@ private void animates(Array animations) { } private boolean loadSkel() { + TextureAtlasData atlasData; + atlasData = new TextureAtlasData(atlasFile, atlasFile.parent(), false); + + atlas = new TextureAtlas(atlasData) { + public AtlasRegion findRegion (String name) { + AtlasRegion region = super.findRegion(name); + if (region == null) { + FileHandle file = skelFile.sibling(name + ".png"); + if (file.exists()) { + Texture texture = new Texture(file); + texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); + region = new AtlasRegion(texture, 0, 0, texture.getWidth(), texture.getHeight()); + region.name = name; + } + } + return region; + } + }; + SkeletonData skeletonData; if (isBinary) { SkeletonBinary binary = new SkeletonBinary(atlas); @@ -164,7 +187,6 @@ public void create() { renderer = new SkeletonMeshRenderer(); renderer.setPremultipliedAlpha(true); - atlas = new TextureAtlas(atlasFile); if (loadSkel()) listeners(); } diff --git a/src/main/java/com/QYun/Spine/Standard.java b/src/main/java/com/QYun/Spine/Standard.java index 8d82227..99b2a34 100644 --- a/src/main/java/com/QYun/Spine/Standard.java +++ b/src/main/java/com/QYun/Spine/Standard.java @@ -2,9 +2,13 @@ import com.QYun.SuperSpineViewer.GUI.Controller; import com.badlogic.gdx.Gdx; +import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.GL20; import com.badlogic.gdx.graphics.OrthographicCamera; +import com.badlogic.gdx.graphics.Texture; +import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g2d.TextureAtlas; +import com.badlogic.gdx.graphics.g2d.TextureAtlas.TextureAtlasData; import com.badlogic.gdx.utils.Array; import com.esotericsoftware.SpineStandard.*; import com.esotericsoftware.SpineStandard.AnimationState.TrackEntry; @@ -31,6 +35,25 @@ private void animates(Array animations) { } private boolean loadSkel() { + TextureAtlasData atlasData; + atlasData = new TextureAtlasData(atlasFile, atlasFile.parent(), false); + + atlas = new TextureAtlas(atlasData) { + public AtlasRegion findRegion (String name) { + AtlasRegion region = super.findRegion(name); + if (region == null) { + FileHandle file = skelFile.sibling(name + ".png"); + if (file.exists()) { + Texture texture = new Texture(file); + texture.setFilter(TextureFilter.Linear, TextureFilter.Linear); + region = new AtlasRegion(texture, 0, 0, texture.getWidth(), texture.getHeight()); + region.name = name; + } + } + return region; + } + }; + SkeletonData skeletonData; if (isBinary) { SkeletonBinary binary = new SkeletonBinary(atlas); @@ -171,7 +194,6 @@ public void create() { renderer = new SkeletonRenderer(); renderer.setPremultipliedAlpha(true); - atlas = new TextureAtlas(atlasFile); if (loadSkel()) listeners(); } diff --git a/src/main/java/com/QYun/SuperSpineViewer/RuntimesLoader.java b/src/main/java/com/QYun/SuperSpineViewer/RuntimesLoader.java index d9891c8..c1e5c25 100644 --- a/src/main/java/com/QYun/SuperSpineViewer/RuntimesLoader.java +++ b/src/main/java/com/QYun/SuperSpineViewer/RuntimesLoader.java @@ -121,26 +121,6 @@ private FileHandle atlasFile(FileHandle skelFile) { } public boolean init(File file) { - if (!isLoad.get()) { - spineVersion.addListener((observable, oldValue, newValue) -> { - if (!newValue.equals(oldValue) && isLoad.get()) { - if (Controller.class.getResource("").getProtocol().equals("jar")) { - new Thread(() -> { - try { - Runtime.getRuntime().exec("cmd /k start " - + "java -jar " - + System.getProperty("java.class.path") - + " " + openPath, null, new File(System.getProperty("user.dir"))); - } catch (IOException ignored) { - } - System.out.println("重新加载LibGDX"); - }).start(); - } else System.out.println("重新加载,从源码启动请自行重启"); - System.exit(0); - } - }); - } - FileHandle skelFile = new FileHandle(new File(file.getAbsolutePath())); spine.setAtlasFile(atlasFile(skelFile)); spine.setSkelFile(skelFile); diff --git a/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDataLoader.java b/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDataLoader.java deleted file mode 100644 index 6ee9b24..0000000 --- a/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDataLoader.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.esotericsoftware.SpineStandard.utils; - -import com.badlogic.gdx.assets.AssetDescriptor; -import com.badlogic.gdx.assets.AssetLoaderParameters; -import com.badlogic.gdx.assets.AssetManager; -import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; -import com.badlogic.gdx.assets.loaders.FileHandleResolver; -import com.badlogic.gdx.files.FileHandle; -import com.badlogic.gdx.graphics.g2d.TextureAtlas; -import com.badlogic.gdx.utils.Array; -import com.esotericsoftware.SpineStandard.SkeletonBinary; -import com.esotericsoftware.SpineStandard.SkeletonData; -import com.esotericsoftware.SpineStandard.SkeletonJson; -import com.esotericsoftware.SpineStandard.attachments.AtlasAttachmentLoader; -import com.esotericsoftware.SpineStandard.attachments.AttachmentLoader; - -public class SkeletonDataLoader extends AsynchronousAssetLoader { - private SkeletonData skeletonData; - - public SkeletonDataLoader(FileHandleResolver resolver) { - super(resolver); - } - - public void loadAsync(AssetManager manager, String fileName, FileHandle file, SkeletonDataParameter parameter) { - float scale = 1; - AttachmentLoader attachmentLoader = null; - if (parameter != null) { - scale = parameter.scale; - if (parameter.attachmentLoader != null) - attachmentLoader = parameter.attachmentLoader; - else if (parameter.atlasName != null) - attachmentLoader = new AtlasAttachmentLoader(manager.get(parameter.atlasName, TextureAtlas.class)); - } - if (attachmentLoader == null) - attachmentLoader = new AtlasAttachmentLoader(manager.get(file.pathWithoutExtension() + ".atlas", TextureAtlas.class)); - - if (file.extension().equalsIgnoreCase("skel")) { - SkeletonBinary skeletonBinary = new SkeletonBinary(attachmentLoader); - skeletonBinary.setScale(scale); - skeletonData = skeletonBinary.readSkeletonData(file); - } else { - SkeletonJson skeletonJson = new SkeletonJson(attachmentLoader); - skeletonJson.setScale(scale); - skeletonData = skeletonJson.readSkeletonData(file); - } - } - - public SkeletonData loadSync(AssetManager manager, String fileName, FileHandle file, SkeletonDataParameter parameter) { - SkeletonData skeletonData = this.skeletonData; - this.skeletonData = null; - return skeletonData; - } - - public Array getDependencies(String fileName, FileHandle file, SkeletonDataParameter parameter) { - if (parameter == null) return null; - if (parameter.attachmentLoader != null) return null; - Array dependencies = new Array<>(); - dependencies.add(new AssetDescriptor(parameter.atlasName, TextureAtlas.class)); - return dependencies; - } - - static public class SkeletonDataParameter extends AssetLoaderParameters { - public String atlasName; - public AttachmentLoader attachmentLoader; - public float scale = 1; - - public SkeletonDataParameter() { - } - - public SkeletonDataParameter(String atlasName) { - this.atlasName = atlasName; - } - - public SkeletonDataParameter(String atlasName, float scale) { - this.atlasName = atlasName; - this.scale = scale; - } - - public SkeletonDataParameter(AttachmentLoader attachmentLoader) { - this.attachmentLoader = attachmentLoader; - } - - public SkeletonDataParameter(AttachmentLoader attachmentLoader, float scale) { - this.attachmentLoader = attachmentLoader; - this.scale = scale; - } - } -} diff --git a/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDrawable.java b/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDrawable.java deleted file mode 100644 index eda6bc2..0000000 --- a/src/main/java/com/esotericsoftware/SpineStandard/utils/SkeletonDrawable.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.esotericsoftware.SpineStandard.utils; - -import com.QYun.SuperSpineViewer.RuntimesLoader; -import com.badlogic.gdx.graphics.g2d.Batch; -import com.badlogic.gdx.scenes.scene2d.utils.BaseDrawable; -import com.esotericsoftware.SpineStandard.AnimationState; -import com.esotericsoftware.SpineStandard.Skeleton; -import com.esotericsoftware.SpineStandard.SkeletonRenderer; - -public class SkeletonDrawable extends BaseDrawable { - AnimationState state; - private SkeletonRenderer renderer; - private Skeleton skeleton; - private boolean resetBlendFunction = true; - - public SkeletonDrawable() { - } - - public SkeletonDrawable(SkeletonRenderer renderer, Skeleton skeleton, AnimationState state) { - this.renderer = renderer; - this.skeleton = skeleton; - this.state = state; - } - - public void update(float delta) { - state.update(delta); - state.apply(skeleton); - } - - public void draw(Batch batch, float x, float y, float width, float height) { - skeleton.setPosition(x, y); - skeleton.updateWorldTransform(); - renderer.draw(batch, skeleton); - - switch (RuntimesLoader.spineVersion.get()) { - case 38, 37 -> { - int blendSrc = batch.getBlendSrcFunc(), blendDst = batch.getBlendDstFunc(); - int blendSrcAlpha = batch.getBlendSrcFuncAlpha(), blendDstAlpha = batch.getBlendDstFuncAlpha(); - if (resetBlendFunction) - batch.setBlendFunctionSeparate(blendSrc, blendDst, blendSrcAlpha, blendDstAlpha); - } - } - } - - public SkeletonRenderer getRenderer() { - return renderer; - } - - public void setRenderer(SkeletonRenderer renderer) { - this.renderer = renderer; - } - - public Skeleton getSkeleton() { - return skeleton; - } - - public void setSkeleton(Skeleton skeleton) { - this.skeleton = skeleton; - } - - public AnimationState getAnimationState() { - return state; - } - - public void setAnimationState(AnimationState state) { - this.state = state; - } - - public boolean getResetBlendFunction() { - return resetBlendFunction; - } - - - public void setResetBlendFunction(boolean resetBlendFunction) { - this.resetBlendFunction = resetBlendFunction; - } -}