WIP: Party sheet and Weapon tags

- Reworked the party sheet layout
- Tags displayed as images in char sheet ?
master
U~man 2020-07-16 00:14:02 +02:00
parent 38e4343588
commit 8de509be12
15 changed files with 120 additions and 47 deletions

BIN
src/assets/melee.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

BIN
src/assets/missile.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.6 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
src/assets/twohanded.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 197 KiB

View File

@ -49,6 +49,7 @@
"OSE.details.experience.base": "Experience",
"OSE.details.experience.bonus": "Bonus Experience",
"OSE.details.experience.next": "Next level",
"OSE.details.experience.share": "Experience Share",
"OSE.details.experience.award": "XP Award",
"OSE.details.treasure": "Treasure type",
"OSE.details.treasureTable": "Table",

View File

@ -70,5 +70,17 @@ export const OSE = {
melee: "OSE.items.Melee",
missile: "OSE.items.Missile",
slow: "OSE.items.Slow",
blunt: "OSE.items.Blunt",
reload: "OSE.items.Reload",
splash: "OSE.items.Splash",
brace: "OSE.items.Brace",
twohanded: "OSE.items.TwoHanded",
},
tag_images: {
melee: "/systems/ose/assets/melee.png",
missile: "/systems/ose/assets/missile.png",
slow: "<i class='fas fa-snail'></i>",
twohanded: "/systems/ose/assets/twohanded.png",
}
};
// fa-sign-language

View File

@ -115,10 +115,10 @@ export class OsePartySheet extends FormApplication {
activateListeners(html) {
super.activateListeners(html);
html
.find("button[data-action='select-actors']")
.find(".item-controls .item-control .select-actors")
.click(this._selectActors.bind(this));
html.find("button[data-action='deal-xp']").click(this._dealXP.bind(this));
html.find(".item-controls .item-control .deal-xp").click(this._dealXP.bind(this));
html.find("a.resync").click(() => this.render(true));

View File

@ -34,6 +34,10 @@ export const registerHelpers = async function () {
return parseFloat(lh) * parseFloat(rh);
});
Handlebars.registerHelper("roundWeight", function (weight) {
return Math.round(parseFloat(weight) / 100) / 10;
});
Handlebars.registerHelper("counter", function (status, value, max) {
return status
? Math.clamped((100.0 * value) / max, 0, 100)

View File

@ -191,6 +191,8 @@ export class OseItem extends Item {
if (matches) {
title = matches[1];
val = val.substring(0, matches.index);
} else {
title = val;
}
// Auto fill checkboxes
switch (val) {

View File

@ -274,6 +274,7 @@
height: 30px;
margin: 0;
line-height: 30px;
flex-basis: 90px;
.item-image {
flex-basis: 30px;
flex-grow: 0;
@ -285,12 +286,23 @@
}
}
}
.icon-row {
img {
border: none;
margin: 3px 1px;
}
}
.field-flex {
flex: 1;
text-align: left;
font-size: 12px;
text-indent: 8px;
}
.field-longer {
text-indent: 8px;
text-align: left;
flex-basis: 150px;
flex-basis: 90px;
font-size: 12px;
flex-grow: 0;
}
.field-long {
flex-basis: 65px;

View File

@ -15,7 +15,20 @@
color: whitesmoke;
background: $darkBackground;
padding: 4px 0;
text-align: center;
line-height: 20px;
text-align: left;
padding: 2px 10px;
.item-controls {
.item-control {
padding: 0 2px;
button {
line-height: 15px;
margin: 0 1px;
background: rgba(255, 255, 240, 0.8);
border: 1px solid #b5b3a4;
}
}
}
}
.actor-list {
margin: 0;
@ -23,15 +36,20 @@
list-style: none;
padding: 0;
.actor {
&:nth-child(even) {
background-color: rgba(0, 0, 0, 0.1);
}
border-bottom: 1px solid $colorTan;
border-top: 1px solid $colorTan;
.fas {
padding: 0 2px;
font-size: 10px;
}
padding: 4px;
margin-bottom: 2px;
font-size: 12px;
text-align: center;
.fields .field-row{
&:nth-child(odd) {
background-color: rgba(0, 0, 0, 0.1);
}
}
.field-img {
flex: 0 0 50px;
position: relative;
@ -42,14 +60,14 @@
}
img {
border: none;
width: 50px;
height: 50px;
width: 45px;
height: 45px;
}
.img-btns {
position: absolute;
bottom: 0;
left: 0;
width: 50px;
width: 45px;
height: 12px;
button {
display: none;

View File

@ -91,6 +91,7 @@
"alignment": "",
"level": 1,
"xp": {
"share": 100,
"next": 2000,
"value": 0,
"bonus": 0

View File

@ -33,6 +33,12 @@
<input type="text" name="data.details.xp.bonus" id="experience" value="{{data.details.xp.bonus}}" />
</div>
</div>
<div class="form-group">
<label>{{localize "OSE.details.experience.share"}} (%)</label>
<div class="form-fields">
<input type="text" name="data.details.xp.share" id="experience-share" value="{{data.details.xp.share}}" />
</div>
</div>
<div class="form-group">
<label>{{localize "OSE.MeleeBonus"}}</label>
<div class="form-fields">

View File

@ -22,9 +22,13 @@
</h4>
</a>
</div>
<div class="field-longer">
<div class="icon-row field-longer">
{{#each item.data.tags as |tag|}}
{{#if (lookup @root.config.tag_images tag.value)}}
<img title="{{tag.title}}" src="{{lookup @root.config.tag_images tag.value}}" width="24" height="24"/>
{{else}}
<span title="{{tag.title}}">{{tag.value}}</span>
{{/if}}
{{/each}}
</div>
<div class="field-short">

View File

@ -1,18 +1,18 @@
<form autocomplete="off">
<header class="flexrow">
{{#if user.isGM}}
<button data-action="select-actors" type="button">
{{localize "OSE.dialog.selectActors"}}
</button>
<button data-action="deal-xp" type="button">
{{localize "OSE.dialog.dealXP"}}
</button>
{{/if}}
</header>
<div class="actor header flexrow">
<div class="field-name">
<a class="resync"><i class="fas fa-sync"></i></a>
<div>
<a class="item-control resync"><i class="fas fa-sync"></i></a>
</div>
{{#if user.isGM}}
<div class="item-controls flexrow">
<div class="item-control">
<button type="button" class="deal-xp" title="{{localize 'OSE.dialog.dealXP'}}"><i class="fas fa-hand-holding"></i></button>
</div>
<div class="item-control">
<button type="button" class="select-actors" title="{{localize 'OSE.dialog.selectActors'}}"><i class="fas fa-users"></i></button>
</div>
</div>
{{/if}}
</div>
<ol class="actor-list">
{{#each data.entities as |e|}} {{#if e.data.flags.ose.party}}
@ -23,48 +23,61 @@
<button type="button" data-action="open-sheet"><i class="fas fa-user"></i></button>
</div>
</div>
<div>
<div class="flexrow">
<div class="fields">
<div class="flexrow field-row">
<div class="field-name flex2">
<strong>{{e.name}}</strong>
</div>
<div class="field-long">
<div class="field-long" title="{{localize 'OSE.Health'}}">
<i class="fas fa-heart"></i>
{{e.data.data.hp.value}}/{{e.data.data.hp.max}}
</div>
<div class="field-short">
<div class="field-short" title="{{localize 'OSE.ArmorClass'}}">
<i class="fas fa-shield-alt"></i>
{{#if @root.settings.ascending}}<strong>{{e.data.data.aac.value}}</strong> <sub>{{e.data.data.aac.naked}}</sub>
{{#if @root.settings.ascending}}<strong>{{e.data.data.aac.value}}</strong>
<sub>{{e.data.data.aac.naked}}</sub>
{{else}}<strong>{{e.data.data.ac.value}}</strong> <sub>{{e.data.data.ac.naked}}</sub>
{{/if}}
</div>
</div>
<div class="flexrow">
<div class="field-short">
<i class="fas fa-fist-raised"></i>
<sub>{{e.data.data.thac0.mod.melee}}</sub> <strong>{{e.data.data.thac0.value}}</strong> <sub>{{e.data.data.thac0.mod.missile}}</sub>
</div>
<div class="field-short">
<i class="fas fa-shoe-prints"></i>
{{e.data.data.movement.encounter}}
<div class="flexrow field-row">
<div class="field-short" title="{{localize 'OSE.Thac0'}}">
<i class="fas fa-crosshairs"></i>
{{#unless settings.ascendingAC}}
{{e.data.data.thac0.value}}
{{else}}
{{e.data.data.thac0.bba}}
{{/unless}}
</div>
{{#if (eq e.data.type 'character')}}
<div class="field-short">
<i class="fas fa-weight-hanging"></i>
{{e.data.data.encumbrance.value}}
<div class="field-short" title="{{localize 'OSE.Melee'}}">
<i class="fas fa-fist-raised"></i>
{{add e.data.data.scores.str.mod e.data.data.thac0.mod.melee}}
</div>
<div class="field-short">
<i class="fas fa-circle"></i>
{{e.data.data.treasure}}
<div class="field-short" title="{{localize 'OSE.Missile'}}">
<i class="fas fa-bullseye"></i>
{{add e.data.data.scores.dex.mod e.data.data.thac0.mod.missile}}
</div>
{{/if}}
<div class="field-short flex2">
<i class="fas fa-shoe-prints" title="{{localize 'OSE.movement.base'}}"></i>
<span title="{{localize 'OSE.movement.encounter.long'}}">{{e.data.data.movement.encounter}}</span> <sub
title="{{localize 'OSE.movement.exploration.long'}}">{{e.data.data.movement.base}}</sub>
</div>
{{#if (eq e.data.type 'character')}}
<div class="field-short flex2">
<i class="fas fa-weight-hanging" title="{{localize 'OSE.Encumbrance'}}"></i>
{{roundWeight e.data.data.encumbrance.value}}k
</div>
{{/if}}
</div>
<div class="flexrow">
<div class="flexrow field-row">
<div class="field-longer flexrow">
{{#each e.data.data.saves as |s i|}}
<span>{{lookup @root.config.saves_short i}} {{s.value}}</span>
<span title="{{lookup @root.config.saves_long i}}">{{lookup @root.config.saves_short i}} {{s.value}}</span>
{{/each}}
<span>{{#if (eq e.data.type 'character')}}<i class="fas fa-magic"></i>{{mod e.data.data.scores.wis.mod}}{{/if}}</span>
{{#if (eq e.data.type 'character')}}<span><i class="fas fa-magic"
title="{{localize 'OSE.saves.magic.long'}}"></i>{{mod e.data.data.scores.wis.mod}}</span>{{/if}}
</div>
</div>
</div>