From a00a208ff82be986af49978cc636fe3ed8dcc967 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 30 Jul 2019 12:05:59 -0400 Subject: [PATCH] Annotation processor for sound asset generation --- .../AssetsAnnotationProcessor.java | 69 ++++++++++++++++++ .../javax.annotation.processing.Processor | 3 +- core/assets/sounds/shoot.mp3 | Bin 3725 -> 0 bytes core/src/io/anuke/mindustry/type/Weapon.java | 3 +- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java delete mode 100644 core/assets/sounds/shoot.mp3 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 4a826fdfdd7892dbb5fbf135394c4146a63bd3ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3725 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 Ml%Xkog8v==1jG795dZ)H 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;