AMAZING bug with attaching collidable items

This commit is contained in:
austin 2021-11-19 22:44:25 -05:00
parent 992ef0d159
commit d1c0791e48
10 changed files with 88 additions and 18 deletions

View File

@ -126,6 +126,11 @@
"isKey": true, "isKey": true,
"isMouse": false, "isMouse": false,
"keyValue": 340 "keyValue": 340
},
"interact" : {
"isKey": true,
"isMouse": false,
"keyValue": 69
} }
} }
} }

View File

@ -84,7 +84,8 @@
"SENTIENT", "SENTIENT",
"ATTACKER", "ATTACKER",
"GRAVITY", "GRAVITY",
"TARGETABLE" "TARGETABLE",
"CAN_EQUIP"
], ],
"movementSystems" : [ "movementSystems" : [
{ {
@ -238,7 +239,8 @@
"SENTIENT", "SENTIENT",
"ATTACKER", "ATTACKER",
"GRAVITY", "GRAVITY",
"TARGETABLE" "TARGETABLE",
"CAN_EQUIP"
], ],
"movementSystems" : [ "movementSystems" : [
{ {

View File

@ -6,6 +6,7 @@ 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;
import electrosphere.entity.state.equip.EquipState;
import electrosphere.entity.state.movement.GroundMovementTree; import electrosphere.entity.state.movement.GroundMovementTree;
import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState; import electrosphere.entity.state.movement.GroundMovementTree.MovementTreeState;
import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.state.movement.SprintTree;
@ -46,6 +47,7 @@ public class ControlHandler {
public static final String DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU = "inGameMainMenu"; public static final String DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU = "inGameMainMenu";
public static final String DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR = "crosshairLock"; public static final String DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR = "crosshairLock";
public static final String INPUT_CODE_SPRINT = "sprint"; public static final String INPUT_CODE_SPRINT = "sprint";
public static final String INPUT_CODE_INTERACT = "interact";
public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement"; public static final String DATA_STRING_INPUT_CODE_MENU_INCREMENT = "menuIncrement";
public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement"; public static final String DATA_STRING_INPUT_CODE_MENU_DECREMENT = "menuDecrement";
@ -131,6 +133,7 @@ public class ControlHandler {
handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(true,false,GLFW_KEY_ESCAPE)); handler.addControl(DATA_STRING_INPUT_CODE_IN_GAME_MAIN_MENU, new Control(true,false,GLFW_KEY_ESCAPE));
handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(false,true,GLFW_MOUSE_BUTTON_RIGHT)); handler.addControl(DATA_STRING_INPUT_CODE_LOCK_CROSSHAIR, new Control(false,true,GLFW_MOUSE_BUTTON_RIGHT));
handler.addControl(INPUT_CODE_SPRINT, new Control(true,false,GLFW_KEY_LEFT_SHIFT)); handler.addControl(INPUT_CODE_SPRINT, new Control(true,false,GLFW_KEY_LEFT_SHIFT));
handler.addControl(INPUT_CODE_INTERACT, new Control(true,false,GLFW_KEY_E));
/* /*
Map the menu navigation controls Map the menu navigation controls
@ -386,6 +389,28 @@ public class ControlHandler {
} }
} }
/*
Interact
*/
/*
Sprint
*/
if(controls.containsKey(INPUT_CODE_INTERACT)){
if(controls.get(INPUT_CODE_INTERACT).isIsKey() && glfwGetKey(Globals.window, controls.get(INPUT_CODE_INTERACT).getKeyValue()) == GLFW_PRESS){
if(controls.get(INPUT_CODE_INTERACT).isState() == false){
if(Globals.playerCharacter.getDataKeys().contains(EntityDataStrings.EQUIP_STATE) && Crosshair.hasTarget()){
EquipState equipState = (EquipState)Globals.playerCharacter.getData(EntityDataStrings.EQUIP_STATE);
equipState.attemptEquip(Crosshair.getTarget());
}
}
controls.get(INPUT_CODE_INTERACT).setState(true);
} else {
if(controls.get(INPUT_CODE_INTERACT).isState() == true){
}
controls.get(INPUT_CODE_INTERACT).setState(false);
}
}
/* /*
Attack Attack
*/ */

View File

@ -173,6 +173,11 @@ public class EntityDataStrings {
public static final String FOLIAGE_IS_FOLIAGE = "foliageIsFoliage"; public static final String FOLIAGE_IS_FOLIAGE = "foliageIsFoliage";
public static final String FOLIAGE_TYPE = "foliageType"; public static final String FOLIAGE_TYPE = "foliageType";
/*
Equip state
*/
public static final String EQUIP_STATE = "equipState";
/* /*
Entity categories Entity categories
*/ */

View File

@ -3,6 +3,7 @@ package electrosphere.entity.state;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.EntityDataStrings; import electrosphere.entity.EntityDataStrings;
import electrosphere.entity.EntityUtils; import electrosphere.entity.EntityUtils;
import electrosphere.entity.state.equip.EquipState;
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.data.creature.type.AttackMove; import electrosphere.game.data.creature.type.AttackMove;
@ -51,7 +52,7 @@ public class AttackTree {
} }
public void start(String attackType){ public void start(String attackType){
if(canAttack()){ if(canAttack(attackType)){
parent.putData(EntityDataStrings.ATTACK_MOVE_TYPE_ACTIVE, attackType); parent.putData(EntityDataStrings.ATTACK_MOVE_TYPE_ACTIVE, attackType);
AttackMove currentMove; AttackMove currentMove;
switch(attackType){ switch(attackType){
@ -277,11 +278,32 @@ public class AttackTree {
networkMessageQueue.add(networkMessage); networkMessageQueue.add(networkMessage);
} }
boolean canAttack(){ boolean canAttack(String attackType){
boolean rVal = true; boolean rVal = true;
if(state != AttackTreeState.IDLE){ if(state != AttackTreeState.IDLE){
rVal = false; rVal = false;
} }
if(parent.getDataKeys().contains(EntityDataStrings.EQUIP_STATE)){
EquipState equipState = (EquipState)parent.getData(EntityDataStrings.EQUIP_STATE);
if(equipState.hasEquipPrimary()){
switch(attackType){
case EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND:
break;
default:
rVal = false;
break;
}
} else {
switch(attackType){
case EntityDataStrings.ATTACK_MOVE_TYPE_MELEE_SWING_ONE_HAND:
rVal = false;
break;
default:
rVal = false;
break;
}
}
}
return rVal; return rVal;
} }

View File

@ -1,6 +1,8 @@
package electrosphere.entity.state.equip; package electrosphere.entity.state.equip;
import electrosphere.entity.Entity; import electrosphere.entity.Entity;
import electrosphere.entity.types.attach.AttachUtils;
import electrosphere.entity.types.item.ItemUtils;
/** /**
* *
@ -12,12 +14,15 @@ public class EquipState {
Entity equipPrimary; Entity equipPrimary;
public EquipState(Entity parent){ String equipPrimaryBoneName;
public EquipState(Entity parent, String equipPrimaryBoneName){
this.parent = parent; this.parent = parent;
this.equipPrimaryBoneName = equipPrimaryBoneName;
} }
public boolean hasEquipPrimary(){ public boolean hasEquipPrimary(){
return equipPrimary == null; return equipPrimary != null;
} }
public Entity getEquipPrimary() { public Entity getEquipPrimary() {
@ -28,5 +33,12 @@ public class EquipState {
this.equipPrimary = equipPrimary; this.equipPrimary = equipPrimary;
} }
public void attemptEquip(Entity toEquip){
if(!hasEquipPrimary() && ItemUtils.isItem(toEquip) && !AttachUtils.isAttached(toEquip)){
equipPrimary = toEquip;
AttachUtils.attachEntityToEntityAtBone(parent, toEquip, equipPrimaryBoneName);
}
}
} }

View File

@ -1,9 +0,0 @@
package electrosphere.entity.state.equip;
/**
*
* @author amaterasu
*/
public class EquipTree {
}

View File

@ -14,6 +14,7 @@ import electrosphere.entity.state.AttackTree;
import electrosphere.entity.state.GravityTree; import electrosphere.entity.state.GravityTree;
import electrosphere.entity.state.IdleTree; import electrosphere.entity.state.IdleTree;
import electrosphere.entity.state.collidable.CollidableTree; import electrosphere.entity.state.collidable.CollidableTree;
import electrosphere.entity.state.equip.EquipState;
import electrosphere.entity.types.collision.CollisionObjUtils; import electrosphere.entity.types.collision.CollisionObjUtils;
import electrosphere.entity.state.life.LifeState; import electrosphere.entity.state.life.LifeState;
import electrosphere.entity.state.movement.SprintTree; import electrosphere.entity.state.movement.SprintTree;
@ -155,6 +156,9 @@ public class CreatureUtils {
case "TARGETABLE": case "TARGETABLE":
Globals.entityManager.registerTargetableEntity(rVal); Globals.entityManager.registerTargetableEntity(rVal);
break; break;
case "CAN_EQUIP":
rVal.putData(EntityDataStrings.EQUIP_STATE, new EquipState(rVal,"Bone.031"));
break;
} }
} }
//add all attack moves //add all attack moves

View File

@ -94,5 +94,9 @@ public class Crosshair {
return EntityUtils.getPosition(currentTarget); return EntityUtils.getPosition(currentTarget);
} }
public static Entity getTarget(){
return currentTarget;
}
} }

View File

@ -106,9 +106,9 @@ public class ServerConnectionHandler implements Runnable {
newPlayerObject.setWorldY(Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z)); newPlayerObject.setWorldY(Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z));
Globals.dataCellManager.addPlayer(newPlayerObject); Globals.dataCellManager.addPlayer(newPlayerObject);
Globals.dataCellManager.movePlayer(newPlayerObject, Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.x), Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z)); Globals.dataCellManager.movePlayer(newPlayerObject, Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.x), Globals.serverWorldData.convertRealToChunkSpace(Globals.spawnPoint.z));
//spawn player sword // //spawn player sword
Entity sword = ItemUtils.spawnBasicItem("Katana"); // Entity sword = ItemUtils.spawnBasicItem("Katana");
AttachUtils.attachEntityToEntityAtBone(newPlayerCharacter, sword, "Bone.031"); // AttachUtils.attachEntityToEntityAtBone(newPlayerCharacter, sword, "Bone.031");
//set controller id //set controller id
CreatureUtils.setControllerPlayerId(newPlayerCharacter, playerID); CreatureUtils.setControllerPlayerId(newPlayerCharacter, playerID);
if(Globals.RUN_SERVER && Main.playerId == -1){ if(Globals.RUN_SERVER && Main.playerId == -1){