2021-01-02 04:28:43 +01:00
import { ChatUtility } from "./chat-utility.js" ;
import { RdDItemArme } from "./item-arme.js" ;
2020-11-15 02:07:41 +01:00
import { Misc } from "./misc.js" ;
2021-01-01 03:25:48 +01:00
import { RdDBonus } from "./rdd-bonus.js" ;
2021-01-02 04:28:43 +01:00
import { RdDCombat } from "./rdd-combat.js" ;
2020-11-16 03:54:43 +01:00
import { RdDDice } from "./rdd-dice.js" ;
2020-11-11 22:39:36 +01:00
2020-11-12 16:35:51 +01:00
/ * *
* difficultés au delà de - 10
* /
const levelDown = [
{ level : - 11 , score : 1 , sign : 0 , part : 0 , epart : 2 , etotal : 90 } ,
{ level : - 12 , score : 1 , sign : 0 , part : 0 , epart : 2 , etotal : 70 } ,
{ level : - 13 , score : 1 , sign : 0 , part : 0 , epart : 2 , etotal : 50 } ,
{ level : - 14 , score : 1 , sign : 0 , part : 0 , epart : 2 , etotal : 30 } ,
{ level : - 15 , score : 1 , sign : 0 , part : 0 , epart : 2 , etotal : 10 } ,
{ level : - 16 , score : 1 , sign : 0 , part : 0 , epart : 0 , etotal : 2 }
] ;
const levelImpossible = { score : 0 , sign : 0 , part : 0 , epart : 0 , etotal : 1 } ;
/ * *
* Table des résultats spéciaux - inutilisée , conservée si on veut afficher la table
* /
const specialResults = [
{ part : 0 , epart : 0 , etotal : 0 , min : 0 , max : 0 } ,
{ part : 1 , epart : 81 , etotal : 92 , min : 1 , max : 5 } ,
{ part : 2 , epart : 82 , etotal : 92 , min : 6 , max : 10 } ,
{ part : 3 , epart : 83 , etotal : 93 , min : 11 , max : 15 } ,
{ part : 4 , epart : 84 , etotal : 93 , min : 16 , max : 20 } ,
{ part : 5 , epart : 85 , etotal : 94 , min : 21 , max : 25 } ,
{ part : 6 , epart : 86 , etotal : 94 , min : 26 , max : 30 } ,
{ part : 7 , epart : 87 , etotal : 95 , min : 31 , max : 35 } ,
{ part : 8 , epart : 88 , etotal : 95 , min : 36 , max : 40 } ,
{ part : 9 , epart : 89 , etotal : 96 , min : 41 , max : 45 } ,
{ part : 10 , epart : 90 , etotal : 96 , min : 46 , max : 50 } ,
{ part : 11 , epart : 91 , etotal : 97 , min : 51 , max : 55 } ,
{ part : 12 , epart : 92 , etotal : 97 , min : 56 , max : 60 } ,
{ part : 13 , epart : 93 , etotal : 98 , min : 61 , max : 65 } ,
{ part : 14 , epart : 94 , etotal : 98 , min : 65 , max : 70 } ,
{ part : 15 , epart : 95 , etotal : 99 , min : 71 , max : 75 } ,
{ part : 16 , epart : 96 , etotal : 99 , min : 76 , max : 80 } ,
{ part : 17 , epart : 97 , etotal : 100 , min : 81 , max : 85 } ,
{ part : 18 , epart : 98 , etotal : 100 , min : 86 , max : 90 } ,
{ part : 19 , epart : 99 , etotal : 100 , min : 81 , max : 95 } ,
{ part : 20 , epart : 100 , etotal : 100 , min : 96 , max : 100 }
] ;
const reussites = [
2020-12-12 21:58:44 +01:00
{ code : "etotal" , isPart : false , isSign : false , isSuccess : false , isEchec : true , isEPart : true , isETotal : true , ptTache : - 4 , ptQualite : - 6 , quality : "Echec total" , condition : ( target , roll ) => roll >= target . etotal && roll <= 100 } ,
{ code : "epart" , isPart : false , isSign : false , isSuccess : false , isEchec : true , isEPart : true , isETotal : false , ptTache : - 2 , ptQualite : - 4 , quality : "Echec particulier" , condition : ( target , roll ) => ( roll >= target . epart && roll < target . etotal ) } ,
2021-01-02 19:25:03 +01:00
{ code : "echec" , isPart : false , isSign : false , isSuccess : false , isEchec : true , isEPart : false , isETotal : false , ptTache : 0 , ptQualite : - 2 , quality : "Echec normal" , condition : ( target , roll ) => ( roll > target . norm && roll < target . etotal ) } ,
{ code : "norm" , isPart : false , isSign : false , isSuccess : true , isEchec : false , isEPart : false , isETotal : false , ptTache : 1 , ptQualite : 0 , quality : "Réussite normale" , condition : ( target , roll ) => ( roll > target . sign && roll <= target . norm ) } ,
2020-12-12 21:58:44 +01:00
{ code : "sign" , isPart : false , isSign : true , isSuccess : true , isEchec : false , isEPart : false , isETotal : false , ptTache : 2 , ptQualite : 1 , quality : "Réussite significative" , condition : ( target , roll ) => ( roll > target . part && roll <= target . sign ) } ,
{ code : "part" , isPart : true , isSign : true , isSuccess : true , isEchec : false , isEPart : false , isETotal : false , ptTache : 3 , ptQualite : 2 , quality : "Réussite Particulière!" , condition : ( target , roll ) => ( roll > 0 && roll <= target . part ) } ,
{ code : "error" , isPart : false , isSign : false , isSuccess : false , isEchec : true , isEPart : true , isETotal : true , ptTache : 0 , ptQualite : 0 , quality : "Jet de dés invalide" , condition : ( target , roll ) => ( roll <= 0 || roll > 100 ) }
2020-11-12 16:35:51 +01:00
] ;
2020-12-05 00:04:40 +01:00
/* -------------------------------------------- */
2020-11-12 16:35:51 +01:00
const reussiteSignificative = reussites . find ( r => r . code == "sign" ) ;
const reussiteNormale = reussites . find ( r => r . code == "norm" ) ;
const echecNormal = reussites . find ( r => r . code == "echec" ) ;
2020-12-06 23:31:23 +01:00
const caracMaximumResolution = 60 ;
2020-12-05 00:04:40 +01:00
/* -------------------------------------------- */
2020-11-11 22:39:36 +01:00
export class RdDResolutionTable {
static resolutionTable = this . build ( )
/* -------------------------------------------- */
static build ( ) {
let table = [ ]
2020-12-06 23:31:23 +01:00
for ( var caracValue = 0 ; caracValue <= caracMaximumResolution ; caracValue ++ ) {
2020-11-25 00:46:11 +01:00
table [ caracValue ] = this . _computeRow ( caracValue ) ;
2020-11-11 22:39:36 +01:00
}
return table ;
}
2020-11-15 16:38:45 +01:00
/* -------------------------------------------- */
2020-11-16 03:54:43 +01:00
static getResultat ( code ) {
2020-12-31 02:20:52 +01:00
let resultat = reussites . find ( r => code == r . code ) ;
2020-11-16 03:54:43 +01:00
if ( resultat == undefined ) {
2020-11-14 03:16:03 +01:00
resultat = reussites . find ( r => r . code == "error" ) ;
}
return resultat ;
}
2020-11-15 16:38:45 +01:00
2020-12-04 20:52:04 +01:00
/* -------------------------------------------- */
2020-11-16 03:54:43 +01:00
static explain ( rolled ) {
2020-12-06 19:31:11 +01:00
let message = "<br>Jet : <strong>" + rolled . roll + "</strong> sur " + rolled . score + "% " ;
2020-12-12 21:58:44 +01:00
if ( rolled . caracValue != null && rolled . finalLevel != null ) {
2021-01-02 04:28:43 +01:00
message += ( rolled . diviseur > 1 ? ` (1/ ${ rolled . diviseur } de ` : "(" )
2020-12-12 21:58:44 +01:00
+ rolled . caracValue + " à " + Misc . toSignedString ( rolled . finalLevel ) + ") " ;
2020-11-16 03:54:43 +01:00
}
2020-12-06 23:31:23 +01:00
message += '<strong>' + rolled . quality + '</strong>'
2020-11-16 03:54:43 +01:00
return message ;
2020-12-18 23:48:41 +01:00
}
2020-11-16 03:54:43 +01:00
2021-01-03 15:40:48 +01:00
/* -------------------------------------------- */
2021-01-02 04:28:43 +01:00
static async buildRollDataHtml ( rollData , template = 'chat-resultat-general.html' ) {
2020-12-31 02:08:58 +01:00
rollData . ajustements = RdDResolutionTable . _buildAjustements ( rollData ) ;
rollData . show = rollData . show || { } ;
2021-01-02 04:28:43 +01:00
return await renderTemplate ( ` systems/foundryvtt-reve-de-dragon/templates/ ${ template } ` , rollData ) ;
}
2021-01-03 15:40:48 +01:00
/* -------------------------------------------- */
2021-01-02 04:28:43 +01:00
static async displayRollData ( rollData , userName , template = 'chat-resultat-general.html' ) {
2021-01-02 14:10:43 +01:00
ChatUtility . chatWithRollMode (
{ content : await RdDResolutionTable . buildRollDataHtml ( rollData , template ) } ,
userName )
2020-12-31 02:08:58 +01:00
}
static _buildAjustements ( rollData ) {
let list = [ ] ;
if ( rollData . competence ) {
2021-01-02 04:28:43 +01:00
list . push ( { label : rollData . competence . name , value : rollData . competence . data . niveau } ) ;
2020-12-31 02:08:58 +01:00
}
2021-01-01 03:25:48 +01:00
if ( rollData . tactique ) {
const surprise = RdDBonus . find ( rollData . tactique ) ;
list . push ( { label : surprise . descr , value : surprise . attaque } ) ;
}
if ( rollData . surpriseDefenseur ) {
const surprise = RdDBonus . find ( rollData . surpriseDefenseur ) ;
list . push ( { label : surprise . descr , value : surprise . attaque } ) ;
}
2020-12-31 02:08:58 +01:00
if ( rollData . diffLibre != undefined ) {
2021-01-01 03:25:48 +01:00
const label = rollData . selectedSort ? rollData . selectedSort . name : 'Libre' ;
2020-12-31 02:08:58 +01:00
list . push ( { label : label , value : rollData . diffLibre } ) ;
}
if ( rollData . diffConditions != undefined ) {
2021-01-01 03:25:48 +01:00
list . push ( { label : 'Conditions' , value : rollData . diffConditions } ) ;
2020-12-31 02:08:58 +01:00
}
if ( rollData . etat != undefined ) {
2021-01-01 03:25:48 +01:00
list . push ( { label : 'Etat' , value : rollData . etat } ) ;
2020-12-31 02:08:58 +01:00
}
if ( rollData . selectedCarac != undefined && rollData . moral != undefined && rollData . selectedCarac . label == 'Volonté' ) {
2021-01-01 03:25:48 +01:00
list . push ( { label : 'Moral' , value : rollData . selectedCarac != undefined && rollData . moral != undefined && rollData . selectedCarac . label == 'Volonté' ? rollData . moral : undefined } ) ;
2020-12-31 02:08:58 +01:00
}
if ( RdDResolutionTable . isAjustementAstrologique ( rollData ) ) {
2021-01-02 04:28:43 +01:00
list . push ( { label : 'Astrologique' , value : rollData . ajustementAstrologique || 0 } ) ;
2020-12-31 02:08:58 +01:00
}
2020-12-31 02:20:52 +01:00
if ( rollData . rolled . bonus && rollData . selectedSort ) {
2021-01-02 04:28:43 +01:00
list . push ( { descr : ` Bonus de case: ${ rollData . rolled . bonus } % ` } ) ;
2020-12-31 02:20:52 +01:00
}
2021-01-02 04:28:43 +01:00
if ( rollData . diviseur > 1 ) {
list . push ( { descr : ` Facteur significative × ${ RdDResolutionTable . _getFractionHtml ( rollData . diviseur ) } ` } ) ;
2020-12-18 23:57:28 +01:00
}
2021-01-02 04:28:43 +01:00
if ( RdDCombat . isAttaqueFinesse ( rollData . attackerRoll ) ) {
list . push ( { descr : 'Attaque particulière en finesse' } ) ;
2020-12-29 00:11:58 +01:00
}
2021-01-02 04:28:43 +01:00
if ( rollData . needParadeSignificative ) {
const catAttaque = RdDItemArme . getNomCategorieParade ( rollData . attackerRoll . arme ) ;
const catParade = RdDItemArme . getNomCategorieParade ( rollData . arme ) ;
list . push ( { descr : ` ${ catAttaque } vs ${ catParade } ` } ) ;
2020-12-29 00:11:58 +01:00
}
2021-01-02 04:28:43 +01:00
if ( rollData . surprise ) {
list . push ( { descr : RdDBonus . find ( rollData . surprise ) . descr } ) ;
}
return list ;
}
static _getFractionHtml ( diviseur ) {
if ( ! diviseur || diviseur <= 1 ) return undefined ;
switch ( diviseur || 1 ) {
case 2 : return '½' ;
case 4 : return '¼' ;
default : return '1/' + diviseur ;
2020-12-29 00:11:58 +01:00
}
2020-11-12 16:35:51 +01:00
}
2020-12-04 20:52:04 +01:00
2020-11-15 16:38:45 +01:00
/* -------------------------------------------- */
2020-12-12 21:58:44 +01:00
static async rollData ( rollData ) {
2021-01-02 04:28:43 +01:00
rollData . rolled = await this . roll ( rollData . caracValue , rollData . finalLevel , rollData . bonus , rollData . diviseur , rollData . showDice ) ;
2020-12-17 00:44:32 +01:00
return rollData ;
2020-12-06 19:29:10 +01:00
}
2020-12-08 23:07:41 +01:00
2020-12-04 20:52:04 +01:00
/* -------------------------------------------- */
2021-01-02 04:28:43 +01:00
static async roll ( caracValue , finalLevel , bonus = undefined , diviseur = undefined , showDice = true ) {
2020-11-25 00:46:11 +01:00
let chances = this . computeChances ( caracValue , finalLevel ) ;
2020-12-12 21:58:44 +01:00
this . _updateChancesWithBonus ( chances , bonus ) ;
2021-01-02 04:28:43 +01:00
this . _updateChancesFactor ( chances , diviseur ) ;
2020-12-12 23:31:19 +01:00
chances . showDice = showDice ;
2020-12-12 21:58:44 +01:00
2020-11-21 09:10:31 +01:00
let rolled = await this . rollChances ( chances ) ;
2020-11-25 00:46:11 +01:00
rolled . caracValue = caracValue ;
2020-11-16 03:54:43 +01:00
rolled . finalLevel = finalLevel ;
2020-12-12 21:58:44 +01:00
rolled . bonus = bonus ;
2021-01-02 19:27:15 +01:00
rolled . factorHtml = RdDResolutionTable . _getFractionHtml ( diviseur ) ;
2020-11-16 03:54:43 +01:00
return rolled ;
2020-11-15 16:38:45 +01:00
}
2020-11-12 16:35:51 +01:00
2020-12-12 21:58:44 +01:00
/* -------------------------------------------- */
2021-01-02 04:28:43 +01:00
static _updateChancesFactor ( chances , diviseur ) {
if ( diviseur && diviseur > 1 ) {
let newScore = Math . floor ( Number ( chances . score ) / diviseur ) ;
2020-12-12 21:58:44 +01:00
mergeObject ( chances , this . _computeCell ( null , newScore ) , { overwrite : true } ) ;
}
}
/* -------------------------------------------- */
static _updateChancesWithBonus ( chances , bonus ) {
if ( bonus ) {
let newScore = Number ( chances . score ) + Number ( bonus ) ;
mergeObject ( chances , this . _computeCell ( null , newScore ) , { overwrite : true } ) ;
}
}
2020-11-15 16:38:45 +01:00
/* -------------------------------------------- */
2020-11-21 09:10:31 +01:00
static async rollChances ( chances ) {
2020-12-04 20:52:04 +01:00
let myRoll = new Roll ( "1d100" ) . roll ( ) ;
2020-11-17 11:35:05 +01:00
myRoll . showDice = chances . showDice ;
2020-11-21 09:10:31 +01:00
await RdDDice . show ( myRoll ) ;
2020-11-15 16:38:45 +01:00
chances . roll = myRoll . total ;
2020-11-12 16:35:51 +01:00
mergeObject ( chances , this . _computeReussite ( chances , chances . roll ) ) ;
return chances ;
}
2020-11-15 16:38:45 +01:00
/* -------------------------------------------- */
2020-11-25 00:46:11 +01:00
static computeChances ( caracValue , difficulte ) {
2020-11-12 16:35:51 +01:00
if ( difficulte < - 16 ) {
return duplicate ( levelImpossible ) ;
}
if ( difficulte < - 10 ) {
return duplicate ( levelDown . find ( levelData => levelData . level == difficulte ) ) ;
}
2021-01-02 14:10:43 +01:00
return duplicate ( RdDResolutionTable . resolutionTable [ caracValue ] [ difficulte + 10 ] ) ;
2020-11-12 16:35:51 +01:00
}
2021-01-04 22:03:00 +01:00
/* -------------------------------------------- */
2020-12-31 02:08:58 +01:00
static isAjustementAstrologique ( rollData ) {
2020-12-31 03:33:16 +01:00
if ( rollData . selectedCarac && rollData . selectedCarac . label . toLowerCase ( ) . includes ( 'chance' ) ) {
2020-12-31 02:08:58 +01:00
return true ;
}
if ( rollData . selectedSort && rollData . selectedSort . data . isrituel ) {
return true ;
}
return false ;
}
2020-11-15 16:38:45 +01:00
/* -------------------------------------------- */
2020-12-12 21:58:44 +01:00
static isEchec ( rollData ) {
2020-12-15 02:20:24 +01:00
switch ( rollData . surprise ) {
case 'demi' : return ! rollData . rolled . isSign ;
case 'totale' : return true ;
}
return rollData . rolled . isEchec ;
2020-12-12 21:58:44 +01:00
}
2020-12-15 02:20:24 +01:00
2020-12-15 23:54:09 +01:00
/* -------------------------------------------- */
2020-12-12 21:58:44 +01:00
static isEchecTotal ( rollData ) {
2020-12-15 02:20:24 +01:00
if ( rollData . arme && rollData . surprise == 'demi' ) {
return rollData . rolled . isEchec ;
}
return rollData . rolled . isETotal ;
2020-12-12 21:58:44 +01:00
}
2020-12-18 23:48:41 +01:00
2020-12-15 23:54:09 +01:00
/* -------------------------------------------- */
2020-12-12 21:58:44 +01:00
static isParticuliere ( rollData ) {
2020-12-15 02:20:24 +01:00
if ( rollData . arme && rollData . surprise ) {
return false ;
}
return rollData . rolled . isPart ;
2020-12-12 21:58:44 +01:00
}
2020-12-15 02:20:24 +01:00
2020-12-15 23:54:09 +01:00
/* -------------------------------------------- */
2020-12-12 21:58:44 +01:00
static isReussite ( rollData ) {
2020-12-15 02:20:24 +01:00
switch ( rollData . surprise ) {
case 'demi' : return rollData . rolled . isSign ;
case 'totale' : return false ;
}
return rollData . rolled . isSuccess ;
2020-11-12 16:35:51 +01:00
}
/* -------------------------------------------- */
static _computeReussite ( chances , roll ) {
2021-01-02 04:28:43 +01:00
return reussites . find ( x => x . condition ( chances , roll ) ) ;
2020-11-12 16:35:51 +01:00
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2020-11-25 00:46:11 +01:00
static _computeRow ( caracValue ) {
2020-11-11 22:39:36 +01:00
let dataRow = [
2020-11-25 00:46:11 +01:00
this . _computeCell ( - 10 , Math . max ( Math . floor ( caracValue / 4 ) , 1 ) ) ,
this . _computeCell ( - 9 , Math . max ( Math . floor ( caracValue / 2 ) , 1 ) )
2020-11-11 22:39:36 +01:00
]
for ( var diff = - 8 ; diff <= 22 ; diff ++ ) {
2020-11-25 00:46:11 +01:00
dataRow [ diff + 10 ] = this . _computeCell ( diff , Math . max ( Math . floor ( caracValue * ( diff + 10 ) / 2 ) , 1 ) ) ;
2020-11-11 22:39:36 +01:00
}
return dataRow ;
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2020-11-12 16:35:51 +01:00
static _computeCell ( niveau , percentage ) {
2020-11-11 22:39:36 +01:00
return {
2020-11-12 16:35:51 +01:00
niveau : niveau ,
score : percentage ,
2021-01-02 19:25:03 +01:00
norm : Math . min ( 99 , percentage ) ,
2020-11-12 16:35:51 +01:00
sign : this . _reussiteSignificative ( percentage ) ,
part : this . _reussitePart ( percentage ) ,
epart : this . _echecParticulier ( percentage ) ,
etotal : this . _echecTotal ( percentage )
2021-01-02 19:25:03 +01:00
} ;
2020-11-11 22:39:36 +01:00
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2021-01-02 19:25:03 +01:00
static _reussiteSignificative ( percentage ) {
return Math . floor ( percentage / 2 ) ;
2020-11-11 22:39:36 +01:00
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2021-01-02 19:25:03 +01:00
static _reussitePart ( percentage ) {
return Math . ceil ( percentage / 5 ) ;
2020-11-11 22:39:36 +01:00
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2021-01-02 19:25:03 +01:00
static _echecParticulier ( percentage ) {
const epart = Math . ceil ( percentage / 5 ) + 80 ;
return epart >= 100 ? 101 : epart ;
2020-11-11 22:39:36 +01:00
}
2020-11-16 23:28:18 +01:00
/* -------------------------------------------- */
2021-01-02 19:25:03 +01:00
static _echecTotal ( percentage ) {
const etotal = Math . ceil ( percentage / 10 ) + 91 ;
return percentage >= 100 ? 101 : Math . min ( etotal , 100 ) ;
2020-11-11 22:39:36 +01:00
}
2020-12-15 23:54:09 +01:00
/* -------------------------------------------- */
2020-12-18 23:48:41 +01:00
static buildHTMLResults ( caracValue , levelValue ) {
let cell = this . computeChances ( caracValue , levelValue ) ;
2021-01-02 19:27:15 +01:00
cell . epart = cell . epart > 99 ? 'N/A' : cell . epart ;
cell . etotal = cell . etotal > 100 ? 'N/A' : cell . etotal ;
cell . score = Math . min ( cell . score , 99 ) ;
return `
< span class = "span-valeur competence-label" >
Particulière : < span class = "rdd-roll-part" > $ { cell . part } < / s p a n >
- Significative : < span class = "rdd-roll-sign" > $ { cell . sign } < / s p a n >
- Réussite : < span class = "rdd-roll-norm" > $ { cell . score } < / s p a n >
- Echec Particulier : < span class = "rdd-roll-epart" > $ { cell . epart } < / s p a n >
- Echec Total : < span class = "rdd-roll-etotal" > $ { cell . etotal } < / s p a n >
< / s p a n >
`
2020-12-15 23:54:09 +01:00
}
2020-11-11 22:39:36 +01:00
/* -------------------------------------------- */
2020-11-12 23:37:12 +01:00
static buildHTMLTableExtract ( caracValue , levelValue ) {
return this . buildHTMLTable ( caracValue , levelValue , caracValue - 2 , caracValue + 2 , levelValue - 5 , levelValue + 5 )
}
2020-11-11 22:39:36 +01:00
static buildHTMLTable ( caracValue , levelValue , minCarac = 1 , maxCarac = 21 , minLevel = - 10 , maxLevel = 11 ) {
return this . _buildHTMLTable ( caracValue , levelValue , minCarac , maxCarac , minLevel , maxLevel )
}
/* -------------------------------------------- */
static _buildHTMLTable ( caracValue , levelValue , minCarac , maxCarac , minLevel , maxLevel ) {
2020-11-14 15:57:42 +01:00
let countColonnes = maxLevel - minLevel ;
2020-11-11 22:39:36 +01:00
minCarac = Math . max ( minCarac , 1 ) ;
2020-12-06 23:31:23 +01:00
maxCarac = Math . min ( maxCarac , caracMaximumResolution ) ;
2020-11-11 22:39:36 +01:00
minLevel = Math . max ( minLevel , - 10 ) ;
2020-11-14 15:57:42 +01:00
maxLevel = Math . max ( Math . min ( maxLevel , 22 ) , minLevel + countColonnes ) ;
2020-11-11 22:39:36 +01:00
2020-11-12 23:37:12 +01:00
let table = $ ( "<table class='table-resolution'/>" )
2021-01-02 14:10:43 +01:00
. append ( this . _buildHTMLHeader ( RdDResolutionTable . resolutionTable [ 0 ] , minLevel , maxLevel ) ) ;
2020-11-11 22:39:36 +01:00
2020-11-25 23:17:13 +01:00
for ( var rowIndex = minCarac ; rowIndex <= maxCarac ; rowIndex ++ ) {
2021-01-02 14:10:43 +01:00
table . append ( this . _buildHTMLRow ( RdDResolutionTable . resolutionTable [ rowIndex ] , rowIndex , caracValue , levelValue , minLevel , maxLevel ) ) ;
2020-11-11 22:39:36 +01:00
}
2020-12-15 23:37:35 +01:00
table . append ( "</table>" ) ;
2020-11-11 22:39:36 +01:00
return table ;
}
2020-12-04 20:52:04 +01:00
/* -------------------------------------------- */
2020-11-11 22:39:36 +01:00
static _buildHTMLHeader ( dataRow , minLevel , maxLevel ) {
2020-11-12 23:37:12 +01:00
let tr = $ ( "<tr/>" ) ;
if ( minLevel > - 8 ) {
tr . append ( $ ( "<th class='table-resolution-level'/>" ) . text ( "-8" ) )
}
if ( minLevel > - 7 ) {
tr . append ( $ ( "<th class='table-resolution-level'/>" ) . text ( "..." ) ) ;
}
2020-11-14 15:57:42 +01:00
for ( let difficulte = minLevel ; difficulte <= maxLevel ; difficulte ++ ) {
2020-11-15 02:07:41 +01:00
tr . append ( $ ( "<th class='table-resolution-level'/>" ) . text ( Misc . toSignedString ( difficulte ) ) ) ;
2020-11-11 22:39:36 +01:00
}
return tr ;
}
2020-12-04 20:52:04 +01:00
/* -------------------------------------------- */
2020-11-11 22:39:36 +01:00
static _buildHTMLRow ( dataRow , rowIndex , caracValue , levelValue , minLevel , maxLevel ) {
2020-11-12 23:37:12 +01:00
let tr = $ ( "<tr/>" ) ;
let max = maxLevel ;
if ( minLevel > - 8 ) {
let score = dataRow [ - 8 + 10 ] . score ;
tr . append ( $ ( "<td class='table-resolution-carac'/>" ) . text ( score ) )
}
if ( minLevel > - 7 ) {
tr . append ( $ ( "<td/>" ) )
}
for ( let difficulte = minLevel ; difficulte <= max ; difficulte ++ ) {
let td = $ ( "<td/>" ) ;
2020-11-11 22:39:36 +01:00
let score = dataRow [ difficulte + 10 ] . score ;
if ( rowIndex == caracValue && levelValue == difficulte ) {
td . addClass ( 'table-resolution-target' ) ;
} else if ( difficulte == - 8 ) {
td . addClass ( 'table-resolution-carac' ) ;
}
tr . append ( td . text ( score ) ) ;
}
return tr ;
}
}