enricher for actor dropper
This commit is contained in:
parent
2465106010
commit
c0fbc73541
@ -2,7 +2,7 @@ const enrichers = [
|
|||||||
{
|
{
|
||||||
id: "mb-actor-drop-enricher",
|
id: "mb-actor-drop-enricher",
|
||||||
pattern:
|
pattern:
|
||||||
/@ActorDrop\[(?<uuid>\S+)(?:\s+(?<qty>\d+))?\](?:\{(?<label>[^}]+)\})?/g,
|
/@ActorDrop\[\s*(?<uuid>[\w.-]+)\s*\](?:\(\s*(?<qty>\d+)\s*\))?(?:\{(?<label>[^}]+)\})?/g,
|
||||||
enricher: _actorDropper,
|
enricher: _actorDropper,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
@ -12,70 +12,82 @@ function _actorDropper(match, options) {
|
|||||||
const groups = match.groups;
|
const groups = match.groups;
|
||||||
const uuid = groups.uuid;
|
const uuid = groups.uuid;
|
||||||
const qty = Number(groups.qty) || 1;
|
const qty = Number(groups.qty) || 1;
|
||||||
const label =
|
const label = groups.label || foundry.utils.fromUuidSync(uuid)?.name;
|
||||||
groups.label || foundry.utils.fromUuidSync(uuid)?.name || "Unknown";
|
if (!label) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
const dataset = {
|
const dataset = {
|
||||||
uuid,
|
uuid,
|
||||||
qty,
|
qty,
|
||||||
};
|
};
|
||||||
|
if (!game.user.isGM) {
|
||||||
|
const span = document.createElement("span");
|
||||||
|
span.innerHTML = "";
|
||||||
|
anchor.innerHTML = `<i class="fas fa-crosshairs"></i><i class="fas fa-user"></i> ${qty} × ${label}`;
|
||||||
|
return span;
|
||||||
|
}
|
||||||
const anchor = document.createElement("a");
|
const anchor = document.createElement("a");
|
||||||
anchor.classList.add("mb-assets-actor-drop-link");
|
const classes = [
|
||||||
|
"content-link",
|
||||||
|
"mb-assets-link",
|
||||||
|
"mb-assets-actor-drop-link",
|
||||||
|
];
|
||||||
|
for (const cls of classes) {
|
||||||
|
anchor.classList.add(cls);
|
||||||
|
}
|
||||||
for (let [k, v] of Object.entries(dataset)) {
|
for (let [k, v] of Object.entries(dataset)) {
|
||||||
anchor.dataset[k] = v;
|
anchor.dataset[k] = v;
|
||||||
}
|
}
|
||||||
anchor.innerHTML = `<i class="fas fa-user"></i> ${qty} × ${label}`;
|
anchor.innerHTML = `<i class="fas fa-crosshairs"></i><i class="fas fa-user"></i> ${qty} × ${label}`;
|
||||||
return anchor;
|
return anchor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function _spawnTokens(actor, num) {
|
||||||
|
console.log("SPAWN", num, actor);
|
||||||
|
for (let i = 0; i < num; i++) {
|
||||||
|
const label =
|
||||||
|
num > 1
|
||||||
|
? `${actor.prototypeToken.name} #${i + 1}`
|
||||||
|
: actor.prototypeToken.name;
|
||||||
|
const location = await Sequencer.Crosshair.show({
|
||||||
|
distance: actor.prototypeToken.height / 2,
|
||||||
|
texture: actor.prototypeToken.texture.src,
|
||||||
|
snap: {
|
||||||
|
position:
|
||||||
|
CONST.GRID_SNAPPING_MODES.VERTEX | CONST.GRID_SNAPPING_MODES.CENTER,
|
||||||
|
},
|
||||||
|
label: { text: label },
|
||||||
|
});
|
||||||
|
const tokenDoc = await actor.getTokenDocument({
|
||||||
|
x: location.token.x,
|
||||||
|
y: location.token.y,
|
||||||
|
elevation: location.elevation,
|
||||||
|
});
|
||||||
|
game.scenes.viewed.createEmbeddedDocuments("Token", [tokenDoc]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function _onClickActorDropperLink(ev) {
|
function _onClickActorDropperLink(ev) {
|
||||||
console.log(ev);
|
const targetElement = ev.target;
|
||||||
|
if (!targetElement.closest("a.mb-assets-actor-drop-link")) return;
|
||||||
|
ev.preventDefault();
|
||||||
|
const uuid = targetElement.dataset.uuid;
|
||||||
|
const qty = targetElement.dataset.qty || 1;
|
||||||
|
if (uuid.startsWith("Compendium")) {
|
||||||
|
game.tcal
|
||||||
|
.importTransientActor(uuid, { preferExisting: true })
|
||||||
|
.then((actor) => _spawnTokens(actor, qty));
|
||||||
|
} else {
|
||||||
|
_spawnTokens(foundry.utils.fromUuidSync(uuid), qty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Hooks.once("ready", async () => {
|
Hooks.once("ready", async () => {
|
||||||
for (const enricher of enrichers) {
|
for (const enricher of enrichers) {
|
||||||
CONFIG.TextEditor.enrichers.push(enricher);
|
CONFIG.TextEditor.enrichers.push(enricher);
|
||||||
}
|
}
|
||||||
|
document.body.addEventListener("click", _onClickActorDropperLink);
|
||||||
TokenMagic.importPresetLibraryFromPath(
|
TokenMagic.importPresetLibraryFromPath(
|
||||||
"modules/mb-assets/config/tmfx-presets.json",
|
"modules/mb-assets/config/tmfx-presets.json",
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
Hooks.on("renderJournalSheet", (sheet, html, data) => {
|
|
||||||
console.log("journal", sheet, html, data);
|
|
||||||
// links = html.querySelectorAll()
|
|
||||||
// $("a.mb-assets-actor-drop-link", html)
|
|
||||||
// .unbind("click")
|
|
||||||
// .click(_onClickActorDropperLink);
|
|
||||||
});
|
|
||||||
|
|
||||||
Hooks.on("renderJournalPageSheet", (sheet, html, data) => {
|
|
||||||
console.log("journal page", sheet, html, data);
|
|
||||||
// links = html.querySelectorAll()
|
|
||||||
// $("a.mb-assets-actor-drop-link", html)
|
|
||||||
// .unbind("click")
|
|
||||||
// .click(_onClickActorDropperLink);
|
|
||||||
});
|
|
||||||
|
|
||||||
Hooks.on("renderJournalEntryPageSheet", (sheet, html, data) => {
|
|
||||||
console.log("JournalEntryPage", sheet, html, data);
|
|
||||||
// links = html.querySelectorAll()
|
|
||||||
// $("a.mb-assets-actor-drop-link", html)
|
|
||||||
// .unbind("click")
|
|
||||||
// .click(_onClickActorDropperLink);
|
|
||||||
});
|
|
||||||
|
|
||||||
Hooks.on("renderItemSheet", (sheet, html, data) => {
|
|
||||||
console.log("item", sheet, html, data);
|
|
||||||
// links = html.querySelectorAll()
|
|
||||||
// $("a.mb-assets-actor-drop-link", html)
|
|
||||||
// .unbind("click")
|
|
||||||
// .click(_onClickActorDropperLink);
|
|
||||||
});
|
|
||||||
|
|
||||||
Hooks.on("renderJournalPageSheet", (sheet, html, data) => {
|
|
||||||
console.log(sheet, html, data);
|
|
||||||
// links = html.querySelectorAll()
|
|
||||||
// $("a.mb-assets-actor-drop-link", html)
|
|
||||||
// .unbind("click")
|
|
||||||
// .click(_onClickActorDropperLink);
|
|
||||||
});
|
|
||||||
|
|||||||
@ -1,14 +0,0 @@
|
|||||||
a.mb-assets-actor-drop-link {
|
|
||||||
background: #ddd;
|
|
||||||
color: #000;
|
|
||||||
padding: 1px 4px;
|
|
||||||
border: 1px solid #4b4a44;
|
|
||||||
border-radius: 2px;
|
|
||||||
white-space: nowrap;
|
|
||||||
word-break: break-all;
|
|
||||||
}
|
|
||||||
|
|
||||||
a.mb-assets-actor-drop-link i {
|
|
||||||
color: #003300;
|
|
||||||
margin-right: 2px;
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user