Skip to content

Commit

Permalink
Merge pull request #188 from SolarBear/migration_08
Browse files Browse the repository at this point in the history
Migration 08
  • Loading branch information
SolarBear authored Jun 12, 2021
2 parents 0cfed90 + 3db4b41 commit 4ccb6c6
Show file tree
Hide file tree
Showing 6 changed files with 76 additions and 26 deletions.
3 changes: 2 additions & 1 deletion module/actor/NumeneraPCActor.js
Original file line number Diff line number Diff line change
Expand Up @@ -315,8 +315,9 @@ export class NumeneraPCActor extends Actor {
let speedEffortPenalty = heaviestArmor.weightIndex;

//Local, utility function
const collection = game.data.version.startsWith("0.7.") ? "OwnedItem" : "Item";
const searchArmorSkill = name => {
return !!this.getEmbeddedCollection("Item")
return !!this.getEmbeddedCollection(collection)
.some(i => i.type === NumeneraAbilityItem.type && i.name === name);
}

Expand Down
69 changes: 51 additions & 18 deletions module/actor/sheets/NumeneraPCActorSheet.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ function orderItems(a, b) {
let dataA = a.data;
let dataB = b.data;

if (game.data.version.startsWith("0.8.")) {
dataA = dataA.data;
dataB = dataB.data;
}
// if (game.data.version.startsWith("0.8.")) {
// dataA = dataA.data;
// dataB = dataB.data;
// }

if (dataA.order < dataB.order) return -1;
if (dataA.order > dataB.order) return 1;
Expand Down Expand Up @@ -166,12 +166,13 @@ export class NumeneraPCActorSheet extends ActorSheet {
*/
_setItemsData(sheetData) {
//0.8

if (!sheetData.data.items)
sheetData.data.items = sheetData.actor.items || {};

const itemClassMap = {
abilities: NumeneraAbilityItem.type,
armorPieces: NumeneraArmorItem.type,
armor: NumeneraArmorItem.type,
artifacts: NumeneraArtifactItem.type,
cyphers: NumeneraCypherItem.type,
equipment: NumeneraEquipmentItem.type,
Expand All @@ -183,8 +184,37 @@ export class NumeneraPCActorSheet extends ActorSheet {
};

Object.entries(itemClassMap).forEach(([val, type]) => {
if (!sheetData.data.items[val])
sheetData.data[val] = sheetData.data.items.filter(i => i.type === type).sort(sortFunction)
// try {
// if (sheetData.data[val]) {
// if (sheetData.data[val].constructor === Object)
// sheetData.data[val] = Object.values(sheetData.data[val]);
// }
// else {
// sheetData.data[val] = sheetData.data.items.filter(i => i.type === type).sort(sortFunction);
// }
// }
// catch (e) {
// sheetData.data[val] = [];
// }

//TODO: fix this, this is TERRIBLE, but necessary
if (typeof sheetData.data.items === "object") {
//"old style" PCs have an object as items property, whose properties are item types
// if (sheetData.data[val])
// sheetData.data[val] = Object.values(sheetData.data[val]);
// else
// sheetData.data[val] = [];

sheetData.data[val] = sheetData.items.filter(i => i.type === type);
}
else {
sheetData.data[val] = sheetData.data.items.filter(i => i.type === type);
}

if (game.data.version.startsWith("0.7."))
sheetData.data[val].sort(sortFunction);
else
sheetData.data[val].sort(sortFunction);
});

this._setCyphersData(sheetData, sheetData.displayCypherType);
Expand Down Expand Up @@ -341,7 +371,7 @@ export class NumeneraPCActorSheet extends ActorSheet {
if (game.data.version.startsWith("0.7."))
oddity.data.notes = removeHtmlTags(oddity.data.notes);
else
oddity.data.data.notes = removeHtmlTags(oddity.data.data.notes);
oddity.data.notes = removeHtmlTags(oddity.data.notes);
return oddity;
});

Expand All @@ -365,7 +395,7 @@ export class NumeneraPCActorSheet extends ActorSheet {
if (game.data.version.startsWith("0.7."))
powerShift.data.notes = removeHtmlTags(powerShift.data.notes);
else
powerShift.data.data.notes = removeHtmlTags(powerShift.data.data.notes);
powerShift.data.notes = removeHtmlTags(powerShift.data.notes);
return powerShift;
});

Expand Down Expand Up @@ -400,11 +430,14 @@ export class NumeneraPCActorSheet extends ActorSheet {
*/
_setCyphersData(sheetData, useCypherType) {
sheetData.data.artifacts = sheetData.data.artifacts.map(artifact => {
// if (artifact.data)
// artifact = artifact.data;

artifact.editable = game.user.hasRole(game.settings.get("numenera", "cypherArtifactEdition"));

//TODO find some means to avoid repeating this code for artifacts and cyphers
//both here and inside their respective classes
const artifactData = game.data.version.startsWith("0.7.") ? artifact.data : artifact.data.data;
const artifactData = game.data.version.startsWith("0.7.") ? artifact.data : artifact.data;
if (!artifactData.identified && !artifact.editable) {
//Make it so that unidentified artifacts appear as blank items
artifact = NumeneraArtifactItem.asUnidentified(artifact);
Expand All @@ -420,7 +453,7 @@ export class NumeneraPCActorSheet extends ActorSheet {
sheetData.data.cyphers = sheetData.data.cyphers.map(cypher => {
cypher.editable = game.user.hasRole(game.settings.get("numenera", "cypherArtifactEdition"));

const cypherData = game.data.version.startsWith("0.7.") ? cypher.data : cypher.data.data;
const cypherData = game.data.version.startsWith("0.7.") ? cypher.data : cypher.data;
if (!cypherData.identified && !cypher.editable) {
//Make it so that unidentified cyphers appear as blank items
cypher = NumeneraCypherItem.asUnidentified(cypher);
Expand Down Expand Up @@ -457,16 +490,16 @@ export class NumeneraPCActorSheet extends ActorSheet {
if (game.data.version.startsWith("0.7."))
weapon.data.notes = removeHtmlTags(weapon.data.notes);
else
weapon.data.data.notes = removeHtmlTags(weapon.data.data.notes);
weapon.data.notes = removeHtmlTags(weapon.data.notes);
return weapon;
});

sheetData.data.armorPieces = sheetData.data.armorPieces.map(armor => {
sheetData.data.armor = sheetData.data.armor.map(armor => {
armor.showIcon = armor.img && sheetData.settings.icons.equipment;
if (game.data.version.startsWith("0.7."))
armor.data.notes = removeHtmlTags(armor.data.notes);
else
armor.data.data.notes = removeHtmlTags(armor.data.data.notes);
armor.data.notes = removeHtmlTags(armor.data.notes);
return armor;
});

Expand All @@ -475,12 +508,12 @@ export class NumeneraPCActorSheet extends ActorSheet {
if (game.data.version.startsWith("0.7."))
equipment.data.notes = removeHtmlTags(equipment.data.notes);
else
equipment.data.data.notes = removeHtmlTags(equipment.data.data.notes);
equipment.data.notes = removeHtmlTags(equipment.data.notes);
return equipment;
});

sheetData.data.weapons.sort(orderItems);
sheetData.data.armorPieces.sort(orderItems);
sheetData.data.armor.sort(orderItems);
sheetData.data.equipment.sort(orderItems);
}

Expand All @@ -498,7 +531,7 @@ export class NumeneraPCActorSheet extends ActorSheet {
sheetData.abilityTypes = NUMENERA.abilityTypes;

sheetData.data.abilities = sheetData.data.abilities.map(ability => {
const abilityData = game.data.version.startsWith("0.7.") ? ability.data : ability.data.data;
const abilityData = game.data.version.startsWith("0.7.") ? ability.data : ability.data;
ability.nocost = (abilityData.cost.amount <= 0);
ability.ranges = NUMENERA.optionalRanges;
ability.stats = NUMENERA.stats;
Expand All @@ -519,7 +552,7 @@ export class NumeneraPCActorSheet extends ActorSheet {
*/
_setSkillsData(sheetData) {
sheetData.data.skills = sheetData.data.skills.map(skill => {
const skillData = game.data.version.startsWith("0.7.") ? skill.data : skill.data.data;
const skillData = game.data.version.startsWith("0.7.") ? skill.data : skill.data;
skill.stats = NUMENERA.stats;
skill.showIcon = skill.img && sheetData.settings.icons.skills;
skill.untrained = skillData.skillLevel == 0;
Expand Down
9 changes: 8 additions & 1 deletion module/actor/sheets/sheetUtils.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
import { confirmDeletion } from "../../apps/ConfirmationDialog.js";

const sortFunction07 = (a, b) => a.data.order < b.data.order ? -1 : a.data.order > b.data.order ? 1 : 0;

//Sort function for order
export const sortFunction = (a, b) => a.data.data.order < b.data.data.order ? -1 : a.data.data.order > b.data.data.order ? 1 : 0;
export const sortFunction = (a, b) => {
if (game.data.version.startsWith("0.7."))
return sortFunction07(a, b);

return a.data.order < b.data.order ? -1 : a.data.order > b.data.order ? 1 : 0;
};

/**
* Higher order function that generates an item creation handler.
Expand Down
17 changes: 13 additions & 4 deletions module/token.js
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,19 @@ export function add3rdBarToPCTokens() {
//Update existing tokens with the extra attribute
game.scenes.entities.forEach(scene => {
scene.data.tokens.forEach(token => {
if (!token.data.hasOwnProperty("bar3")) {
token.bar1 = {attribute: "stats.might.pool"};
token.bar2 = {attribute: "stats.speed.pool"};
token.bar3 = {attribute: "stats.intellect.pool"};
if (game.data.version.startsWith("0.7.")) {
if (!token.hasOwnProperty("bar3")) {
token.bar1 = {attribute: "stats.might.pool"};
token.bar2 = {attribute: "stats.speed.pool"};
token.bar3 = {attribute: "stats.intellect.pool"};
}
}
else {
if (!token.data.hasOwnProperty("bar3")) {
token.bar1 = {attribute: "stats.might.pool"};
token.bar2 = {attribute: "stats.speed.pool"};
token.bar3 = {attribute: "stats.intellect.pool"};
}
}
})
});
Expand Down
2 changes: 1 addition & 1 deletion templates/actor/characterSheet.html
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ <h2>{{localize "NUMENERA.pc.armor.sectionName"}}</h2>
<td><a class="armor-create" title="{{localize "NUMENERA.pc.armor.createTooltip"}}"><i class="fas fa-plus"></i></a></td>
</thead>
<tbody class="row-container">
{{#each data.armorPieces as |armor|}}
{{#each data.armor as |armor|}}
<tr class="armor" data-item-id="{{armor._id}}" data-order="{{armor.data.data.order}}">
<td class="handle">
<a><i class="fas fa-grip-vertical"></i></a>
Expand Down
2 changes: 1 addition & 1 deletion templates/actor/characterSheet07.html
Original file line number Diff line number Diff line change
Expand Up @@ -298,7 +298,7 @@ <h2>{{localize "NUMENERA.pc.armor.sectionName"}}</h2>
<td><a class="armor-create" title="{{localize "NUMENERA.pc.armor.createTooltip"}}"><i class="fas fa-plus"></i></a></td>
</thead>
<tbody class="row-container">
{{#each data.armorPieces as |armor|}}
{{#each data.armor as |armor|}}
<tr class="armor" data-item-id="{{armor._id}}" data-order="{{armor.data.order}}">
<td class="handle">
<a><i class="fas fa-grip-vertical"></i></a>
Expand Down

0 comments on commit 4ccb6c6

Please sign in to comment.