store damage counter in item.json

This commit is contained in:
austin 2022-04-27 17:58:35 -04:00
parent e303ac4a03
commit 2764522b16
8 changed files with 76 additions and 7 deletions

View File

@ -8,6 +8,7 @@
"modelPath" : "Models/katana1alt.fbx",
"weaponData" : {
"weaponClass" : "sword1h",
"damage" : 10,
"hitboxes" : [
{
"type": "hit",
@ -51,6 +52,7 @@
"modelPath": "Models/bow1.fbx",
"weaponData" : {
"weaponClass" : "bow2h",
"damage" : 10,
"projectileModel" : "Models/arrow1.fbx"
},
"tokens" : [

View File

@ -154,6 +154,12 @@
"positionZ"
]
},
{
"messageName" : "Kill",
"data" : [
"entityID"
]
},
{
"messageName" : "Destroy",
"data" : [

View File

@ -1,7 +1,12 @@
package electrosphere.entity.state.life;
import org.joml.Vector3d;
import electrosphere.entity.Entity;
import electrosphere.entity.EntityUtils;
import electrosphere.game.data.creature.type.HealthSystem;
import electrosphere.main.Globals;
import electrosphere.net.parser.net.message.EntityMessage;
public class LifeState {
@ -88,6 +93,16 @@ public class LifeState {
if(lifeCurrent < 0){
lifeCurrent = 0;
isAlive = false;
if(Globals.RUN_SERVER){
Vector3d position = EntityUtils.getPosition(parent);
Globals.dataCellManager.sendNetworkMessageToChunk(
EntityMessage.constructKillMessage(
parent.getId()
),
Globals.serverWorldData.convertRealToChunkSpace(position.x),
Globals.serverWorldData.convertRealToChunkSpace(position.z)
);
}
} else {
iFrameCurrent = iFrameMaxCount;
}

View File

@ -121,14 +121,15 @@ public class HitboxUtils {
//if the entity is attached to is an item, we need to compare with the parent of the item
//to make sure you don't stab yourself for instance
boolean isItem = hitboxParent.containsKey(EntityDataStrings.ITEM_IS_ITEM);
boolean isItem = ItemUtils.isItem(hitboxParent);//hitboxParent.containsKey(EntityDataStrings.ITEM_IS_ITEM);
Entity hitboxAttachParent = AttachUtils.getParent(hitboxParent);
if(isItem){
if(hitboxAttachParent != hurtboxParent){
LifeState lifeState = LifeUtils.getLifeState(hurtboxParent);
int currentHp = lifeState.getLifeCurrent();
LifeUtils.getLifeState(hurtboxParent).damage(20);
int damage = ItemUtils.getWeaponDataRaw(hitboxParent).getDamage();
LifeUtils.getLifeState(hurtboxParent).damage(damage);
if(currentHp > lifeState.getLifeCurrent()){
Vector3d hurtboxPos = EntityUtils.getPosition(hurtbox);
ParticleEffects.spawnBloodsplats(new Vector3f((float)hurtboxPos.x,(float)hurtboxPos.y,(float)hurtboxPos.z).add(0,0.1f,0), 20, 40);
@ -139,7 +140,8 @@ public class HitboxUtils {
}
}
} else {
LifeUtils.getLifeState(hurtboxParent).damage(20);
int damage = ItemUtils.getWeaponDataRaw(hitboxParent).getDamage();
LifeUtils.getLifeState(hurtboxParent).damage(damage);
if(!LifeUtils.getLifeState(hurtboxParent).isIsAlive()){
EntityUtils.getPosition(hurtboxParent).set(Globals.spawnPoint);
LifeUtils.getLifeState(hurtboxParent).revive();

View File

@ -8,6 +8,7 @@ public class WeaponData {
String weaponClass;
List<HitboxData> hitboxes;
int damage;
String projectileModel;
public String getWeaponClass(){
@ -22,4 +23,8 @@ public class WeaponData {
return projectileModel;
}
public int getDamage(){
return damage;
}
}

View File

@ -13,6 +13,7 @@ public class EntityMessage extends NetworkMessage {
MOVEUPDATE,
ATTACKUPDATE,
MOVE,
KILL,
DESTROY,
SETBEHAVIORTREE,
SETPROPERTY,
@ -240,6 +241,12 @@ public class EntityMessage extends NetworkMessage {
} else {
return false;
}
case TypeBytes.ENTITY_MESSAGE_TYPE_KILL:
if(byteStream.size() >= TypeBytes.ENTITY_MESSAGE_TYPE_KILL_SIZE){
return true;
} else {
return false;
}
case TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY:
if(byteStream.size() >= TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY_SIZE){
return true;
@ -452,6 +459,20 @@ public class EntityMessage extends NetworkMessage {
return rVal;
}
public static EntityMessage parseKillMessage(List<Byte> byteStream){
EntityMessage rVal = new EntityMessage(EntityMessageType.KILL);
stripPacketHeader(byteStream);
rVal.setentityID(ByteStreamUtils.popIntFromByteQueue(byteStream));
return rVal;
}
public static EntityMessage constructKillMessage(int entityID){
EntityMessage rVal = new EntityMessage(EntityMessageType.KILL);
rVal.setentityID(entityID);
rVal.serialize();
return rVal;
}
public static EntityMessage parseDestroyMessage(List<Byte> byteStream){
EntityMessage rVal = new EntityMessage(EntityMessageType.DESTROY);
stripPacketHeader(byteStream);
@ -764,6 +785,17 @@ public class EntityMessage extends NetworkMessage {
rawBytes[30+i] = intValues[i];
}
break;
case KILL:
rawBytes = new byte[2+4];
//message header
rawBytes[0] = TypeBytes.MESSAGE_TYPE_ENTITY;
//entity messaage header
rawBytes[1] = TypeBytes.ENTITY_MESSAGE_TYPE_KILL;
intValues = ByteStreamUtils.serializeIntToBytes(entityID);
for(int i = 0; i < 4; i++){
rawBytes[2+i] = intValues[i];
}
break;
case DESTROY:
rawBytes = new byte[2+4];
//message header

View File

@ -67,6 +67,11 @@ AUTH_MESSAGE,
rVal = EntityMessage.parseMoveMessage(byteStream);
}
break;
case TypeBytes.ENTITY_MESSAGE_TYPE_KILL:
if(EntityMessage.canParseMessage(byteStream,secondByte)){
rVal = EntityMessage.parseKillMessage(byteStream);
}
break;
case TypeBytes.ENTITY_MESSAGE_TYPE_DESTROY:
if(EntityMessage.canParseMessage(byteStream,secondByte)){
rVal = EntityMessage.parseDestroyMessage(byteStream);

View File

@ -21,10 +21,11 @@ Message categories
public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE = 3;
public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE = 4;
public static final byte ENTITY_MESSAGE_TYPE_MOVE = 5;
public static final byte ENTITY_MESSAGE_TYPE_DESTROY = 6;
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE = 7;
public static final byte ENTITY_MESSAGE_TYPE_SETPROPERTY = 8;
public static final byte ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY = 9;
public static final byte ENTITY_MESSAGE_TYPE_KILL = 6;
public static final byte ENTITY_MESSAGE_TYPE_DESTROY = 7;
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE = 8;
public static final byte ENTITY_MESSAGE_TYPE_SETPROPERTY = 9;
public static final byte ENTITY_MESSAGE_TYPE_ATTACHENTITYTOENTITY = 10;
/*
Entity packet sizes
*/
@ -33,6 +34,7 @@ Message categories
public static final byte ENTITY_MESSAGE_TYPE_MOVEUPDATE_SIZE = 74;
public static final byte ENTITY_MESSAGE_TYPE_ATTACKUPDATE_SIZE = 74;
public static final byte ENTITY_MESSAGE_TYPE_MOVE_SIZE = 38;
public static final byte ENTITY_MESSAGE_TYPE_KILL_SIZE = 6;
public static final byte ENTITY_MESSAGE_TYPE_DESTROY_SIZE = 6;
public static final byte ENTITY_MESSAGE_TYPE_SETBEHAVIORTREE_SIZE = 22;
public static final byte ENTITY_MESSAGE_TYPE_SETPROPERTY_SIZE = 22;