From 992ef0d1591e709168fe16f365d90be9e823f9fc Mon Sep 17 00:00:00 2001 From: austin Date: Fri, 19 Nov 2021 22:08:34 -0500 Subject: [PATCH] Tweaking attacking --- assets/Data/creatures.json | 2 +- .../controls/ControlHandler.java | 1 + .../entity/state/AttackTree.java | 38 +++++++++++++------ .../entity/state/equip/EquipState.java | 23 +++++++++++ .../state/movement/GroundMovementTree.java | 15 +++++++- 5 files changed, 65 insertions(+), 14 deletions(-) diff --git a/assets/Data/creatures.json b/assets/Data/creatures.json index 3d085854..0ddfd2be 100644 --- a/assets/Data/creatures.json +++ b/assets/Data/creatures.json @@ -136,7 +136,7 @@ "type" : "MELEE_WEAPON_SWING_ONE_HAND", "animationName" : "Armature|SwingWeapon", "damageStartFrame" : 30, - "damageEndFrame" : 120 + "damageEndFrame" : 60 } ], "healthSystem" : { diff --git a/src/main/java/electrosphere/controls/ControlHandler.java b/src/main/java/electrosphere/controls/ControlHandler.java index 89dab308..ae201b89 100644 --- a/src/main/java/electrosphere/controls/ControlHandler.java +++ b/src/main/java/electrosphere/controls/ControlHandler.java @@ -393,6 +393,7 @@ public class ControlHandler { if(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isIsMouse() && glfwGetMouseButton(Globals.window, controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).getKeyValue()) == GLFW_PRESS){ if(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isState() == false){ if(attackTree != null){ + CreatureUtils.setMovementVector(Globals.playerCharacter, new Vector3d(-cameraEyeVector.x,0,-cameraEyeVector.z).normalize()); attackTree.start(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND); } } diff --git a/src/main/java/electrosphere/entity/state/AttackTree.java b/src/main/java/electrosphere/entity/state/AttackTree.java index 3f360098..ea8ac9f5 100644 --- a/src/main/java/electrosphere/entity/state/AttackTree.java +++ b/src/main/java/electrosphere/entity/state/AttackTree.java @@ -51,19 +51,25 @@ public class AttackTree { } public void start(String attackType){ - parent.putData(EntityDataStrings.ATTACK_MOVE_TYPE_ACTIVE, attackType); - AttackMove currentMove; - switch(attackType){ - case EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND: - currentMove = (AttackMove)parent.getData(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND); - damageStartFrame = currentMove.getDamageStartFrame(); - damageEndFrame = currentMove.getDamageEndFrame(); - animationName = currentMove.getAnimationName(); - break; + if(canAttack()){ + parent.putData(EntityDataStrings.ATTACK_MOVE_TYPE_ACTIVE, attackType); + AttackMove currentMove; + switch(attackType){ + case EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND: + currentMove = (AttackMove)parent.getData(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND); + damageStartFrame = currentMove.getDamageStartFrame(); + damageEndFrame = currentMove.getDamageEndFrame(); + animationName = currentMove.getAnimationName(); + break; + } + if(parent.getDataKeys().contains(EntityDataStrings.DATA_STRING_MOVEMENT_BT)){ + CreatureUtils.getEntityMovementTree(parent).interrupt(); + } + Vector3d movementVector = CreatureUtils.getMovementVector(parent); + EntityUtils.getRotation(parent).rotationTo(new Vector3f(0,0,1), new Vector3f((float)movementVector.x,(float)movementVector.y,(float)movementVector.z)); + state = AttackTreeState.WINDUP; + frameCurrent = 0; } - //TODO: check if can start moving - state = AttackTreeState.WINDUP; - frameCurrent = 0; } public void interrupt(){ @@ -271,4 +277,12 @@ public class AttackTree { networkMessageQueue.add(networkMessage); } + boolean canAttack(){ + boolean rVal = true; + if(state != AttackTreeState.IDLE){ + rVal = false; + } + return rVal; + } + } diff --git a/src/main/java/electrosphere/entity/state/equip/EquipState.java b/src/main/java/electrosphere/entity/state/equip/EquipState.java index bbe68f34..dc638a21 100644 --- a/src/main/java/electrosphere/entity/state/equip/EquipState.java +++ b/src/main/java/electrosphere/entity/state/equip/EquipState.java @@ -1,9 +1,32 @@ package electrosphere.entity.state.equip; +import electrosphere.entity.Entity; + /** * * @author amaterasu */ public class EquipState { + Entity parent; + + Entity equipPrimary; + + public EquipState(Entity parent){ + this.parent = parent; + } + + public boolean hasEquipPrimary(){ + return equipPrimary == null; + } + + public Entity getEquipPrimary() { + return equipPrimary; + } + + public void setEquipPrimary(Entity equipPrimary) { + this.equipPrimary = equipPrimary; + } + + } diff --git a/src/main/java/electrosphere/entity/state/movement/GroundMovementTree.java b/src/main/java/electrosphere/entity/state/movement/GroundMovementTree.java index be9f7ea2..184eef9b 100644 --- a/src/main/java/electrosphere/entity/state/movement/GroundMovementTree.java +++ b/src/main/java/electrosphere/entity/state/movement/GroundMovementTree.java @@ -8,6 +8,8 @@ import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.Entity; import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityUtils; +import electrosphere.entity.state.AttackTree; +import electrosphere.entity.state.AttackTree.AttackTreeState; import electrosphere.entity.state.GravityTree; import electrosphere.entity.state.GravityTree; import electrosphere.entity.state.movement.SprintTree.SprintTreeState; @@ -76,11 +78,14 @@ public class GroundMovementTree { public void start(){ //TODO: check if can start moving - state = MovementTreeState.STARTUP; + if(canStartMoving()){ + state = MovementTreeState.STARTUP; + } } public void interrupt(){ state = MovementTreeState.IDLE; + CreatureUtils.setVelocity(parent, 0); } public void slowdown(){ @@ -442,6 +447,14 @@ public class GroundMovementTree { tree.start(); } } + + public boolean canStartMoving(){ + boolean rVal = true; + if(parent.getDataKeys().contains(EntityDataStrings.ATTACK_TREE) && ((AttackTree)parent.getData(EntityDataStrings.ATTACK_TREE)).getState() != AttackTreeState.IDLE){ + rVal = false; + } + return rVal; + } public void setAnimationStartUp(String animationStartUp) { this.animationStartUp = animationStartUp;