Working on the spells panel, which resulted in a lot of weird structural changes that aren't *really* functional yet
This commit is contained in:
parent
227029ffcd
commit
dfc51a5899
31 changed files with 499 additions and 84 deletions
|
|
@ -49,10 +49,6 @@
|
||||||
.dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled {
|
.dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
.dotdungeon > .window-content .debug-data {
|
|
||||||
opacity: 60%;
|
|
||||||
font-family: sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon {
|
||||||
container-type: size;
|
container-type: size;
|
||||||
|
|
@ -61,17 +57,40 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: #f2f2f2;
|
background: #f2f2f2;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content .debug-data {
|
||||||
|
opacity: 60%;
|
||||||
|
font-family: sans-serif;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary {
|
||||||
background: #00aa00;
|
background: #00aa00;
|
||||||
color: black;
|
color: black;
|
||||||
padding: 5px 7px;
|
padding: 4px 8px;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary:hover {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary:hover {
|
||||||
background: #008800;
|
background: #008800;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger {
|
||||||
|
background: red;
|
||||||
|
color: white;
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover {
|
||||||
|
background: #cc0000;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.reduced-padding {
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding {
|
||||||
|
padding: 4px 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding.reduced-padding {
|
||||||
|
padding: 2px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;AAIF;EACC;EACA,aElDU;;;AFuDZ;EACC;;AAEA;EACC;EACA,YE1DW;;AF6DZ;EACC;;AAEA;EACC,YE9Dc;EF+Dd,OErDe;EFsDf;;AACA;EACC,YE7DiB;EF8DjB,OEpDkB%22,%22file%22:%22generic.css%22%7D */
|
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YErDW;;AFuDX;EACC;EACA,aE3DS;EF4DT;;AAGD;EACC;;AAEA;EACC,YE9Da;EF+Db,OErDc;EFsDd;;AACA;EACC,YE7DgB;EF8DhB,OEpDiB;;AFwDnB;EACC,YEpDY;EFqDZ,OElDa;EFmDb;;AACA;EACC,YEvDe;EFwDf,OErDgB;;AFyDlB;EACC;;AAID;EACC;;AACA;EACC%22,%22file%22:%22generic.css%22%7D */
|
||||||
|
|
|
||||||
30
.styles/icons.css
Normal file
30
.styles/icons.css
Normal file
|
|
@ -0,0 +1,30 @@
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--12 {
|
||||||
|
height: 12px;
|
||||||
|
width: 12px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--16 {
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--20 {
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--24 {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--28 {
|
||||||
|
height: 28px;
|
||||||
|
width: 28px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--32 {
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--36 {
|
||||||
|
height: 36px;
|
||||||
|
width: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/icons.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAOG;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA%22,%22file%22:%22icons.css%22%7D */
|
||||||
|
|
@ -49,10 +49,6 @@
|
||||||
.dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled {
|
.dotdungeon > .window-content select :disabled, .dotdungeon > .window-content select:hover :disabled {
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
.dotdungeon > .window-content .debug-data {
|
|
||||||
opacity: 60%;
|
|
||||||
font-family: sans-serif;
|
|
||||||
}
|
|
||||||
|
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon {
|
||||||
container-type: size;
|
container-type: size;
|
||||||
|
|
@ -61,18 +57,70 @@
|
||||||
padding: 0;
|
padding: 0;
|
||||||
background: #f2f2f2;
|
background: #f2f2f2;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content .debug-data {
|
||||||
|
opacity: 60%;
|
||||||
|
font-family: sans-serif;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button {
|
||||||
border-radius: 4px;
|
border-radius: 4px;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary {
|
||||||
background: #00aa00;
|
background: #00aa00;
|
||||||
color: black;
|
color: black;
|
||||||
padding: 5px 7px;
|
padding: 4px 8px;
|
||||||
}
|
}
|
||||||
.dotdungeon.dotdungeon.dotdungeon.dotdungeon button.primary:hover {
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.primary:hover {
|
||||||
background: #008800;
|
background: #008800;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger {
|
||||||
|
background: red;
|
||||||
|
color: white;
|
||||||
|
padding: 4px 8px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.danger:hover {
|
||||||
|
background: #cc0000;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.reduced-padding {
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding {
|
||||||
|
padding: 4px 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon > .window-content button.equal-padding.reduced-padding {
|
||||||
|
padding: 2px 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--12 {
|
||||||
|
height: 12px;
|
||||||
|
width: 12px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--16 {
|
||||||
|
height: 16px;
|
||||||
|
width: 16px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--20 {
|
||||||
|
height: 20px;
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--24 {
|
||||||
|
height: 24px;
|
||||||
|
width: 24px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--28 {
|
||||||
|
height: 28px;
|
||||||
|
width: 28px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--32 {
|
||||||
|
height: 32px;
|
||||||
|
width: 32px;
|
||||||
|
}
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon .icon--36 {
|
||||||
|
height: 36px;
|
||||||
|
width: 36px;
|
||||||
|
}
|
||||||
|
|
||||||
.dotdungeon .stat {
|
.dotdungeon .stat {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -146,6 +194,18 @@
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
|
.dotdungeon .actor--pc details {
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
padding: 4px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.dotdungeon .actor--pc details summary {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.dotdungeon .actor--pc details[open] .expanded-rotate {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
.dotdungeon .actor--pc .panel--profile {
|
.dotdungeon .actor--pc .panel--profile {
|
||||||
grid-area: profile;
|
grid-area: profile;
|
||||||
}
|
}
|
||||||
|
|
@ -366,4 +426,17 @@
|
||||||
resize: vertical;
|
resize: vertical;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;AAIF;EACC;EACA,aElDU;;;AFuDZ;EACC;;AAEA;EACC;EACA,YE1DW;;AF6DZ;EACC;;AAEA;EACC,YE9Dc;EF+Dd,OErDe;EFsDf;;AACA;EACC,YE7DiB;EF8DjB,OEpDkB;;;AEvBtB;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ELlBD;EACA;EACA;EKkBE;EACA;EACA,aJrBU;EIsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAGC;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AD1LF;ECkMC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD1NL;ECoOC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC5PL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */
|
.dotdungeon .item--spell {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon .item--spell input[type=text] {
|
||||||
|
font-size: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.dotdungeon .item--spell textarea {
|
||||||
|
width: 100%;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../styles/generic.scss%22,%22../styles/mixins/_foundry.scss%22,%22../styles/_vars.scss%22,%22../styles/mixins/_partials.scss%22,%22../styles/icons.scss%22,%22../styles/sheets/partials/stat.scss%22,%22../styles/sheets/partials/skill.scss%22,%22../styles/sheets/partials/panel.scss%22,%22../styles/mixins/_breakpoints.scss%22,%22../styles/sheets/actor/mvp.scss%22,%22../styles/sheets/actor/sync/basic.scss%22,%22../styles/sheets/items/aspect.scss%22,%22../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAIQ;AAKP;EACC;;AAED;EACC;;AAGD;ECfA;EACA;EACA;EDeC,aEhBW;EFiBX;;AAGD;EACC;;AAGD;ECzBA;EACA;EACA;EDyBC;EACA;;AAEA;EACC;;AAIF;AAAA;AAAA;EAGC;EGpCD;EACA;EACA;EACA;EACA;EACA,aDLW;;ACOX;AAAA;AAAA;AAAA;AAAA;EAEC;;AH+BD;EACC;;AAEA;EACC;;;AAMH;EACC;;AAEA;EACC;EACA,YErDW;;AFuDX;EACC;EACA,aE3DS;EF4DT;;AAGD;EACC;;AAEA;EACC,YE9Da;EF+Db,OErDc;EFsDd;;AACA;EACC,YE7DgB;EF8DhB,OEpDiB;;AFwDnB;EACC,YEpDY;EFqDZ,OElDa;EFmDb;;AACA;EACC,YEvDe;EFwDf,OErDgB;;AFyDlB;EACC;;AAID;EACC;;AACA;EACC;;;AI1FF;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;AAFD;EACC;EACA;;;ACTJ;EACC;EACA;EACA;;ACHD;EACC;EACA;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;;ACdH;EACC;EACA;EAEA;;AAEA;EACC;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ENlBD;EACA;EACA;EMkBE;EACA;EACA,aLrBU;EKsBV;;AAGD;EAEC,QADO;EAEP,OAFO;EAGP;;AAIF;EACC;;;AC7BD;EDkCA;IACC;IACA;;;AExCF;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AD3MF;ECmNC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AD3OL;ECqPC;IACC;IACA;IACA,qBACC;;EAeC;IACC;;;AC7QL;EACC;EACA;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;AAGD;EACC;EACA;;AAMA;EACC;EACA;;;AFlBH;EE4BG;IACC;IACA;;;ACzCL;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA;;;ACXF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22root.css%22%7D */
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,18 @@
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
}
|
}
|
||||||
|
.dotdungeon .actor--pc details {
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgba(0, 0, 0, 0.2);
|
||||||
|
padding: 4px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
}
|
||||||
|
.dotdungeon .actor--pc details summary {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
.dotdungeon .actor--pc details[open] .expanded-rotate {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
.dotdungeon .actor--pc .panel--profile {
|
.dotdungeon .actor--pc .panel--profile {
|
||||||
grid-area: profile;
|
grid-area: profile;
|
||||||
}
|
}
|
||||||
|
|
@ -183,4 +195,4 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAGC;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AC1LF;EDkMC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AC1NL;EDoOC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */
|
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/actor/mvp.scss%22,%22../../../styles/mixins/_breakpoints.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAGA;EACC;EACA,qBACC;EASD;EACA,oBACC;EAGD;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIA;EACC;;AAMF;EACC;;AACA;EACC;EACA;;AAGD;EACC;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAED;EACC;EACA;;AAED;EACC;;AAGD;EACC;EACA;EACA;;AAGD;AAAA;AAAA;EAGC;EACA;;AAGD;EACC;;AAGF;EACC;;AAEA;EACC;EACA;EACA;;AAGD;AAAA;EAEC;EACA;EACA;;AAEA;AAAA;EACC;;AAIF;EACC;EACA;;AAGF;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAGF;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;;AAED;EACC;EACA;EACA;EACA;;AAIH;EACC;;AACA;EACC;EACA;EACA;EACA;;AAEA;EACC;;AAIH;EACC;;AAED;EACC;;AAED;EACC;;AAED;EACC;;;AC3MF;EDmNC;IACC;IACA;IACA,qBACC;;EAkBC;IACC;;EAKD;IACC;IACA;;;AC3OL;EDqPC;IACC;IACA;IACA,qBACC;;EAeC;IACC%22,%22file%22:%22mvp.css%22%7D */
|
||||||
|
|
|
||||||
14
.styles/sheets/items/spell.css
Normal file
14
.styles/sheets/items/spell.css
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
.dotdungeon .item--spell {
|
||||||
|
padding: 4px;
|
||||||
|
}
|
||||||
|
.dotdungeon .item--spell input[type=text] {
|
||||||
|
font-size: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
.dotdungeon .item--spell textarea {
|
||||||
|
width: 100%;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*# sourceMappingURL=data:application/json;charset=utf-8,%7B%22version%22:3,%22sourceRoot%22:%22%22,%22sources%22:%5B%22../../../styles/sheets/items/spell.scss%22%5D,%22names%22:%5B%5D,%22mappings%22:%22AAEA;EACC;;AAEA;EACC;EACA;EACA;;AAGD;EACC;EACA%22,%22file%22:%22spell.css%22%7D */
|
||||||
|
|
@ -74,7 +74,8 @@
|
||||||
"SyncSheet": {
|
"SyncSheet": {
|
||||||
"basic": "Theme: Basic"
|
"basic": "Theme: Basic"
|
||||||
},
|
},
|
||||||
"AspectSheet": "Aspect Sheet"
|
"AspectSheet": "Aspect Sheet",
|
||||||
|
"SpellSheet": "Spell Sheet"
|
||||||
},
|
},
|
||||||
"actor": {
|
"actor": {
|
||||||
"pc": {
|
"pc": {
|
||||||
|
|
@ -184,6 +185,16 @@
|
||||||
"duration": "Duration (seconds)",
|
"duration": "Duration (seconds)",
|
||||||
"description": "Description",
|
"description": "Description",
|
||||||
"send-to-chat": "Send Aspect to Chat"
|
"send-to-chat": "Send Aspect to Chat"
|
||||||
|
},
|
||||||
|
"spell": {
|
||||||
|
"name.placeholder": "Name...",
|
||||||
|
"cost.label": "Cost",
|
||||||
|
"description.label": "Description",
|
||||||
|
"aria": {
|
||||||
|
"name": "The spell's name",
|
||||||
|
"cost": "The amount of bytes it takes to cast the spell",
|
||||||
|
"description": "The details of the spell"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"notification": {
|
"notification": {
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,22 @@
|
||||||
export const DOTDUNGEON = {};
|
const statDice = [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
||||||
|
|
||||||
DOTDUNGEON.statDice = [ `d4`, `d6`, `d8`, `d10`, `d12`, `d20` ];
|
const trainingLevels = [``, `locked`, `+2`, `+4`];
|
||||||
|
|
||||||
DOTDUNGEON.trainingLevels = [``, `locked`, `+2`, `+4`];
|
const damageTypes = [ `slashing`, `piercing`, `smashing`, `gun`, `neon`, `shadow`, `solar` ];
|
||||||
|
|
||||||
DOTDUNGEON.damageTypes = [ `slashing`, `piercing`, `smashing`, `gun`, `neon`, `shadow`, `solar` ];
|
const ammoTypes = [`quivers`, `mags`, `cells`];
|
||||||
|
|
||||||
DOTDUNGEON.ammoTypes = [`quivers`, `mags`, `cells`];
|
const skills = {
|
||||||
|
build: [ "defense", "magic", "melee", "platforming", "strength", ],
|
||||||
|
meta: [ "alchemy", "arcanum", "dreams", "lore", "navigation", ],
|
||||||
|
presence: [ "animal_handling", "perception", "sneak", "speech", "vibes", ],
|
||||||
|
hands: [ "accuracy", "crafting", "engineering", "explosives", "piloting", ]
|
||||||
|
};
|
||||||
|
|
||||||
|
export default {
|
||||||
|
statDice,
|
||||||
|
trainingLevels,
|
||||||
|
damageTypes,
|
||||||
|
ammoTypes,
|
||||||
|
skills,
|
||||||
|
};
|
||||||
|
|
@ -14,6 +14,11 @@ export class ActorHandler extends Actor {
|
||||||
return this.actorTypes[this.type];
|
return this.actorTypes[this.type];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
updateEmbeddedDocument($event) {
|
||||||
|
if (!this.fn?.updateEmbeddedDocument) return;
|
||||||
|
this.fn.updateEmbeddedDocument.bind(this)($event);
|
||||||
|
};
|
||||||
|
|
||||||
createCustomSpell() {
|
createCustomSpell() {
|
||||||
if (!this.fn?.createCustomSpell) return;
|
if (!this.fn?.createCustomSpell) return;
|
||||||
this.fn.createCustomSpell.bind(this)();
|
this.fn.createCustomSpell.bind(this)();
|
||||||
|
|
|
||||||
|
|
@ -7,4 +7,10 @@ export class PlayerActor {
|
||||||
description: ``,
|
description: ``,
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static async updateEmbeddedDocument($event) {
|
||||||
|
let data = $event.target.dataset;
|
||||||
|
let item = await fromUuid(data.embeddedId);
|
||||||
|
item?.update({ [data.embeddedUpdate]: $event.target.value });
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,26 +1,27 @@
|
||||||
// Data Models
|
// Data Models
|
||||||
import { DescribedItemData } from "./module/models/Item/DescribedItemData.mjs";
|
import { AspectItemData } from "./models/AspectItemData.mjs";
|
||||||
import { AspectItemData } from "./module/models/AspectItemData.mjs";
|
import { SpellItemData } from "./models/Item/Spell.mjs";
|
||||||
import { PlayerData } from "./module/models/PlayerData.mjs";
|
import { PlayerData } from "./models/PlayerData.mjs";
|
||||||
import { SyncData } from "./module/models/SyncData.mjs";
|
import { SyncData } from "./models/SyncData.mjs";
|
||||||
|
|
||||||
// Main Documents
|
// Main Documents
|
||||||
import { ActorHandler } from "./module/documents/Actor/Handler.mjs";
|
import { ActorHandler } from "./documents/Actor/Handler.mjs";
|
||||||
|
|
||||||
// Character Sheets
|
// Character Sheets
|
||||||
import { AspectSheet } from "./module/sheets/AspectSheet.mjs";
|
import { SpellSheet } from "./sheets/SpellSheet.mjs";
|
||||||
import { PlayerSheet } from "./module/sheets/PlayerSheet.mjs";
|
import { AspectSheet } from "./sheets/AspectSheet.mjs";
|
||||||
import { BasicSyncSheet } from "./module/sheets/SyncVariations/BasicSyncSheet.mjs";
|
import { PlayerSheet } from "./sheets/PlayerSheet.mjs";
|
||||||
|
import { BasicSyncSheet } from "./sheets/SyncVariations/BasicSyncSheet.mjs";
|
||||||
|
|
||||||
// Utility imports
|
// Utility imports
|
||||||
import * as hbs from "./module/handlebars.mjs";
|
import * as hbs from "./handlebars.mjs";
|
||||||
|
|
||||||
// Non-Setup hooks
|
// Non-Setup hooks
|
||||||
import "./module/hooks/hotReload.mjs";
|
import "./hooks/hotReload.mjs";
|
||||||
|
|
||||||
// Misc Imports
|
// Misc Imports
|
||||||
import loadSettings from "./module/settings/index.mjs";
|
import loadSettings from "./settings/index.mjs";
|
||||||
import { DOTDUNGEON } from "./module/config.mjs";
|
import DOTDUNGEON from "./config.mjs";
|
||||||
|
|
||||||
|
|
||||||
Hooks.once(`init`, () => {
|
Hooks.once(`init`, () => {
|
||||||
|
|
@ -31,7 +32,7 @@ Hooks.once(`init`, () => {
|
||||||
CONFIG.Actor.dataModels.player = PlayerData;
|
CONFIG.Actor.dataModels.player = PlayerData;
|
||||||
CONFIG.Actor.dataModels.sync = SyncData;
|
CONFIG.Actor.dataModels.sync = SyncData;
|
||||||
CONFIG.Item.dataModels.aspect = AspectItemData;
|
CONFIG.Item.dataModels.aspect = AspectItemData;
|
||||||
CONFIG.Item.dataModels.spell = DescribedItemData;
|
CONFIG.Item.dataModels.spell = SpellItemData;
|
||||||
CONFIG.Actor.documentClass = ActorHandler;
|
CONFIG.Actor.documentClass = ActorHandler;
|
||||||
|
|
||||||
CONFIG.DOTDUNGEON = DOTDUNGEON;
|
CONFIG.DOTDUNGEON = DOTDUNGEON;
|
||||||
|
|
@ -53,6 +54,11 @@ Hooks.once(`init`, () => {
|
||||||
types: ["aspect"],
|
types: ["aspect"],
|
||||||
label: "dotdungeon.sheet-names.AspectSheet"
|
label: "dotdungeon.sheet-names.AspectSheet"
|
||||||
});
|
});
|
||||||
|
Items.registerSheet("dotdungeon", SpellSheet, {
|
||||||
|
makeDefault: true,
|
||||||
|
types: ["spell"],
|
||||||
|
label: "dotdungeon.sheet-names.SpellSheet"
|
||||||
|
});
|
||||||
|
|
||||||
hbs.registerHandlebarsHelpers();
|
hbs.registerHandlebarsHelpers();
|
||||||
hbs.preloadHandlebarsTemplates();
|
hbs.preloadHandlebarsTemplates();
|
||||||
|
|
@ -7,5 +7,6 @@
|
||||||
* @returns {"open"|null} The HTML insertion indicating the details is expanded
|
* @returns {"open"|null} The HTML insertion indicating the details is expanded
|
||||||
*/
|
*/
|
||||||
export function detailsExpanded(expanded, collapseId) {
|
export function detailsExpanded(expanded, collapseId) {
|
||||||
|
console.log(`.dungeon |`, collapseId, expanded)
|
||||||
return expanded.has(collapseId) ? "open" : null;
|
return expanded.has(collapseId) ? "open" : null;
|
||||||
};
|
};
|
||||||
|
|
@ -1 +1,10 @@
|
||||||
export function schemaOptions() {};
|
export function schemaOptions(document, schemaPath) {
|
||||||
|
let splitPath = schemaPath.split(`.`);
|
||||||
|
|
||||||
|
let tempLocation = document.schema.fields.system;
|
||||||
|
for (const part of splitPath) {
|
||||||
|
tempLocation = tempLocation[part].fields
|
||||||
|
}
|
||||||
|
|
||||||
|
return CONFIG.Actor.dataModels.player.schema.fields.weapon.fields.mainHand.fields.damage.options.options;
|
||||||
|
};
|
||||||
|
|
@ -2,11 +2,6 @@ export class CommonItemData extends foundry.abstract.DataModel {
|
||||||
static defineSchema() {
|
static defineSchema() {
|
||||||
const fields = foundry.data.fields;
|
const fields = foundry.data.fields;
|
||||||
return {
|
return {
|
||||||
name: new fields.StringField({
|
|
||||||
initial: ``,
|
|
||||||
blank: true,
|
|
||||||
trim: true,
|
|
||||||
}),
|
|
||||||
cost: new fields.NumberField({
|
cost: new fields.NumberField({
|
||||||
initial: null,
|
initial: null,
|
||||||
nullable: true,
|
nullable: true,
|
||||||
|
|
|
||||||
22
module/models/Item/Spell.mjs
Normal file
22
module/models/Item/Spell.mjs
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
import { DescribedItemData } from "./DescribedItemData.mjs";
|
||||||
|
import DOTDUNGEON from "../../config.mjs";
|
||||||
|
|
||||||
|
export class SpellItemData extends DescribedItemData {
|
||||||
|
static defineSchema() {
|
||||||
|
const fields = foundry.data.fields;
|
||||||
|
return mergeObject(super.defineSchema(), {
|
||||||
|
skill: new fields.StringField({
|
||||||
|
initial: ``,
|
||||||
|
blank: true,
|
||||||
|
trim: true,
|
||||||
|
options() {
|
||||||
|
let skills = [ `` ];
|
||||||
|
for (const group in DOTDUNGEON.skills) {
|
||||||
|
skills.push(...skills[group]);
|
||||||
|
};
|
||||||
|
return skills;
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -20,7 +20,7 @@ export class AspectSheet extends ItemSheet {
|
||||||
console.debug(`.dungeon | Adding event listeners for Item: ${this.id}`);
|
console.debug(`.dungeon | Adding event listeners for Item: ${this.id}`);
|
||||||
};
|
};
|
||||||
|
|
||||||
getData() {
|
async getData() {
|
||||||
const ctx = {};
|
const ctx = {};
|
||||||
const item = this.item.toObject(false);
|
const item = this.item.toObject(false);
|
||||||
|
|
||||||
|
|
@ -29,10 +29,6 @@ export class AspectSheet extends ItemSheet {
|
||||||
ctx.system = item.system;
|
ctx.system = item.system;
|
||||||
ctx.flags = item.flags;
|
ctx.flags = item.flags;
|
||||||
|
|
||||||
console.groupCollapsed(`AspectSheet.getData`);
|
|
||||||
console.log(`ctx`, ctx);
|
|
||||||
console.log(`item`, item);
|
|
||||||
console.groupEnd();
|
|
||||||
return ctx;
|
return ctx;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
@ -1,3 +1,6 @@
|
||||||
|
import DOTDUNGEON from "../config.mjs";
|
||||||
|
import { preloadIcons } from "../handlebars.mjs";
|
||||||
|
|
||||||
export class GenericActorSheet extends ActorSheet {
|
export class GenericActorSheet extends ActorSheet {
|
||||||
_expanded = new Set();
|
_expanded = new Set();
|
||||||
|
|
||||||
|
|
@ -8,8 +11,8 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
`resourcesOrSupplies`,
|
`resourcesOrSupplies`,
|
||||||
];
|
];
|
||||||
|
|
||||||
getData() {
|
async getData() {
|
||||||
const ctx = super.getData();
|
const ctx = {};
|
||||||
|
|
||||||
// Send all of the settings that sheets need into their context
|
// Send all of the settings that sheets need into their context
|
||||||
ctx.settings = {};
|
ctx.settings = {};
|
||||||
|
|
@ -24,6 +27,10 @@ export class GenericActorSheet extends ActorSheet {
|
||||||
idp: this.actor.uuid,
|
idp: this.actor.uuid,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
ctx.actor = this.actor;
|
||||||
|
ctx.config = DOTDUNGEON;
|
||||||
|
ctx.icons = await preloadIcons();
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
42
module/sheets/GenericItemSheet.mjs
Normal file
42
module/sheets/GenericItemSheet.mjs
Normal file
|
|
@ -0,0 +1,42 @@
|
||||||
|
import { preloadIcons } from "../handlebars.mjs";
|
||||||
|
|
||||||
|
export class GenericItemSheet extends ItemSheet {
|
||||||
|
_expanded = new Set();
|
||||||
|
|
||||||
|
#propogatedSettings = [
|
||||||
|
`devMode`,
|
||||||
|
`showAvatarOnSheet`,
|
||||||
|
`playersCanChangeGroup`,
|
||||||
|
`resourcesOrSupplies`,
|
||||||
|
];
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
|
||||||
|
if (this.document.isEmbedded) return;
|
||||||
|
if (!this.isEditable) return;
|
||||||
|
console.debug(`.dungeon | Adding event listeners for Generic Item: ${this.id}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
async getData() {
|
||||||
|
const ctx = {};
|
||||||
|
const item = this.item.toObject(false);
|
||||||
|
|
||||||
|
// Send all of the settings that sheets need into their context
|
||||||
|
ctx.settings = {};
|
||||||
|
for (const setting of this.#propogatedSettings) {
|
||||||
|
ctx.settings[setting] = game.settings.get(`dotdungeon`, setting);
|
||||||
|
};
|
||||||
|
|
||||||
|
ctx.isGM = game.users.current.hasRole(CONST.USER_ROLES.ASSISTANT);
|
||||||
|
|
||||||
|
ctx.meta = {
|
||||||
|
expanded: this._expanded,
|
||||||
|
idp: this.actor.uuid,
|
||||||
|
};
|
||||||
|
|
||||||
|
ctx.icons = await preloadIcons();
|
||||||
|
|
||||||
|
return ctx;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -20,23 +20,23 @@ export class PlayerSheet extends GenericActorSheet {
|
||||||
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
|
console.debug(`.dungeon | Adding event listeners for Actor: ${this.id}`);
|
||||||
|
|
||||||
html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor));
|
html.find(`.add-spell`).on(`click`, this.actor.createCustomSpell.bind(this.actor));
|
||||||
|
html.find(`[data-embedded-update]`)
|
||||||
|
.on(`change`, this.actor.updateEmbeddedDocument.bind(this.actor));
|
||||||
};
|
};
|
||||||
|
|
||||||
getData() {
|
async getData() {
|
||||||
const ctx = super.getData();
|
const ctx = await super.getData();
|
||||||
const actor = this.actor.toObject(false);
|
const actor = this.actor.toObject(false);
|
||||||
|
|
||||||
ctx.system = actor.system;
|
ctx.system = actor.system;
|
||||||
ctx.flags = actor.flags;
|
ctx.flags = actor.flags;
|
||||||
|
ctx.items = this.actor.itemTypes;
|
||||||
|
|
||||||
ctx.computed = {
|
ctx.computed = {
|
||||||
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
|
canChangeGroup: ctx.settings.playersCanChangeGroup || ctx.isGM,
|
||||||
};
|
};
|
||||||
|
|
||||||
console.groupCollapsed(`PlayerSheet.getData`);
|
console.log(ctx)
|
||||||
console.log(`ctx`, ctx);
|
|
||||||
console.log(`actor`, actor);
|
|
||||||
console.groupEnd();
|
|
||||||
return ctx;
|
return ctx;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
36
module/sheets/SpellSheet.mjs
Normal file
36
module/sheets/SpellSheet.mjs
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
import { GenericItemSheet } from "./GenericItemSheet.mjs";
|
||||||
|
|
||||||
|
export class SpellSheet extends GenericItemSheet {
|
||||||
|
static get defaultOptions() {
|
||||||
|
let opts = mergeObject(
|
||||||
|
super.defaultOptions,
|
||||||
|
{
|
||||||
|
template: `systems/dotdungeon/templates/items/spell.hbs`,
|
||||||
|
width: 280,
|
||||||
|
height: 340,
|
||||||
|
}
|
||||||
|
);
|
||||||
|
opts.classes.push(`dotdungeon`);
|
||||||
|
return opts;
|
||||||
|
};
|
||||||
|
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
|
||||||
|
if (this.document.isEmbedded) return;
|
||||||
|
if (!this.isEditable) return;
|
||||||
|
console.debug(`.dungeon | Adding event listeners for Generic Item: ${this.id}`);
|
||||||
|
};
|
||||||
|
|
||||||
|
async getData() {
|
||||||
|
const ctx = {};
|
||||||
|
const item = this.item.toObject(false);
|
||||||
|
|
||||||
|
ctx.name = super.name;
|
||||||
|
ctx.item = item;
|
||||||
|
ctx.system = item.system;
|
||||||
|
ctx.flags = item.flags;
|
||||||
|
|
||||||
|
return ctx;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
@ -16,8 +16,8 @@ export class AbstractSyncSheet extends GenericActorSheet {
|
||||||
return opts;
|
return opts;
|
||||||
};
|
};
|
||||||
|
|
||||||
getData() {
|
async getData() {
|
||||||
const ctx = super.getData();
|
const ctx = await super.getData();
|
||||||
const actor = this.actor.toObject(false);
|
const actor = this.actor.toObject(false);
|
||||||
|
|
||||||
ctx.system = actor.system;
|
ctx.system = actor.system;
|
||||||
|
|
|
||||||
|
|
@ -24,4 +24,10 @@ $text-on-primary-l20: black;
|
||||||
$text-on-primary-d20: white;
|
$text-on-primary-d20: white;
|
||||||
$text-on-primary-d40: white;
|
$text-on-primary-d40: white;
|
||||||
$text-on-primary-d60: white;
|
$text-on-primary-d60: white;
|
||||||
$text-on-primary-d80: white;
|
$text-on-primary-d80: white;
|
||||||
|
|
||||||
|
$colour-danger: red;
|
||||||
|
$colour-danger-d20: color.scale($colour-danger, $lightness: -20%);
|
||||||
|
|
||||||
|
$text-on-danger: white;
|
||||||
|
$text-on-danger-d20: white;
|
||||||
|
|
@ -61,6 +61,7 @@
|
||||||
.debug-data {
|
.debug-data {
|
||||||
opacity: 60%;
|
opacity: 60%;
|
||||||
font-family: $body-font;
|
font-family: $body-font;
|
||||||
|
word-break: break-all;
|
||||||
}
|
}
|
||||||
|
|
||||||
button {
|
button {
|
||||||
|
|
@ -69,12 +70,35 @@
|
||||||
&.primary {
|
&.primary {
|
||||||
background: $colour-primary;
|
background: $colour-primary;
|
||||||
color: $text-on-primary;
|
color: $text-on-primary;
|
||||||
padding: 5px 7px;
|
padding: 4px 8px;
|
||||||
&:hover {
|
&:hover {
|
||||||
background: $colour-primary-d20;
|
background: $colour-primary-d20;
|
||||||
color: $text-on-primary-d20;
|
color: $text-on-primary-d20;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.danger {
|
||||||
|
background: $colour-danger;
|
||||||
|
color: $text-on-danger;
|
||||||
|
padding: 4px 8px;
|
||||||
|
&:hover {
|
||||||
|
background: $colour-danger-d20;
|
||||||
|
color: $text-on-danger-d20;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
&.reduced-padding {
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
&.equal-padding {
|
||||||
|
padding: 4px 4px;
|
||||||
|
&.reduced-padding {
|
||||||
|
padding: 2px 2px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
14
styles/icons.scss
Normal file
14
styles/icons.scss
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
$iconSizes: 12, 16, 20, 24, 28, 32, 36;
|
||||||
|
|
||||||
|
.dotdungeon.dotdungeon.dotdungeon.dotdungeon {
|
||||||
|
.icon {
|
||||||
|
|
||||||
|
// The various icon sizes
|
||||||
|
@each $size in $iconSizes {
|
||||||
|
&--#{$size} {
|
||||||
|
height: #{$size}px;
|
||||||
|
width: #{$size}px;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
@use "./vars.scss" as *;
|
@use "./vars.scss" as *;
|
||||||
|
|
||||||
@use "./generic.scss";
|
@use "./generic.scss";
|
||||||
|
@use "./icons.scss";
|
||||||
|
|
||||||
@use "./sheets/partials/stat.scss";
|
@use "./sheets/partials/stat.scss";
|
||||||
@use "./sheets/partials/skill.scss";
|
@use "./sheets/partials/skill.scss";
|
||||||
|
|
@ -10,4 +11,5 @@
|
||||||
|
|
||||||
@use "./sheets/actor/mvp.scss";
|
@use "./sheets/actor/mvp.scss";
|
||||||
@use "./sheets/actor/sync/basic.scss";
|
@use "./sheets/actor/sync/basic.scss";
|
||||||
@use "./sheets/items/aspect.scss";
|
@use "./sheets/items/aspect.scss";
|
||||||
|
@use "./sheets/items/spell.scss";
|
||||||
|
|
@ -21,6 +21,23 @@
|
||||||
padding: 4px;
|
padding: 4px;
|
||||||
gap: 4px;
|
gap: 4px;
|
||||||
|
|
||||||
|
details {
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgba(0,0,0, 0.2);
|
||||||
|
padding: 4px;
|
||||||
|
margin-bottom: 8px;
|
||||||
|
|
||||||
|
summary {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&[open] {
|
||||||
|
.expanded-rotate {
|
||||||
|
transform: rotate(90deg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.panel {
|
.panel {
|
||||||
&--profile {
|
&--profile {
|
||||||
grid-area: profile;
|
grid-area: profile;
|
||||||
|
|
|
||||||
16
styles/sheets/items/spell.scss
Normal file
16
styles/sheets/items/spell.scss
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
@use "../../vars" as *;
|
||||||
|
|
||||||
|
.dotdungeon .item--spell {
|
||||||
|
padding: 4px;
|
||||||
|
|
||||||
|
input[type=text] {
|
||||||
|
font-size: 1.5em;
|
||||||
|
height: 1.5em;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
width: 100%;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
],
|
],
|
||||||
"url": "https://github.com/Oliver-Akins/foundry.dungeon",
|
"url": "https://github.com/Oliver-Akins/foundry.dungeon",
|
||||||
"esmodules": [
|
"esmodules": [
|
||||||
"dotdungeon.mjs"
|
"module/dotdungeon.mjs"
|
||||||
],
|
],
|
||||||
"styles": [
|
"styles": [
|
||||||
".styles/root.css"
|
".styles/root.css"
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,44 @@
|
||||||
{{#> dotdungeon.panel class="spells" title="dotdungeon.actor.pc.panel.spells"}}
|
{{#> dotdungeon.panel class="spells" title="dotdungeon.actor.pc.panel.spells"}}
|
||||||
{{#each system.spells as | spell |}}
|
{{#each items.spell as | spell |}}
|
||||||
<details {{dd-expanded ../meta.expanded @key}}>
|
<details {{dd-expanded ../meta.expanded spell.uuid}}>
|
||||||
<summary data-collapse-id="{{@key}}">
|
<summary data-collapse-id="{{spell.uuid}}">
|
||||||
{{spell.name}} (Cost: {{spell.cost}})
|
<span class="flex-grow" style="flex-grow: 1">
|
||||||
|
{{spell.name}}
|
||||||
|
{{#if spell.system.cost }}
|
||||||
|
(Cost: {{spell.system.cost}})
|
||||||
|
{{/if}}
|
||||||
|
</span>
|
||||||
</summary>
|
</summary>
|
||||||
|
|
||||||
|
|
||||||
<div class="spell">
|
<div class="spell">
|
||||||
<div class="spell__name">
|
<div class="spell__name">
|
||||||
<label for="{{meta.idp}}-{{@key}}-name">Name</label>
|
<label for="{{spell.uuid}}-name">Name</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="{{meta.idp}}-{{@key}}-name"
|
id="{{spell.uuid}}-name"
|
||||||
name="system.spells.{{@key}}.name"
|
|
||||||
value="{{spell.name}}"
|
value="{{spell.name}}"
|
||||||
|
data-embedded-update="name"
|
||||||
|
data-embedded-id="{{spell.uuid}}"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="spell__cost">
|
<div class="spell__cost">
|
||||||
<label for="{{meta.idp}}-{{@key}}-cost"></label>
|
<label for="{{spell.uuid}}-cost">Cost</label>
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
id="{{meta.idp}}-{{@key}}-cost"
|
id="{{spell.uuid}}-cost"
|
||||||
name="system.spells.{{@key}}.cost"
|
value="{{spell.system.cost}}"
|
||||||
value="{{spell.cost}}"
|
data-embedded-update="system.cost"
|
||||||
|
data-embedded-id="{{spell.uuid}}"
|
||||||
>
|
>
|
||||||
</div>
|
</div>
|
||||||
<div class="spell__description">
|
<div class="spell__description">
|
||||||
{{spell.description}}
|
<label for="{{spell.uuid}}-description"></label>
|
||||||
</div>
|
<textarea
|
||||||
<div class="flex-row flex-end">
|
id="{{spell.uuid}}-description"
|
||||||
<button>
|
data-embedded-update="system.description"
|
||||||
Delete
|
data-embedded-id="{{spell.uuid}}"
|
||||||
</button>
|
>{{spell.system.description}}</textarea>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</details>
|
</details>
|
||||||
|
|
@ -37,10 +46,9 @@
|
||||||
<p>
|
<p>
|
||||||
You have no spells yet!
|
You have no spells yet!
|
||||||
</p>
|
</p>
|
||||||
<div class="debug-data">
|
|
||||||
{{dd-stringify system.spells}}
|
|
||||||
</div>
|
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
||||||
|
|
||||||
<div class="flex-row">
|
<div class="flex-row">
|
||||||
<button
|
<button
|
||||||
class="primary add-spell"
|
class="primary add-spell"
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,11 @@
|
||||||
<pre><code>{{dd-stringify CONFIG}}</code></pre>
|
<pre><code>{{dd-stringify CONFIG}}</code></pre>
|
||||||
</div>
|
</div>
|
||||||
<hr>
|
<hr>
|
||||||
|
<div>
|
||||||
|
Items:
|
||||||
|
<pre><code>{{dd-stringify items}}</code></pre>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
<div>
|
<div>
|
||||||
System:
|
System:
|
||||||
<pre><code>{{dd-stringify system}}</code></pre>
|
<pre><code>{{dd-stringify system}}</code></pre>
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,6 @@
|
||||||
name="system.deactivateAfter"
|
name="system.deactivateAfter"
|
||||||
value="{{system.deactivateAfter}}"
|
value="{{system.deactivateAfter}}"
|
||||||
>
|
>
|
||||||
{{dd-toFriendlyDuration system.deactivateAfter}}
|
|
||||||
</label>
|
</label>
|
||||||
<label>
|
<label>
|
||||||
{{localize "dotdungeon.item.aspect.description"}}:
|
{{localize "dotdungeon.item.aspect.description"}}:
|
||||||
|
|
|
||||||
27
templates/items/spell.hbs
Normal file
27
templates/items/spell.hbs
Normal file
|
|
@ -0,0 +1,27 @@
|
||||||
|
<form autocomplete="off" class="item--spell">
|
||||||
|
<h2>
|
||||||
|
<input
|
||||||
|
type="text"
|
||||||
|
placeholder="{{localize "dotdungeon.item.spell.name.placeholder"}}"
|
||||||
|
name="name"
|
||||||
|
value="{{item.name}}"
|
||||||
|
aria-label="{{localize "dotdungeon.item.spell.aria.name"}}"
|
||||||
|
>
|
||||||
|
</h2>
|
||||||
|
<label>
|
||||||
|
{{localize "dotdungeon.item.spell.cost.label"}}
|
||||||
|
<input
|
||||||
|
type="number"
|
||||||
|
name="system.cost"
|
||||||
|
value="{{system.cost}}"
|
||||||
|
aria-label="{{localize "dotdungeon.item.spell.aria.cost"}}"
|
||||||
|
>
|
||||||
|
</label>
|
||||||
|
<label>
|
||||||
|
{{localize "dotdungeon.item.spell.description.label"}}:
|
||||||
|
<textarea
|
||||||
|
name="system.description"
|
||||||
|
aria-description="{{localize "dotdungeon.item.spell.aria.description"}}"
|
||||||
|
>{{system.description}}</textarea>
|
||||||
|
</label>
|
||||||
|
</form>
|
||||||
Loading…
Add table
Add a link
Reference in a new issue