diff --git a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java new file mode 100644 index 0000000000..314940c76f --- /dev/null +++ b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java @@ -0,0 +1,69 @@ +package io.anuke.annotations; + +import com.squareup.javapoet.*; + +import javax.annotation.processing.*; +import javax.lang.model.*; +import javax.lang.model.element.*; +import javax.tools.Diagnostic.*; +import java.nio.file.*; +import java.util.*; + +@SupportedSourceVersion(SourceVersion.RELEASE_8) +public class AssetsAnnotationProcessor extends AbstractProcessor{ + /** Name of the base package to put all the generated classes. */ + private static final String packageName = "io.anuke.mindustry.gen"; + private int round; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv){ + super.init(processingEnv); + //put all relevant utils into utils class + Utils.typeUtils = processingEnv.getTypeUtils(); + Utils.elementUtils = processingEnv.getElementUtils(); + Utils.filer = processingEnv.getFiler(); + Utils.messager = processingEnv.getMessager(); + } + + @Override + public boolean process(Set annotations, RoundEnvironment roundEnv){ + if(round++ != 0) return false; //only process 1 round + + try{ + TypeSpec.Builder type = TypeSpec.classBuilder("Sounds").addModifiers(Modifier.PUBLIC); + HashSet names = new HashSet<>(); + Files.list(Paths.get("core/assets/sounds/")).forEach(p -> { + String name = p.getFileName().toString(); + name = name.substring(0, name.indexOf(".")); + if(names.contains(name)){ + Utils.messager.printMessage(Kind.ERROR, "Duplicate sound file name: " + p.toString() + "!"); + }else{ + names.add(name); + } + }); + + Files.list(Paths.get("core/assets/sounds/")).forEach(p -> { + String fname = p.getFileName().toString(); + String name = p.getFileName().toString(); + name = name.substring(0, name.indexOf(".")); + if(SourceVersion.isKeyword(name)){ + name = name + "s"; + } + type.addField(FieldSpec.builder(ClassName.bestGuess("io.anuke.arc.audio.Sound"), name, Modifier.STATIC, Modifier.PUBLIC, Modifier.FINAL) + .initializer(CodeBlock.builder().add("io.anuke.arc.Core.audio.newSound(io.anuke.arc.Core.files.internal($S))", "sounds/" + fname).build()).build()); + }); + + + JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); + return true; + }catch(Exception e){ + e.printStackTrace(); + throw new RuntimeException(e); + } + } + + @Override + public Set getSupportedAnnotationTypes() { + return Collections.singleton("*"); + } +} diff --git a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor index 5954bfccb9..0094bb0b52 100644 --- a/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor +++ b/annotations/src/main/resources/META-INF/services/javax.annotation.processing.Processor @@ -1,4 +1,5 @@ io.anuke.annotations.RemoteMethodAnnotationProcessor io.anuke.annotations.SerializeAnnotationProcessor io.anuke.annotations.StructAnnotationProcessor -io.anuke.annotations.CallSuperAnnotationProcessor \ No newline at end of file +io.anuke.annotations.CallSuperAnnotationProcessor +io.anuke.annotations.AssetsAnnotationProcessor \ No newline at end of file diff --git a/core/assets/sounds/shoot.mp3 b/core/assets/sounds/shoot.mp3 deleted file mode 100644 index 4a826fdfdd..0000000000 Binary files a/core/assets/sounds/shoot.mp3 and /dev/null differ diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index d26c9213b0..0f2177bcf8 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -14,6 +14,7 @@ import io.anuke.mindustry.entities.bullet.*; import io.anuke.mindustry.entities.traits.*; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.gen.Sounds; import io.anuke.mindustry.net.Net; public class Weapon{ @@ -53,7 +54,7 @@ public class Weapon{ /** whether shooter rotation is ignored when shooting. */ public boolean ignoreRotation = false; - public Sound shootSound = Core.audio.newSound(Core.files.internal("sounds/shoot.ogg")); + public Sound shootSound = Sounds.die; public TextureRegion region;