Manage stuff

This commit is contained in:
2022-02-13 21:58:19 +01:00
parent ef8e737d1c
commit 5e44a97686
7 changed files with 119 additions and 43 deletions

View File

@ -181,27 +181,26 @@ export class PegasusActor extends Actor {
/* -------------------------------------------- */
async manageWorstFear(flag) {
if (flag) {
let effect = await PegasusUtility.getEffectFromCompendium( "Worst Fear" )
console.log("got effect", effect)
let effect = await PegasusUtility.getEffectFromCompendium("Worst Fear")
effect.data.worstfear = true
this.createEmbeddedDocuments( 'Item', [effect])
this.createEmbeddedDocuments('Item', [effect])
} else {
let effect = this.data.items.find( item => item.type == "effect" && item.data.data.worstfear )
let effect = this.data.items.find(item => item.type == "effect" && item.data.data.worstfear)
if (effect) {
this.deleteEmbeddedDocuments( 'Item', [ effect.id ])
this.deleteEmbeddedDocuments('Item', [effect.id])
}
}
}
/* -------------------------------------------- */
async manageDesires(flag) {
if (flag) {
let effect = await PegasusUtility.getEffectFromCompendium( "Desires" )
let effect = await PegasusUtility.getEffectFromCompendium("Desires")
effect.data.desires = true
this.createEmbeddedDocuments( 'Item', [effect])
this.createEmbeddedDocuments('Item', [effect])
} else {
let effect = this.data.items.find( item => item.type == "effect" && item.data.data.desires )
let effect = this.data.items.find(item => item.type == "effect" && item.data.data.desires)
if (effect) {
this.deleteEmbeddedDocuments( 'Item', [ effect.id ])
this.deleteEmbeddedDocuments('Item', [effect.id])
}
}
}
@ -230,13 +229,14 @@ export class PegasusActor extends Actor {
if (item && item.data.data) {
let nrg = duplicate(this.data.data.nrg)
if ( !item.data.data.activated) { // Current value
if ( item.data.data.cost > nrg.value) {
return ui.notifications.warn("Not enough NRG to activate the Power " + item.name )
if (!item.data.data.activated) { // Current value
if (item.data.data.costspent > nrg.value || item.data.data.costspent > nrg.max) {
return ui.notifications.warn("Not enough NRG to activate the Power " + item.name)
}
nrg.activated += item.data.data.cost
nrg.value -= item.data.data.cost
nrg.activated += item.data.data.costspent
nrg.value -= item.data.data.costspent
nrg.max -= item.data.data.costspent
this.update({ 'data.nrg': nrg })
let effects = []
@ -248,19 +248,20 @@ export class PegasusActor extends Actor {
await this.createEmbeddedDocuments('Item', effects)
}
} else {
nrg.activated -= item.data.data.cost
nrg.activated -= item.data.data.costspent
nrg.max += item.data.data.costspent
this.update({ 'data.nrg': nrg })
let toRem = []
for( let item of this.data.items) {
for (let item of this.data.items) {
if (item.type == 'effect' && item.data.data.powerId == itemId) {
toRem.push( item.id)
toRem.push(item.id)
}
}
if (toRem.length) {
await this.deleteEmbeddedDocuments('Item', toRem)
}
}
}
let update = { _id: item.id, "data.activated": !item.data.data.activated }
await this.updateEmbeddedDocuments('Item', [update]) // Updates one EmbeddedEntity
}
@ -468,6 +469,47 @@ export class PegasusActor extends Actor {
}
}
/* -------------------------------------------- */
async cleanPerkEffects(itemId) {
let effects = []
for (let item of this.data.items) {
if (item.type == "effect" && item.data.data.perkId == itemId) {
effects.push(item.id)
}
}
if (effects.length) {
await this.deleteEmbeddedDocuments('Item', effects)
}
}
/* -------------------------------------------- */
async updatePerkUsed(itemId, index, checked) {
let item = this.items.get(itemId)
if (item && index) {
let key = "data.used" + index
await this.updateEmbeddedDocuments('Item', [{ _id: itemId, [`${key}`]: checked }] )
item = this.items.get(itemId) // Refresh
if (item.data.data.nbuse == "next1action" && item.data.data.used1) {
this.cleanPerkEffects(itemId)
}
if (item.data.data.nbuse == "next2action" && item.data.data.used1 && item.data.data.used2) {
this.cleanPerkEffects(itemId)
}
if (item.data.data.nbuse == "next3action" && item.data.data.used1 && item.data.data.used2 && item.data.data.used3) {
this.cleanPerkEffects(itemId)
}
}
}
/* -------------------------------------------- */
async updatePowerSpentCost(itemId, value) {
let item = this.items.get(itemId)
if (item && value) {
value = Number(value) || 0
await this.updateEmbeddedDocuments('Item', [{ _id: itemId, 'data.costspent': value }])
}
}
/* -------------------------------------------- */
async updatePerkStatus(itemId, status) {
let item = this.items.get(itemId)
@ -477,15 +519,7 @@ export class PegasusActor extends Actor {
let updateOK = true
if (status == "ready") {
let effects = []
for (let item of this.data.items) {
if (item.type == "effect" && item.data.data.perkId == itemId) {
effects.push(item.id)
}
}
if (effects.length) {
await this.deleteEmbeddedDocuments('Item', effects)
}
this.cleanPerkEffects(itemId)
if (item.data.data.features.nrgcost.flag) {
let nrg = duplicate(this.data.data.nrg)
nrg.activated -= item.data.data.features.nrgcost.value