Begin working on Aspect items
This commit is contained in:
parent
58facf1490
commit
25e3fa1bb8
14 changed files with 204 additions and 80 deletions
11
module/documents/AspectItem.mjs
Normal file
11
module/documents/AspectItem.mjs
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
export class AspectItem extends Item {
|
||||
prepareData() {
|
||||
super.prepareData();
|
||||
};
|
||||
|
||||
prepareDerivedData() {};
|
||||
|
||||
_preparePCData() {};
|
||||
|
||||
_prepareNPCData() {};
|
||||
};
|
||||
|
|
@ -1,32 +1,42 @@
|
|||
// Class imports
|
||||
import { PlayerActor } from "./documents/PlayerActor.js";
|
||||
// Data Models
|
||||
import { AspectItemData } from "./models/AspectItemData.mjs";
|
||||
import { PlayerData } from "./models/PlayerData.mjs";
|
||||
|
||||
// Main Documents
|
||||
import { PlayerActor } from "./documents/PlayerActor.mjs";
|
||||
import { AspectItem } from "./documents/AspectItem.mjs";
|
||||
|
||||
// Character Sheets
|
||||
import { AspectSheet } from "./sheets/AspectSheet.mjs";
|
||||
import { PlayerSheet } from "./sheets/PlayerSheet.mjs";
|
||||
import { PlayerData } from "./models/PlayerData.js";
|
||||
|
||||
|
||||
// Utility imports
|
||||
import * as hbs from "./handlebars.js";
|
||||
import * as hbs from "./handlebars.mjs";
|
||||
|
||||
// Non-Setup hooks
|
||||
import "./hooks/hotReload.js";
|
||||
import "./hooks/hotReload.mjs";
|
||||
|
||||
|
||||
Hooks.once(`init`, () => {
|
||||
console.log(`.dungeon | Init hook started`)
|
||||
console.debug(`.dungeon | Initializing`);
|
||||
game.boilerplate = {
|
||||
PlayerActor,
|
||||
AspectItem,
|
||||
};
|
||||
CONFIG.Actor.systemDataModels.player = PlayerData;
|
||||
CONFIG.Actor.dataModels.player = PlayerData;
|
||||
CONFIG.Item.dataModels.aspect = AspectItemData;
|
||||
|
||||
Actors.unregisterSheet("core", ActorSheet);
|
||||
// Actors.registerSheet("dotdungeon", CharacterSheet, { makeDefault: true, });
|
||||
Actors.registerSheet("dotdungeon.player", PlayerSheet, { makeDefault: true });
|
||||
Actors.registerSheet("dotdungeon.sheet", PlayerSheet, { makeDefault: true });
|
||||
|
||||
Items.registerSheet("dotdungeon.sheet", AspectSheet, { makeDefault: true });
|
||||
|
||||
hbs.registerHandlebarsHelpers();
|
||||
hbs.preloadHandlebarsTemplates();
|
||||
console.info(`.dungeon | Dot Dungeon has been initialized fully`);
|
||||
});
|
||||
|
||||
|
||||
Hooks.once(`ready`, () => {
|
||||
console.info(".dungeon | Ready");
|
||||
console.debug(".dungeon | Ready");
|
||||
});
|
||||
|
|
@ -1,10 +1,11 @@
|
|||
export const partials = [
|
||||
"actors/char-sheet-mvp/partials/dice_choice.hbs",
|
||||
"actors/char-sheet-mvp/partials/stat.hbs",
|
||||
"actors/char-sheet-mvp/partials/skill.hbs",
|
||||
"actors/char-sheet-mvp/partials/panel.hbs",
|
||||
"actors/char-sheet-mvp/partials/panels/skills.hbs",
|
||||
]
|
||||
`actors/char-sheet-mvp/partials/dice_choice.hbs`,
|
||||
`actors/char-sheet-mvp/partials/stat.hbs`,
|
||||
`actors/char-sheet-mvp/partials/skill.hbs`,
|
||||
`actors/char-sheet-mvp/partials/panel.hbs`,
|
||||
`actors/char-sheet-mvp/partials/panels/skills.hbs`,
|
||||
`items/aspect.hbs`,
|
||||
];
|
||||
|
||||
export async function registerHandlebarsHelpers() {
|
||||
Handlebars.registerHelper({
|
||||
|
|
@ -21,7 +22,7 @@ export async function preloadHandlebarsTemplates() {
|
|||
for ( const partial of partials ) {
|
||||
console.debug(`Loading partial: ${partial}`);
|
||||
const path = `${pathPrefix}${partial}`;
|
||||
paths[`dotdungeon.${partial.split("/").pop().replace(".hbs", "")}`] = path;
|
||||
paths[`dotdungeon.${partial.split(`/`).pop().replace(`.hbs`, ``)}`] = path;
|
||||
}
|
||||
|
||||
console.debug(`Loaded ${partials.length} partials`);
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
import * as hbs from "../handlebars.js";
|
||||
import * as hbs from "../handlebars.mjs";
|
||||
|
||||
Hooks.on(`hotReload`, async (data) => {
|
||||
if (data.extension !== 'hbs') {
|
||||
12
module/models/AspectItemData.mjs
Normal file
12
module/models/AspectItemData.mjs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
export class AspectItemData extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
return {
|
||||
name: new fields.HTMLField({ nullable: true, blank: false, trim: true }),
|
||||
used: new fields.BooleanField(),
|
||||
/** The number of seconds that the effect of the aspect stays */
|
||||
deactivateAfter: new fields.NumberField({ nullable: true }),
|
||||
info: new fields.HTMLField({ nullable: true, blank: false, trim: true }),
|
||||
};
|
||||
};
|
||||
};
|
||||
14
module/models/CommonItemData.mjs
Normal file
14
module/models/CommonItemData.mjs
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
export class CommonItemData extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
return {
|
||||
name: fields.HTMLField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
}),
|
||||
cost: fields.NumberField({
|
||||
nullable: true,
|
||||
})
|
||||
};
|
||||
};
|
||||
};
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
export class PlayerData extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
return {
|
||||
stats: new fields.SchemaField({
|
||||
build: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(`build args`, args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
meta: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
presence: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
hands: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
tilt: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
rng: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options(...args) {
|
||||
console.log(args);
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
}),
|
||||
}),
|
||||
};
|
||||
};
|
||||
};
|
||||
99
module/models/PlayerData.mjs
Normal file
99
module/models/PlayerData.mjs
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
function diceChoiceField() {
|
||||
return new foundry.data.fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options() {
|
||||
return [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
function trainingLevelField() {
|
||||
return new foundry.data.fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
options: [ ``, `locked`, `+2`, `+4` ],
|
||||
});
|
||||
};
|
||||
|
||||
export class PlayerData extends foundry.abstract.DataModel {
|
||||
static defineSchema() {
|
||||
const fields = foundry.data.fields;
|
||||
return {
|
||||
bytes: new fields.NumberField({
|
||||
integer: true,
|
||||
positive: true,
|
||||
}),
|
||||
stats: new fields.SchemaField({
|
||||
build: diceChoiceField(),
|
||||
meta: diceChoiceField(),
|
||||
presence: diceChoiceField(),
|
||||
hands: diceChoiceField(),
|
||||
tilt: diceChoiceField(),
|
||||
rng: diceChoiceField(),
|
||||
}),
|
||||
skills: new fields.SchemaField({
|
||||
build: new fields.SchemaField({
|
||||
defense: trainingLevelField(),
|
||||
magic: trainingLevelField(),
|
||||
melee: trainingLevelField(),
|
||||
platforming: trainingLevelField(),
|
||||
strength: trainingLevelField(),
|
||||
}),
|
||||
meta: new fields.SchemaField({
|
||||
alchemy: trainingLevelField(),
|
||||
arcanum: trainingLevelField(),
|
||||
dreams: trainingLevelField(),
|
||||
lore: trainingLevelField(),
|
||||
navigation: trainingLevelField(),
|
||||
}),
|
||||
presence: new fields.SchemaField({
|
||||
animal_handling: trainingLevelField(),
|
||||
perception: trainingLevelField(),
|
||||
sneak: trainingLevelField(),
|
||||
speech: trainingLevelField(),
|
||||
vibe: trainingLevelField(),
|
||||
}),
|
||||
hands: new fields.SchemaField({
|
||||
accuracy: trainingLevelField(),
|
||||
crafting: trainingLevelField(),
|
||||
engineering: trainingLevelField(),
|
||||
explosives: trainingLevelField(),
|
||||
piloting: trainingLevelField(),
|
||||
})
|
||||
}),
|
||||
aspect: new fields.StringField({
|
||||
blank: true,
|
||||
trim: true,
|
||||
}),
|
||||
roles: new fields.ArrayField(new fields.HTMLField()),
|
||||
weapon: new fields.SchemaField({
|
||||
name: new fields.HTMLField(),
|
||||
damage: new fields.HTMLField(),
|
||||
ammo: new fields.SchemaField({
|
||||
quivers: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
||||
mags: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
||||
cells: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
||||
}),
|
||||
}),
|
||||
supplies: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
||||
materials: new fields.NumberField({ min: 0, max: 5, integer: true }),
|
||||
pet: new fields.SchemaField({
|
||||
name: new fields.HTMLField(),
|
||||
info: new fields.HTMLField(),
|
||||
}),
|
||||
transport: new fields.SchemaField({
|
||||
name: new fields.HTMLField(),
|
||||
upkeep: new fields.NumberField({ min: 0, integer: true }),
|
||||
info: new fields.HTMLField(),
|
||||
}),
|
||||
spells: new fields.ArrayField(
|
||||
new fields.SchemaField({
|
||||
name: new fields.HTMLField(),
|
||||
cost: new fields.NumberField(),
|
||||
info: new fields.HTMLField(),
|
||||
})
|
||||
),
|
||||
};
|
||||
};
|
||||
};
|
||||
28
module/sheets/AspectSheet.mjs
Normal file
28
module/sheets/AspectSheet.mjs
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
export class AspectSheet extends ItemSheet {
|
||||
static get defaultOptions() {
|
||||
let opts = mergeObject(
|
||||
super.defaultOptions,
|
||||
{
|
||||
template: `systems/dotdungeon/templates/items/aspect.hbs`,
|
||||
width: 280,
|
||||
height: 340,
|
||||
}
|
||||
);
|
||||
opts.classes.push(`dotdungeon`);
|
||||
return opts;
|
||||
};
|
||||
|
||||
getData() {
|
||||
const ctx = super.getData();
|
||||
const item = this.item.toObject(false);
|
||||
|
||||
ctx.system = item.system;
|
||||
ctx.flags = item.flags;
|
||||
|
||||
console.groupCollapsed(`AspectSheet.getData`);
|
||||
console.log(`ctx`, ctx);
|
||||
console.log(`item`, item);
|
||||
console.groupEnd();
|
||||
return ctx;
|
||||
};
|
||||
};
|
||||
|
|
@ -3,10 +3,10 @@ export class PlayerSheet extends ActorSheet {
|
|||
let opts = mergeObject(
|
||||
super.defaultOptions,
|
||||
{
|
||||
template: "systems/dotdungeon/templates/actors/char-sheet-mvp/sheet.hbs"
|
||||
template: `systems/dotdungeon/templates/actors/char-sheet-mvp/sheet.hbs`
|
||||
}
|
||||
);
|
||||
opts.classes.push("dotdungeon");
|
||||
opts.classes.push(`dotdungeon`);
|
||||
return opts;
|
||||
};
|
||||
|
||||
|
|
@ -27,7 +27,7 @@ export class PlayerSheet extends ActorSheet {
|
|||
ctx.system = actor.system;
|
||||
ctx.flags = actor.flags;
|
||||
|
||||
console.group(`PlayerSheet.getData`);
|
||||
console.groupCollapsed(`PlayerSheet.getData`);
|
||||
console.log(`ctx`, ctx);
|
||||
console.log(`actor`, actor);
|
||||
console.groupEnd();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue