Finishing the Sync sheet and some other stuffs

This commit is contained in:
Oliver-Akins 2023-12-21 23:59:38 -07:00
parent a28718b115
commit 554fae5a93
26 changed files with 494 additions and 105 deletions

View file

@ -1,6 +1,7 @@
// Data Models
import { AspectItemData } from "./models/AspectItemData.mjs";
import { PlayerData } from "./models/PlayerData.mjs";
import { SyncData } from "./models/SyncData.mjs";
// Main Documents
import { PlayerActor } from "./documents/PlayerActor.mjs";
@ -9,7 +10,7 @@ import { AspectItem } from "./documents/AspectItem.mjs";
// Character Sheets
import { AspectSheet } from "./sheets/AspectSheet.mjs";
import { PlayerSheet } from "./sheets/PlayerSheet.mjs";
import { BasicSyncSheet } from "./sheets/SyncVariations/BasicSyncSheet.mjs";
// Utility imports
import * as hbs from "./handlebars.mjs";
@ -17,7 +18,6 @@ import * as hbs from "./handlebars.mjs";
// Non-Setup hooks
import "./hooks/hotReload.mjs";
// Misc Imports
import loadSettings from "./settings/index.mjs";
@ -32,12 +32,26 @@ Hooks.once(`init`, () => {
AspectItem,
};
CONFIG.Actor.dataModels.player = PlayerData;
CONFIG.Actor.dataModels.sync = SyncData;
CONFIG.Item.dataModels.aspect = AspectItemData;
Actors.unregisterSheet("core", ActorSheet);
Actors.registerSheet("dotdungeon.sheet", PlayerSheet, { makeDefault: true });
Actors.registerSheet("dotdungeon", PlayerSheet, {
makeDefault: true,
types: ["player"],
label: "dotdungeon.sheet.PlayerSheet"
});
Actors.registerSheet("dotdungeon", BasicSyncSheet, {
makeDefault: true,
types: ["sync"],
label: "dotdungeon.sheet.SyncSheet.basic"
});
Items.registerSheet("dotdungeon.sheet", AspectSheet, { makeDefault: true });
Items.registerSheet("dotdungeon", AspectSheet, {
makeDefault: true,
types: ["aspect"],
label: "dotdungeon.sheet.AspectSheet"
});
hbs.registerHandlebarsHelpers();
hbs.preloadHandlebarsTemplates();

View file

@ -1,4 +1,3 @@
import { reloadWindows } from "../utils.mjs";
import * as hbs from "../handlebars.mjs";
Hooks.on(`hotReload`, async (data) => {
@ -25,7 +24,9 @@ Hooks.on(`hotReload`, async (data) => {
_templateCache[templateName] = template;
// Re-render open windows
reloadWindows();
for (const window of ui.windows) {
window.render(true);
};
return false;
});

View file

@ -78,8 +78,18 @@ export class PlayerData extends foundry.abstract.DataModel {
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 }),
supplies: new fields.NumberField({
initial: 0,
min: 0,
max: 5,
integer: true
}),
materials: new fields.NumberField({
initial: 0,
min: 0,
max: 5,
integer: true
}),
pet: new fields.SchemaField({
name: new fields.HTMLField(),
info: new fields.HTMLField(),
@ -102,7 +112,9 @@ export class PlayerData extends foundry.abstract.DataModel {
r3: new fields.BooleanField(),
}),
syncDelta: new fields.NumberField({
required: true,
integer: true,
initial: 0,
}),
};
};

View file

@ -0,0 +1,12 @@
export class SyncData extends foundry.abstract.DataModel {
static defineSchema() {
const fields = foundry.data.fields;
return {
value: new fields.NumberField({
required: true,
integer: true,
initial: 100,
}),
};
};
};

View file

@ -1,7 +1,9 @@
import registerClientSettings from "./client_settings.mjs";
import registerWorldSettings from "./world_settings.mjs";
import registerDevSettings from "./dev_settings.mjs";
export default function registerSettings() {
registerClientSettings();
registerWorldSettings();
registerDevSettings();
};

View file

@ -0,0 +1,25 @@
export default function() {
game.settings.register(`dotdungeon`, `playersCanChangeGroup`, {
name: `dotdungeon.settings.playersCanChangeGroup.name`,
hint: `dotdungeon.settings.playersCanChangeGroup.description`,
scope: `world`,
config: true,
type: Boolean,
default: false,
requiresReload: false,
});
game.settings.register(`dotdungeon`, `resourcesOrSupplies`, {
name: `dotdungeon.settings.resourcesOrSupplies.name`,
hint: `dotdungeon.settings.resourcesOrSupplies.description`,
scope: `world`,
config: true,
type: String,
choices: {
"supplies": "dotdungeon.settings.resourcesOrSupplies.option.supplies",
"resources": "dotdungeon.settings.resourcesOrSupplies.option.resources"
},
default: "resources",
requiresReload: false,
});
};

View file

@ -1,7 +1,8 @@
export class GenericSheet extends ActorSheet {
#propogatedSettings = [
`devMode`,
`showAvatarOnSheet`
`showAvatarOnSheet`,
`playersCanChangeGroup`,
];
getData() {

View file

@ -19,7 +19,35 @@ export class PlayerSheet extends GenericSheet {
if (!this.isEditable) return;
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
// html.find(`input.sync__input`).on("blur", ($e) => {});
// html.find(`input.sync__input`).on("blur", ($e) => {
// console.debug(`.dungeon | input.sync__input blur event`);
// let value = parseInt($e.target.value);
// if (!value) {
// ui.notifications.error(
// `dotdungeon.notification.error.invalid-integer`,
// { localize: true }
// );
// return;
// };
// let delta = value - this.#syncValue();
// this.actor.system.syncDelta += delta;
// for (const actor of game.actors) {
// if (actor._sheet)
// }
// game.socket.emit(`system.dotdungeon`, {
// type: "reload",
// })
// });
};
#syncValue() {
let delta = 0;
for (const actor of game.actors) {
delta += actor.system.syncDelta ?? 0;
};
return 100 + delta;
};
getData() {
@ -30,7 +58,8 @@ export class PlayerSheet extends GenericSheet {
ctx.flags = actor.flags;
ctx.computed = {
syncTotal: 0
syncTotal: this.#syncValue(),
canChangeGroup: ctx.settings.playersCanChangeGroup,
};
console.groupCollapsed(`PlayerSheet.getData`);

View file

@ -0,0 +1,32 @@
import { GenericSheet } from "../GenericSheet.mjs";
export class AbstractSyncSheet extends GenericSheet {
static get defaultOptions() {
let opts = mergeObject(
super.defaultOptions,
{
width: 200,
height: 200,
}
);
opts.classes.push(
`dotdungeon`,
`dotdungeon--sync-sheet`
);
return opts;
};
getData() {
const ctx = super.getData();
const actor = this.actor.toObject(false);
ctx.system = actor.system;
ctx.flags = actor.flags;
console.groupCollapsed(`SyncSheet.getData`);
console.log(`ctx`, ctx);
console.log(`actor`, actor);
console.groupEnd();
return ctx;
};
};

View file

@ -0,0 +1,7 @@
import { AbstractSyncSheet } from "./AbstractSyncSheet.mjs";
export class BasicSyncSheet extends AbstractSyncSheet {
get template() {
return `systems/dotdungeon/templates/actors/sync/basic.hbs`;
};
};

View file

@ -1,11 +1,11 @@
export function reloadWindows(type = null) {
if (!type) {
for (const window of ui.windows) {
for (const window of globalThis.ui.windows) {
window.render(true);
};
return;
};
for (const window of ui.windows) {
for (const window of globalThis.ui.windows) {
if (window instanceof type) {
window.render(true);
};