feat(sounds): Added some new sounds
This commit is contained in:
parent
95e1e52205
commit
c674663cc0
@ -12,8 +12,10 @@ import cz.jzitnik.game.mobs.EntitySpawnProvider;
|
|||||||
import cz.jzitnik.game.sprites.Breaking;
|
import cz.jzitnik.game.sprites.Breaking;
|
||||||
import cz.jzitnik.game.sprites.Steve.SteveState;
|
import cz.jzitnik.game.sprites.Steve.SteveState;
|
||||||
import cz.jzitnik.game.annotations.AutoTransient;
|
import cz.jzitnik.game.annotations.AutoTransient;
|
||||||
|
import cz.jzitnik.game.annotations.WalkSound;
|
||||||
import cz.jzitnik.game.annotations.BreaksByPlace;
|
import cz.jzitnik.game.annotations.BreaksByPlace;
|
||||||
import cz.jzitnik.game.annotations.MineSound;
|
import cz.jzitnik.game.annotations.MineSound;
|
||||||
|
import cz.jzitnik.game.annotations.PlaceSound;
|
||||||
import cz.jzitnik.game.blocks.Chest;
|
import cz.jzitnik.game.blocks.Chest;
|
||||||
import cz.jzitnik.game.blocks.Furnace;
|
import cz.jzitnik.game.blocks.Furnace;
|
||||||
import cz.jzitnik.game.config.Configuration;
|
import cz.jzitnik.game.config.Configuration;
|
||||||
@ -27,6 +29,7 @@ import cz.jzitnik.tui.ScreenMovingCalculationProvider;
|
|||||||
import cz.jzitnik.tui.ScreenRenderer;
|
import cz.jzitnik.tui.ScreenRenderer;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import lombok.Setter;
|
||||||
|
|
||||||
import org.jline.terminal.Terminal;
|
import org.jline.terminal.Terminal;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -93,6 +96,8 @@ public class Game extends AutoTransientSupport {
|
|||||||
|
|
||||||
entitySpawnProvider.update(this, terminal);
|
entitySpawnProvider.update(this, terminal);
|
||||||
|
|
||||||
|
playMovePlayerSound(cords[0] + 1, cords[1]);
|
||||||
|
|
||||||
update(screenRenderer);
|
update(screenRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -114,6 +119,8 @@ public class Game extends AutoTransientSupport {
|
|||||||
|
|
||||||
entitySpawnProvider.update(this, terminal);
|
entitySpawnProvider.update(this, terminal);
|
||||||
|
|
||||||
|
playMovePlayerSound(cords[0] - 1, cords[1]);
|
||||||
|
|
||||||
update(screenRenderer);
|
update(screenRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,6 +282,8 @@ public class Game extends AutoTransientSupport {
|
|||||||
|
|
||||||
gameStates.dependencies.eventHandlerProvider.handleMine(screenRenderer, this, x, y);
|
gameStates.dependencies.eventHandlerProvider.handleMine(screenRenderer, this, x, y);
|
||||||
|
|
||||||
|
screenRenderer.render(this);
|
||||||
|
|
||||||
for (Block block : blocksCopy) {
|
for (Block block : blocksCopy) {
|
||||||
if (block.getClass().isAnnotationPresent(MineSound.class)) {
|
if (block.getClass().isAnnotationPresent(MineSound.class)) {
|
||||||
var key = block.getClass().getAnnotation(MineSound.class).value();
|
var key = block.getClass().getAnnotation(MineSound.class).value();
|
||||||
@ -285,8 +294,6 @@ public class Game extends AutoTransientSupport {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
screenRenderer.render(this);
|
|
||||||
|
|
||||||
update(screenRenderer);
|
update(screenRenderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,6 +366,9 @@ public class Game extends AutoTransientSupport {
|
|||||||
ArrayList<Block> combinedList = new ArrayList<>();
|
ArrayList<Block> combinedList = new ArrayList<>();
|
||||||
combinedList.addAll(world[cords2[1]][cords2[0]]);
|
combinedList.addAll(world[cords2[1]][cords2[0]]);
|
||||||
combinedList.addAll(world[cords2[1] + 1][cords2[0]]);
|
combinedList.addAll(world[cords2[1] + 1][cords2[0]]);
|
||||||
|
if (player.getFallDistance() != 0) {
|
||||||
|
playMovePlayerSound(cords2[0], cords2[1]);
|
||||||
|
}
|
||||||
player.fell(combinedList, this, screenRenderer);
|
player.fell(combinedList, this, screenRenderer);
|
||||||
screenRenderer.render(this);
|
screenRenderer.render(this);
|
||||||
break;
|
break;
|
||||||
@ -435,6 +445,11 @@ public class Game extends AutoTransientSupport {
|
|||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
if (placeHandler.place(this, x, y)) {
|
if (placeHandler.place(this, x, y)) {
|
||||||
|
if (item.getClass().isAnnotationPresent(PlaceSound.class)) {
|
||||||
|
var key = item.getClass().getAnnotation(PlaceSound.class).value();
|
||||||
|
|
||||||
|
gameStates.dependencies.sound.playSound(configuration, key);
|
||||||
|
}
|
||||||
blocks.removeAll(blocksRemove);
|
blocks.removeAll(blocksRemove);
|
||||||
gameStates.dependencies.eventHandlerProvider.handlePlace(screenRenderer, this, x, y);
|
gameStates.dependencies.eventHandlerProvider.handlePlace(screenRenderer, this, x, y);
|
||||||
screenRenderer.render(this);
|
screenRenderer.render(this);
|
||||||
@ -470,4 +485,16 @@ public class Game extends AutoTransientSupport {
|
|||||||
screenRenderer.render(this);
|
screenRenderer.render(this);
|
||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void playMovePlayerSound(int x, int y) {
|
||||||
|
var blocks = world[y+1][x];
|
||||||
|
|
||||||
|
for (Block block : blocks) {
|
||||||
|
if (block.getClass().isAnnotationPresent(WalkSound.class)) {
|
||||||
|
var key = block.getClass().getAnnotation(WalkSound.class).value();
|
||||||
|
|
||||||
|
gameStates.dependencies.sound.playSound(configuration, key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
15
src/main/java/cz/jzitnik/game/annotations/PlaceSound.java
Normal file
15
src/main/java/cz/jzitnik/game/annotations/PlaceSound.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package cz.jzitnik.game.annotations;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@RequireAnnotation(ItemRegistry.class)
|
||||||
|
public @interface PlaceSound {
|
||||||
|
SoundKey value();
|
||||||
|
}
|
@ -14,5 +14,5 @@ import java.lang.annotation.ElementType;
|
|||||||
public @interface SoundRegistry {
|
public @interface SoundRegistry {
|
||||||
SoundKey key();
|
SoundKey key();
|
||||||
SoundType type();
|
SoundType type();
|
||||||
String resourceLocation();
|
String[] resourceLocation();
|
||||||
}
|
}
|
||||||
|
15
src/main/java/cz/jzitnik/game/annotations/WalkSound.java
Normal file
15
src/main/java/cz/jzitnik/game/annotations/WalkSound.java
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
package cz.jzitnik.game.annotations;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
|
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target(ElementType.TYPE)
|
||||||
|
@RequireAnnotation(BlockRegistry.class)
|
||||||
|
public @interface WalkSound {
|
||||||
|
SoundKey value();
|
||||||
|
}
|
@ -2,9 +2,9 @@ package cz.jzitnik.game.core.sound;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import javax.sound.sampled.Clip;
|
|
||||||
import javax.sound.sampled.LineUnavailableException;
|
import javax.sound.sampled.LineUnavailableException;
|
||||||
import javax.sound.sampled.UnsupportedAudioFileException;
|
import javax.sound.sampled.UnsupportedAudioFileException;
|
||||||
|
|
||||||
@ -17,6 +17,7 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class Sound {
|
public class Sound {
|
||||||
|
private Random random = new Random();
|
||||||
private HashMap<SoundKey, SoundRegistry> map = new HashMap<>();
|
private HashMap<SoundKey, SoundRegistry> map = new HashMap<>();
|
||||||
|
|
||||||
public Sound() {
|
public Sound() {
|
||||||
@ -41,7 +42,10 @@ public class Sound {
|
|||||||
var annotation = map.get(soundKey);
|
var annotation = map.get(soundKey);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Clip clip = SoundPlayer.playSound(annotation.resourceLocation(), volume);
|
var resources = annotation.resourceLocation();
|
||||||
|
|
||||||
|
var resource = resources[random.nextInt(resources.length)];
|
||||||
|
SoundPlayer.playSound(resource, volume);
|
||||||
} catch (LineUnavailableException | IOException | UnsupportedAudioFileException | InterruptedException e) {
|
} catch (LineUnavailableException | IOException | UnsupportedAudioFileException | InterruptedException e) {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cz.jzitnik.game.core.sound;
|
package cz.jzitnik.game.core.sound;
|
||||||
|
|
||||||
public enum SoundKey {
|
public enum SoundKey {
|
||||||
DIRT_MINE
|
GRASS,
|
||||||
|
GRASS_WALKING
|
||||||
}
|
}
|
||||||
|
@ -1,9 +0,0 @@
|
|||||||
package cz.jzitnik.game.core.sound.registry;
|
|
||||||
|
|
||||||
import cz.jzitnik.game.annotations.SoundRegistry;
|
|
||||||
import cz.jzitnik.game.core.sound.SoundKey;
|
|
||||||
import cz.jzitnik.game.core.sound.SoundType;
|
|
||||||
|
|
||||||
@SoundRegistry(key = SoundKey.DIRT_MINE, resourceLocation = "dirt_mine.wav", type = SoundType.BLOCK)
|
|
||||||
public class DirtMineSound {
|
|
||||||
}
|
|
@ -0,0 +1,14 @@
|
|||||||
|
package cz.jzitnik.game.core.sound.registry;
|
||||||
|
|
||||||
|
import cz.jzitnik.game.annotations.SoundRegistry;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundType;
|
||||||
|
|
||||||
|
@SoundRegistry(key = SoundKey.GRASS, resourceLocation = {
|
||||||
|
"dirt/grass1.wav",
|
||||||
|
"dirt/grass2.wav",
|
||||||
|
"dirt/grass3.wav",
|
||||||
|
"dirt/grass4.wav"
|
||||||
|
}, type = SoundType.BLOCK)
|
||||||
|
public class GrassSound {
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package cz.jzitnik.game.core.sound.registry;
|
||||||
|
|
||||||
|
import cz.jzitnik.game.annotations.SoundRegistry;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundType;
|
||||||
|
|
||||||
|
@SoundRegistry(key = SoundKey.GRASS_WALKING, resourceLocation = {
|
||||||
|
"dirt/walk1.wav",
|
||||||
|
"dirt/walk2.wav",
|
||||||
|
"dirt/walk3.wav",
|
||||||
|
"dirt/walk4.wav",
|
||||||
|
"dirt/walk5.wav",
|
||||||
|
"dirt/walk6.wav",
|
||||||
|
}, type = SoundType.BLOCK)
|
||||||
|
public class GrassWalkingSound {
|
||||||
|
}
|
@ -2,16 +2,13 @@ package cz.jzitnik.game.entities.items.registry.blocks.blocks;
|
|||||||
|
|
||||||
import cz.jzitnik.game.SpriteLoader;
|
import cz.jzitnik.game.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||||
import cz.jzitnik.game.annotations.MineSound;
|
|
||||||
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||||
import cz.jzitnik.game.core.sound.SoundKey;
|
|
||||||
import cz.jzitnik.game.entities.Block;
|
import cz.jzitnik.game.entities.Block;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
@MineSound(SoundKey.DIRT_MINE)
|
|
||||||
@ResetDataOnMine
|
@ResetDataOnMine
|
||||||
@BlockRegistry("dirt")
|
@BlockRegistry("dirt")
|
||||||
public class DirtBlock extends Block {
|
public class DirtBlock extends Block {
|
||||||
|
@ -2,13 +2,20 @@ package cz.jzitnik.game.entities.items.registry.blocks.blocks;
|
|||||||
|
|
||||||
import cz.jzitnik.game.SpriteLoader;
|
import cz.jzitnik.game.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.BlockRegistry;
|
import cz.jzitnik.game.annotations.BlockRegistry;
|
||||||
|
import cz.jzitnik.game.annotations.MineSound;
|
||||||
|
import cz.jzitnik.game.annotations.PlaceSound;
|
||||||
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
import cz.jzitnik.game.annotations.ResetDataOnMine;
|
||||||
|
import cz.jzitnik.game.annotations.WalkSound;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
import cz.jzitnik.game.entities.Block;
|
import cz.jzitnik.game.entities.Block;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
import cz.jzitnik.game.logic.services.grass.GrassDirtData;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
@MineSound(SoundKey.GRASS)
|
||||||
|
@PlaceSound(SoundKey.GRASS)
|
||||||
|
@WalkSound(SoundKey.GRASS_WALKING)
|
||||||
@ResetDataOnMine
|
@ResetDataOnMine
|
||||||
@BlockRegistry(value = "grass", drops = "dirt")
|
@BlockRegistry(value = "grass", drops = "dirt")
|
||||||
public class GrassBlock extends Block {
|
public class GrassBlock extends Block {
|
||||||
|
@ -2,9 +2,12 @@ package cz.jzitnik.game.entities.items.registry.items.blocks;
|
|||||||
|
|
||||||
import cz.jzitnik.game.SpriteLoader;
|
import cz.jzitnik.game.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.ItemRegistry;
|
import cz.jzitnik.game.annotations.ItemRegistry;
|
||||||
|
import cz.jzitnik.game.annotations.PlaceSound;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
import cz.jzitnik.game.entities.items.Item;
|
import cz.jzitnik.game.entities.items.Item;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
|
|
||||||
|
@PlaceSound(SoundKey.DIRT)
|
||||||
@ItemRegistry("dirt")
|
@ItemRegistry("dirt")
|
||||||
public class DirtItem extends Item {
|
public class DirtItem extends Item {
|
||||||
public DirtItem() {
|
public DirtItem() {
|
||||||
|
@ -2,9 +2,12 @@ package cz.jzitnik.game.entities.items.registry.items.blocks;
|
|||||||
|
|
||||||
import cz.jzitnik.game.SpriteLoader;
|
import cz.jzitnik.game.SpriteLoader;
|
||||||
import cz.jzitnik.game.annotations.ItemRegistry;
|
import cz.jzitnik.game.annotations.ItemRegistry;
|
||||||
|
import cz.jzitnik.game.annotations.PlaceSound;
|
||||||
|
import cz.jzitnik.game.core.sound.SoundKey;
|
||||||
import cz.jzitnik.game.entities.items.Item;
|
import cz.jzitnik.game.entities.items.Item;
|
||||||
import cz.jzitnik.game.entities.items.ItemType;
|
import cz.jzitnik.game.entities.items.ItemType;
|
||||||
|
|
||||||
|
@PlaceSound(SoundKey.DIRT)
|
||||||
@ItemRegistry("grass")
|
@ItemRegistry("grass")
|
||||||
public class GrassItem extends Item {
|
public class GrassItem extends Item {
|
||||||
public GrassItem() {
|
public GrassItem() {
|
||||||
|
BIN
src/main/resources/sounds/dirt/grass1.wav
Normal file
BIN
src/main/resources/sounds/dirt/grass1.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/grass2.wav
Normal file
BIN
src/main/resources/sounds/dirt/grass2.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/grass3.wav
Normal file
BIN
src/main/resources/sounds/dirt/grass3.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/grass4.wav
Normal file
BIN
src/main/resources/sounds/dirt/grass4.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk1.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk1.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk2.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk2.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk3.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk3.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk4.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk4.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk5.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk5.wav
Normal file
Binary file not shown.
BIN
src/main/resources/sounds/dirt/walk6.wav
Normal file
BIN
src/main/resources/sounds/dirt/walk6.wav
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user