From c5a3ccd8611f7c4aab5c860952af3a23d280a466 Mon Sep 17 00:00:00 2001 From: Jeasonfire Date: Wed, 27 May 2015 15:50:26 +0300 Subject: [PATCH] Parrying added. (Sans animations) --- .../com/saltosion/gladiator/components/CCombat.java | 3 ++- .../gladiator/listeners/SwingHitboxListener.java | 13 +++++++++++-- .../saltosion/gladiator/systems/CombatSystem.java | 4 ++++ .../saltosion/gladiator/systems/PhysicsSystem.java | 6 ++++++ 4 files changed, 23 insertions(+), 3 deletions(-) diff --git a/core/src/com/saltosion/gladiator/components/CCombat.java b/core/src/com/saltosion/gladiator/components/CCombat.java index 7243831..2cbff55 100644 --- a/core/src/com/saltosion/gladiator/components/CCombat.java +++ b/core/src/com/saltosion/gladiator/components/CCombat.java @@ -29,13 +29,14 @@ public class CCombat extends Component { public int health = 0; private int maxHealth = 0; private int damage = 0; - private float swingForce = 20f; + private float swingForce = 15f; private Vector2 swingsize = new Vector2(3, 3); private CombatListener combatListener; private Vector2 swinging = new Vector2(); private float swingDuration = 0.4f; public float swingCdCounter = 0; + public float stunCounter = 0; private boolean parrying = false; diff --git a/core/src/com/saltosion/gladiator/listeners/SwingHitboxListener.java b/core/src/com/saltosion/gladiator/listeners/SwingHitboxListener.java index a7d4dc9..3fc4dc8 100644 --- a/core/src/com/saltosion/gladiator/listeners/SwingHitboxListener.java +++ b/core/src/com/saltosion/gladiator/listeners/SwingHitboxListener.java @@ -43,6 +43,10 @@ public class SwingHitboxListener implements CollisionListener { this.direction = direction; } + public CCombat getSourceCombat() { + return cm.get(source); + } + @Override public void collision(Direction side, Entity host, Entity other) { if (other.equals(source) || hitEntities.contains(other)) { @@ -51,8 +55,7 @@ public class SwingHitboxListener implements CollisionListener { hitEntities.add(other); CCombat sourceCombat = cm.get(source); - CCombat otherCombat = cm.get(other); - if (otherCombat != null && !sourceCombat.isParrying()) { + if (cm.get(other) != null && !sourceCombat.isParrying()) { int damage = cm.get(source).getDamage(); CombatSystem.dealDamage(source, other, damage); } @@ -66,6 +69,7 @@ public class SwingHitboxListener implements CollisionListener { AudioLoader.getSound(Name.SOUND_CLANG04)); s.play(AppUtil.sfxVolume); + SwingHitboxListener otherListener = (SwingHitboxListener) otherPhysics.getCollisionListener(); if (!sourceCombat.isParrying()) { // Source isn't parrying, throw back float x = 0; @@ -74,6 +78,11 @@ public class SwingHitboxListener implements CollisionListener { } else if (direction == Direction.RIGHT) { x = -1; } + CCombat otherCombat = otherListener.getSourceCombat(); + if (otherCombat != null && otherCombat.isParrying()) { + x *= 1.75f; + sourceCombat.stunCounter = otherCombat.getSwingForce() / 10f; + } pm.get(source).setSimVelocity(x * sourceCombat.getSwingForce(), 0); } } diff --git a/core/src/com/saltosion/gladiator/systems/CombatSystem.java b/core/src/com/saltosion/gladiator/systems/CombatSystem.java index d0244e2..7e35a0d 100644 --- a/core/src/com/saltosion/gladiator/systems/CombatSystem.java +++ b/core/src/com/saltosion/gladiator/systems/CombatSystem.java @@ -58,6 +58,10 @@ public class CombatSystem extends EntitySystem { combat.swingCdCounter -= deltaTime; continue; } + if (combat.stunCounter > 0) { + combat.stunCounter -= deltaTime; + continue; + } // Ready to swing ! combat.getSwing().setZero(); diff --git a/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java b/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java index ed73984..18af250 100644 --- a/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java +++ b/core/src/com/saltosion/gladiator/systems/PhysicsSystem.java @@ -74,6 +74,12 @@ public class PhysicsSystem extends EntitySystem { if (combat.swingCdCounter > 0) { obj.getVelocity().x /= 2; } + if (combat.isParrying()) { + obj.getVelocity().x /= 2; + } + if (combat.stunCounter > 0) { + obj.getVelocity().x = 0; + } } if (obj.jumping && obj.isGrounded()) { obj.setGrounded(false);