More work on assets

This commit is contained in:
Speiger 2026-06-13 19:34:13 +02:00
parent 396d4f2232
commit 09874d1b8a
13 changed files with 167 additions and 12 deletions

View File

@ -5,7 +5,7 @@ connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER)
connection.project.dir= connection.project.dir=
eclipse.preferences.version=1 eclipse.preferences.version=1
gradle.user.home= gradle.user.home=
java.home=C\:/Program Files/Java/jdk25 java.home=C\:/Program Files/Eclipse Adoptium/jdk25
jvm.arguments= jvm.arguments=
offline.mode=false offline.mode=false
override.workspace.settings=true override.workspace.settings=true

View File

@ -1,5 +1,18 @@
package speiger.src.coreengine.assets.api; package speiger.src.coreengine.assets.api;
public interface IAssetPackage { import java.io.IOException;
import java.nio.file.WatchService;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import speiger.src.coreengine.assets.AssetLocation;
public interface IAssetPackage extends AutoCloseable {
void watchService(WatchService listener) throws IOException;
List<String> domains();
Map<ID, String> fileHashes();
Optional<IAsset> get(AssetLocation location);
void getAll(AssetLocation folder, BiConsumer<ID, IAsset> assets);
} }

View File

@ -1,6 +1,16 @@
package speiger.src.coreengine.assets.api; package speiger.src.coreengine.assets.api;
import java.util.Map;
import java.util.function.Predicate;
public interface IAssetProvider { public interface IAssetProvider {
public IAsset get(ID id); IAsset get(ID id);
public String hash(ID id); MultiAsset getAll(ID id);
String hash(ID id);
Map<ID, IAsset> list(String folder, Predicate<ID> filter);
Map<ID, MultiAsset> listAll(String folder, Predicate<ID> filter);
public interface IReloadableAssetProvider extends IAssetProvider, AutoCloseable {
void addReloadListener(Runnable run);
}
} }

View File

@ -0,0 +1,64 @@
package speiger.src.coreengine.assets.impl;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.WatchService;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.function.BiConsumer;
import speiger.src.collections.objects.lists.ObjectArrayList;
import speiger.src.collections.objects.utils.ObjectLists;
import speiger.src.coreengine.assets.AssetLocation;
import speiger.src.coreengine.assets.api.IAsset;
import speiger.src.coreengine.assets.api.IAssetPackage;
import speiger.src.coreengine.assets.api.ID;
public class FolderAssetPackage implements IAssetPackage {
Path basePath;
ID id;
public FolderAssetPackage(Path basePath) {
this.basePath = basePath;
}
@Override
public void watchService(WatchService listener) throws IOException {
}
@Override
public void close() throws Exception {}
@Override
public List<String> domains() {
try(DirectoryStream<Path> dirs = Files.newDirectoryStream(basePath.resolve("assets"))) {
List<String> domains = new ObjectArrayList<>();
dirs.forEach(T -> domains.add(T.getFileName().toString()));
return domains;
}
catch(Exception e) {
e.printStackTrace();
return ObjectLists.empty();
}
}
@Override
public Map<ID, String> fileHashes() {
return null;
}
@Override
public Optional<IAsset> get(AssetLocation location) {
Path path = basePath.resolve(location.actualLocation());
return Files.notExists(path) ? Optional.empty() : Optional.of(new SimpleAsset(this, id, path, null));
}
@Override
public void getAll(AssetLocation folder, BiConsumer<ID, IAsset> assets) {
}
}

View File

@ -0,0 +1,30 @@
package speiger.src.coreengine.assets.impl;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import speiger.src.coreengine.assets.api.IAsset;
import speiger.src.coreengine.assets.api.IAssetPackage;
import speiger.src.coreengine.assets.api.IAssetParser;
import speiger.src.coreengine.assets.api.ID;
public record SimpleAsset(IAssetPackage owner, ID location, Path path, String hash) implements IAsset {
@Override
public IAssetPackage owner() {
return owner;
}
@Override
public InputStream stream() throws IOException {
return Files.newInputStream(path);
}
@Override
public <T> T parse(IAssetParser<T> parser) throws IOException {
return parser.parse(path);
}
}

View File

@ -0,0 +1,38 @@
package speiger.src.coreengine.assets.simple;
import java.util.Map;
import java.util.function.Predicate;
import speiger.src.coreengine.assets.api.IAsset;
import speiger.src.coreengine.assets.api.IAssetProvider;
import speiger.src.coreengine.assets.api.ID;
import speiger.src.coreengine.assets.api.MultiAsset;
public class SimpleAssetProvider implements IAssetProvider {
@Override
public IAsset get(ID id) {
return null;
}
@Override
public MultiAsset getAll(ID id) {
return null;
}
@Override
public String hash(ID id) {
return null;
}
@Override
public Map<ID, IAsset> list(String folder, Predicate<ID> filter) {
return null;
}
@Override
public Map<ID, MultiAsset> listAll(String folder, Predicate<ID> filter) {
return null;
}
}

View File

@ -12,11 +12,11 @@ import speiger.src.collections.objects.utils.ObjectLists;
import speiger.src.coreengine.assets.base.IAsset; import speiger.src.coreengine.assets.base.IAsset;
import speiger.src.coreengine.assets.base.IAssetPackage; import speiger.src.coreengine.assets.base.IAssetPackage;
import speiger.src.coreengine.assets.base.IAssetProvider.ICloseableAssetProvider; import speiger.src.coreengine.assets.base.IAssetProvider.ICloseableAssetProvider;
import speiger.src.coreengine.assets.oldImpl.LayeredAssetProvider;
import speiger.src.coreengine.assets.base.IManagedAsset; import speiger.src.coreengine.assets.base.IManagedAsset;
import speiger.src.coreengine.assets.base.IReloadableAsset; import speiger.src.coreengine.assets.base.IReloadableAsset;
import speiger.src.coreengine.assets.base.MultiAsset; import speiger.src.coreengine.assets.base.MultiAsset;
import speiger.src.coreengine.assets.base.PackReloadingTask; import speiger.src.coreengine.assets.base.PackReloadingTask;
import speiger.src.coreengine.assets.impl.LayeredAssetProvider;
public class AssetManager implements ICloseableAssetProvider public class AssetManager implements ICloseableAssetProvider
{ {

View File

@ -8,8 +8,8 @@ import java.util.List;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import speiger.src.coreengine.assets.AssetLocation; import speiger.src.coreengine.assets.AssetLocation;
import speiger.src.coreengine.assets.impl.FolderAssetPackage; import speiger.src.coreengine.assets.oldImpl.FolderAssetPackage;
import speiger.src.coreengine.assets.impl.ZipAssetPackage; import speiger.src.coreengine.assets.oldImpl.ZipAssetPackage;
import speiger.src.coreengine.utils.helpers.IOUtils; import speiger.src.coreengine.utils.helpers.IOUtils;
public interface IAssetPackage extends Closeable public interface IAssetPackage extends Closeable

View File

@ -1,4 +1,4 @@
package speiger.src.coreengine.assets.impl; package speiger.src.coreengine.assets.oldImpl;
import java.io.Closeable; import java.io.Closeable;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package speiger.src.coreengine.assets.impl; package speiger.src.coreengine.assets.oldImpl;
import java.io.IOException; import java.io.IOException;
import java.nio.file.DirectoryStream; import java.nio.file.DirectoryStream;

View File

@ -1,4 +1,4 @@
package speiger.src.coreengine.assets.impl; package speiger.src.coreengine.assets.oldImpl;
import java.nio.file.attribute.FileTime; import java.nio.file.attribute.FileTime;
import java.util.List; import java.util.List;

View File

@ -1,4 +1,4 @@
package speiger.src.coreengine.assets.impl; package speiger.src.coreengine.assets.oldImpl;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.BufferedReader; import java.io.BufferedReader;

View File

@ -1,4 +1,4 @@
package speiger.src.coreengine.assets.impl; package speiger.src.coreengine.assets.oldImpl;
import java.io.IOException; import java.io.IOException;
import java.nio.file.DirectoryStream; import java.nio.file.DirectoryStream;