dual-hand equipping animation logic
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
All checks were successful
studiorailgun/Renderer/pipeline/head This commit looks good
This commit is contained in:
parent
cacc8dc57f
commit
056e631240
@ -253,10 +253,33 @@
|
|||||||
"equippedAnimation" : {
|
"equippedAnimation" : {
|
||||||
"nameThirdPerson" : "Idle1",
|
"nameThirdPerson" : "Idle1",
|
||||||
"nameFirstPerson" : "Idle",
|
"nameFirstPerson" : "Idle",
|
||||||
"priorityCategory" : "MODIFIER_MAX",
|
"priorityCategory" : "MODIFIER_HIGH",
|
||||||
"boneGroups" : ["handRight"]
|
"boneGroups" : ["handRight"]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"equipPointId" : "handsCombined",
|
||||||
|
"bone" : "Hand.R",
|
||||||
|
"firstPersonBone" : "hand.R",
|
||||||
|
"offsetVectorFirstPerson" : [-0.01,-0.05,-0.10],
|
||||||
|
"offsetVectorThirdPerson" : [0.02,-0.06,0],
|
||||||
|
"offsetRotationThirdPerson" : [-0.334,0.145,-0.28,0.89],
|
||||||
|
"offsetRotationFirstPerson" : [0.02,-0.977,-0.211,-0.005],
|
||||||
|
"canBlock" : true,
|
||||||
|
"equipClassWhitelist" : [
|
||||||
|
"tool",
|
||||||
|
"weapon2H",
|
||||||
|
"item"
|
||||||
|
],
|
||||||
|
"equippedAnimation" : {
|
||||||
|
"nameThirdPerson" : "HoldItemR2H",
|
||||||
|
"nameFirstPerson" : "HoldItemR2H",
|
||||||
|
"priorityCategory" : "MODIFIER_HIGH",
|
||||||
|
"boneGroups" : ["armLeft", "armRight", "handLeft", "handRight"]
|
||||||
|
},
|
||||||
|
"isCombinedPoint": true,
|
||||||
|
"subPoints" : ["handLeft","handRight"]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"equipPointId" : "Torso",
|
"equipPointId" : "Torso",
|
||||||
"bone" : "Bone",
|
"bone" : "Bone",
|
||||||
@ -301,6 +324,24 @@
|
|||||||
"itemClassEquipped" : "weapon"
|
"itemClassEquipped" : "weapon"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"variantId": "block2H",
|
||||||
|
"mainAnimation" : {
|
||||||
|
"nameThirdPerson": "HoldItemR2HBlock",
|
||||||
|
"nameFirstPerson": "HoldItemR2HBlock",
|
||||||
|
"priorityCategory": "MOVEMENT_MODIFIER",
|
||||||
|
"boneGroups" : ["armLeft", "armRight", "handLeft", "handRight"]
|
||||||
|
},
|
||||||
|
"mainAudio" : {
|
||||||
|
"audioPath" : "Audio/weapons/swordUnsheath1.ogg"
|
||||||
|
},
|
||||||
|
"defaults" : [
|
||||||
|
{
|
||||||
|
"equipPoint" : "handsCombined",
|
||||||
|
"itemClassEquipped" : "weapon2H"
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|||||||
@ -78,7 +78,7 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"equipData": {
|
"equipData": {
|
||||||
"equipClass" : "weapon"
|
"equipClass" : "weapon2H"
|
||||||
},
|
},
|
||||||
"tokens" : [
|
"tokens" : [
|
||||||
"GRAVITY",
|
"GRAVITY",
|
||||||
|
|||||||
@ -92,7 +92,7 @@ public class ClientSimulation {
|
|||||||
//
|
//
|
||||||
//update audio engine
|
//update audio engine
|
||||||
Globals.profiler.beginCpuSample("audio engine update");
|
Globals.profiler.beginCpuSample("audio engine update");
|
||||||
if(Globals.audioEngine!=null){
|
if(Globals.audioEngine != null && Globals.audioEngine.initialized() && Globals.virtualAudioSourceManager != null){
|
||||||
Globals.audioEngine.update();
|
Globals.audioEngine.update();
|
||||||
Globals.virtualAudioSourceManager.update((float)Globals.timekeeper.getSimFrameTime());
|
Globals.virtualAudioSourceManager.update((float)Globals.timekeeper.getSimFrameTime());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -188,9 +188,9 @@ public class Main {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
//create the audio context
|
//create the audio context
|
||||||
|
Globals.audioEngine = new AudioEngine();
|
||||||
if(Globals.RUN_CLIENT && !Globals.HEADLESS && Globals.RUN_AUDIO){
|
if(Globals.RUN_CLIENT && !Globals.HEADLESS && Globals.RUN_AUDIO){
|
||||||
Globals.virtualAudioSourceManager = new VirtualAudioSourceManager();
|
Globals.virtualAudioSourceManager = new VirtualAudioSourceManager();
|
||||||
Globals.audioEngine = new AudioEngine();
|
|
||||||
Globals.audioEngine.init();
|
Globals.audioEngine.init();
|
||||||
Globals.audioEngine.listAllDevices();
|
Globals.audioEngine.listAllDevices();
|
||||||
Globals.initDefaultAudioResources();
|
Globals.initDefaultAudioResources();
|
||||||
|
|||||||
@ -127,12 +127,12 @@ public class StateTransitionUtil {
|
|||||||
if(parent == Globals.playerEntity && !Globals.controlHandler.cameraIsThirdPerson() && animation != null){
|
if(parent == Globals.playerEntity && !Globals.controlHandler.cameraIsThirdPerson() && animation != null){
|
||||||
//first person
|
//first person
|
||||||
//play first person audio
|
//play first person audio
|
||||||
if(audioData != null && audioData.getAudioPath() != null){
|
if(Globals.audioEngine.initialized() && audioData != null && audioData.getAudioPath() != null){
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioData.getAudioPath(), VirtualAudioSourceType.CREATURE, false);
|
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioData.getAudioPath(), VirtualAudioSourceType.CREATURE, false);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//play third person audio
|
//play third person audio
|
||||||
if(audioData != null && audioData.getAudioPath() != null){
|
if(Globals.audioEngine.initialized() && audioData != null && audioData.getAudioPath() != null){
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioData.getAudioPath(), VirtualAudioSourceType.CREATURE, false, EntityUtils.getPosition(parent));
|
Globals.virtualAudioSourceManager.createVirtualAudioSource(audioData.getAudioPath(), VirtualAudioSourceType.CREATURE, false, EntityUtils.getPosition(parent));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -151,7 +151,7 @@ public class StateTransitionUtil {
|
|||||||
//Play animation in first person
|
//Play animation in first person
|
||||||
//
|
//
|
||||||
if(animation != null){
|
if(animation != null){
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, animation);
|
FirstPersonTree.conditionallyPlayAnimation(parent, animation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,21 +303,6 @@ public class StateTransitionUtil {
|
|||||||
//Tracks whether the animation has been played or not
|
//Tracks whether the animation has been played or not
|
||||||
boolean startedAnimation = false;
|
boolean startedAnimation = false;
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the animation priority
|
|
||||||
* @return The animation priority
|
|
||||||
*/
|
|
||||||
int getAnimationPriority(){
|
|
||||||
int priority = AnimationPriorities.getValue(AnimationPriorities.DEFAULT);
|
|
||||||
if(animation != null && animation.getPriority() != null){
|
|
||||||
priority = animation.getPriority();
|
|
||||||
} else if(getAnimation != null && getAnimation.get().getPriority() != null){
|
|
||||||
priority = getAnimation.get().getPriority();
|
|
||||||
}
|
|
||||||
return priority;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -246,7 +246,7 @@ public class ClientAttackTree implements BehaviorTree {
|
|||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(
|
FirstPersonTree.conditionallyPlayAnimation(
|
||||||
Globals.firstPersonEntity,
|
parent,
|
||||||
currentMove.getAnimationWindup()
|
currentMove.getAnimationWindup()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -261,7 +261,7 @@ public class ClientAttackTree implements BehaviorTree {
|
|||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(
|
FirstPersonTree.conditionallyPlayAnimation(
|
||||||
Globals.firstPersonEntity,
|
parent,
|
||||||
currentMove.getAnimationHold()
|
currentMove.getAnimationHold()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -276,7 +276,7 @@ public class ClientAttackTree implements BehaviorTree {
|
|||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(
|
FirstPersonTree.conditionallyPlayAnimation(
|
||||||
Globals.firstPersonEntity,
|
parent,
|
||||||
currentMove.getAnimationAttack()
|
currentMove.getAnimationAttack()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import electrosphere.entity.btree.BehaviorTree;
|
|||||||
import electrosphere.entity.btree.StateTransitionUtil;
|
import electrosphere.entity.btree.StateTransitionUtil;
|
||||||
import electrosphere.entity.btree.StateTransitionUtil.StateTransitionUtilItem;
|
import electrosphere.entity.btree.StateTransitionUtil.StateTransitionUtilItem;
|
||||||
import electrosphere.game.data.creature.type.block.BlockSystem;
|
import electrosphere.game.data.creature.type.block.BlockSystem;
|
||||||
|
import electrosphere.game.data.creature.type.block.BlockVariant;
|
||||||
import electrosphere.net.synchronization.BehaviorTreeIdEnums;
|
import electrosphere.net.synchronization.BehaviorTreeIdEnums;
|
||||||
|
|
||||||
import electrosphere.net.synchronization.annotation.SyncedField;
|
import electrosphere.net.synchronization.annotation.SyncedField;
|
||||||
@ -55,20 +56,62 @@ public class ClientBlockTree implements BehaviorTree {
|
|||||||
this.stateTransitionUtil = StateTransitionUtil.create(parent, false, new StateTransitionUtilItem[]{
|
this.stateTransitionUtil = StateTransitionUtil.create(parent, false, new StateTransitionUtilItem[]{
|
||||||
StateTransitionUtilItem.create(
|
StateTransitionUtilItem.create(
|
||||||
BlockState.WIND_UP,
|
BlockState.WIND_UP,
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getWindUpAnimation();},
|
() -> {
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getWindUpAudio();},
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getWindUpAnimation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() -> {
|
||||||
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getWindUpAudio();
|
||||||
|
}
|
||||||
|
},
|
||||||
null
|
null
|
||||||
),
|
),
|
||||||
StateTransitionUtilItem.create(
|
StateTransitionUtilItem.create(
|
||||||
BlockState.BLOCKING,
|
BlockState.BLOCKING,
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getMainAnimation();},
|
() -> {
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getMainAudio();},
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getMainAnimation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() -> {
|
||||||
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getMainAudio();
|
||||||
|
}
|
||||||
|
},
|
||||||
null
|
null
|
||||||
),
|
),
|
||||||
StateTransitionUtilItem.create(
|
StateTransitionUtilItem.create(
|
||||||
BlockState.COOLDOWN,
|
BlockState.COOLDOWN,
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getCooldownAnimation();},
|
() -> {
|
||||||
() -> {return this.blockSystem.getBlockVariant(this.currentBlockVariant).getCooldownAudio();},
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getCooldownAnimation();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
() -> {
|
||||||
|
BlockVariant variant = this.blockSystem.getBlockVariant(this.currentBlockVariant);
|
||||||
|
if(variant == null){
|
||||||
|
return null;
|
||||||
|
} else {
|
||||||
|
return variant.getCooldownAudio();
|
||||||
|
}
|
||||||
|
},
|
||||||
null
|
null
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -145,8 +145,8 @@ public class FirstPersonTree implements BehaviorTree {
|
|||||||
* @param priority The priority of the animation
|
* @param priority The priority of the animation
|
||||||
*/
|
*/
|
||||||
public static void conditionallyPlayAnimation(Entity entity, String animationName, int priority){
|
public static void conditionallyPlayAnimation(Entity entity, String animationName, int priority){
|
||||||
if(entity != null && FirstPersonTree.hasTree(entity)){
|
if(entity != null && entity == Globals.playerEntity && FirstPersonTree.hasTree(Globals.firstPersonEntity)){
|
||||||
FirstPersonTree.getTree(entity).playAnimation(animationName, priority);
|
FirstPersonTree.getTree(Globals.firstPersonEntity).playAnimation(animationName, priority);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -156,8 +156,8 @@ public class FirstPersonTree implements BehaviorTree {
|
|||||||
* @param animationName the name of the animation
|
* @param animationName the name of the animation
|
||||||
*/
|
*/
|
||||||
public static void conditionallyPlayAnimation(Entity entity, TreeDataAnimation animation){
|
public static void conditionallyPlayAnimation(Entity entity, TreeDataAnimation animation){
|
||||||
if(entity != null && FirstPersonTree.hasTree(entity)){
|
if(entity != null && entity == Globals.playerEntity && FirstPersonTree.hasTree(Globals.firstPersonEntity)){
|
||||||
FirstPersonTree.getTree(entity).playAnimation(animation);
|
FirstPersonTree.getTree(Globals.firstPersonEntity).playAnimation(animation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -16,10 +16,12 @@ import electrosphere.entity.EntityDataStrings;
|
|||||||
import electrosphere.entity.EntityTags;
|
import electrosphere.entity.EntityTags;
|
||||||
import electrosphere.entity.EntityUtils;
|
import electrosphere.entity.EntityUtils;
|
||||||
import electrosphere.entity.btree.BehaviorTree;
|
import electrosphere.entity.btree.BehaviorTree;
|
||||||
|
import electrosphere.entity.state.client.firstPerson.FirstPersonTree;
|
||||||
import electrosphere.entity.state.gravity.GravityUtils;
|
import electrosphere.entity.state.gravity.GravityUtils;
|
||||||
import electrosphere.entity.types.attach.AttachUtils;
|
import electrosphere.entity.types.attach.AttachUtils;
|
||||||
import electrosphere.entity.types.creature.CreatureUtils;
|
import electrosphere.entity.types.creature.CreatureUtils;
|
||||||
import electrosphere.entity.types.item.ItemUtils;
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
|
import electrosphere.game.data.common.TreeDataAnimation;
|
||||||
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
||||||
import electrosphere.game.data.item.type.EquipWhitelist;
|
import electrosphere.game.data.item.type.EquipWhitelist;
|
||||||
import electrosphere.logger.LoggerInterface;
|
import electrosphere.logger.LoggerInterface;
|
||||||
@ -405,9 +407,23 @@ public class ClientEquipState implements BehaviorTree {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void simulate(float deltaTime) {
|
public void simulate(float deltaTime) {
|
||||||
|
Actor thirdPersonActor = EntityUtils.getActor(parent);
|
||||||
|
//play animations for equip points that have items equipped
|
||||||
|
for(EquipPoint point : this.equipPoints){
|
||||||
|
if(this.hasEquippedAtPoint(point.getEquipPointId()) && point.getEquippedAnimation() != null){
|
||||||
|
TreeDataAnimation animation = point.getEquippedAnimation();
|
||||||
|
//play third person
|
||||||
|
if(!thirdPersonActor.isPlayingAnimation() || !thirdPersonActor.isPlayingAnimation(animation)){
|
||||||
|
if(animation != null){
|
||||||
|
thirdPersonActor.playAnimation(animation,true);
|
||||||
|
}
|
||||||
|
thirdPersonActor.incrementAnimationTime(0.0001);
|
||||||
|
}
|
||||||
|
|
||||||
|
//play first person
|
||||||
|
FirstPersonTree.conditionallyPlayAnimation(parent, animation);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -31,6 +31,7 @@ import electrosphere.game.data.creature.type.block.BlockSystem;
|
|||||||
import electrosphere.game.data.creature.type.block.BlockVariant;
|
import electrosphere.game.data.creature.type.block.BlockVariant;
|
||||||
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
||||||
import electrosphere.game.data.item.type.EquipWhitelist;
|
import electrosphere.game.data.item.type.EquipWhitelist;
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
import electrosphere.net.parser.net.message.InventoryMessage;
|
import electrosphere.net.parser.net.message.InventoryMessage;
|
||||||
import electrosphere.net.parser.net.message.NetworkMessage;
|
import electrosphere.net.parser.net.message.NetworkMessage;
|
||||||
import electrosphere.net.server.player.Player;
|
import electrosphere.net.server.player.Player;
|
||||||
@ -411,7 +412,11 @@ public class ServerEquipState implements BehaviorTree {
|
|||||||
|
|
||||||
//TODO: refactor to allow sending more than one variant at a time
|
//TODO: refactor to allow sending more than one variant at a time
|
||||||
//ie if you have two items equipped and you want to block with both
|
//ie if you have two items equipped and you want to block with both
|
||||||
blockTree.setCurrentBlockVariant(blockVariant.getVariantId());
|
if(blockVariant != null){
|
||||||
|
blockTree.setCurrentBlockVariant(blockVariant.getVariantId());
|
||||||
|
} else {
|
||||||
|
LoggerInterface.loggerEngine.ERROR(new IllegalStateException("Equipped item to equip point that does not have assigned block variant!!"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -93,7 +93,7 @@ public class ClientIdleTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(idleData.getAnimation(),true);
|
entityActor.playAnimation(idleData.getAnimation(),true);
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, idleData.getAnimation());
|
FirstPersonTree.conditionallyPlayAnimation(parent, idleData.getAnimation());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NOT_IDLE:
|
case NOT_IDLE:
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import java.util.Map;
|
|||||||
import electrosphere.entity.Entity;
|
import electrosphere.entity.Entity;
|
||||||
import electrosphere.entity.types.item.ItemUtils;
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
|
||||||
public class RelationalInventoryState {
|
public class RelationalInventoryState {
|
||||||
|
|
||||||
@ -80,6 +81,12 @@ public class RelationalInventoryState {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the inventory can equip the item to the given slot
|
||||||
|
* @param item The item
|
||||||
|
* @param slot The slot
|
||||||
|
* @return true if can equip, false otherwise
|
||||||
|
*/
|
||||||
public boolean canEquipItemToSlot(Entity item, String slot){
|
public boolean canEquipItemToSlot(Entity item, String slot){
|
||||||
String itemClass = ItemUtils.getEquipClass(item);
|
String itemClass = ItemUtils.getEquipClass(item);
|
||||||
if(slotWhitelists.get(slot).contains(itemClass)){
|
if(slotWhitelists.get(slot).contains(itemClass)){
|
||||||
@ -88,8 +95,62 @@ public class RelationalInventoryState {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets an equip point from a given slot name
|
||||||
|
* @param slot The name of the slot
|
||||||
|
* @return The equip point
|
||||||
|
*/
|
||||||
public EquipPoint getEquipPointFromSlot(String slot){
|
public EquipPoint getEquipPointFromSlot(String slot){
|
||||||
return equipPoints.get(slot);
|
return equipPoints.get(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets whether the item can equipped to a combined slot that contains the singular slot provided
|
||||||
|
* @param item The item
|
||||||
|
* @param slot The singular (non-combined) slot
|
||||||
|
* @return true if there is a combined slot that includes slot which can equip the item, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean canEquipItemToCombinedSlot(Entity item, String slot){
|
||||||
|
String itemClass = ItemUtils.getEquipClass(item);
|
||||||
|
EquipPoint singlePoint = getEquipPointFromSlot(slot);
|
||||||
|
EquipPoint combinedPoint = null;
|
||||||
|
for(String currentPointNames : this.equipPoints.keySet()){
|
||||||
|
EquipPoint currentPoint = this.equipPoints.get(currentPointNames);
|
||||||
|
if(currentPoint.isCombinedPoint() && currentPoint.getSubPoints().contains(singlePoint.getEquipPointId())){
|
||||||
|
combinedPoint = currentPoint;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(combinedPoint != null){
|
||||||
|
for(String equipClassWhitelisted : combinedPoint.getEquipClassWhitelist()){
|
||||||
|
if(equipClassWhitelisted.equalsIgnoreCase(itemClass) && !equipClassWhitelisted.equals(itemClass)){
|
||||||
|
String message = "Combined equip point passed over because the item class for the equip point does not match the item's defined item class\n" +
|
||||||
|
"However, the difference is only in capitalization! Equip point defined class:" + equipClassWhitelisted + " Item-defined class:" + itemClass;
|
||||||
|
;
|
||||||
|
LoggerInterface.loggerEngine.WARNING(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(combinedPoint.getEquipClassWhitelist().contains(itemClass)){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the combined point that contains this point
|
||||||
|
* @param slot The singular (non-combined) slot
|
||||||
|
* @return The combined point if it exists, null otherwise
|
||||||
|
*/
|
||||||
|
public EquipPoint getCombinedPoint(String slot){
|
||||||
|
EquipPoint singlePoint = getEquipPointFromSlot(slot);
|
||||||
|
for(String currentPointNames : this.equipPoints.keySet()){
|
||||||
|
EquipPoint currentPoint = this.equipPoints.get(currentPointNames);
|
||||||
|
if(currentPoint.isCombinedPoint() && currentPoint.getSubPoints().contains(singlePoint.getEquipPointId())){
|
||||||
|
return currentPoint;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -97,7 +97,7 @@ public class FallTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(fallMovementSystem.getLandState().getAnimation().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER));
|
entityActor.playAnimation(fallMovementSystem.getLandState().getAnimation().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER));
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, fallMovementSystem.getLandState().getAnimation());
|
FirstPersonTree.conditionallyPlayAnimation(parent, fallMovementSystem.getLandState().getAnimation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -298,7 +298,7 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationStartup().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
FirstPersonTree.conditionallyPlayAnimation(parent, groundMovementData.getAnimationStartup().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
}
|
}
|
||||||
//run startup code
|
//run startup code
|
||||||
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
velocity = velocity + acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
@ -332,7 +332,7 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationLoop().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
FirstPersonTree.conditionallyPlayAnimation(parent, groundMovementData.getAnimationLoop().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
}
|
}
|
||||||
if(velocity != maxNaturalVelocity){
|
if(velocity != maxNaturalVelocity){
|
||||||
velocity = maxNaturalVelocity;
|
velocity = maxNaturalVelocity;
|
||||||
@ -360,7 +360,7 @@ public class ClientGroundMovementTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
entityActor.playAnimation(animationToPlay,AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, groundMovementData.getAnimationWindDown().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
FirstPersonTree.conditionallyPlayAnimation(parent, groundMovementData.getAnimationWindDown().getNameFirstPerson(), AnimationPriorities.getValue(AnimationPriorities.CORE_MOVEMENT));
|
||||||
}
|
}
|
||||||
//velocity stuff
|
//velocity stuff
|
||||||
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
velocity = velocity - acceleration * (float)Globals.timekeeper.getSimFrameTime();
|
||||||
|
|||||||
@ -96,7 +96,7 @@ public class ClientJumpTree implements BehaviorTree {
|
|||||||
entityActor.playAnimation(jumpData.getAnimationJump().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER));
|
entityActor.playAnimation(jumpData.getAnimationJump().getNameThirdPerson(),AnimationPriorities.getValue(AnimationPriorities.MOVEMENT_MODIFIER));
|
||||||
entityActor.incrementAnimationTime(0.0001);
|
entityActor.incrementAnimationTime(0.0001);
|
||||||
}
|
}
|
||||||
FirstPersonTree.conditionallyPlayAnimation(Globals.firstPersonEntity, jumpData.getAnimationJump());
|
FirstPersonTree.conditionallyPlayAnimation(parent, jumpData.getAnimationJump());
|
||||||
}
|
}
|
||||||
//stop body falling if it is
|
//stop body falling if it is
|
||||||
DBody body = PhysicsEntityUtils.getDBody(parent);
|
DBody body = PhysicsEntityUtils.getDBody(parent);
|
||||||
|
|||||||
@ -2,6 +2,8 @@ package electrosphere.game.data.creature.type.block;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import electrosphere.logger.LoggerInterface;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores data related to an entity blocking attacks
|
* Stores data related to an entity blocking attacks
|
||||||
*/
|
*/
|
||||||
@ -10,6 +12,7 @@ public class BlockSystem {
|
|||||||
//blocking with a weapon equipped in the right hand
|
//blocking with a weapon equipped in the right hand
|
||||||
//NOTE: the names provided here should line up with the actual field names on this object
|
//NOTE: the names provided here should line up with the actual field names on this object
|
||||||
public static final String BLOCK_VARIANT_WEAPON_RIGHT = "blockWeaponRight";
|
public static final String BLOCK_VARIANT_WEAPON_RIGHT = "blockWeaponRight";
|
||||||
|
public static final String BLOCK_VARIANT_WEAPON_2H = "block2H";
|
||||||
|
|
||||||
//the list of block variants
|
//the list of block variants
|
||||||
List<BlockVariant> variants;
|
List<BlockVariant> variants;
|
||||||
@ -45,6 +48,12 @@ public class BlockSystem {
|
|||||||
public BlockVariant getVariantForPointWithItem(String equipPoint, String itemClass){
|
public BlockVariant getVariantForPointWithItem(String equipPoint, String itemClass){
|
||||||
for(BlockVariant variant : variants){
|
for(BlockVariant variant : variants){
|
||||||
for(VariantDefaults variantDefault : variant.getDefaults()){
|
for(VariantDefaults variantDefault : variant.getDefaults()){
|
||||||
|
if(variantDefault.itemClassEquipped.equalsIgnoreCase(itemClass) && !variantDefault.itemClassEquipped.equals(itemClass)){
|
||||||
|
String message = "Block variant passed over because the item class for the block variant does not match the item's defined item class\n" +
|
||||||
|
"However, the difference is only in capitalization! Block-variant defined class:" + variantDefault.itemClassEquipped + " Item-defined class:" + itemClass;
|
||||||
|
;
|
||||||
|
LoggerInterface.loggerEngine.WARNING(message);
|
||||||
|
}
|
||||||
if(variantDefault.equipPoint.equals(equipPoint) && variantDefault.itemClassEquipped.equals(itemClass)){
|
if(variantDefault.equipPoint.equals(equipPoint) && variantDefault.itemClassEquipped.equals(itemClass)){
|
||||||
return variant;
|
return variant;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,45 @@ public class EquipPoint {
|
|||||||
//The animation to play when this equip point has an item equipped (ie if a hand is grasping something)
|
//The animation to play when this equip point has an item equipped (ie if a hand is grasping something)
|
||||||
TreeDataAnimation equippedAnimation;
|
TreeDataAnimation equippedAnimation;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* COMBINED EQUIP POINTS
|
||||||
|
*
|
||||||
|
* The idea of a combined equip point is that it is a combination of multiple single equip points.
|
||||||
|
* Think of equipping an item in both the left and right hands of a character at once (ie a two handed sword).
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates whether this is a conbined equip point or not
|
||||||
|
*/
|
||||||
|
boolean isCombinedPoint;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The list of points that are contained within a combined equip point
|
||||||
|
*/
|
||||||
|
List<String> subPoints;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the equip point id
|
* Gets the equip point id
|
||||||
* @return the id of the equip point
|
* @return the id of the equip point
|
||||||
@ -153,4 +192,20 @@ public class EquipPoint {
|
|||||||
return equippedAnimation;
|
return equippedAnimation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether this is a combined equip point or not
|
||||||
|
* @return true if this is a combined equip point, false otherwise
|
||||||
|
*/
|
||||||
|
public boolean isCombinedPoint(){
|
||||||
|
return this.isCombinedPoint;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the list of sub point ids that are contained within a combined point
|
||||||
|
* @return The list of sub point ids
|
||||||
|
*/
|
||||||
|
public List<String> getSubPoints(){
|
||||||
|
return this.subPoints;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import electrosphere.entity.state.inventory.InventoryUtils;
|
|||||||
import electrosphere.entity.state.inventory.RelationalInventoryState;
|
import electrosphere.entity.state.inventory.RelationalInventoryState;
|
||||||
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
import electrosphere.entity.state.inventory.UnrelationalInventoryState;
|
||||||
import electrosphere.entity.types.item.ItemUtils;
|
import electrosphere.entity.types.item.ItemUtils;
|
||||||
|
import electrosphere.game.data.creature.type.equip.EquipPoint;
|
||||||
import electrosphere.menu.WindowStrings;
|
import electrosphere.menu.WindowStrings;
|
||||||
import electrosphere.menu.WindowUtils;
|
import electrosphere.menu.WindowUtils;
|
||||||
import electrosphere.renderer.ui.elements.Div;
|
import electrosphere.renderer.ui.elements.Div;
|
||||||
@ -275,128 +276,141 @@ public class MenuGeneratorsInventory {
|
|||||||
|
|
||||||
List<String> slots = inventory.getSlots();
|
List<String> slots = inventory.getSlots();
|
||||||
int numSlots = slots.size();
|
int numSlots = slots.size();
|
||||||
|
EquipPoint equipPoint = null;
|
||||||
// int numRows = (numSlots / 2) + (numSlots % 2 == 1 ? 1 : 0);
|
// int numRows = (numSlots / 2) + (numSlots % 2 == 1 ? 1 : 0);
|
||||||
|
|
||||||
int incrementer = 0;
|
int incrementer = 0;
|
||||||
for(int i = 0; i < numSlots; i++){
|
for(int i = 0; i < numSlots; i++){
|
||||||
String texturePath = "Textures/icons/itemIconEmpty.png";
|
String texturePath = "Textures/icons/itemIconEmpty.png";
|
||||||
boolean hasItem = false;
|
boolean hasItem = false;
|
||||||
if(inventory.getItemSlot(slots.get(i)) != null){
|
equipPoint = inventory.getEquipPointFromSlot(slots.get(i));
|
||||||
Entity currentItem = inventory.getItemSlot(slots.get(i));
|
if(!equipPoint.isCombinedPoint()){
|
||||||
//get texture path from item
|
if(inventory.getItemSlot(slots.get(i)) != null){
|
||||||
texturePath = ItemUtils.getItemIcon(currentItem);
|
Entity currentItem = inventory.getItemSlot(slots.get(i));
|
||||||
//flag that this isn't an empty slot
|
//get texture path from item
|
||||||
hasItem = true;
|
texturePath = ItemUtils.getItemIcon(currentItem);
|
||||||
}
|
//flag that this isn't an empty slot
|
||||||
if(!Globals.assetManager.hasLoadedTexture(texturePath)){
|
hasItem = true;
|
||||||
Globals.assetManager.addTexturePathtoQueue(texturePath);
|
}
|
||||||
}
|
if(!Globals.assetManager.hasLoadedTexture(texturePath)){
|
||||||
int panelWidth = 50;
|
Globals.assetManager.addTexturePathtoQueue(texturePath);
|
||||||
int panelHeight = 50;
|
}
|
||||||
int posX = 20;
|
int panelWidth = 50;
|
||||||
if((incrementer % 2) == 1){
|
int panelHeight = 50;
|
||||||
posX = posX + 400;
|
int posX = 20;
|
||||||
}
|
if((incrementer % 2) == 1){
|
||||||
int posY = 60 + (i / 2 * (panelHeight + slotSpacing));
|
posX = posX + 400;
|
||||||
int itemPosX = posX;
|
}
|
||||||
int itemPosY = posY;
|
int posY = 60 + (i / 2 * (panelHeight + slotSpacing));
|
||||||
ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath);
|
int itemPosX = posX;
|
||||||
panel.setAbsolutePosition(true);
|
int itemPosY = posY;
|
||||||
if(hasItem == true){
|
ImagePanel panel = new ImagePanel(posX,posY,panelWidth,panelHeight,texturePath);
|
||||||
int itemId = i;
|
panel.setAbsolutePosition(true);
|
||||||
panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){
|
if(hasItem == true){
|
||||||
// System.out.println("Drag start");
|
int itemId = i;
|
||||||
Globals.dragSourceInventory = inventory;
|
panel.setOnDragStart(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
Globals.draggedItem = inventory.getItemSlot(slots.get(itemId));
|
// System.out.println("Drag start");
|
||||||
ContainerElement container = (ContainerElement)panel.getParent();
|
Globals.dragSourceInventory = inventory;
|
||||||
container.removeChild(panel);
|
Globals.draggedItem = inventory.getItemSlot(slots.get(itemId));
|
||||||
WindowUtils.pushItemIconToItemWindow(panel);
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
//play sound effect
|
container.removeChild(panel);
|
||||||
if(Globals.virtualAudioSourceManager != null){
|
WindowUtils.pushItemIconToItemWindow(panel);
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
//play sound effect
|
||||||
}
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
return false;
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventoryGrabItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
}});
|
|
||||||
panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){
|
|
||||||
// System.out.println("Drag");
|
|
||||||
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
|
||||||
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
|
||||||
return false;
|
|
||||||
}});
|
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
|
||||||
if(panel.getParent() != div){
|
|
||||||
if(panel.getParent() != null){
|
|
||||||
ContainerElement container = (ContainerElement)panel.getParent();
|
|
||||||
container.removeChild(panel);
|
|
||||||
}
|
}
|
||||||
div.addChild(panel);
|
return false;
|
||||||
Globals.elementManager.fireEvent(event, panel.getAbsoluteX(), panel.getAbsoluteY());
|
}});
|
||||||
}
|
panel.setOnDrag(new DragEventCallback() {public boolean execute(DragEvent event){
|
||||||
panel.setPositionX(div.getAbsoluteX() + itemPosX);
|
// System.out.println("Drag");
|
||||||
panel.setPositionY(div.getAbsoluteY() + itemPosY);
|
panel.setPositionX(event.getCurrentX() - panelWidth / 2);
|
||||||
return false;
|
panel.setPositionY(event.getCurrentY() - panelHeight / 2);
|
||||||
}});
|
return false;
|
||||||
|
}});
|
||||||
} else {
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
int itemId = i;
|
if(panel.getParent() != div){
|
||||||
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
if(panel.getParent() != null){
|
||||||
// panel.setPositionX(posX);
|
ContainerElement container = (ContainerElement)panel.getParent();
|
||||||
// panel.setPositionY(posY);
|
container.removeChild(panel);
|
||||||
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
|
||||||
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
|
||||||
Entity item = Globals.draggedItem;
|
|
||||||
if(inventory.canEquipItemToSlot(item, slots.get(itemId))){
|
|
||||||
//fire equip event to equip state
|
|
||||||
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
|
||||||
equipState.commandAttemptEquip(item,inventory.getEquipPointFromSlot(slots.get(itemId)));
|
|
||||||
//play sound effect
|
|
||||||
if(Globals.virtualAudioSourceManager != null){
|
|
||||||
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
|
||||||
}
|
}
|
||||||
|
div.addChild(panel);
|
||||||
|
Globals.elementManager.fireEvent(event, panel.getAbsoluteX(), panel.getAbsoluteY());
|
||||||
}
|
}
|
||||||
//update ui
|
panel.setPositionX(div.getAbsoluteX() + itemPosX);
|
||||||
Globals.dragSourceInventory = null;
|
panel.setPositionY(div.getAbsoluteY() + itemPosY);
|
||||||
Globals.draggedItem = null;
|
return false;
|
||||||
//clear item container ui
|
}});
|
||||||
WindowUtils.cleanItemDraggingWindow();
|
|
||||||
//rerender both inventories
|
|
||||||
//re-render inventory
|
|
||||||
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
|
||||||
//re-render inventory
|
|
||||||
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory));
|
|
||||||
}
|
|
||||||
//now the fun begins :)
|
|
||||||
//if transfer item
|
|
||||||
// remove item from current inventory
|
|
||||||
// place item in new inventory
|
|
||||||
// trigger recreation of the menu
|
|
||||||
//if drop item
|
|
||||||
// remove item from current inventory
|
|
||||||
// create item in world in front of character
|
|
||||||
// trigger recreation of the menu
|
|
||||||
//if neither of above
|
|
||||||
// replace item icon position to origin
|
|
||||||
// System.out.println("Release drag");
|
|
||||||
//rebuild inventory windows
|
|
||||||
return false;
|
|
||||||
}});
|
|
||||||
}
|
|
||||||
div.addChild(panel);
|
|
||||||
|
|
||||||
//create the slot text
|
} else {
|
||||||
posX = 80;
|
int itemId = i;
|
||||||
if((incrementer % 2) == 1){
|
panel.setOnDragRelease(new DragEventCallback(){public boolean execute(DragEvent event){
|
||||||
posX = posX + 190;
|
// panel.setPositionX(posX);
|
||||||
}
|
// panel.setPositionY(posY);
|
||||||
posY = posY + 15;
|
if(Globals.dragSourceInventory instanceof UnrelationalInventoryState){
|
||||||
Label slotText = new Label(0.7f);
|
UnrelationalInventoryState sourceInventory = (UnrelationalInventoryState) Globals.dragSourceInventory;
|
||||||
slotText.setText(slots.get(i));
|
Entity item = Globals.draggedItem;
|
||||||
slotText.setPositionX(posX);
|
if(inventory.canEquipItemToSlot(item, slots.get(itemId))){
|
||||||
slotText.setPositionY(posY);
|
//fire equip event to equip state
|
||||||
slotText.setAbsolutePosition(true);
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
div.addChild(slotText);
|
equipState.commandAttemptEquip(item,inventory.getEquipPointFromSlot(slots.get(itemId)));
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
} else if(inventory.canEquipItemToCombinedSlot(item, slots.get(itemId))){
|
||||||
|
EquipPoint combinedPoint = inventory.getCombinedPoint(slots.get(itemId));
|
||||||
|
//fire equip event to equip state
|
||||||
|
ClientEquipState equipState = ClientEquipState.getEquipState(Globals.playerEntity);
|
||||||
|
equipState.commandAttemptEquip(item,combinedPoint);
|
||||||
|
//play sound effect
|
||||||
|
if(Globals.virtualAudioSourceManager != null){
|
||||||
|
Globals.virtualAudioSourceManager.createVirtualAudioSource("/Audio/inventorySlotItem.ogg", VirtualAudioSourceType.UI, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//update ui
|
||||||
|
Globals.dragSourceInventory = null;
|
||||||
|
Globals.draggedItem = null;
|
||||||
|
//clear item container ui
|
||||||
|
WindowUtils.cleanItemDraggingWindow();
|
||||||
|
//rerender both inventories
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowStrings.WINDOW_CHARACTER, MenuGeneratorsInventory.createCharacterInventoryMenu(inventory));
|
||||||
|
//re-render inventory
|
||||||
|
WindowUtils.replaceWindow(WindowUtils.getInventoryWindowID(sourceInventory.getId()), MenuGeneratorsInventory.createNaturalInventoryMenu(sourceInventory));
|
||||||
|
}
|
||||||
|
//now the fun begins :)
|
||||||
|
//if transfer item
|
||||||
|
// remove item from current inventory
|
||||||
|
// place item in new inventory
|
||||||
|
// trigger recreation of the menu
|
||||||
|
//if drop item
|
||||||
|
// remove item from current inventory
|
||||||
|
// create item in world in front of character
|
||||||
|
// trigger recreation of the menu
|
||||||
|
//if neither of above
|
||||||
|
// replace item icon position to origin
|
||||||
|
// System.out.println("Release drag");
|
||||||
|
//rebuild inventory windows
|
||||||
|
return false;
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
div.addChild(panel);
|
||||||
|
|
||||||
incrementer++;
|
//create the slot text
|
||||||
|
posX = 80;
|
||||||
|
if((incrementer % 2) == 1){
|
||||||
|
posX = posX + 190;
|
||||||
|
}
|
||||||
|
posY = posY + 15;
|
||||||
|
Label slotText = new Label(0.7f);
|
||||||
|
slotText.setText(slots.get(i));
|
||||||
|
slotText.setPositionX(posX);
|
||||||
|
slotText.setPositionY(posY);
|
||||||
|
slotText.setAbsolutePosition(true);
|
||||||
|
div.addChild(slotText);
|
||||||
|
|
||||||
|
incrementer++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return rVal;
|
return rVal;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user