Renderer/src/main/java/electrosphere/game/data/item/Item.java
2025-01-24 17:34:49 -05:00

215 lines
5.2 KiB
Java

package electrosphere.game.data.item;
import java.util.Arrays;
import electrosphere.engine.assetmanager.AssetDataStrings;
import electrosphere.game.data.block.BlockType;
import electrosphere.game.data.common.CommonEntityType;
import electrosphere.game.data.common.item.SpawnItemDescription;
import electrosphere.game.data.graphics.GraphicsTemplate;
import electrosphere.game.data.graphics.NonproceduralModel;
/**
* Data on a given item
*/
public class Item extends CommonEntityType {
/**
* The default item icon path
*/
static final String DEFAULT_ITEM_ICON_PATH = "Textures/icons/itemIconItemGeneric.png";
/**
* The array of default tokens for all items
*/
static final String[] DEFAULT_TOKENS = new String[]{
"GRAVITY",
"TARGETABLE",
};
/**
* The idle animation for the item
*/
String idleAnim;
/**
* The path for the icon texture for this item
*/
String iconPath;
/**
* Weapon data for this item if it is an item
*/
WeaponData weaponData;
/**
* The data defining how this item is equipped
*/
EquipData equipData;
/**
* The audio data for the item
*/
ItemAudio itemAudio;
/**
* A hook that should fire client-side when the player uses this as their primary item
*/
String clientSidePrimary;
/**
* A hook that should fire client-side when the player uses this as their primary item
*/
String clientSideSecondary;
/**
* The usage logic for a secondary usage of this item
*/
ItemUsage secondaryUsage;
/**
* Creates item data from a spawn item description
* @param description The spawn item description
* @return The item data
*/
public static Item createSpawnItem(CommonEntityType objectData){
SpawnItemDescription description = objectData.getSpawnItem();
Item rVal = new Item();
rVal.setId(objectData.getId());
if(description.getItemIcon() != null){
rVal.iconPath = description.getItemIcon();
} else {
rVal.iconPath = Item.DEFAULT_ITEM_ICON_PATH;
}
if(description.getGraphicsTemplate() != null){
rVal.setGraphicsTemplate(description.getGraphicsTemplate());
} else {
throw new Error("Need to implement handling for when no graphics template is provided!");
}
//set usage
ItemUsage usage = new ItemUsage();
usage.setSpawnEntityId(objectData.getId());
rVal.setSecondaryUsage(usage);
//attach common tokens
rVal.setTokens(Arrays.asList(DEFAULT_TOKENS));
return rVal;
}
/**
* Creates item data from a block type
* @param description The block type
* @return The item data
*/
public static Item createBlockItem(BlockType blockType){
Item rVal = new Item();
rVal.setId(blockType.getName());
if(blockType.getTexture() != null){
rVal.iconPath = blockType.getTexture();
} else {
rVal.iconPath = Item.DEFAULT_ITEM_ICON_PATH;
}
NonproceduralModel modelData = new NonproceduralModel();
modelData.setPath(AssetDataStrings.UNITCUBE);
GraphicsTemplate blockItemGraphicsTemplate = new GraphicsTemplate();
blockItemGraphicsTemplate.setModel(modelData);
rVal.setGraphicsTemplate(blockItemGraphicsTemplate);
//set usage
ItemUsage usage = new ItemUsage();
usage.setBlockId(blockType.getId());
rVal.setSecondaryUsage(usage);
//attach common tokens
rVal.setTokens(Arrays.asList(DEFAULT_TOKENS));
return rVal;
}
/**
* the idle animation for the item
* @return
*/
public String getIdleAnim(){
return idleAnim;
}
/**
* the path for the icon texture for this item
* @return
*/
public String getIconPath(){
return iconPath;
}
/**
* weapon data for this item if it is an item
* @return
*/
public WeaponData getWeaponData(){
return weaponData;
}
/**
* Gets the equip data for the item type
* @return The equip data
*/
public EquipData getEquipData(){
return equipData;
}
/**
* Gets the item audio data
* @return The audio data if specified, null otherwise
*/
public ItemAudio getItemAudio(){
return itemAudio;
}
/**
* Gets the client side primary hook to fire
* @return The hook
*/
public String getClientSidePrimary(){
return clientSidePrimary;
}
/**
* Gets the client side secondary hook to fire
* @return The hook
*/
public String getClientSideSecondary(){
return clientSideSecondary;
}
/**
* Gets the secondary usage logic of this item
* @return The secondary usage logic
*/
public ItemUsage getSecondaryUsage(){
return secondaryUsage;
}
/**
* Sets the secondary usage logic of this item
* @param secondaryUsage The secondary usage logic
*/
public void setSecondaryUsage(ItemUsage secondaryUsage){
this.secondaryUsage = secondaryUsage;
}
}