Merge branch 'master' into ai
This commit is contained in:
commit
db9af3fd05
46
core/assets/attributions.md
Normal file
46
core/assets/attributions.md
Normal file
@ -0,0 +1,46 @@
|
||||
Attributions
|
||||
============
|
||||
|
||||
Matthew Pablo
|
||||
-------------
|
||||
|
||||
- Music
|
||||
- theme.ogg
|
||||
- Source: http://opengameart.org/content/you-were-my-brother-live-orchestra
|
||||
- Original Name/Format(s): Tropic Strike - 1M2 - _You Were My Brother_.mp3
|
||||
- Additional info: http://www.matthewpablo.com/
|
||||
|
||||
Zefs
|
||||
====
|
||||
|
||||
- Music
|
||||
- battle_music.ogg
|
||||
- Source: http://opengameart.org/content/orchestral-battle-music
|
||||
- Original Name/Format(s): TheLoomingBattle.OGG
|
||||
- Additional Info: -
|
||||
|
||||
Iwan Gabovitch
|
||||
--------------
|
||||
|
||||
- SFX
|
||||
- hit01.ogg ... hit05.ogg
|
||||
- Source: http://opengameart.org/content/15-vocal-male-strainhurtpainjump-sounds
|
||||
- Original Name/Format(s): slightscream-03.flac, slightscream-04.flac, slightscream-05.flac, slightscream-10.flac, slightscream-14.flac
|
||||
- Additional info: -
|
||||
|
||||
Ogrebane
|
||||
========
|
||||
|
||||
- SFX
|
||||
- clang01.ogg .. clang04.ogg
|
||||
- Source: http://opengameart.org/content/metal-and-wood-impact-sound-effects
|
||||
- Original Name/Format(s): metal10.aif .. metal14.aif
|
||||
- Additional info: -
|
||||
|
||||
Kenney
|
||||
======
|
||||
- SFX
|
||||
- button_press.ogg, button_release.ogg
|
||||
- Source: http://opengameart.org/content/51-ui-sound-effects-buttons-switches-and-clicks
|
||||
- Original Name/Format(s): switch31.wav, swich32.wav
|
||||
- Additional info: www.kenney.nl
|
BIN
core/assets/audio/battle_music.ogg
Normal file
BIN
core/assets/audio/battle_music.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/button_press.ogg
Normal file
BIN
core/assets/audio/button_press.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/button_release.ogg
Normal file
BIN
core/assets/audio/button_release.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/clang01.ogg
Normal file
BIN
core/assets/audio/clang01.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/clang02.ogg
Normal file
BIN
core/assets/audio/clang02.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/clang03.ogg
Normal file
BIN
core/assets/audio/clang03.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/clang04.ogg
Normal file
BIN
core/assets/audio/clang04.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/hit01.ogg
Normal file
BIN
core/assets/audio/hit01.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/hit02.ogg
Normal file
BIN
core/assets/audio/hit02.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/hit03.ogg
Normal file
BIN
core/assets/audio/hit03.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/hit04.ogg
Normal file
BIN
core/assets/audio/hit04.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/hit05.ogg
Normal file
BIN
core/assets/audio/hit05.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/step.ogg
Normal file
BIN
core/assets/audio/step.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/swing01.ogg
Normal file
BIN
core/assets/audio/swing01.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/swing02.ogg
Normal file
BIN
core/assets/audio/swing02.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/swing03.ogg
Normal file
BIN
core/assets/audio/swing03.ogg
Normal file
Binary file not shown.
BIN
core/assets/audio/theme.ogg
Normal file
BIN
core/assets/audio/theme.ogg
Normal file
Binary file not shown.
@ -18,7 +18,10 @@ import com.saltosion.gladiator.systems.ParticleSystem;
|
||||
import com.saltosion.gladiator.systems.PhysicsSystem;
|
||||
import com.saltosion.gladiator.systems.RenderingSystem;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Jukebox;
|
||||
import com.saltosion.gladiator.util.Log;
|
||||
import com.saltosion.gladiator.util.SpriteLoader;
|
||||
|
||||
public class GladiatorBrawler extends ApplicationAdapter {
|
||||
|
||||
@ -27,6 +30,7 @@ public class GladiatorBrawler extends ApplicationAdapter {
|
||||
private LevelFactory levelFactory;
|
||||
private GUIManager guiManager;
|
||||
private InputHandler inputHandler;
|
||||
private Jukebox jukebox;
|
||||
|
||||
private BaseState currentState;
|
||||
|
||||
@ -50,9 +54,14 @@ public class GladiatorBrawler extends ApplicationAdapter {
|
||||
// Initialize GUI
|
||||
guiManager = new GUIManager();
|
||||
AppUtil.guiManager = this.guiManager;
|
||||
|
||||
// Initialize Jukebox
|
||||
jukebox = new Jukebox();
|
||||
AppUtil.jukebox = this.jukebox;
|
||||
|
||||
// Initialize input
|
||||
inputHandler = new InputHandler();
|
||||
AppUtil.inputHandler = inputHandler;
|
||||
Gdx.input.setInputProcessor(inputHandler);
|
||||
|
||||
// Initialize states
|
||||
@ -136,5 +145,7 @@ public class GladiatorBrawler extends ApplicationAdapter {
|
||||
currentState.destroy();
|
||||
}
|
||||
AppUtil.engine.getSystem(RenderingSystem.class).dispose();
|
||||
SpriteLoader.dispose();
|
||||
AudioLoader.dispose();
|
||||
}
|
||||
}
|
||||
|
@ -28,6 +28,9 @@ public class CPhysics extends Component {
|
||||
|
||||
// Stores information about the direction last time moved in
|
||||
public boolean movedLeftLast = false;
|
||||
|
||||
// Stores a float that tells how long the physics object must wait until it can play sounds with it's walking again.
|
||||
public float stepCD = 0;
|
||||
|
||||
/**
|
||||
* @param movable Toggles if the entity can move by itself
|
||||
|
@ -31,10 +31,12 @@ public class GameOverGUICreator implements GUICreator {
|
||||
SpriteLoader.loadSprite(Name.BUTTON_BIG_HOVER)) {
|
||||
@Override
|
||||
public void pressed(int x, int y, int mouseButton) {
|
||||
playButtonPressSound();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void released(int x, int y, int mouseButton) {
|
||||
playButtonReleaseSound();
|
||||
shouldReturn = true;
|
||||
}
|
||||
};
|
||||
|
@ -27,10 +27,12 @@ public class MainMenuGUICreator implements GUICreator {
|
||||
SpriteLoader.loadSprite(Name.BUTTON_BIG_HOVER)) {
|
||||
@Override
|
||||
public void pressed(int x, int y, int mouseButton) {
|
||||
playButtonPressSound();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void released(int x, int y, int mouseButton) {
|
||||
playButtonReleaseSound();
|
||||
shouldPlay = true;
|
||||
}
|
||||
};
|
||||
|
@ -31,10 +31,12 @@ public class WinGUICreator implements GUICreator {
|
||||
SpriteLoader.loadSprite(Name.BUTTON_BIG_HOVER)) {
|
||||
@Override
|
||||
public void pressed(int x, int y, int mouseButton) {
|
||||
playButtonPressSound();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void released(int x, int y, int mouseButton) {
|
||||
playButtonReleaseSound();
|
||||
shouldReturn = true;
|
||||
}
|
||||
};
|
||||
|
@ -4,6 +4,9 @@ import com.saltosion.gladiator.gui.properties.ImageProperty;
|
||||
import com.saltosion.gladiator.gui.properties.InteractiveProperty;
|
||||
import com.saltosion.gladiator.gui.nodes.GUINode;
|
||||
import com.badlogic.gdx.graphics.g2d.Sprite;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public abstract class ButtonNode extends GUINode implements InteractiveProperty, ImageProperty {
|
||||
private final Sprite onHover;
|
||||
@ -15,6 +18,16 @@ public abstract class ButtonNode extends GUINode implements InteractiveProperty,
|
||||
this.onHover = onHover;
|
||||
this.normal = normal;
|
||||
}
|
||||
|
||||
public void playButtonPressSound() {
|
||||
AppUtil.jukebox.playSound(AudioLoader.getSound(Name.SOUND_BUTTON_PRESS),
|
||||
AppUtil.sfxVolume/2);
|
||||
}
|
||||
|
||||
public void playButtonReleaseSound() {
|
||||
AppUtil.jukebox.playSound(AudioLoader.getSound(Name.SOUND_BUTTON_RELEASE),
|
||||
AppUtil.sfxVolume/2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void mouseEnter(float x, float y) {
|
||||
|
@ -20,23 +20,33 @@ public class InputHandler implements InputProcessor {
|
||||
public HashMap<Integer, String> keys = new HashMap<Integer, String>();
|
||||
|
||||
private final Array<String> hoveredUIElements = new Array<String>();
|
||||
private final HashMap<String, Boolean> activatedInputs = new HashMap<String, Boolean>();
|
||||
|
||||
public InputHandler() {
|
||||
keys.put(Keys.A, Name.MOVE_LEFT);
|
||||
keys.put(Keys.D, Name.MOVE_RIGHT);
|
||||
keys.put(Keys.SPACE, Name.JUMP);
|
||||
keys.put(Keys.LEFT, Name.SWING_LEFT);
|
||||
keys.put(Keys.RIGHT, Name.SWING_RIGHT);
|
||||
keys.put(Keys.UP, Name.SWING_UP);
|
||||
keys.put(Keys.DOWN, Name.SWING_DOWN);
|
||||
keys.put(Keys.F2, Name.DEBUG);
|
||||
addInput(Keys.A, Name.MOVE_LEFT, false);
|
||||
addInput(Keys.D, Name.MOVE_RIGHT, false);
|
||||
addInput(Keys.SPACE, Name.JUMP, false);
|
||||
addInput(Keys.LEFT, Name.SWING_LEFT, false);
|
||||
addInput(Keys.RIGHT, Name.SWING_RIGHT, false);
|
||||
addInput(Keys.UP, Name.SWING_UP, false);
|
||||
addInput(Keys.DOWN, Name.SWING_DOWN, false);
|
||||
addInput(Keys.F2, Name.DEBUG, false);
|
||||
}
|
||||
|
||||
private void addInput(int key, String action, boolean activated) {
|
||||
keys.put(key, action);
|
||||
activatedInputs.put(action, activated);
|
||||
}
|
||||
|
||||
public void setInputEnabled(String action, boolean enabled) {
|
||||
activatedInputs.put(action, enabled);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean keyDown(int keycode) {
|
||||
if (!keys.containsKey(keycode)) {
|
||||
return false;
|
||||
}
|
||||
} if (!activatedInputs.get(keys.get(keycode))) { return false; }
|
||||
String actionName = keys.get(keycode);
|
||||
return InputReceivers.getReceiver(actionName).pressed();
|
||||
}
|
||||
@ -45,7 +55,7 @@ public class InputHandler implements InputProcessor {
|
||||
public boolean keyUp(int keycode) {
|
||||
if (!keys.containsKey(keycode)) {
|
||||
return false;
|
||||
}
|
||||
} if (!activatedInputs.get(keys.get(keycode))) { return false; }
|
||||
String actionName = keys.get(keycode);
|
||||
return InputReceivers.getReceiver(actionName).released();
|
||||
}
|
||||
|
@ -79,14 +79,14 @@ public class LevelFactory {
|
||||
|
||||
Entity borderLeft = new Entity();
|
||||
CPhysics borderLeftPhysics = new CPhysics().setMovable(false).setGravityApplied(false)
|
||||
.setProcessCollisions(false).setSize(0.1f, 20);
|
||||
borderLeftPhysics.setPosition(-xClamp - borderLeftPhysics.getSize().x, 0);
|
||||
.setProcessCollisions(false).setSize(1f, 20);
|
||||
borderLeftPhysics.setPosition(-xClamp - borderLeftPhysics.getSize().x / 2, 0);
|
||||
borderLeft.add(borderLeftPhysics);
|
||||
AppUtil.engine.addEntity(borderLeft);
|
||||
Entity borderRight = new Entity();
|
||||
CPhysics borderRightPhysics = new CPhysics().setMovable(false).setGravityApplied(false)
|
||||
.setProcessCollisions(false).setSize(0.1f, 20);
|
||||
borderRightPhysics.setPosition(xClamp + borderRightPhysics.getSize().x, 0);
|
||||
.setProcessCollisions(false).setSize(1f, 20);
|
||||
borderRightPhysics.setPosition(xClamp + borderRightPhysics.getSize().x / 2, 0);
|
||||
borderRight.add(borderRightPhysics);
|
||||
AppUtil.engine.addEntity(borderRight);
|
||||
}
|
||||
|
@ -1,10 +1,13 @@
|
||||
package com.saltosion.gladiator.listeners;
|
||||
|
||||
import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.gdx.audio.Sound;
|
||||
import com.saltosion.gladiator.components.CParticle;
|
||||
import com.saltosion.gladiator.components.CPhysics;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Global;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class BasicDeathListener implements CombatListener {
|
||||
|
||||
@ -16,6 +19,14 @@ public class BasicDeathListener implements CombatListener {
|
||||
target.flags &= ~Global.FLAG_ALIVE;
|
||||
|
||||
CPhysics cp = target.getComponent(CPhysics.class);
|
||||
|
||||
Sound s = AppUtil.jukebox.returnRandomSound(AudioLoader.getSound(Name.SOUND_HIT01),
|
||||
AudioLoader.getSound(Name.SOUND_HIT02),
|
||||
AudioLoader.getSound(Name.SOUND_HIT03),
|
||||
AudioLoader.getSound(Name.SOUND_HIT04),
|
||||
AudioLoader.getSound(Name.SOUND_HIT05));
|
||||
s.play(AppUtil.sfxVolume);
|
||||
|
||||
for (int i = 0; i < FX_DEAD_AMT; i++) {
|
||||
Entity fx = new Entity();
|
||||
fx.add(new CParticle().setColor(1, 0, 0, 1).setDecayTime(2).setGravity(0, FX_GRAV)
|
||||
@ -31,6 +42,14 @@ public class BasicDeathListener implements CombatListener {
|
||||
@Override
|
||||
public void damageTaken(Entity source, Entity target, int damageTaken) {
|
||||
CPhysics cp = target.getComponent(CPhysics.class);
|
||||
|
||||
Sound s = AppUtil.jukebox.returnRandomSound(AudioLoader.getSound(Name.SOUND_HIT01),
|
||||
AudioLoader.getSound(Name.SOUND_HIT02),
|
||||
AudioLoader.getSound(Name.SOUND_HIT03),
|
||||
AudioLoader.getSound(Name.SOUND_HIT04),
|
||||
AudioLoader.getSound(Name.SOUND_HIT05));
|
||||
s.play(AppUtil.sfxVolume);
|
||||
|
||||
for (int i = 0; i < FX_HIT_AMT; i++) {
|
||||
Entity fx = new Entity();
|
||||
fx.add(new CParticle().setColor(1, 0, 0, 1).setDecayTime(2).setGravity(0, FX_GRAV)
|
||||
|
@ -4,10 +4,14 @@ import java.util.ArrayList;
|
||||
|
||||
import com.badlogic.ashley.core.ComponentMapper;
|
||||
import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.gdx.audio.Sound;
|
||||
import com.saltosion.gladiator.components.CCombat;
|
||||
import com.saltosion.gladiator.components.CPhysics;
|
||||
import com.saltosion.gladiator.systems.CombatSystem;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Direction;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class SwingHitboxListener implements CollisionListener {
|
||||
|
||||
@ -46,6 +50,12 @@ public class SwingHitboxListener implements CollisionListener {
|
||||
}
|
||||
float force = cm.get(source).getSwingForce();
|
||||
pm.get(source).setSimVelocity(x * force, 0);
|
||||
|
||||
Sound s = AppUtil.jukebox.returnRandomSound(AudioLoader.getSound(Name.SOUND_CLANG01),
|
||||
AudioLoader.getSound(Name.SOUND_CLANG02),
|
||||
AudioLoader.getSound(Name.SOUND_CLANG03),
|
||||
AudioLoader.getSound(Name.SOUND_CLANG04));
|
||||
s.play(AppUtil.sfxVolume);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7,6 +7,8 @@ import com.saltosion.gladiator.level.premade.Round2Level;
|
||||
import com.saltosion.gladiator.level.premade.Round3Level;
|
||||
import com.saltosion.gladiator.level.premade.Round4Level;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class InGameState extends BaseState {
|
||||
|
||||
@ -32,6 +34,10 @@ public class InGameState extends BaseState {
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
// Play music
|
||||
AppUtil.jukebox.playMusic(AudioLoader.getMusic(Name.MUSIC_BATTLE));
|
||||
AppUtil.jukebox.setMusicVolume(AppUtil.musicVolume/2);
|
||||
|
||||
// Start from a clean slate
|
||||
AppUtil.engine.removeAllEntities();
|
||||
AppUtil.guiManager.clearGUI();
|
||||
@ -42,6 +48,15 @@ public class InGameState extends BaseState {
|
||||
|
||||
guiCreator = new InGameGUICreator();
|
||||
guiCreator.create();
|
||||
|
||||
// Activate inputs
|
||||
AppUtil.inputHandler.setInputEnabled(Name.JUMP, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.MOVE_LEFT, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.MOVE_RIGHT, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_DOWN, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_LEFT, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_RIGHT, true);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_UP, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -88,6 +103,16 @@ public class InGameState extends BaseState {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
|
||||
// Deactivate inputs
|
||||
AppUtil.inputHandler.setInputEnabled(Name.JUMP, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.MOVE_LEFT, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.MOVE_RIGHT, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_DOWN, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_LEFT, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_RIGHT, false);
|
||||
AppUtil.inputHandler.setInputEnabled(Name.SWING_UP, false);
|
||||
|
||||
// Clear all entities that are left as they are no longer needed
|
||||
AppUtil.engine.removeAllEntities();
|
||||
// Clear GUI so there's nothing leftover for the next state
|
||||
|
@ -2,6 +2,8 @@ package com.saltosion.gladiator.state;
|
||||
|
||||
import com.saltosion.gladiator.gui.creators.MainMenuGUICreator;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class MainMenuState extends BaseState {
|
||||
|
||||
@ -9,6 +11,10 @@ public class MainMenuState extends BaseState {
|
||||
|
||||
@Override
|
||||
public void create() {
|
||||
// Play music
|
||||
AppUtil.jukebox.playMusic(AudioLoader.getMusic(Name.MUSIC_THEME));
|
||||
AppUtil.jukebox.setMusicVolume(AppUtil.musicVolume);
|
||||
|
||||
// Start from a clean slate
|
||||
AppUtil.guiManager.clearGUI();
|
||||
|
||||
|
@ -6,6 +6,7 @@ import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.ashley.core.EntitySystem;
|
||||
import com.badlogic.ashley.core.Family;
|
||||
import com.badlogic.ashley.utils.ImmutableArray;
|
||||
import com.badlogic.gdx.audio.Sound;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.saltosion.gladiator.components.CCombat;
|
||||
import com.saltosion.gladiator.components.CDestructive;
|
||||
@ -13,7 +14,9 @@ import com.saltosion.gladiator.components.CPhysics;
|
||||
import com.saltosion.gladiator.listeners.CombatListener;
|
||||
import com.saltosion.gladiator.listeners.SwingHitboxListener;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Direction;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class CombatSystem extends EntitySystem {
|
||||
|
||||
@ -54,6 +57,8 @@ public class CombatSystem extends EntitySystem {
|
||||
}
|
||||
|
||||
if (!combat.getSwing().isZero() && combat.swingCdCounter <= 0) {
|
||||
|
||||
// Swinging
|
||||
Vector2 pos = obj.getPosition().cpy();
|
||||
|
||||
if (combat.getSwingDirection() == Direction.LEFT) {
|
||||
@ -67,6 +72,13 @@ public class CombatSystem extends EntitySystem {
|
||||
}
|
||||
createSwingHitbox(e, combat.getSwingDirection(), pos);
|
||||
|
||||
// SFX
|
||||
Sound s = AppUtil.jukebox.returnRandomSound(AudioLoader.getSound(Name.SOUND_SWING01),
|
||||
AudioLoader.getSound(Name.SOUND_SWING02),
|
||||
AudioLoader.getSound(Name.SOUND_SWING03));
|
||||
s.play(AppUtil.sfxVolume);
|
||||
|
||||
// After-swing
|
||||
combat.swingCdCounter = combat.getSwingDuration();
|
||||
}
|
||||
}
|
||||
|
@ -8,12 +8,15 @@ import com.badlogic.ashley.core.Family;
|
||||
import com.badlogic.ashley.utils.ImmutableArray;
|
||||
import com.saltosion.gladiator.components.CCombat;
|
||||
import com.saltosion.gladiator.components.CPhysics;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Direction;
|
||||
import com.saltosion.gladiator.util.Log;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
|
||||
public class PhysicsSystem extends EntitySystem {
|
||||
|
||||
private static final float MAX_VEL = 1.75f, COLLISION_PRECISION = 12f, UPDATES_PER_SECOND = 240f;
|
||||
private static final float MAX_VEL = 1.75f, COLLISION_PRECISION = 12f, UPDATES_PER_SECOND = 300f;
|
||||
|
||||
private static final ComponentMapper<CPhysics> pm = ComponentMapper.getFor(CPhysics.class);
|
||||
private static final ComponentMapper<CCombat> cm = ComponentMapper.getFor(CCombat.class);
|
||||
@ -58,6 +61,9 @@ public class PhysicsSystem extends EntitySystem {
|
||||
if (obj.jumping && obj.isGrounded()) {
|
||||
obj.setGrounded(false);
|
||||
obj.getVelocity().y = obj.getJumpForce();
|
||||
|
||||
// Sound effect!
|
||||
AppUtil.jukebox.playSound(AudioLoader.getSound(Name.SOUND_STEP), AppUtil.sfxVolume);
|
||||
}
|
||||
|
||||
obj.getVelocity().x += obj.getSimVelocity().x;
|
||||
|
@ -28,6 +28,7 @@ import com.saltosion.gladiator.gui.properties.ImageProperty;
|
||||
import com.saltosion.gladiator.gui.nodes.TextNode;
|
||||
import com.saltosion.gladiator.gui.properties.TextProperty;
|
||||
import com.saltosion.gladiator.util.AppUtil;
|
||||
import com.saltosion.gladiator.util.AudioLoader;
|
||||
import com.saltosion.gladiator.util.Global;
|
||||
import com.saltosion.gladiator.util.Name;
|
||||
import com.saltosion.gladiator.util.SpriteLoader;
|
||||
@ -101,7 +102,7 @@ public class RenderingSystem extends EntitySystem {
|
||||
Gdx.gl.glClearColor(0, 0, 0, 0);
|
||||
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
|
||||
|
||||
updateEntityAnimations();
|
||||
updateEntityAnimations(deltaTime);
|
||||
renderEntities(deltaTime);
|
||||
renderParticles();
|
||||
renderDebug();
|
||||
@ -134,13 +135,13 @@ public class RenderingSystem extends EntitySystem {
|
||||
return deltaString;
|
||||
}
|
||||
|
||||
private void updateEntityAnimations() {
|
||||
private void updateEntityAnimations(float deltaTime) {
|
||||
for (int i = 0; i < entities.size(); i++) {
|
||||
updateEntityAnimation(entities.get(i));
|
||||
updateEntityAnimation(entities.get(i), deltaTime);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateEntityAnimation(Entity entity) {
|
||||
private void updateEntityAnimation(Entity entity, float deltaTime) {
|
||||
CRenderedObject ro = rom.get(entity);
|
||||
CPhysics po = pm.get(entity);
|
||||
CCombat co = cm.get(entity);
|
||||
@ -184,21 +185,35 @@ public class RenderingSystem extends EntitySystem {
|
||||
}
|
||||
}
|
||||
|
||||
// Play animations
|
||||
// Play animations & play sounds
|
||||
if (po.stepCD > 0) {
|
||||
po.stepCD -= deltaTime;
|
||||
}
|
||||
|
||||
if (moving && combat) {
|
||||
ro.playAnimation("torso", "Torso-Combat-" + dirSwing);
|
||||
ro.playAnimation("legs", "Legs-Run-" + dirMove);
|
||||
tryToMakeStepSound(po);
|
||||
} else if (combat) {
|
||||
ro.playAnimation("torso", "Torso-Combat-" + dirSwing);
|
||||
ro.playAnimation("legs", "Legs-Idle-" + dirMove);
|
||||
} else if (moving) {
|
||||
ro.playAnimation("torso", "Torso-Run-" + dirMove);
|
||||
ro.playAnimation("legs", "Legs-Run-" + dirMove);
|
||||
tryToMakeStepSound(po);
|
||||
} else {
|
||||
ro.playAnimation("torso", "Torso-Idle-" + dirMove);
|
||||
ro.playAnimation("legs", "Legs-Idle-" + dirMove);
|
||||
}
|
||||
}
|
||||
|
||||
private void tryToMakeStepSound(CPhysics po) {
|
||||
if (po.stepCD > 0 || !po.isGrounded()) {
|
||||
return;
|
||||
}
|
||||
po.stepCD = 0.3f;
|
||||
AppUtil.jukebox.playSound(AudioLoader.getSound(Name.SOUND_STEP), AppUtil.sfxVolume/3*2);
|
||||
}
|
||||
|
||||
private void renderEntities(float deltaTime) {
|
||||
if (AppUtil.player == null) {
|
||||
@ -425,7 +440,6 @@ public class RenderingSystem extends EntitySystem {
|
||||
debugRenderer.dispose();
|
||||
particleRenderer.dispose();
|
||||
font.dispose();
|
||||
SpriteLoader.dispose();
|
||||
}
|
||||
|
||||
private class TextObject {
|
||||
|
@ -4,6 +4,7 @@ import com.badlogic.ashley.core.Engine;
|
||||
import com.badlogic.ashley.core.Entity;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.saltosion.gladiator.gui.GUIManager;
|
||||
import com.saltosion.gladiator.input.InputHandler;
|
||||
import com.saltosion.gladiator.level.EntityFactory;
|
||||
import com.saltosion.gladiator.level.LevelFactory;
|
||||
|
||||
@ -11,11 +12,16 @@ public class AppUtil {
|
||||
|
||||
public static Entity player;
|
||||
public static Engine engine;
|
||||
public static Jukebox jukebox;
|
||||
public static EntityFactory entityFactory;
|
||||
public static LevelFactory levelFactory;
|
||||
public static GUIManager guiManager;
|
||||
public static InputHandler inputHandler;
|
||||
|
||||
public static final int VPHEIGHT_CONST = 24;
|
||||
|
||||
public static float sfxVolume = 0.3f;
|
||||
public static float musicVolume = 0.7f;
|
||||
|
||||
public static final Vector2 JUMP_FORCE = new Vector2(0, 12000);
|
||||
}
|
||||
|
60
core/src/com/saltosion/gladiator/util/AudioLoader.java
Normal file
60
core/src/com/saltosion/gladiator/util/AudioLoader.java
Normal file
@ -0,0 +1,60 @@
|
||||
package com.saltosion.gladiator.util;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.audio.Music;
|
||||
import com.badlogic.gdx.audio.Sound;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class AudioLoader {
|
||||
|
||||
private static HashMap<String, Sound> sounds = new HashMap<String, Sound>();
|
||||
private static HashMap<String, Music> musics = new HashMap<String, Music>();
|
||||
|
||||
static {
|
||||
// Import all the sounds & musix
|
||||
AudioLoader.musics.put(Name.MUSIC_THEME, loadMusic("audio/theme.ogg"));
|
||||
AudioLoader.musics.put(Name.MUSIC_BATTLE, loadMusic("audio/battle_music.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_SWING01, loadSound("audio/swing01.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_SWING02, loadSound("audio/swing02.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_SWING03, loadSound("audio/swing03.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_HIT01, loadSound("audio/hit01.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_HIT02, loadSound("audio/hit02.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_HIT03, loadSound("audio/hit03.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_HIT04, loadSound("audio/hit04.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_HIT05, loadSound("audio/hit05.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_CLANG01, loadSound("audio/clang01.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_CLANG02, loadSound("audio/clang02.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_CLANG03, loadSound("audio/clang03.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_CLANG04, loadSound("audio/clang04.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_STEP, loadSound("audio/step.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_BUTTON_PRESS, loadSound("audio/button_press.ogg"));
|
||||
AudioLoader.sounds.put(Name.SOUND_BUTTON_RELEASE, loadSound("audio/button_release.ogg"));
|
||||
}
|
||||
|
||||
private static Music loadMusic(String path) {
|
||||
return Gdx.audio.newMusic(Gdx.files.internal(path));
|
||||
}
|
||||
|
||||
private static Sound loadSound(String path) {
|
||||
return Gdx.audio.newSound(Gdx.files.internal(path));
|
||||
}
|
||||
|
||||
public static Sound getSound(String id) {
|
||||
return sounds.get(id);
|
||||
}
|
||||
|
||||
public static Music getMusic(String id) {
|
||||
return musics.get(id);
|
||||
}
|
||||
|
||||
public static void dispose() {
|
||||
Log.info("Disposed sounds and musics!");
|
||||
for (String s : sounds.keySet()) {
|
||||
sounds.get(s).dispose();
|
||||
}
|
||||
for (String s : musics.keySet()) {
|
||||
musics.get(s).dispose();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
79
core/src/com/saltosion/gladiator/util/Jukebox.java
Normal file
79
core/src/com/saltosion/gladiator/util/Jukebox.java
Normal file
@ -0,0 +1,79 @@
|
||||
|
||||
package com.saltosion.gladiator.util;
|
||||
|
||||
import com.badlogic.gdx.audio.Music;
|
||||
import com.badlogic.gdx.audio.Sound;
|
||||
|
||||
public class Jukebox {
|
||||
|
||||
private Music currentMusic;
|
||||
private float volume = 1;
|
||||
|
||||
/**
|
||||
* Plays the musix like a baws.
|
||||
* @param music
|
||||
* @return boolean if the musix failed to play
|
||||
*/
|
||||
public boolean playMusic(Music music) {
|
||||
if (music == null) {
|
||||
currentMusic.stop();
|
||||
currentMusic = null;
|
||||
}
|
||||
if (music.equals(currentMusic)) {
|
||||
return false;
|
||||
} if (currentMusic != null) { currentMusic.stop(); };
|
||||
music.play();
|
||||
music.setVolume(volume);
|
||||
music.setLooping(true);
|
||||
currentMusic = music;
|
||||
return true;
|
||||
}
|
||||
|
||||
public Music getCurrentMusic() {
|
||||
return this.currentMusic;
|
||||
}
|
||||
|
||||
public void setMusicVolume(float volume) {
|
||||
this.volume = volume;
|
||||
if (currentMusic == null) {return;}
|
||||
this.currentMusic.setVolume(volume);
|
||||
}
|
||||
|
||||
/**
|
||||
* Simply plays the sound
|
||||
* @param sound
|
||||
* @return long returns sound's id
|
||||
*/
|
||||
public long playSound(Sound sound) {
|
||||
return sound.play();
|
||||
}
|
||||
|
||||
/**
|
||||
* Play sound and set it's volume
|
||||
* @param sound
|
||||
* @param volume 0-1f
|
||||
* @return long returns sound's id
|
||||
*/
|
||||
public long playSound(Sound sound, float volume) {
|
||||
long id = playSound(sound);
|
||||
sound.setVolume(id, volume);
|
||||
return id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Play sound and set it's volume & pan
|
||||
* @param sound
|
||||
* @param volume 0-1f
|
||||
* @param pan ?
|
||||
* @return long returns sound's id
|
||||
*/
|
||||
public long playSound(Sound sound, float volume, float pan) {
|
||||
long id = playSound(sound);
|
||||
sound.setPan(id, pan, volume);
|
||||
return id;
|
||||
}
|
||||
|
||||
public Sound returnRandomSound(Sound ... args) {
|
||||
return args[(int) Math.floor(Math.random()*args.length)];
|
||||
}
|
||||
}
|
@ -35,4 +35,22 @@ public class Name {
|
||||
public static final String SWING_UP = "SWING_UP";
|
||||
public static final String SWING_DOWN = "SWING_DOWN";
|
||||
|
||||
public static final String MUSIC_THEME = "MUSIC_THEME";
|
||||
public static final String MUSIC_BATTLE = "MUSIC_BATTLE";
|
||||
public static final String SOUND_SWING01 = "SOUND_SWING01";
|
||||
public static final String SOUND_SWING02 = "SOUND_SWING02";
|
||||
public static final String SOUND_SWING03 = "SOUND_SWING03";
|
||||
public static final String SOUND_HIT01 = "SOUND_HIT01";
|
||||
public static final String SOUND_HIT02 = "SOUND_HIT02";
|
||||
public static final String SOUND_HIT03 = "SOUND_HIT03";
|
||||
public static final String SOUND_HIT04 = "SOUND_HIT04";
|
||||
public static final String SOUND_HIT05 = "SOUND_HIT05";
|
||||
public static final String SOUND_CLANG01 = "SOUND_CLANG01";
|
||||
public static final String SOUND_CLANG02 = "SOUND_CLANG02";
|
||||
public static final String SOUND_CLANG03 = "SOUND_CLANG03";
|
||||
public static final String SOUND_CLANG04 = "SOUND_CLANG04";
|
||||
public static final String SOUND_STEP = "SOUND_STEP";
|
||||
public static final String SOUND_BUTTON_PRESS = "SOUND_BUTTON_PRESS";
|
||||
public static final String SOUND_BUTTON_RELEASE = "SOUND_BUTTON_RELEASE";
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user