119 lines
3.0 KiB
JavaScript
119 lines
3.0 KiB
JavaScript
useLibrary("project");
|
|
|
|
function Card(member, arkhamdb_cycle_prefix, copies_list) {
|
|
this.member = member;
|
|
this.arkhamdb_cycle_prefix = arkhamdb_cycle_prefix;
|
|
this.copies_list = copies_list;
|
|
|
|
this.component = ResourceKit.getGameComponentFromFile(member.file);
|
|
}
|
|
|
|
Card.getImageFile = function getImageFile(parent, format, page_num) {
|
|
return new File(
|
|
parent.file,
|
|
parent.getName() + "_" + page_num + "." + format
|
|
);
|
|
};
|
|
|
|
Card.prototype.makeImageUncached = function makeImageUncached(
|
|
resolution,
|
|
back
|
|
) {
|
|
println("Generating image for card ", this.member);
|
|
const sheets = this.component.createDefaultSheets();
|
|
const card_image = sheets[back ? 1 : 0].paint(
|
|
arkham.sheet.RenderTarget.EXPORT,
|
|
resolution
|
|
);
|
|
|
|
return card_image;
|
|
};
|
|
|
|
// export front face, or retrive it from a cached file
|
|
// TODO: handle two-sided cards
|
|
Card.prototype.makeImage = function makeImage(format, resolution) {
|
|
const cache_dir = new File(this.member.parent.file, ".ttsdeck_cache");
|
|
const cached_file = new File(cache_dir, this.member.file.name + "." + format);
|
|
|
|
if (
|
|
cached_file.exists() &&
|
|
cached_file.lastModified() > this.member.file.lastModified()
|
|
) {
|
|
println("Got cached image for card", this.member);
|
|
return ImageUtils.read(cached_file);
|
|
} else {
|
|
const card_image = this.makeImageUncached(resolution);
|
|
|
|
cache_dir.mkdir();
|
|
ImageUtils.write(card_image, cached_file, format, -1, false, resolution);
|
|
|
|
return card_image;
|
|
}
|
|
};
|
|
|
|
// TODO: allow setting a default copy count
|
|
// Hack to override the default return value of 1
|
|
Card.prototype.copyCount = function copyCount() {
|
|
const entries = this.copies_list.getListEntries().map((x) => String(x));
|
|
if (entries.indexOf(String(this.member.baseName)) == -1) {
|
|
return 1;
|
|
} else {
|
|
return this.copies_list.getCopyCount(this.member.baseName);
|
|
}
|
|
};
|
|
|
|
Card.prototype.makeJSON = function makeJSON(card_id, description) {
|
|
let card = {
|
|
Name: "Card",
|
|
Transform: {
|
|
posX: 0,
|
|
posY: 0,
|
|
posZ: 0,
|
|
rotX: 0,
|
|
rotY: 0,
|
|
rotZ: 0,
|
|
scaleX: 1.0,
|
|
scaleY: 1.0,
|
|
scaleZ: 1.0,
|
|
},
|
|
Nickname: this.component.getName(),
|
|
CardID: card_id,
|
|
Description: description || "",
|
|
ColorDiffuse: {
|
|
r: 0.713235259,
|
|
g: 0.713235259,
|
|
b: 0.713235259,
|
|
},
|
|
Locked: false,
|
|
Grid: true,
|
|
Snap: true,
|
|
Autoraise: true,
|
|
Sticky: true,
|
|
Tooltip: true,
|
|
SidewaysCard: false,
|
|
};
|
|
|
|
// TODO: could also do other fields, like "uses"
|
|
// Hack for AHLCG SCED deckbuilder
|
|
if (this.arkhamdb_cycle_prefix) {
|
|
let arkhamdb_id =
|
|
this.arkhamdb_cycle_prefix +
|
|
String(this.component.settings.get("CollectionNumber")).padStart(3, "0");
|
|
|
|
let overrides = {};
|
|
try {
|
|
const comments_json = JSON.parse(this.component.comment);
|
|
if ("tts_gmnotes_override" in comments_json) {
|
|
overrides = comments_json["tts_gmnotes_override"];
|
|
}
|
|
} catch (e) {}
|
|
|
|
let gmnotes = Object.assign({ id: arkhamdb_id }, overrides);
|
|
card.GMNotes = JSON.stringify(gmnotes);
|
|
}
|
|
|
|
return card;
|
|
};
|
|
|
|
module.exports = Card;
|