forked from public/foundryvtt-reve-de-dragon
Calendrier/timestamp, suite
Correction autour des éditeurs/affichages Migration de la date du monde dans les settings
This commit is contained in:
@ -3,6 +3,8 @@ import { Grammar } from "./grammar.js";
|
||||
import { Misc } from "./misc.js";
|
||||
import { RdDDice } from "./rdd-dice.js";
|
||||
|
||||
export const WORLD_TIMESTAMP_SETTING = "calendrier";
|
||||
|
||||
const RDD_MOIS_PAR_AN = 12;
|
||||
const RDD_JOURS_PAR_MOIS = 28;
|
||||
const RDD_JOURS_PAR_AN = 336; //RDD_JOURS_PAR_MOIS * RDD_MOIS_PAR_AN;
|
||||
@ -10,21 +12,20 @@ const RDD_HEURES_PAR_JOUR = 12;
|
||||
const RDD_MINUTES_PAR_HEURES = 120;
|
||||
const RDD_MINUTES_PAR_JOUR = 1440; //RDD_HEURES_PAR_JOUR * RDD_MINUTES_PAR_HEURES;
|
||||
const ROUNDS_PAR_MINUTE = 10;
|
||||
const CALENDRIER = "calendrier";
|
||||
|
||||
const DEFINITION_HEURES = [
|
||||
{ key: "vaisseau", label: "Vaisseau", lettreFont: 'v', saison: "printemps" },
|
||||
{ key: "sirene", label: "Sirène", lettreFont: 'i', saison: "printemps" },
|
||||
{ key: "faucon", label: "Faucon", lettreFont: 'f', saison: "printemps" },
|
||||
{ key: "couronne", label: "Couronne", lettreFont: '', saison: "ete" },
|
||||
{ key: "dragon", label: "Dragon", lettreFont: 'd', saison: "ete" },
|
||||
{ key: "epees", label: "Epées", lettreFont: 'e', saison: "ete" },
|
||||
{ key: "lyre", label: "Lyre", lettreFont: 'l', saison: "automne" },
|
||||
{ key: "serpent", label: "Serpent", lettreFont: 's', saison: "automne" },
|
||||
{ key: "poissonacrobate", label: "Poisson Acrobate", lettreFont: 'p', saison: "automne" },
|
||||
{ key: "araignee", label: "Araignée", lettreFont: 'a', saison: "hiver" },
|
||||
{ key: "roseau", label: "Roseau", lettreFont: 'r', saison: "hiver" },
|
||||
{ key: "chateaudormant", label: "Château Dormant", lettreFont: 'c', saison: "hiver" },
|
||||
{ key: "vaisseau", label: "Vaisseau", lettreFont: 'v', saison: "Printemps" },
|
||||
{ key: "sirene", label: "Sirène", lettreFont: 'i', saison: "Printemps" },
|
||||
{ key: "faucon", label: "Faucon", lettreFont: 'f', saison: "Printemps" },
|
||||
{ key: "couronne", label: "Couronne", lettreFont: '', saison: "Eté" },
|
||||
{ key: "dragon", label: "Dragon", lettreFont: 'd', saison: "Eté" },
|
||||
{ key: "epees", label: "Epées", lettreFont: 'e', saison: "Eté" },
|
||||
{ key: "lyre", label: "Lyre", lettreFont: 'l', saison: "Automne" },
|
||||
{ key: "serpent", label: "Serpent", lettreFont: 's', saison: "Automne" },
|
||||
{ key: "poissonacrobate", label: "Poisson Acrobate", lettreFont: 'p', saison: "Automne" },
|
||||
{ key: "araignee", label: "Araignée", lettreFont: 'a', saison: "Hiver" },
|
||||
{ key: "roseau", label: "Roseau", lettreFont: 'r', saison: "Hiver" },
|
||||
{ key: "chateaudormant", label: "Château Dormant", lettreFont: 'c', saison: "Hiver" },
|
||||
]
|
||||
|
||||
const FORMULES_DUREE = [
|
||||
@ -46,11 +47,11 @@ export class RdDTimestamp {
|
||||
}
|
||||
|
||||
static init() {
|
||||
game.settings.register(SYSTEM_RDD, CALENDRIER, {
|
||||
name: CALENDRIER,
|
||||
game.settings.register(SYSTEM_RDD, WORLD_TIMESTAMP_SETTING, {
|
||||
name: WORLD_TIMESTAMP_SETTING,
|
||||
scope: "world",
|
||||
config: false,
|
||||
default: { indexJour: 0, heureRdD: 0, minutesRelative: 0 },
|
||||
default: { indexDate: 0, indexMinute: 0 },
|
||||
type: Object
|
||||
});
|
||||
|
||||
@ -59,7 +60,6 @@ export class RdDTimestamp {
|
||||
DEFINITION_HEURES[i].icon = RdDTimestamp.iconeHeure(i);
|
||||
DEFINITION_HEURES[i].webp = DEFINITION_HEURES[i].icon.replace(".svg", ".webp");
|
||||
}
|
||||
// TODO: positionner les calculs de FORMULES_DUREE
|
||||
}
|
||||
|
||||
/**
|
||||
@ -124,6 +124,7 @@ export class RdDTimestamp {
|
||||
static formatIndexDate(indexDate) {
|
||||
return new RdDTimestamp({ indexDate }).formatDate()
|
||||
}
|
||||
|
||||
static splitIndexDate(indexDate) {
|
||||
const timestamp = new RdDTimestamp({ indexDate });
|
||||
return {
|
||||
@ -133,16 +134,21 @@ export class RdDTimestamp {
|
||||
}
|
||||
|
||||
static getWorldTime() {
|
||||
return game.settings.get(SYSTEM_RDD, CALENDRIER);
|
||||
let worldTime = game.settings.get(SYSTEM_RDD, WORLD_TIMESTAMP_SETTING);
|
||||
if (worldTime.indexJour && worldTime.heureRdD) {
|
||||
// Migration
|
||||
worldTime = {
|
||||
indexDate: worldTime.indexJour,
|
||||
indexMinute: worldTime.heureRdD * 120 + worldTime.minutesRelative
|
||||
};
|
||||
RdDTimestamp.setWorldTime(new RdDTimestamp(worldTime))
|
||||
|
||||
}
|
||||
return new RdDTimestamp(worldTime);
|
||||
}
|
||||
|
||||
static setWorldTime(timestamp) {
|
||||
game.settings.set(SYSTEM_RDD, CALENDRIER, timestamp.toOldCalendrier());
|
||||
game.socket.emit(SYSTEM_SOCKET_ID, {
|
||||
msg: "msg_sync_time",
|
||||
data: duplicate(timestamp)
|
||||
});
|
||||
|
||||
game.settings.set(SYSTEM_RDD, WORLD_TIMESTAMP_SETTING, duplicate(timestamp));
|
||||
}
|
||||
|
||||
/** construit un RdDTimestamp à partir de l'année/mois/jour/heure?/minute? */
|
||||
@ -164,16 +170,9 @@ export class RdDTimestamp {
|
||||
* @param indexMinute: la minute de la journée à utiliser pour ce timestamp
|
||||
*
|
||||
*/
|
||||
constructor({ indexDate = undefined, indexMinute = undefined }) {
|
||||
function fromSettings() {
|
||||
const fromSettings = RdDTimestamp.getWorldTime();
|
||||
return { indexDate: fromSettings.indexJour, indexMinute: fromSettings.heureRdD * RDD_MINUTES_PAR_HEURES + fromSettings.minutesRelative };
|
||||
}
|
||||
|
||||
const val = Number.isInteger(indexDate) ? { indexDate, indexMinute: indexMinute ?? 0 } : fromSettings();
|
||||
|
||||
this.indexDate = val.indexDate
|
||||
this.indexMinute = val.indexMinute
|
||||
constructor({ indexDate, indexMinute = undefined }) {
|
||||
this.indexDate = indexDate
|
||||
this.indexMinute = indexMinute ?? 0
|
||||
}
|
||||
|
||||
toCalendrier() {
|
||||
@ -182,6 +181,7 @@ export class RdDTimestamp {
|
||||
annee: this.annee,
|
||||
mois: RdDTimestamp.definition(this.mois),
|
||||
jour: this.jour,
|
||||
jourDuMois: this.jour + 1,
|
||||
heure: RdDTimestamp.definition(this.heure),
|
||||
minute: this.minute
|
||||
};
|
||||
@ -191,7 +191,7 @@ export class RdDTimestamp {
|
||||
* Convertit un timestamp en donnée utile à l'affichage d'un calendrier
|
||||
*/
|
||||
toOldCalendrier() {
|
||||
const calendrier = {
|
||||
return {
|
||||
indexJour: this.indexDate,
|
||||
annee: this.annee,
|
||||
moisRdD: this.mois,
|
||||
@ -201,7 +201,6 @@ export class RdDTimestamp {
|
||||
heureLabel: RdDTimestamp.definition(this.heure).label,
|
||||
minutesRelative: this.minute,
|
||||
};
|
||||
return calendrier
|
||||
}
|
||||
get annee() { return Math.floor(this.indexDate / RDD_JOURS_PAR_AN) }
|
||||
get mois() { return Math.floor((this.indexDate % RDD_JOURS_PAR_AN) / RDD_JOURS_PAR_MOIS) }
|
||||
|
Reference in New Issue
Block a user