remove warpgate from fear roll and token vision macros
This commit is contained in:
+32
-31
@@ -1,39 +1,40 @@
|
||||
const requestFearRollFromTokens = game.modules.get('swade-mb-helpers').api.requestRollFromTokens
|
||||
const requestFearRollFromTokens = game.modules.get('swade-mb-helpers').api.requestFearRollFromTokens;
|
||||
|
||||
async function main () {
|
||||
let tokens = Array.from(game.user.targets)
|
||||
async function main() {
|
||||
let tokens = Array.from(game.user.targets);
|
||||
if (tokens.length < 1) {
|
||||
tokens = canvas.tokens.controlled
|
||||
tokens = canvas.tokens.controlled;
|
||||
}
|
||||
if (tokens.length < 1) {
|
||||
ui.notifications.error('Please target or select some tokens')
|
||||
return
|
||||
ui.notifications.error('Please target or select some tokens');
|
||||
return;
|
||||
}
|
||||
|
||||
const menuData = {
|
||||
inputs: [
|
||||
{ type: 'info', label: `Requesting Fear roll from ${tokens.map(t => t.name).join(', ')}` },
|
||||
{ type: 'number', label: 'Fear Check Penalty', options: 0 }
|
||||
],
|
||||
buttons: [
|
||||
{ label: 'Request roll', value: 'ok', default: true },
|
||||
{ label: 'Cancel', value: 'cancel' }
|
||||
]
|
||||
}
|
||||
const menuConfig = {
|
||||
title: 'Request Fear roll...'
|
||||
}
|
||||
const result = await warpgate.menu(menuData, menuConfig)
|
||||
|
||||
if (result.buttons !== 'ok') {
|
||||
return
|
||||
}
|
||||
console.log(result)
|
||||
const fear = result.inputs[1] || 0
|
||||
const targetNumber = 4
|
||||
const options = { targetNumber, fear }
|
||||
|
||||
requestFearRollFromTokens(tokens, options)
|
||||
new Dialog({
|
||||
title: 'Request Fear roll...',
|
||||
content: `
|
||||
<form>
|
||||
<p>Requesting Fear roll from ${tokens.map((t) => t.name).join(', ')}.</p>
|
||||
<div class="form-group">
|
||||
<label>Fear Check Penalty
|
||||
<input type="number" value="0" name="fear">
|
||||
</label>
|
||||
</div>
|
||||
</form>`,
|
||||
buttons: {
|
||||
ok: {
|
||||
label: 'Request Roll',
|
||||
callback: (html) => {
|
||||
const fear = parseInt(html.find('input[name="fear"]').val()) || 0;
|
||||
const options = { targetNumber: 4, fear };
|
||||
requestFearRollFromTokens(tokens, options);
|
||||
},
|
||||
},
|
||||
cancel: {
|
||||
label: 'Cancel',
|
||||
},
|
||||
},
|
||||
}).render(true);
|
||||
}
|
||||
|
||||
main()
|
||||
main();
|
||||
|
||||
+107
-73
@@ -1,123 +1,157 @@
|
||||
const argBright = typeof args === 'undefined' ? null : args.length > 0 ? args[0] : null
|
||||
/* globals args */
|
||||
const argBright = typeof args === 'undefined' ? null : args.length > 0 ? args[0] : null;
|
||||
// argument can be one of 'bright', 'dim', 'dark', 'pitchdark'. Other values
|
||||
// will guess based on scene darkness
|
||||
const BRIGHT_LEVELS = ['bright', 'dim', 'dark', 'pitchdark']
|
||||
const BRIGHT_LEVELS = ['bright', 'dim', 'dark', 'pitchdark'];
|
||||
const THRESHOLDS = {
|
||||
dim: 0.4,
|
||||
dark: 0.6,
|
||||
pitchdark: 0.8
|
||||
}
|
||||
pitchdark: 0.8,
|
||||
};
|
||||
const RANGES = {
|
||||
basic: {
|
||||
bright: 25,
|
||||
dim: 25,
|
||||
dark: 10,
|
||||
pitchdark: 0
|
||||
pitchdark: 0,
|
||||
},
|
||||
lowlight: {
|
||||
bright: 25,
|
||||
dim: 25,
|
||||
dark: 10,
|
||||
pitchdark: 0
|
||||
pitchdark: 0,
|
||||
},
|
||||
darkvision: {
|
||||
bright: 25,
|
||||
dim: 25,
|
||||
dark: 10,
|
||||
pitchdark: 10
|
||||
pitchdark: 10,
|
||||
},
|
||||
nightvision: {
|
||||
bright: 200,
|
||||
dim: 200,
|
||||
dark: 200,
|
||||
pitchdark: 200
|
||||
pitchdark: 200,
|
||||
},
|
||||
blindsense: {
|
||||
bright: 5,
|
||||
dim: 5,
|
||||
dark: 5,
|
||||
pitchdark: 5
|
||||
}
|
||||
}
|
||||
pitchdark: 5,
|
||||
},
|
||||
};
|
||||
const SIGHT_NAMES = {
|
||||
lowlight: 'low-light-vision',
|
||||
darkvision: 'darkvision',
|
||||
nightvision: 'night-vision',
|
||||
blindsense: 'blindsense'
|
||||
}
|
||||
blindsense: 'blindsense',
|
||||
};
|
||||
const SIGHT_MODES = {
|
||||
lowlight: 'lowlight',
|
||||
darkvision: 'darkvision',
|
||||
nightvision: 'darkvision',
|
||||
basic: 'basic',
|
||||
blindsense: 'blindsense'
|
||||
blindsense: 'blindsense',
|
||||
};
|
||||
|
||||
function findAbility(token, swid) {
|
||||
return token.actor.items.find((i) => i.type === 'ability' && i.system.swid === swid);
|
||||
}
|
||||
|
||||
function findAbility (token, swid) {
|
||||
return token.actor.items.find(i => i.type === 'ability' && i.system.swid === swid)
|
||||
}
|
||||
|
||||
async function main () {
|
||||
const scene = game.scenes.current
|
||||
let sceneBright = BRIGHT_LEVELS[0]
|
||||
async function main() {
|
||||
const scene = game.scenes.current;
|
||||
let sceneBright = BRIGHT_LEVELS[0];
|
||||
if (scene.darkness > THRESHOLDS.pitchdark) {
|
||||
sceneBright = BRIGHT_LEVELS[3]
|
||||
sceneBright = BRIGHT_LEVELS[3];
|
||||
} else if (scene.darkness > THRESHOLDS.dark) {
|
||||
sceneBright = BRIGHT_LEVELS[2]
|
||||
sceneBright = BRIGHT_LEVELS[2];
|
||||
} else if (scene.darkness > THRESHOLDS.dim) {
|
||||
sceneBright = BRIGHT_LEVELS[1]
|
||||
sceneBright = BRIGHT_LEVELS[1];
|
||||
}
|
||||
let bright = sceneBright
|
||||
let bright = sceneBright;
|
||||
if (argBright && BRIGHT_LEVELS.includes(argBright)) {
|
||||
bright = argBright
|
||||
}
|
||||
const menuData = {
|
||||
inputs: [
|
||||
{ type: 'radio', label: 'Bright Light', options: ['bright', bright === BRIGHT_LEVELS[0]] },
|
||||
{ type: 'radio', label: 'Dim Light', options: ['bright', bright === BRIGHT_LEVELS[1]] },
|
||||
{ type: 'radio', label: 'Dark', options: ['bright', bright === BRIGHT_LEVELS[2]] },
|
||||
{ type: 'radio', label: 'Pitch Dark', options: ['bright', bright === BRIGHT_LEVELS[3]] }
|
||||
],
|
||||
buttons: [
|
||||
{ label: 'Select Scene Brightness', value: 'ok', default: true },
|
||||
{ label: 'Cancel', value: 'cancel' }
|
||||
]
|
||||
}
|
||||
const menuConfig = { title: 'Select scene brightness' }
|
||||
const result = await warpgate.menu(menuData, menuConfig)
|
||||
if (result.buttons !== 'ok') { return }
|
||||
|
||||
for (let i = 0; i < 4; i++) {
|
||||
if (result.inputs[i]) { bright = BRIGHT_LEVELS[i] }
|
||||
bright = argBright;
|
||||
}
|
||||
|
||||
for (const tokenId of scene.tokens.map(t => t.id)) {
|
||||
const token = scene.tokens.get(tokenId)
|
||||
if (!token.sight.enabled) {
|
||||
console.log(`Skipping ${token.name}, vision not enabled`)
|
||||
continue
|
||||
// don't set sight on a token where it's not enabled
|
||||
}
|
||||
let sightType = 'basic'
|
||||
for (const sight in SIGHT_NAMES) {
|
||||
if (findAbility(token, SIGHT_NAMES[sight])) {
|
||||
sightType = sight
|
||||
}
|
||||
}
|
||||
const range = RANGES[sightType][bright]
|
||||
const sightMode = SIGHT_MODES[sightType]
|
||||
const visionModeData = CONFIG.Canvas.visionModes[sightMode].vision.defaults
|
||||
const data = {
|
||||
'sight.range': range,
|
||||
'sight.visionMode': sightMode,
|
||||
'sight.attenuation': visionModeData.attenuation,
|
||||
'sight.brightness': visionModeData.brightness,
|
||||
'sight.saturation': visionModeData.saturation,
|
||||
'sight.contrast': visionModeData.contrast
|
||||
}
|
||||
console.log(`Updating ${token.name}:`, sightType, bright, data)
|
||||
await token.update(data)
|
||||
}
|
||||
new Dialog({
|
||||
title: 'Select scene brightness',
|
||||
content: `
|
||||
<form>
|
||||
<h2>Set token vision</h2>
|
||||
<p>All tokens with vision will be adjusted</p>
|
||||
<div class="form-group">
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="bright" value="${BRIGHT_LEVELS[0]}"
|
||||
${bright === BRIGHT_LEVELS[0] ? 'checked' : ''}/>
|
||||
Bright Light
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="bright" value="${BRIGHT_LEVELS[1]}"
|
||||
${bright === BRIGHT_LEVELS[1] ? 'checked' : ''}/>
|
||||
Dim Light
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="bright" value="${BRIGHT_LEVELS[2]}"
|
||||
${bright === BRIGHT_LEVELS[2] ? 'checked' : ''}/>
|
||||
Dark
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="checkbox">
|
||||
<input type="radio" name="bright" value="${BRIGHT_LEVELS[3]}"
|
||||
${bright === BRIGHT_LEVELS[3] ? 'checked' : ''}/>
|
||||
Pitch Dark
|
||||
</label>
|
||||
</div>
|
||||
</form>
|
||||
`,
|
||||
buttons: {
|
||||
ok: {
|
||||
label: 'Select scene Brightness',
|
||||
value: 'ok',
|
||||
callback: (html) => {
|
||||
const form = html[0].querySelector('form');
|
||||
const formDataObject = new FormDataExtended(form).Object;
|
||||
console.log('form data', formDataObject, form);
|
||||
bright = formDataObject.bright;
|
||||
for (const tokenId of scene.tokens.map((t) => t.id)) {
|
||||
const token = scene.tokens.get(tokenId);
|
||||
if (!token.sight.enabled) {
|
||||
console.log(`Skipping ${token.name}, vision not enabled`);
|
||||
continue;
|
||||
// don't set sight on a token where it's not enabled
|
||||
}
|
||||
let sightType = 'basic';
|
||||
for (const sight in SIGHT_NAMES) {
|
||||
if (findAbility(token, SIGHT_NAMES[sight])) {
|
||||
sightType = sight;
|
||||
}
|
||||
}
|
||||
const range = RANGES[sightType][bright];
|
||||
const sightMode = SIGHT_MODES[sightType];
|
||||
const visionModeData = CONFIG.Canvas.visionModes[sightMode].vision.defaults;
|
||||
const data = {
|
||||
'sight.range': range,
|
||||
'sight.visionMode': sightMode,
|
||||
'sight.attenuation': visionModeData.attenuation,
|
||||
'sight.brightness': visionModeData.brightness,
|
||||
'sight.saturation': visionModeData.saturation,
|
||||
'sight.contrast': visionModeData.contrast,
|
||||
};
|
||||
console.log(`Updating ${token.name}:`, sightType, bright, data);
|
||||
token.update(data);
|
||||
}
|
||||
},
|
||||
},
|
||||
cancel: {
|
||||
label: 'Cancel',
|
||||
},
|
||||
},
|
||||
}).render(true);
|
||||
}
|
||||
|
||||
main()
|
||||
main();
|
||||
|
||||
Reference in New Issue
Block a user