Attack moves

This commit is contained in:
austin 2021-07-04 01:59:01 -04:00
parent 24c984b714
commit 6096a36896
10 changed files with 95 additions and 14 deletions

View File

@ -81,7 +81,8 @@
], ],
"tokens" : [ "tokens" : [
"BLENDER_TRANSFORM", "BLENDER_TRANSFORM",
"SENTIENT" "SENTIENT",
"ATTACKER"
], ],
"movementSystems" : [ "movementSystems" : [
{ {
@ -90,7 +91,15 @@
"maxVelocity" : 0.015 "maxVelocity" : 0.015
} }
], ],
"modelPath" : "Models/person1walkanim.fbx" "attackMoves" : [
{
"type" : "MELEE_WEAPON_SWING_ONE_HAND",
"animationName" : "Armature|SwingWeapon",
"damageStartFrame" : 30,
"damageEndFrame" : 50
}
],
"modelPath" : "Models/person1animpass2.fbx"
}, },
@ -186,6 +195,14 @@
"maxVelocity" : 0.025 "maxVelocity" : 0.025
} }
], ],
"attackMoves" : [
{
"type" : "MELEE_WEAPON_SWING_ONE_HAND",
"animationName" : "Armature|SwingWeapon",
"damageStartFrame" : 10,
"damageEndFrame" : 30
}
],
"modelPath" : "Models/goblin1.fbx" "modelPath" : "Models/goblin1.fbx"
} }

Binary file not shown.

View File

@ -1,6 +1,7 @@
package electrosphere.controls; package electrosphere.controls;
import electrosphere.entity.CameraEntityUtils; import electrosphere.entity.CameraEntityUtils;
import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.state.AttackTree; import electrosphere.entity.state.AttackTree;
@ -315,7 +316,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).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(controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).isState() == false){
if(attackTree != null){ if(attackTree != null){
attackTree.start(); attackTree.start(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND);
} }
} }
controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setState(true); controls.get(DATA_STRING_INPUT_CODE_ATTACK_PRIMARY).setState(true);

View File

@ -106,6 +106,9 @@ public class EntityDataStrings {
*/ */
public static final String ATTACK_TREE = "attackTree"; public static final String ATTACK_TREE = "attackTree";
public static final String ATTACK_MOVE_TYPE_ACTIVE = "attackMoveTypeActive";
public static final String ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND = "MELEE_WEAPON_SWING_ONE_HAND";
/* /*
idle behavior tree idle behavior tree
*/ */

View File

@ -5,6 +5,7 @@ import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.types.creature.CreatureUtils; import electrosphere.entity.types.creature.CreatureUtils;
import electrosphere.entity.types.hitbox.HitboxUtils; import electrosphere.entity.types.hitbox.HitboxUtils;
import electrosphere.game.server.creature.type.AttackMove;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.parser.net.message.EntityMessage;
import electrosphere.renderer.Actor; import electrosphere.renderer.Actor;
@ -30,6 +31,11 @@ public class AttackTree {
int frameCurrent; int frameCurrent;
int damageStartFrame = 1;
int damageEndFrame = 2;
String animationName = "SwingWeapon";
int maxFrame = 60; int maxFrame = 60;
public AttackTree(Entity e){ public AttackTree(Entity e){
@ -41,7 +47,17 @@ public class AttackTree {
return state; return state;
} }
public void start(){ 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;
}
//TODO: check if can start moving //TODO: check if can start moving
state = AttackTreeState.WINDUP; state = AttackTreeState.WINDUP;
frameCurrent = 0; frameCurrent = 0;
@ -78,17 +94,17 @@ public class AttackTree {
// System.out.println("Set state STARTUP"); // System.out.println("Set state STARTUP");
break; break;
case 1: case 1:
frameCurrent = 16; frameCurrent = damageStartFrame+1;
state = AttackTreeState.ATTACK; state = AttackTreeState.ATTACK;
// System.out.println("Set state MOVE"); // System.out.println("Set state MOVE");
break; break;
case 2: case 2:
frameCurrent = 31; frameCurrent = damageEndFrame+1;
state = AttackTreeState.COOLDOWN; state = AttackTreeState.COOLDOWN;
// System.out.println("Set state SLOWDOWN"); // System.out.println("Set state SLOWDOWN");
break; break;
case 3: case 3:
frameCurrent = 46; frameCurrent = 60;
state = AttackTreeState.IDLE; state = AttackTreeState.IDLE;
// System.out.println("Set state IDLE"); // System.out.println("Set state IDLE");
break; break;
@ -103,13 +119,13 @@ public class AttackTree {
switch(state){ switch(state){
case WINDUP: case WINDUP:
if(entityActor != null){ if(entityActor != null){
if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(Animation.ANIMATION_SWING_PRIMARY)){ if(!entityActor.isPlayingAnimation() || !entityActor.getCurrentAnimation().equals(animationName)){
entityActor.playAnimation(Animation.ANIMATION_SWING_PRIMARY); entityActor.playAnimation(animationName);
entityActor.incrementAnimationTime(0.01); entityActor.incrementAnimationTime(0.01);
} }
} }
frameCurrent++; frameCurrent++;
if(frameCurrent > 7){ if(frameCurrent > damageStartFrame){
state = AttackTreeState.ATTACK; state = AttackTreeState.ATTACK;
} }
break; break;
@ -127,7 +143,7 @@ public class AttackTree {
} }
} }
frameCurrent++; frameCurrent++;
if(frameCurrent > 30){ if(frameCurrent > damageEndFrame){
state = AttackTreeState.COOLDOWN; state = AttackTreeState.COOLDOWN;
} }
break; break;
@ -145,7 +161,7 @@ public class AttackTree {
} }
} }
frameCurrent++; frameCurrent++;
if(frameCurrent > 45){ if(frameCurrent > 60){
state = AttackTreeState.IDLE; state = AttackTreeState.IDLE;
frameCurrent = 0; frameCurrent = 0;
} }

View File

@ -10,6 +10,7 @@ import electrosphere.game.server.creature.type.CreatureType;
import electrosphere.game.server.creature.type.MovementSystem; import electrosphere.game.server.creature.type.MovementSystem;
import electrosphere.entity.state.AttackTree; import electrosphere.entity.state.AttackTree;
import electrosphere.entity.state.IdleTree; import electrosphere.entity.state.IdleTree;
import electrosphere.game.server.creature.type.AttackMove;
import electrosphere.main.Globals; import electrosphere.main.Globals;
import electrosphere.main.Main; import electrosphere.main.Main;
import electrosphere.net.parser.net.message.EntityMessage; import electrosphere.net.parser.net.message.EntityMessage;
@ -75,10 +76,18 @@ public class CreatureUtils {
case "ATTACKER": case "ATTACKER":
AttackTree attackTree = new AttackTree(rVal); AttackTree attackTree = new AttackTree(rVal);
rVal.putData(EntityDataStrings.ATTACK_TREE, attackTree); rVal.putData(EntityDataStrings.ATTACK_TREE, attackTree);
rVal.putData(EntityDataStrings.ATTACK_MOVE_TYPE_ACTIVE, null);
Globals.entityManager.registerAttackerEntity(rVal); Globals.entityManager.registerAttackerEntity(rVal);
break; break;
} }
} }
for(AttackMove attackMove : rawType.getAttackMoves()){
switch(attackMove.getType()){
case EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND:
rVal.putData(EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND, attackMove);
break;
}
}
rVal.putData(EntityDataStrings.IDLE_TREE, new IdleTree(rVal)); rVal.putData(EntityDataStrings.IDLE_TREE, new IdleTree(rVal));
Globals.entityManager.registerCreatureEntity(rVal); Globals.entityManager.registerCreatureEntity(rVal);
rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true); rVal.putData(EntityDataStrings.DATA_STRING_CREATURE_IS_CREATURE, true);

View File

@ -0,0 +1,30 @@
package electrosphere.game.server.creature.type;
/**
*
* @author amaterasu
*/
public class AttackMove {
String type;
String animationName;
int damageStartFrame;
int damageEndFrame;
public String getType() {
return type;
}
public String getAnimationName() {
return animationName;
}
public int getDamageStartFrame() {
return damageStartFrame;
}
public int getDamageEndFrame() {
return damageEndFrame;
}
}

View File

@ -9,6 +9,7 @@ public class CreatureType {
List<HitboxData> hitboxes; List<HitboxData> hitboxes;
List<String> tokens; List<String> tokens;
List<MovementSystem> movementSystems; List<MovementSystem> movementSystems;
List<AttackMove> attackMoves;
String modelPath; String modelPath;
public String getName() { public String getName() {
@ -34,6 +35,10 @@ public class CreatureType {
public List<MovementSystem> getMovementSystems() { public List<MovementSystem> getMovementSystems() {
return movementSystems; return movementSystems;
} }
public List<AttackMove> getAttackMoves() {
return attackMoves;
}

View File

@ -20,7 +20,7 @@ public class LoggerInterface {
loggerNetworking = new Logger(LogLevel.WARNING); loggerNetworking = new Logger(LogLevel.WARNING);
loggerFileIO = new Logger(LogLevel.WARNING); loggerFileIO = new Logger(LogLevel.WARNING);
loggerGameLogic = new Logger(LogLevel.WARNING); loggerGameLogic = new Logger(LogLevel.WARNING);
loggerRenderer = new Logger(LogLevel.DEBUG); loggerRenderer = new Logger(LogLevel.WARNING);
loggerEngine = new Logger(LogLevel.WARNING); loggerEngine = new Logger(LogLevel.WARNING);
} }
} }

View File

@ -79,7 +79,7 @@ public class RenderingEngine {
static ShaderProgram lightDepthShaderProgram; static ShaderProgram lightDepthShaderProgram;
static Framebuffer lightDepthBuffer; static Framebuffer lightDepthBuffer;
public static boolean renderHitboxes = false; public static boolean renderHitboxes = true;