443 lines
11 KiB
JavaScript
443 lines
11 KiB
JavaScript
const api = foundry.applications.api;
|
|
const sheets = foundry.applications.sheets;
|
|
|
|
export default class pokemonCharacterSheet extends api.HandlebarsApplicationMixin(sheets.ActorSheetV2) {
|
|
effectivenessChart = {
|
|
"normal": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 0.5,
|
|
"ghost": 0,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"fire": {
|
|
"normal": 1,
|
|
"fire": 0.5,
|
|
"water": 0.5,
|
|
"electric": 1,
|
|
"grass": 2,
|
|
"ice": 2,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 2,
|
|
"rock": 0.5,
|
|
"ghost": 1,
|
|
"dragon": 0.5,
|
|
"dark": 1,
|
|
"steel": 2
|
|
},
|
|
"water": {
|
|
"normal": 1,
|
|
"fire": 2,
|
|
"water": 0.5,
|
|
"electric": 1,
|
|
"grass": 0.5,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 2,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 2,
|
|
"ghost": 1,
|
|
"dragon": 0.5,
|
|
"dark": 1,
|
|
"steel": 1
|
|
},
|
|
"electric": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 2,
|
|
"electric": 0.5,
|
|
"grass": 0.5,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 0,
|
|
"flying": 2,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 1,
|
|
"dragon": 0.5,
|
|
"dark": 1,
|
|
"steel": 1
|
|
},
|
|
"grass": {
|
|
"normal": 1,
|
|
"fire": 0.5,
|
|
"water": 2,
|
|
"electric": 1,
|
|
"grass": 0.5,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 0.5,
|
|
"ground": 2,
|
|
"flying": 0.5,
|
|
"psychic": 1,
|
|
"bug": 0.5,
|
|
"rock": 2,
|
|
"ghost": 1,
|
|
"dragon": 0.5,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"ice": {
|
|
"normal": 1,
|
|
"fire": 0.5,
|
|
"water": 0.5,
|
|
"electric": 1,
|
|
"grass": 2,
|
|
"ice": 0.5,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 2,
|
|
"flying": 2,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 1,
|
|
"dragon": 2,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"fighting": {
|
|
"normal": 2,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 2,
|
|
"fighting": 1,
|
|
"poison": 0.5,
|
|
"ground": 1,
|
|
"flying": 0.5,
|
|
"psychic": 0.5,
|
|
"bug": 0.5,
|
|
"rock": 2,
|
|
"ghost": 0,
|
|
"dragon": 1,
|
|
"dark": 2,
|
|
"steel": 2
|
|
},
|
|
"poison": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 2,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 0.5,
|
|
"ground": 0.5,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 0.5,
|
|
"ghost": 0.5,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 0
|
|
},
|
|
"ground": {
|
|
"normal": 1,
|
|
"fire": 2,
|
|
"water": 1,
|
|
"electric": 2,
|
|
"grass": 0.5,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 2,
|
|
"ground": 1,
|
|
"flying": 0,
|
|
"psychic": 1,
|
|
"bug": 0.5,
|
|
"rock": 2,
|
|
"ghost": 1,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 2
|
|
},
|
|
"flying": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 0.5,
|
|
"grass": 2,
|
|
"ice": 1,
|
|
"fighting": 2,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 2,
|
|
"rock": 0.5,
|
|
"ghost": 1,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"psychic": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 1,
|
|
"fighting": 2,
|
|
"poison": 2,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 0.5,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 1,
|
|
"dragon": 1,
|
|
"dark": 0,
|
|
"steel": 0.5
|
|
},
|
|
"bug": {
|
|
"normal": 1,
|
|
"fire": 0.5,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 2,
|
|
"ice": 1,
|
|
"fighting": 0.5,
|
|
"poison": 0.5,
|
|
"ground": 1,
|
|
"flying": 0.5,
|
|
"psychic": 2,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 0.5,
|
|
"dragon": 1,
|
|
"dark": 2,
|
|
"steel": 0.5
|
|
},
|
|
"rock": {
|
|
"normal": 1,
|
|
"fire": 2,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 2,
|
|
"fighting": 0.5,
|
|
"poison": 1,
|
|
"ground": 0.5,
|
|
"flying": 2,
|
|
"psychic": 1,
|
|
"bug": 2,
|
|
"rock": 1,
|
|
"ghost": 1,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"ghost": {
|
|
"normal": 0,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 2,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 2,
|
|
"dragon": 1,
|
|
"dark": 0.5,
|
|
"steel": 0.5
|
|
},
|
|
"dragon": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 1,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 1,
|
|
"dragon": 2,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
},
|
|
"dark": {
|
|
"normal": 1,
|
|
"fire": 1,
|
|
"water": 1,
|
|
"electric": 1,
|
|
"grass": 1,
|
|
"ice": 1,
|
|
"fighting": 0.5,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 2,
|
|
"bug": 1,
|
|
"rock": 1,
|
|
"ghost": 2,
|
|
"dragon": 1,
|
|
"dark": 0.5,
|
|
"steel": 0.5
|
|
},
|
|
"steel": {
|
|
"normal": 1,
|
|
"fire": 0.5,
|
|
"water": 0.5,
|
|
"electric": 0.5,
|
|
"grass": 1,
|
|
"ice": 2,
|
|
"fighting": 1,
|
|
"poison": 1,
|
|
"ground": 1,
|
|
"flying": 1,
|
|
"psychic": 1,
|
|
"bug": 1,
|
|
"rock": 2,
|
|
"ghost": 1,
|
|
"dragon": 1,
|
|
"dark": 1,
|
|
"steel": 0.5
|
|
}
|
|
}
|
|
|
|
sheetContext = {};
|
|
|
|
tab = "tab1";
|
|
|
|
static DEFAULT_OPTIONS = {
|
|
tag: "form",
|
|
classes: ["pokemon", "sheet", "characterSheet"],
|
|
tabs: [
|
|
{navSelector: ".tabs", contentSelector: ".content", initial: this.tab}
|
|
],
|
|
form: {
|
|
submitOnChange: true,
|
|
closeOnSubmit: false
|
|
},
|
|
position: {
|
|
width: 650
|
|
}
|
|
}
|
|
|
|
static PARTS = {
|
|
header: { template: "systems/pokemon/templates/sheets/character/header.hbs" },
|
|
sidebar: { template: "systems/pokemon/templates/sheets/character/sidebar.hbs" }
|
|
}
|
|
|
|
get title() {
|
|
return this.actor.name;
|
|
}
|
|
|
|
/** @override */
|
|
_configureRenderOptions(options) {
|
|
super._configureRenderOptions(options);
|
|
|
|
if (this.document.limited) options.parts = ["header"]
|
|
else options.parts = ["header", "sidebar"];
|
|
}
|
|
|
|
/** @override */
|
|
async _prepareContext(options) {
|
|
|
|
// #################################################################################################
|
|
// #################################################################################################
|
|
// ## ##
|
|
// ## Creates Basic Datamodel, which is used to fill the HTML together with Handelbars with Data. ##
|
|
// ## ##
|
|
// #################################################################################################
|
|
// #################################################################################################
|
|
|
|
const baseData = await super._prepareContext();
|
|
|
|
let context = {
|
|
|
|
// Set General Values
|
|
owner: baseData.document.isOwner,
|
|
editable: baseData.editable,
|
|
actor: baseData.document,
|
|
system: baseData.document.system,
|
|
items: baseData.document.items,
|
|
config: CONFIG.POKEMON,
|
|
isGM: baseData.user.isGM,
|
|
effects: baseData.document.effects,
|
|
types: ["normal", "fire", "water", "electric", "grass", "ice", "fighting", "poison", "ground", "flying", "psychic", "bug", "rock", "ghost", "dragon", "dark", "steel", "fairy"]
|
|
};
|
|
|
|
context = this.calculateDerivated(context)
|
|
|
|
this.sheetContext = context;
|
|
|
|
context.system.tab = this.tab;
|
|
|
|
return context;
|
|
}
|
|
|
|
calculateDerivated(context) {
|
|
context.system.phArmorClass = 10+context.system.stats.defense;
|
|
context.system.spArmorClass = 10+context.system.stats.defense;
|
|
if (context.system.defenseCategory == "Physical") {
|
|
context.system.phArmorClass += 2;
|
|
} else {
|
|
context.system.spArmorClass += 2;
|
|
}
|
|
|
|
context.defenses = context.types.map(type => this.calcEffectiveness(context, type));
|
|
|
|
context.system.speed = 30+5*context.system.stats.speed;
|
|
|
|
return context;
|
|
}
|
|
|
|
calcEffectiveness(context, type) {
|
|
var effectiveness = 1
|
|
|
|
effectiveness *= this.effectivenessChart[type][context.system.type1]
|
|
|
|
if (context.system.type2 != "") {
|
|
effectiveness *= this.effectivenessChart[type][context.system.type2]
|
|
}
|
|
|
|
return effectiveness
|
|
}
|
|
|
|
/** @override */
|
|
_onRender(context, options) {
|
|
const tabs = new foundry.applications.ux.Tabs({navSelector: ".tabs", contentSelector: ".content", initial: this.tab});
|
|
tabs.bind(this.element);
|
|
|
|
// tabs.activate(this.tab);
|
|
|
|
tabs.callback = () => {
|
|
this.tab = tabs.active;
|
|
}
|
|
|
|
}
|
|
} |