Skip to content
This repository was archived by the owner on Aug 27, 2024. It is now read-only.

Commit eaaa293

Browse files
committed
Adding resmgr on construction & addAsset in assetmgr
1 parent 9e730ed commit eaaa293

File tree

8 files changed

+82
-16
lines changed

8 files changed

+82
-16
lines changed

src/main/java/org/overrun/swgl/core/Application.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
package org.overrun.swgl.core;
2626

2727
import org.overrun.swgl.core.io.Mouse;
28+
import org.overrun.swgl.core.io.ResManager;
2829

2930
/**
3031
* A swgl application.
@@ -40,6 +41,14 @@ public abstract class Application implements Runnable, AutoCloseable, Mouse.Call
4041
public void prepare() {
4142
}
4243

44+
/**
45+
* Add a resource manager. It should be implemented by its subclasses.
46+
*
47+
* @param manager The resource manager.
48+
*/
49+
public void addResManager(ResManager manager) {
50+
}
51+
4352
/**
4453
* Prepare starting argument here after initializing GLFW.
4554
*/

src/main/java/org/overrun/swgl/core/GlfwApplication.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@
3333
import org.overrun.swgl.core.io.Window;
3434
import org.overrun.swgl.core.util.Timer;
3535

36-
import java.util.ArrayList;
37-
import java.util.List;
36+
import java.util.LinkedHashSet;
37+
import java.util.Set;
3838

3939
import static org.lwjgl.glfw.GLFW.*;
4040
import static org.overrun.swgl.core.cfg.GlobalConfig.*;
@@ -69,7 +69,7 @@ public abstract class GlfwApplication extends Application {
6969
/**
7070
* The resource managers.
7171
*/
72-
protected final List<ResManager> resManagers = new ArrayList<>();
72+
protected final Set<ResManager> resManagers = new LinkedHashSet<>();
7373

7474
/**
7575
* Update the time and ticking.
@@ -188,6 +188,7 @@ public void close() throws Exception {
188188
*
189189
* @param manager The resource manager.
190190
*/
191+
@Override
191192
public void addResManager(ResManager manager) {
192193
resManagers.add(manager);
193194
}

src/main/java/org/overrun/swgl/core/asset/AssetManager.java

Lines changed: 47 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.Map;
3333
import java.util.Optional;
3434
import java.util.function.Consumer;
35+
import java.util.function.Supplier;
3536

3637
/**
3738
* The asset manager.
@@ -51,6 +52,7 @@ private static final class AssetWrapper {
5152
private Asset asset;
5253
private final Consumer<Asset> consumer;
5354
private final IFileProvider provider;
55+
private Supplier<Asset> assetSupplier;
5456
private boolean reloaded;
5557

5658
private AssetWrapper(String name,
@@ -72,7 +74,10 @@ public boolean createAsset(String name,
7274
if (!reloaded)
7375
// Construct from constructor without any parameters
7476
try {
75-
asset = type.createInstance();
77+
if (assetSupplier != null)
78+
asset = assetSupplier.get();
79+
else
80+
asset = type.createInstance();
7681
} catch (Exception e) {
7782
e.printStackTrace();
7883
return false;
@@ -114,13 +119,50 @@ void createAsset(String name,
114119
* @param name The asset original name.
115120
* @param type The asset type provider.
116121
* @param provider The file provider.
122+
*/
123+
public void createAsset(String name,
124+
IAssetTypeProvider type,
125+
IFileProvider provider) {
126+
createAsset(name, type, null, provider);
127+
}
128+
129+
/**
130+
* Add an asset.
131+
*
132+
* @param name The asset original name.
133+
* @param type The asset type provider.
134+
* @param consumer The consumer to be accepted before loading asset.
135+
* @param provider The file provider.
136+
* @param supplier The asset supplier to get lazily.
117137
* @param <T> The asset type.
118138
*/
139+
@SuppressWarnings("unchecked")
119140
public <T extends Asset>
120-
void createAsset(String name,
121-
IAssetTypeProvider type,
122-
IFileProvider provider) {
123-
createAsset(name, type, null, provider);
141+
void addAsset(String name,
142+
IAssetTypeProvider type,
143+
@Nullable Consumer<T> consumer,
144+
IFileProvider provider,
145+
Supplier<Asset> supplier) {
146+
if (isFrozen())
147+
throw new IllegalStateException("Couldn't add asset in frozen state!");
148+
var w = new AssetWrapper(name, type, (Consumer<Asset>) consumer, provider);
149+
assets.put(name, w);
150+
w.assetSupplier = supplier;
151+
}
152+
153+
/**
154+
* Add an asset.
155+
*
156+
* @param name The asset original name.
157+
* @param type The asset type provider.
158+
* @param provider The file provider.
159+
* @param supplier The asset supplier to get lazily.
160+
*/
161+
public void addAsset(String name,
162+
IAssetTypeProvider type,
163+
IFileProvider provider,
164+
Supplier<Asset> supplier) {
165+
addAsset(name, type, null, provider, supplier);
124166
}
125167

126168
/**

src/main/java/org/overrun/swgl/core/io/ResManager.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424

2525
package org.overrun.swgl.core.io;
2626

27+
import org.overrun.swgl.core.Application;
28+
2729
import java.util.ArrayList;
2830
import java.util.List;
2931

@@ -36,6 +38,22 @@
3638
public class ResManager implements AutoCloseable {
3739
private final List<AutoCloseable> resources = new ArrayList<>();
3840

41+
/**
42+
* Default constructor.
43+
*/
44+
public ResManager() {
45+
}
46+
47+
/**
48+
* Construct and add this to an application.
49+
*
50+
* @param app The application to be added.
51+
*/
52+
public ResManager(Application app) {
53+
this();
54+
app.addResManager(this);
55+
}
56+
3957
/**
4058
* Add a resource to resources list.
4159
*

src/test/java/org/overrun/swgl/game/SwglGame.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public static void main(String[] args) {
6767
private static final IFileProvider FILE_PROVIDER = IFileProvider.of(SwglGame.class);
6868
private static final boolean PLACE_PREVIEW = false;
6969
private static final float GAMMA = 1.0f;
70-
private final ResManager resManager = new ResManager();
7170
private final FpsCamera camera = new FpsCamera();
7271
private World world;
7372
private WorldRenderer worldRenderer;
@@ -103,7 +102,7 @@ public void start() {
103102
if (vidMode != null)
104103
window.moveToCenter(vidMode.width(), vidMode.height());
105104

106-
addResManager(resManager);
105+
var resManager = new ResManager(this);
107106

108107
assetManager = resManager.addResource(new AssetManager());
109108
ITextureParam texParam = target -> {

src/test/java/org/overrun/swgl/test/CameraApp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ public static void main(String[] args) {
6767
public static final String CONTAINER_TEXTURE = "textures/camera/container.png";
6868
public static final String AWESOME_FACE_TEXTURE = "textures/camera/awesomeface.png";
6969
private static final IFileProvider FILE_PROVIDER = IFileProvider.of(CameraApp.class);
70-
private final ResManager resManager = new ResManager();
7170
private GLProgram program;
7271
private SimpleModel containerModel;
7372
private final Transformation transformation = new Transformation();
@@ -105,7 +104,7 @@ public void start() {
105104
setDepthFunc(GL_LEQUAL);
106105
GLUtil.setupDebugMessageCallback(System.err);
107106
clearColor(0.2f, 0.3f, 0.3f, 1.0f);
108-
addResManager(resManager);
107+
var resManager = new ResManager(this);
109108
program = resManager.addResource(new GLProgram(
110109
new MappedVertexLayout(
111110
Pair.of("Position", VertexFormat.POSITION_FMT),

src/test/java/org/overrun/swgl/test/HelloTriangleApp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ public static void main(String[] args) {
6161
}
6262

6363
private static final IFileProvider FILE_PROVIDER = IFileProvider.of(HelloTriangleApp.class);
64-
private final ResManager resManager = new ResManager();
6564
private GLProgram program;
6665
private SimpleModel triangle;
6766
private final Transformation transformation = new Transformation();
@@ -82,7 +81,7 @@ public void start() {
8281
GLStateMgr.enableDebugOutput();
8382
GLUtil.setupDebugMessageCallback(System.err);
8483
clearColor(0.0f, 0.0f, 0.0f, 1.0f);
85-
addResManager(resManager);
84+
var resManager = new ResManager(this);
8685
program = resManager.addResource(new GLProgram(
8786
new MappedVertexLayout(
8887
Pair.of("Position", VertexFormat.POSITION_FMT),

src/test/java/org/overrun/swgl/test/LightingApp.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ public static void main(String[] args) {
8080
new Vector3f(0.0f, 0.0f, -3.0f)
8181
};
8282
private static final Vector3f CONTAINER_ROTATE = new Vector3f(1.0f, 0.3f, 0.5f).normalize();
83-
private final ResManager resManager = new ResManager();
8483
private GLProgram objectProgram, lightingProgram;
8584
private ObjModel objectModel;
8685
private ObjModel lightModel;
@@ -112,7 +111,7 @@ public void start() {
112111
setDepthFunc(GL_LEQUAL);
113112
GLUtil.setupDebugMessageCallback(System.err);
114113
clearColor(0.1f, 0.1f, 0.1f, 1.0f);
115-
addResManager(resManager);
114+
var resManager = new ResManager(this);
116115

117116
// Models
118117
objectModel = ObjModels.loadModel("models/lighting/container2.obj");

0 commit comments

Comments
 (0)