135 lines
4.2 KiB
JavaScript
135 lines
4.2 KiB
JavaScript
// System Module Imports
|
|
import { ACTION_TYPE, ITEM_TYPE } from './constants.js'
|
|
import { Utils } from './utils.js'
|
|
|
|
export let ActionHandler = null
|
|
|
|
Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => {
|
|
/**
|
|
* Extends Token Action HUD Core's ActionHandler class and builds system-defined actions for the HUD
|
|
*/
|
|
ActionHandler = class ActionHandler extends coreModule.api.ActionHandler {
|
|
/**
|
|
* Build system actions
|
|
* Called by Token Action HUD Core
|
|
* @override
|
|
* @param {array} groupIds
|
|
*/a
|
|
async buildSystemActions (groupIds) {
|
|
// Set actor and token variables
|
|
this.actors = (!this.actor) ? this._getActors() : [this.actor]
|
|
this.actorType = this.actor?.type
|
|
|
|
// Settings
|
|
this.displayUnequipped = Utils.getSetting('displayUnequipped')
|
|
|
|
// Set items variable
|
|
if (this.actor) {
|
|
let items = this.actor.items
|
|
items = coreModule.api.Utils.sortItemsByName(items)
|
|
this.items = items
|
|
|
|
}
|
|
|
|
if (this.actorType === 'character') {
|
|
//debugger;
|
|
this.#buildCharacterActions()
|
|
} else if (!this.actor) {
|
|
this.#buildMultipleTokenActions()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Build character actions
|
|
* @private
|
|
*/
|
|
#buildCharacterActions () {
|
|
this._get_attributes({id: "attributes", type:"system"})
|
|
this.#buildInventory()
|
|
}
|
|
|
|
_get_attributes(parent) {
|
|
const macroType = "attributes";
|
|
let actions = [];
|
|
|
|
let attributes = Object.entries(this.actor.system.attributes)
|
|
attributes.forEach((a) => {
|
|
const key = a[0];
|
|
const value = a[1].value
|
|
// img
|
|
|
|
let actionId = key
|
|
if ( key == "WILL" ) actionId = "Will";
|
|
if ( key == "PER" ) actionId = "Per";
|
|
|
|
actions.push({
|
|
id: actionId,
|
|
name: coreModule.api.Utils.i18n("GURPS.attributes" + key),
|
|
description: coreModule.api.Utils.i18n('GURPS.Attributes'),
|
|
encodedValue: [macroType, key].join(this.delimiter),
|
|
})
|
|
|
|
|
|
});
|
|
this.addActions(actions, parent)
|
|
|
|
}
|
|
|
|
/**
|
|
* Build multiple token actions
|
|
* @private
|
|
* @returns {object}
|
|
*/
|
|
#buildMultipleTokenActions () {
|
|
}
|
|
|
|
/**
|
|
* Build inventory
|
|
* @private
|
|
*/
|
|
async #buildInventory () {
|
|
if (this.items.size === 0) return
|
|
|
|
const actionTypeId = 'item'
|
|
const inventoryMap = new Map()
|
|
|
|
for (const [itemId, itemData] of this.items) {
|
|
const type = itemData.type
|
|
const equipped = itemData.equipped
|
|
|
|
if (equipped || this.displayUnequipped) {
|
|
const typeMap = inventoryMap.get(type) ?? new Map()
|
|
typeMap.set(itemId, itemData)
|
|
inventoryMap.set(type, typeMap)
|
|
}
|
|
}
|
|
|
|
for (const [type, typeMap] of inventoryMap) {
|
|
const groupId = ITEM_TYPE[type]?.groupId
|
|
|
|
if (!groupId) continue
|
|
|
|
const groupData = { id: groupId, type: 'system' }
|
|
|
|
// Get actions
|
|
const actions = [...typeMap].map(([itemId, itemData]) => {
|
|
const id = itemId
|
|
const name = itemData.name
|
|
const actionTypeName = coreModule.api.Utils.i18n(ACTION_TYPE[actionTypeId])
|
|
const listName = `${actionTypeName ? `${actionTypeName}: ` : ''}${name}`
|
|
const encodedValue = [actionTypeId, id].join(this.delimiter)
|
|
|
|
return {
|
|
id,
|
|
name,
|
|
listName,
|
|
encodedValue
|
|
}
|
|
})
|
|
|
|
// TAH Core method to add actions to the action list
|
|
this.addActions(actions, groupData)
|
|
}
|
|
}
|
|
}
|
|
})
|