diff --git a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java index a186a08ecc..73b04ebcad 100644 --- a/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java +++ b/annotations/src/main/java/io/anuke/annotations/AssetsAnnotationProcessor.java @@ -30,13 +30,8 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ if(round++ != 0) return false; //only process 1 round try{ - process("Sounds", "core/assets/sounds", (type, fname, name) -> - 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())); - - process("Musics", "core/assets/music", (type, fname, name) -> - type.addField(FieldSpec.builder(ClassName.bestGuess("io.anuke.arc.audio.Music"), name, Modifier.STATIC, Modifier.PUBLIC, Modifier.FINAL) - .initializer(CodeBlock.builder().add("io.anuke.arc.Core.audio.newMusic(io.anuke.arc.Core.files.internal($S))", "music/" + fname).build()).build())); + process("Sounds", "core/assets/sounds", "io.anuke.arc.audio.Sound", "newSound"); + process("Musics", "core/assets/music", "io.anuke.arc.audio.Music", "newMusic"); return true; }catch(Exception e){ @@ -50,8 +45,10 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ return Collections.singleton("*"); } - void process(String classname, String path, Conser cons) throws Exception{ + void process(String classname, String path, String rtype, String loadMethod) throws Exception{ TypeSpec.Builder type = TypeSpec.classBuilder(classname).addModifiers(Modifier.PUBLIC); + MethodSpec.Builder load = MethodSpec.methodBuilder("load").addModifiers(Modifier.PUBLIC, Modifier.STATIC); + MethodSpec.Builder dispose = MethodSpec.methodBuilder("dispose").addModifiers(Modifier.PUBLIC, Modifier.STATIC); HashSet names = new HashSet<>(); Files.list(Paths.get(path)).forEach(p -> { @@ -69,15 +66,15 @@ public class AssetsAnnotationProcessor extends AbstractProcessor{ name = name + "s"; } - cons.consume(type, fname, name); - + load.addStatement(name + " = io.anuke.arc.Core.audio."+loadMethod+"(io.anuke.arc.Core.files.internal($S))", path.substring(path.lastIndexOf("/") + 1) + "/" + fname); + dispose.addStatement(name + ".dispose()"); + dispose.addStatement(name + " = null"); + type.addField(FieldSpec.builder(ClassName.bestGuess(rtype), name, Modifier.STATIC, Modifier.PUBLIC).initializer("new io.anuke.arc.audio.mock.Mock" + rtype.substring(rtype.lastIndexOf(".") + 1)+ "()").build()); + //cons.consume(type, fname, name); }); - + type.addMethod(load.build()); + type.addMethod(dispose.build()); JavaFile.builder(packageName, type.build()).build().writeTo(Utils.filer); } - - interface Conser{ - void consume(TypeSpec.Builder type, String fname, String name); - } } diff --git a/core/assets/music/menu.mp3 b/core/assets/music/menu.mp3 deleted file mode 100644 index 284ed6c029..0000000000 Binary files a/core/assets/music/menu.mp3 and /dev/null differ diff --git a/core/assets/music/menu.ogg b/core/assets/music/menu.ogg new file mode 100644 index 0000000000..2a25d8b61e Binary files /dev/null and b/core/assets/music/menu.ogg differ diff --git a/core/assets/sounds/back.ogg b/core/assets/sounds/back.ogg new file mode 100644 index 0000000000..b1176d6b7f Binary files /dev/null and b/core/assets/sounds/back.ogg differ diff --git a/core/assets/sounds/bang.mp3 b/core/assets/sounds/bang.mp3 new file mode 100644 index 0000000000..d859b89aab Binary files /dev/null and b/core/assets/sounds/bang.mp3 differ diff --git a/core/assets/sounds/bang2.mp3 b/core/assets/sounds/bang2.mp3 new file mode 100644 index 0000000000..71e3deffa4 Binary files /dev/null and b/core/assets/sounds/bang2.mp3 differ diff --git a/core/assets/sounds/bigshot.mp3 b/core/assets/sounds/bigshot.mp3 new file mode 100644 index 0000000000..2139d15232 Binary files /dev/null and b/core/assets/sounds/bigshot.mp3 differ diff --git a/core/assets/sounds/blast.mp3 b/core/assets/sounds/blast.mp3 new file mode 100644 index 0000000000..f05f080eae Binary files /dev/null and b/core/assets/sounds/blast.mp3 differ diff --git a/core/assets/sounds/bloop.mp3 b/core/assets/sounds/bloop.mp3 new file mode 100644 index 0000000000..c77f53d7fe Binary files /dev/null and b/core/assets/sounds/bloop.mp3 differ diff --git a/core/assets/sounds/break.mp3 b/core/assets/sounds/break.mp3 new file mode 100644 index 0000000000..56487e4af1 Binary files /dev/null and b/core/assets/sounds/break.mp3 differ diff --git a/core/assets/sounds/corexplode.mp3 b/core/assets/sounds/corexplode.mp3 new file mode 100644 index 0000000000..2ee50fb405 Binary files /dev/null and b/core/assets/sounds/corexplode.mp3 differ diff --git a/core/assets/sounds/die.mp3 b/core/assets/sounds/die.mp3 new file mode 100644 index 0000000000..ae87ef7aa9 Binary files /dev/null and b/core/assets/sounds/die.mp3 differ diff --git a/core/assets/sounds/enemyshoot.mp3 b/core/assets/sounds/enemyshoot.mp3 new file mode 100644 index 0000000000..7deb792726 Binary files /dev/null and b/core/assets/sounds/enemyshoot.mp3 differ diff --git a/core/assets/sounds/explosion.mp3 b/core/assets/sounds/explosion.mp3 new file mode 100644 index 0000000000..f5f6e08fa7 Binary files /dev/null and b/core/assets/sounds/explosion.mp3 differ diff --git a/core/assets/sounds/flame.mp3 b/core/assets/sounds/flame.mp3 new file mode 100644 index 0000000000..a49ae44245 Binary files /dev/null and b/core/assets/sounds/flame.mp3 differ diff --git a/core/assets/sounds/flame2.mp3 b/core/assets/sounds/flame2.mp3 new file mode 100644 index 0000000000..c0d71a7b1d Binary files /dev/null and b/core/assets/sounds/flame2.mp3 differ diff --git a/core/assets/sounds/laser.mp3 b/core/assets/sounds/laser.mp3 new file mode 100644 index 0000000000..f0b2398aef Binary files /dev/null and b/core/assets/sounds/laser.mp3 differ diff --git a/core/assets/sounds/lasershot.mp3 b/core/assets/sounds/lasershot.mp3 new file mode 100644 index 0000000000..1db62aa08a Binary files /dev/null and b/core/assets/sounds/lasershot.mp3 differ diff --git a/core/assets/sounds/missile.mp3 b/core/assets/sounds/missile.mp3 new file mode 100644 index 0000000000..89af9f5157 Binary files /dev/null and b/core/assets/sounds/missile.mp3 differ diff --git a/core/assets/sounds/ping.mp3 b/core/assets/sounds/ping.mp3 new file mode 100644 index 0000000000..b9692a37fc Binary files /dev/null and b/core/assets/sounds/ping.mp3 differ diff --git a/core/assets/sounds/place.mp3 b/core/assets/sounds/place.mp3 new file mode 100644 index 0000000000..3f5369e4fa Binary files /dev/null and b/core/assets/sounds/place.mp3 differ diff --git a/core/assets/sounds/press.ogg b/core/assets/sounds/press.ogg new file mode 100644 index 0000000000..a5f6a3525e Binary files /dev/null and b/core/assets/sounds/press.ogg differ diff --git a/core/assets/sounds/purchase.mp3 b/core/assets/sounds/purchase.mp3 new file mode 100644 index 0000000000..6edc48eebd Binary files /dev/null and b/core/assets/sounds/purchase.mp3 differ diff --git a/core/assets/sounds/resonate.mp3 b/core/assets/sounds/resonate.mp3 new file mode 100644 index 0000000000..ea456660de Binary files /dev/null and b/core/assets/sounds/resonate.mp3 differ diff --git a/core/assets/sounds/respawn.mp3 b/core/assets/sounds/respawn.mp3 new file mode 100644 index 0000000000..56e6fff2fc Binary files /dev/null and b/core/assets/sounds/respawn.mp3 differ diff --git a/core/assets/sounds/shoot.mp3 b/core/assets/sounds/shoot.mp3 new file mode 100644 index 0000000000..4a826fdfdd Binary files /dev/null and b/core/assets/sounds/shoot.mp3 differ diff --git a/core/assets/sounds/spawn.mp3 b/core/assets/sounds/spawn.mp3 new file mode 100644 index 0000000000..c0235b640c Binary files /dev/null and b/core/assets/sounds/spawn.mp3 differ diff --git a/core/assets/sounds/tesla.mp3 b/core/assets/sounds/tesla.mp3 new file mode 100644 index 0000000000..c8f053fbd3 Binary files /dev/null and b/core/assets/sounds/tesla.mp3 differ diff --git a/core/assets/sounds/waveend.mp3 b/core/assets/sounds/waveend.mp3 new file mode 100644 index 0000000000..60a48c0ba4 Binary files /dev/null and b/core/assets/sounds/waveend.mp3 differ diff --git a/core/src/io/anuke/mindustry/Mindustry.java b/core/src/io/anuke/mindustry/Mindustry.java index f7befa8c19..9ed18ca79d 100644 --- a/core/src/io/anuke/mindustry/Mindustry.java +++ b/core/src/io/anuke/mindustry/Mindustry.java @@ -1,12 +1,12 @@ package io.anuke.mindustry; import io.anuke.arc.*; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.util.Log; -import io.anuke.arc.util.Time; +import io.anuke.arc.math.*; +import io.anuke.arc.util.*; import io.anuke.mindustry.core.*; -import io.anuke.mindustry.game.EventType.GameLoadEvent; -import io.anuke.mindustry.io.BundleLoader; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.io.*; import static io.anuke.mindustry.Vars.*; @@ -26,6 +26,9 @@ public class Mindustry extends ApplicationCore{ Vars.init(); Log.setUseColors(false); BundleLoader.load(); + Musics.load(); + Sounds.load(); + content.load(); content.loadColors(); diff --git a/core/src/io/anuke/mindustry/core/Control.java b/core/src/io/anuke/mindustry/core/Control.java index a3e0feedab..852996af6e 100644 --- a/core/src/io/anuke/mindustry/core/Control.java +++ b/core/src/io/anuke/mindustry/core/Control.java @@ -169,7 +169,8 @@ public class Control implements ApplicationListener{ ui.hudfrag.showToast(Core.bundle.format("zone.config.complete", e.zone.configureWave)); }); - Musics.menu.play(); + Musics.menu.setLooping(true); + // Musics.menu.play(); } void createPlayer(){ @@ -230,6 +231,8 @@ public class Control implements ApplicationListener{ public void dispose(){ content.dispose(); Net.dispose(); + Musics.dispose(); + Sounds.dispose(); ui.editor.dispose(); } diff --git a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java index a8dd3b5670..a0ce31d3b7 100644 --- a/core/src/io/anuke/mindustry/entities/type/BaseUnit.java +++ b/core/src/io/anuke/mindustry/entities/type/BaseUnit.java @@ -60,6 +60,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{ } unit.onSuperDeath(); + unit.type.deathSound.at(unit); //visual only. if(Net.client()){ diff --git a/core/src/io/anuke/mindustry/entities/type/TileEntity.java b/core/src/io/anuke/mindustry/entities/type/TileEntity.java index c7793c5895..f34815cf92 100644 --- a/core/src/io/anuke/mindustry/entities/type/TileEntity.java +++ b/core/src/io/anuke/mindustry/entities/type/TileEntity.java @@ -257,6 +257,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{ dead = true; Events.fire(new BlockDestroyEvent(tile)); + block.breakSound.at(tile); block.onDestroyed(tile); world.removeBlock(tile); remove(); diff --git a/core/src/io/anuke/mindustry/entities/type/Unit.java b/core/src/io/anuke/mindustry/entities/type/Unit.java index b36e8dde83..833d908782 100644 --- a/core/src/io/anuke/mindustry/entities/type/Unit.java +++ b/core/src/io/anuke/mindustry/entities/type/Unit.java @@ -20,6 +20,7 @@ import io.anuke.mindustry.entities.units.Statuses; import io.anuke.mindustry.game.EventType.UnitDestroyEvent; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.game.Teams.TeamData; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.Pal; import io.anuke.mindustry.net.Interpolator; import io.anuke.mindustry.net.Net; @@ -108,6 +109,7 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ Effects.effect(Fx.explosion, this); Effects.shake(2f, 2f, this); + Sounds.bang.at(this); item.amount = 0; drownTime = 0f; status.clear(); diff --git a/core/src/io/anuke/mindustry/game/MusicControl.java b/core/src/io/anuke/mindustry/game/MusicControl.java new file mode 100644 index 0000000000..2409045cdb --- /dev/null +++ b/core/src/io/anuke/mindustry/game/MusicControl.java @@ -0,0 +1,4 @@ +package io.anuke.mindustry.game; + +public class MusicControl{ +} diff --git a/core/src/io/anuke/mindustry/type/UnitType.java b/core/src/io/anuke/mindustry/type/UnitType.java index bfe6042e23..a32590c1fd 100644 --- a/core/src/io/anuke/mindustry/type/UnitType.java +++ b/core/src/io/anuke/mindustry/type/UnitType.java @@ -1,14 +1,16 @@ package io.anuke.mindustry.type; -import io.anuke.arc.Core; -import io.anuke.arc.collection.ObjectSet; -import io.anuke.arc.function.Supplier; -import io.anuke.arc.graphics.g2d.TextureRegion; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.mindustry.content.Items; -import io.anuke.mindustry.entities.type.BaseUnit; +import io.anuke.arc.*; +import io.anuke.arc.audio.*; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.g2d.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.mindustry.content.*; +import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.*; -import io.anuke.mindustry.ui.ContentDisplay; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.ui.*; public class UnitType extends UnlockableContent{ public final TypeID typeID; @@ -35,6 +37,7 @@ public class UnitType extends UnlockableContent{ public Weapon weapon; public float weaponOffsetY, engineOffset = 6f, engineSize = 2f; public ObjectSet immunities = new ObjectSet<>(); + public Sound deathSound = Sounds.bang; public TextureRegion iconRegion, legRegion, baseRegion, region; diff --git a/core/src/io/anuke/mindustry/type/Weapon.java b/core/src/io/anuke/mindustry/type/Weapon.java index 88356b08d4..5ed8ff79ac 100644 --- a/core/src/io/anuke/mindustry/type/Weapon.java +++ b/core/src/io/anuke/mindustry/type/Weapon.java @@ -54,7 +54,7 @@ public class Weapon{ /** whether shooter rotation is ignored when shooting. */ public boolean ignoreRotation = false; - public Sound shootSound = Sounds.railgun; + public Sound shootSound = Sounds.shoot; public TextureRegion region; diff --git a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java index 7910a4ddd6..e8958d770f 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/FloatingDialog.java @@ -1,18 +1,17 @@ package io.anuke.mindustry.ui.dialogs; -import io.anuke.arc.Core; -import io.anuke.arc.Events; -import io.anuke.arc.input.KeyCode; -import io.anuke.arc.scene.ui.Dialog; -import io.anuke.arc.scene.ui.ScrollPane; -import io.anuke.arc.util.Align; -import io.anuke.mindustry.core.GameState.State; -import io.anuke.mindustry.game.EventType.ResizeEvent; -import io.anuke.mindustry.graphics.Pal; +import io.anuke.arc.*; +import io.anuke.arc.input.*; +import io.anuke.arc.scene.event.*; +import io.anuke.arc.scene.ui.*; +import io.anuke.arc.util.*; +import io.anuke.mindustry.core.GameState.*; +import io.anuke.mindustry.game.EventType.*; +import io.anuke.mindustry.gen.*; +import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.net.Net; -import static io.anuke.mindustry.Vars.iconsize; -import static io.anuke.mindustry.Vars.state; +import static io.anuke.mindustry.Vars.*; public class FloatingDialog extends Dialog{ private boolean wasPaused; @@ -32,7 +31,9 @@ public class FloatingDialog extends Dialog{ state.set(State.playing); } } + Sounds.back.play(); }); + ClickListener.clicked = () -> Sounds.press.play(); shown(() -> { if(shouldPause && !state.is(State.menu)){ diff --git a/core/src/io/anuke/mindustry/world/Block.java b/core/src/io/anuke/mindustry/world/Block.java index cb546d8e02..fb0fb7b3d3 100644 --- a/core/src/io/anuke/mindustry/world/Block.java +++ b/core/src/io/anuke/mindustry/world/Block.java @@ -1,38 +1,36 @@ package io.anuke.mindustry.world; -import io.anuke.annotations.Annotations.CallSuper; -import io.anuke.arc.Core; -import io.anuke.arc.Graphics.Cursor; -import io.anuke.arc.Graphics.Cursor.SystemCursor; -import io.anuke.arc.collection.Array; +import io.anuke.annotations.Annotations.*; +import io.anuke.arc.*; +import io.anuke.arc.Graphics.*; +import io.anuke.arc.Graphics.Cursor.*; +import io.anuke.arc.audio.*; import io.anuke.arc.collection.EnumSet; -import io.anuke.arc.function.BooleanProvider; -import io.anuke.arc.function.Function; -import io.anuke.arc.graphics.Color; +import io.anuke.arc.collection.*; +import io.anuke.arc.function.*; +import io.anuke.arc.graphics.*; import io.anuke.arc.graphics.g2d.*; -import io.anuke.arc.graphics.g2d.TextureAtlas.AtlasRegion; -import io.anuke.arc.math.Mathf; -import io.anuke.arc.scene.ui.layout.Table; -import io.anuke.arc.util.Align; -import io.anuke.arc.util.Time; -import io.anuke.arc.util.pooling.Pools; -import io.anuke.mindustry.entities.Damage; -import io.anuke.mindustry.entities.bullet.Bullet; -import io.anuke.mindustry.entities.effect.Puddle; -import io.anuke.mindustry.entities.effect.RubbleDecal; +import io.anuke.arc.graphics.g2d.TextureAtlas.*; +import io.anuke.arc.math.*; +import io.anuke.arc.scene.ui.layout.*; +import io.anuke.arc.util.*; +import io.anuke.arc.util.pooling.*; +import io.anuke.mindustry.entities.*; +import io.anuke.mindustry.entities.bullet.*; +import io.anuke.mindustry.entities.effect.*; +import io.anuke.mindustry.entities.type.Unit; import io.anuke.mindustry.entities.type.*; -import io.anuke.mindustry.game.UnlockableContent; +import io.anuke.mindustry.game.*; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; -import io.anuke.mindustry.input.InputHandler.PlaceDraw; +import io.anuke.mindustry.input.InputHandler.*; import io.anuke.mindustry.type.*; -import io.anuke.mindustry.ui.Bar; -import io.anuke.mindustry.ui.ContentDisplay; -import io.anuke.mindustry.world.blocks.Floor; -import io.anuke.mindustry.world.blocks.OverlayFloor; +import io.anuke.mindustry.ui.*; +import io.anuke.mindustry.world.blocks.*; import io.anuke.mindustry.world.consumers.*; import io.anuke.mindustry.world.meta.*; -import java.util.Arrays; +import java.util.*; import static io.anuke.mindustry.Vars.*; @@ -98,6 +96,8 @@ public class Block extends BlockStorage{ public boolean outlineIcon = false; /** Whether this block has a shadow under it. */ public boolean hasShadow = true; + /** Sounds made when this block breaks.*/ + public Sound breakSound = Sounds.die; /** Cost of constructing this block. */ public ItemStack[] buildRequirements = new ItemStack[]{}; diff --git a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java index a896f8583b..c8d571a395 100644 --- a/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java +++ b/core/src/io/anuke/mindustry/world/blocks/BuildBlock.java @@ -15,7 +15,7 @@ import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest; import io.anuke.mindustry.entities.type.*; import io.anuke.mindustry.game.EventType.BlockBuildEndEvent; import io.anuke.mindustry.game.Team; -import io.anuke.mindustry.gen.Call; +import io.anuke.mindustry.gen.*; import io.anuke.mindustry.graphics.*; import io.anuke.mindustry.type.ItemStack; import io.anuke.mindustry.world.Block; @@ -54,6 +54,7 @@ public class BuildBlock extends Block{ Effects.effect(Fx.breakBlock, tile.drawx(), tile.drawy(), block.size); world.removeBlock(tile); Events.fire(new BlockBuildEndEvent(tile, team, true)); + Sounds.breaks.at(tile); } @Remote(called = Loc.server) @@ -74,6 +75,7 @@ public class BuildBlock extends Block{ Core.app.post(() -> tile.block().playerPlaced(tile)); } Core.app.post(() -> Events.fire(new BlockBuildEndEvent(tile, team, false))); + Sounds.place.at(tile); } @Override