3232import java .util .Map ;
3333import java .util .Optional ;
3434import 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 /**
0 commit comments