Custom sounds, mod sound loading

This commit is contained in:
Anuken
2019-10-02 21:03:56 -04:00
parent 76dbc1cca3
commit ec29bd3682
6 changed files with 57 additions and 11 deletions

View File

@ -2,6 +2,8 @@ package io.anuke.mindustry;
import io.anuke.arc.*;
import io.anuke.arc.assets.*;
import io.anuke.arc.assets.loaders.*;
import io.anuke.arc.audio.*;
import io.anuke.arc.graphics.*;
import io.anuke.arc.graphics.g2d.*;
import io.anuke.arc.math.*;
@ -41,10 +43,15 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
batch = new SpriteBatch();
assets = new AssetManager();
assets.setLoader(Texture.class, "." + mapExtension, new MapPreviewLoader());
tree = new FileTree();
assets.setLoader(Sound.class, new SoundLoader(tree));
assets.setLoader(Music.class, new MusicLoader(tree));
assets.load("sprites/error.png", Texture.class);
atlas = TextureAtlas.blankAtlas();
Vars.net = new Net(platform.getNet());
Vars.mods = new Mods();
mods = new Mods();
UI.loadSystemCursors();

View File

@ -196,10 +196,9 @@ public class Vars implements Loadable{
Version.init();
tree = new FileTree();
if(mods == null){
mods = new Mods();
}
if(files ==null) tree = new FileTree();
if(mods == null) mods = new Mods();
content = new ContentLoader();
loops = new LoopControl();
defaultWaves = new DefaultWaves();
@ -255,12 +254,16 @@ public class Vars implements Loadable{
maps.load();
}
public static void loadSettings(){
public static void createDirectories(){
Core.settings.setAppName(appName);
if(steam || Version.modifier.equals("steam")){
Core.settings.setDataDirectory(Core.files.local("saves/"));
}
}
public static void loadSettings(){
createDirectories();
Core.settings.defaults("locale", "default");
Core.keybinds.setDefaults(Binding.values());

View File

@ -1,15 +1,16 @@
package io.anuke.mindustry.core;
import io.anuke.arc.*;
import io.anuke.arc.assets.loaders.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.files.*;
/** Handles files in a modded context. */
public class FileTree{
public class FileTree implements FileHandleResolver{
private ObjectMap<String, FileHandle> files = new ObjectMap<>();
public void addFile(FileHandle f){
files.put(f.path(), f);
public void addFile(String path, FileHandle f){
files.put(path, f);
}
/** Gets an asset file.*/
@ -20,4 +21,9 @@ public class FileTree{
return Core.files.internal(path);
}
}
@Override
public FileHandle resolve(String fileName){
return get(fileName);
}
}

View File

@ -1,5 +1,7 @@
package io.anuke.mindustry.mod;
import io.anuke.arc.*;
import io.anuke.arc.audio.*;
import io.anuke.arc.collection.*;
import io.anuke.arc.function.*;
import io.anuke.arc.graphics.*;
@ -14,6 +16,7 @@ import io.anuke.mindustry.entities.Effects.*;
import io.anuke.mindustry.entities.bullet.*;
import io.anuke.mindustry.entities.type.*;
import io.anuke.mindustry.game.*;
import io.anuke.mindustry.gen.*;
import io.anuke.mindustry.mod.Mods.*;
import io.anuke.mindustry.type.*;
import io.anuke.mindustry.world.*;
@ -27,6 +30,23 @@ public class ContentParser{
put(Effect.class, (type, data) -> field(Fx.class, data));
put(StatusEffect.class, (type, data) -> field(StatusEffects.class, data));
put(Color.class, (type, data) -> Color.valueOf(data.asString()));
put(Music.class, (type, data) -> {
if(fieldOpt(Musics.class, data) != null) return fieldOpt(Musics.class, data);
String path = "music/" + data.asString() + (Vars.ios ? ".mp3" : ".ogg");
Core.assets.load(path, Music.class);
Core.assets.finishLoadingAsset(path);
return Core.assets.get(path);
});
put(Sound.class, (type, data) -> {
if(fieldOpt(Sounds.class, data) != null) return fieldOpt(Sounds.class, data);
String path = "sounds/" + data.asString() + (Vars.ios ? ".mp3" : ".ogg");
Core.assets.load(path, Sound.class);
Core.assets.finishLoadingAsset(path);
Log.info(Core.assets.get(path));
return Core.assets.get(path);
});
}};
/** Stores things that need to be parsed fully, e.g. reading fields of content.
* This is done to accomodate binding of content names first.*/
@ -221,6 +241,16 @@ public class ContentParser{
}
}
private Object fieldOpt(Class<?> type, JsonValue value){
try{
Object b = type.getField(value.asString()).get(null);
if(b == null) return null;
return b;
}catch(Exception e){
return null;
}
}
/** Checks all @NonNull fields in this object, recursively.
* Throws an exception if any are null.*/
private void checkNulls(Object object){

View File

@ -180,7 +180,7 @@ public class Mods implements Loadable{
//ignore special folders like bundles or sprites
if(file.isDirectory() && !specialFolders.contains(file.name())){
//TODO calling child/parent on these files will give you gibberish; create wrapper class.
file.walk(f -> tree.addFile(f));
file.walk(f -> tree.addFile(mod.file.isDirectory() ? f.path().substring(1 + mod.file.path().length()) : f.path(), f));
}
}

View File

@ -1,3 +1,3 @@
org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=840b75daba69d93a5c493e740a573463e03f9ada
archash=2a94f9187de5a7fa0b795ba4725fbc3e929b890c