forked from public/foundryvtt-reve-de-dragon
Amélioration rencontre TMR
- mise en forme des messages - Ajout de messages poétiques - regroupement par rencontre de la gestion et des messages - séparation table de proba/type de rencontre - quelques fixes lors de tests (mes régressions?) - lors d'un déplacement avec un tourbillon, on n'a pas à vaincre les cases humides - pas de rencontre après un déplacement par une rencontre
This commit is contained in:
@ -1,4 +1,5 @@
|
||||
import { DeDraconique } from "./de-draconique.js";
|
||||
import { TMRRencontres } from "./tmr-rencontres.js";
|
||||
import { Grammar } from "./grammar.js";
|
||||
|
||||
/* -------------------------------------------- */
|
||||
@ -208,71 +209,55 @@ const TMRMapping = {
|
||||
M15: { type: "cite", label: "Cité de Klana"}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const rencontresSpeciale = [
|
||||
{name:"Mangeur de Rêve", data: { force: "1d6", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Mangeur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Reflet d'ancien Rêve", data: { force: "2d6+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon blanc", data: { force: "2d6+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon noir", data: { force: "2d8+4", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Passeur fou", data: { force: "2d8", ignorer: false, derober: true, refoulement: 2, quitterTMR: false } },
|
||||
{name:"Tourbillon rouge", data: { force: "2d8", ignorer: false, derober: true, refoulement: 3, quitterTMR: false } }
|
||||
]
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const rencontresTable = [
|
||||
{name:"Messagers des Rêves", data: { force: "2d4", ignorer: true, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "01-25", sanctuaire: "01-25", plaines: "01-20", pont: "01-20", collines: "01-15", foret: "01-15", monts: "01-10", desert: "01-10", fleuve: "01-05",
|
||||
lac: "01-05", marais: "01-02", gouffre: "01-02", necropole: "00-00", desolation: "00-00" } },
|
||||
{name:"Passeur des Rêves", data: { force: "2d4", ignorer: true, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "26-50", sanctuaire: "26-50", plaines: "21-40", pont: "21-40", collines: "16-30", foret: "16-30", monts: "11-20", desert: "11-20", fleuve: "06-10",
|
||||
lac: "06-10", marais: "03-04", gouffre: "03-04", necropole: "00-00", desolation: "00-00" } },
|
||||
{name:"Fleur des Rêves", data: { force: "1d6", ignorer: true, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "51-65", sanctuaire: "51-65", plaines: "41-55", pont: "41-55", collines: "31-42", foret: "31-42", monts: "21-26", desert: "21-26", fleuve: "11-13",
|
||||
lac: "11-13", marais: "05-05", gouffre: "05-05", necropole: "00-00", desolation: "00-00" } },
|
||||
{name:"Mangeur de Rêve", data: { force: "1d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "66-70", sanctuaire: "66-70", plaines: "56-60", pont: "56-60", collines: "43-54", foret: "43-54", monts: "27-44", desert: "27-44", fleuve: "14-37",
|
||||
lac: "14-37", marais: "06-29", gouffre: "06-29", necropole: "01-20", desolation: "01-20" } },
|
||||
{name:"Changeur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "71-80", sanctuaire: "71-80", plaines: "61-75", pont: "61-75", collines: "55-69", foret: "55-69", monts: "45-59", desert: "45-59", fleuve: "38-49",
|
||||
lac: "38-49", marais: "30-39", gouffre: "30-39", necropole: "21-30", desolation: "21-30" } },
|
||||
{name:"Briseur de Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: true,
|
||||
cite: "81-85", sanctuaire: "81-85", plaines: "76-82", pont: "76-82", collines: "70-82", foret: "70-82", monts: "60-75", desert: "60-75", fleuve: "50-65",
|
||||
lac: "50-65", marais: "40-60", gouffre: "40-60", necropole: "31-50", desolation: "31-50" } },
|
||||
{name:"Reflet d'ancien Rêve", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1,quitterTMR: false,
|
||||
cite: "86-90", sanctuaire: "86-90", plaines: "83-88", pont: "83-88", collines: "83-88", foret: "83-88", monts: "76-85", desert: "76-85", fleuve: "66-79",
|
||||
lac: "66-79", marais: "61-75", gouffre: "61-75", necropole: "51-65", desolation: "51-65" } },
|
||||
{name:"Tourbillon blanc", data: { force: "2d6", ignorer: false, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "91-94", sanctuaire: "91-94", plaines: "89-93", pont: "89-93", collines: "89-93", foret: "89-93", monts: "86-92", desert: "86-92", fleuve: "80-89",
|
||||
lac: "80-89", marais: "76-86", gouffre: "76-86", necropole: "66-80", desolation: "66-80" } },
|
||||
{name:"Tourbillon noir", data: { force: "2d8", ignorer: false, derober: true, refoulement: 1, quitterTMR: false,
|
||||
cite: "95-97", sanctuaire: "95-97", plaines: "94-97", pont: "94-97", collines: "94-97", foret: "94-97", monts: "93-97", desert: "93-97", fleuve: "90-97",
|
||||
lac: "90-97", marais: "87-97", gouffre: "90-97", necropole: "81-97", desolation: "81-97" } },
|
||||
{name:"Rêve de Dragon", data: { force: "1ddr + 7", ignorer: false, derober: true, refoulement: 2, quitterTMR: true,
|
||||
cite: "98-00", sanctuaire: "98-00", plaines: "98-00", pont: "98-00", collines: "98-00", foret: "98-00", monts: "98-00", desert: "98-00", fleuve: "98-00",
|
||||
lac: "98-00", marais: "98-00", gouffre: "98-00", necropole: "98-00", desolation: "98-00" } }
|
||||
]
|
||||
export const TMRType = {
|
||||
cite: "cité",
|
||||
sanctuaire: "sanctuaire",
|
||||
plaines: "plaines",
|
||||
pont: "pont",
|
||||
collines: "collines",
|
||||
foret: "forêt",
|
||||
monts: "monts",
|
||||
desert: "désert",
|
||||
fleuve: "fleuve",
|
||||
lac: "lac",
|
||||
marais: "marais",
|
||||
gouffre: "gouffre",
|
||||
necropole: "nécropole",
|
||||
desolation: "désolation"
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const caseSpecificModes = [ "attache", "trounoir", "debordement", "reserve_extensible", "maitrisee" ];
|
||||
|
||||
/* -------------------------------------------- */
|
||||
const tmrMovePattern =
|
||||
const tmrRandomMovePatten =
|
||||
[ { name: 'top', x: 0, y: -1 },
|
||||
{ name: 'topright', x: 1, y: -1 },
|
||||
{ name: 'left', x: 1, y: 'alt' },
|
||||
{ name: 'botright', x: 1, y: 1 },
|
||||
{ name: 'bot', x: 0, y: 1 },
|
||||
{ name: 'botleft', x: -1, y: 1 },
|
||||
{ name: 'left', x: -1, y: 'alt' },
|
||||
{ name: 'topleft', x: -1, y: -1 }
|
||||
]
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export const tmrConstants = {
|
||||
col1_y: 30,
|
||||
col2_y: 55,
|
||||
cellw: 55,
|
||||
cellh: 55,
|
||||
gridx: 28,
|
||||
gridy: 28
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/* -------------------------------------------- */
|
||||
export class TMRUtility {
|
||||
|
||||
static init() {
|
||||
for (let coord in TMRMapping) {
|
||||
TMRMapping[coord].coord = coord;
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static convertToTMRCoord( x, y )
|
||||
@ -303,261 +288,100 @@ export class TMRUtility {
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getTMRDescription( coordTMR)
|
||||
static getTMR( coordTMR)
|
||||
{
|
||||
return TMRMapping[coordTMR];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/** Some debug functions */
|
||||
static setForceRencontre( id, force ) {
|
||||
this.forceRencontre = { id: id, force: force}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static clearForceRencontre( id, force ) {
|
||||
this.forceRencontre = undefined
|
||||
static async setForceRencontre( index, force = undefined ) {
|
||||
this.prochaineRencontre = TMRRencontres.getRencontre( index );
|
||||
if (this.prochaineRencontre ) {
|
||||
if (force) {
|
||||
this.prochaineRencontre.force = force;
|
||||
}
|
||||
else{
|
||||
await TMRRencontres.evaluerForceRencontre(this.prochaineRencontre)
|
||||
}
|
||||
console.log("La prochaine rencontre sera:", this.prochaineRencontre.name, " force:", this.prochaineRencontre.force);
|
||||
}
|
||||
else {
|
||||
ui.notifications.warn("Pas de prochaine rencontre valide pour "+index);
|
||||
}
|
||||
}
|
||||
/* -------------------------------------------- */
|
||||
static isForceRencontre() {
|
||||
return this.forceRencontre
|
||||
return this.prochaineRencontre
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getDirectionPattern() {
|
||||
let index = new Roll("1d"+tmrMovePattern.length+" -1").roll().total;
|
||||
return tmrMovePattern[index];
|
||||
let roll = new Roll("1d"+tmrRandomMovePatten.length).evaluate().total;
|
||||
return tmrRandomMovePatten[roll -1];
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static deplaceTMRSelonPattern( pos, pattern, nTime ) {
|
||||
for (let i=0; i <nTime; i++) {
|
||||
let currentPosXY = TMRUtility.convertToCellCoord(pos);
|
||||
currentPosXY.x = currentPosXY.x + pattern.x;
|
||||
if (pattern.y == 'alt' ) { // Alternate version
|
||||
pattern.y += (pattern.x % 2 == 0 ) ? -1 : 1;
|
||||
} else {
|
||||
currentPosXY.y = currentPosXY.y + pattern.y;
|
||||
}
|
||||
if ( this._checkTMRCoord(currentPosXY.x, currentPosXY.y) ) { // Sortie de carte ! Ré-insertion aléatoire
|
||||
pos = TMRUtility.convertToTMRCoord(currentPosXY.x, currentPosXY.y);
|
||||
} else {
|
||||
pos = this.getTMRAleatoire();
|
||||
}
|
||||
console.log("Nouvelle case iteration !!!", i, pos);
|
||||
}
|
||||
return pos;
|
||||
|
||||
static deplaceTMRAleatoire(coord) {
|
||||
return TMRUtility.deplaceTMRSelonPattern(coord, TMRUtility.getDirectionPattern(), 1);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rencontreTMRRoll( coordTMR, cellDescr, isSpecial = false )
|
||||
static deplaceTMRSelonPattern( coord, direction, nTime ) {
|
||||
for (let i=0; i <nTime; i++) {
|
||||
let currentPosXY = TMRUtility.convertToCellCoord(coord);
|
||||
currentPosXY.x = currentPosXY.x + direction.x;
|
||||
currentPosXY.y = currentPosXY.y + direction.y;
|
||||
if ( this._checkTMRCoord(currentPosXY.x, currentPosXY.y) ) { // Sortie de carte ! Ré-insertion aléatoire
|
||||
coord = TMRUtility.convertToTMRCoord(currentPosXY.x, currentPosXY.y);
|
||||
} else {
|
||||
coord = this.getTMRAleatoire();
|
||||
}
|
||||
console.log("Nouvelle case iteration !!!", i, coord);
|
||||
}
|
||||
return coord;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rencontreTMRRoll( coordTMR, cellDescr, isMauvaise = false )
|
||||
{
|
||||
if ( this.forceRencontre ) {
|
||||
// Forced
|
||||
let rencontre = duplicate(rencontresTable[this.forceRencontre.id]);
|
||||
rencontre.force = this.forceRencontre.force;
|
||||
rencontre.coord = coordTMR;
|
||||
rencontre.nbCases = 0; // Utilisé pour les Tourbillons
|
||||
return rencontre;
|
||||
}
|
||||
let rencontre;
|
||||
if ( isSpecial ) {
|
||||
let index = new Roll("1d7").roll().total;
|
||||
rencontre = rencontresSpeciale[index-1];
|
||||
} else {
|
||||
rencontre = await this.rencontreTMRTypeCase(cellDescr.type);
|
||||
}
|
||||
//let rencontre = rencontresTable[4];
|
||||
if (rencontre) {
|
||||
rencontre = duplicate(rencontre);
|
||||
rencontre.force = await this.evaluerForceRencontre(rencontre);
|
||||
if ( this.prochaineRencontre ) {
|
||||
rencontre = this.prochaineRencontre;
|
||||
rencontre.coord = coordTMR;
|
||||
rencontre.nbCases = 0; // Utilisé pour les Tourbillons
|
||||
rencontre.isSpecial = isSpecial; // Garder l'information
|
||||
this.prochaineRencontre = undefined;
|
||||
}
|
||||
else if ( isMauvaise ) {
|
||||
rencontre = await TMRRencontres.getMauvaiseRencontre();
|
||||
} else {
|
||||
rencontre = await TMRRencontres.getRencontreAleatoire(cellDescr.type);
|
||||
}
|
||||
rencontre.coord = coordTMR;
|
||||
return rencontre;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async rencontreTMRTypeCase(typeTMR, roll=undefined) {
|
||||
if (!roll) {
|
||||
//roll = await RdDDice.show(new Roll("d100").evaluate()).total;
|
||||
roll = new Roll("1d100").roll().total;
|
||||
console.log("rencontreTMRTypeCase", roll);
|
||||
}
|
||||
typeTMR = Grammar.toLowerCaseNoAccent(typeTMR);
|
||||
for( let rencontre of rencontresTable) {
|
||||
console.log("TMR !!!", typeTMR, roll);
|
||||
let scoreDef = rencontre.data[typeTMR];
|
||||
let min = scoreDef.substr(0,2);
|
||||
let max = scoreDef.substr(3,2);
|
||||
if (min=="00") min = 101;
|
||||
if (max=="00") max = 100;
|
||||
if (roll >= min && roll <= max) {
|
||||
return rencontre;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
/**
|
||||
* Retourne une recontre en fonction de la case et du tirage
|
||||
* @param {*} terrain
|
||||
* @param {*} roll
|
||||
*/
|
||||
static async getRencontre( terrain, roll ) {
|
||||
if ( !terrain) {
|
||||
ChatMessage.create({ content: "Un nom de case doit être indiqué (ie /tmrr desert ou /tmrr cite)" });
|
||||
return false;
|
||||
}
|
||||
|
||||
roll = roll ?? new Roll("1d100").evaluate().total;
|
||||
roll = Math.max(1, Math.min(roll, 100));
|
||||
|
||||
let rencontre = await this.rencontreTMRTypeCase(terrain, roll);
|
||||
if (rencontre) {
|
||||
let force = await this.evaluerForceRencontre(rencontre);
|
||||
ChatMessage.create({
|
||||
user: game.user._id,
|
||||
whisper: [game.user._id],
|
||||
content: `Rencontre en ${terrain} (jet : ${roll}%)<br>Vous rencontrez un ${rencontre.name} de ${force} Points de Rêve`});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getLocationTypeList( coordTMR ) {
|
||||
let descr = this.getTMRDescription( coordTMR );
|
||||
let typeList = [];
|
||||
for (let index in TMRMapping) {
|
||||
let caseTMR = TMRMapping[index];
|
||||
if (caseTMR.type == descr.type)
|
||||
typeList.push(index)
|
||||
}
|
||||
return typeList;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async evaluerForceRencontre(rencontre) {
|
||||
if (this.isReveDeDragon(rencontre)) {
|
||||
let ddr = await DeDraconique.ddr("selfroll");
|
||||
return ddr.total + 7;
|
||||
}
|
||||
else {
|
||||
const roll = new Roll(rencontre.data.force).evaluate();
|
||||
return roll.total;
|
||||
}
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static isReveDeDragon(rencontre) {
|
||||
return rencontre.name.toLowerCase() == "Rêve de Dragon".toLowerCase();
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processRencontreReussite( actor, rencontre, rolled ) {
|
||||
let message = "<br>";
|
||||
let state = "aucune";
|
||||
|
||||
console.log("processRencontreReussite", actor, rencontre);
|
||||
if (rencontre.name == "Messagers des Rêves") {
|
||||
message += "Le Messager des Rêves vous permet de lancer votre sort à " + rencontre.force + " cases !";
|
||||
state = 'messager';
|
||||
|
||||
} else if (rencontre.name == "Passeur des Rêves") {
|
||||
message += "Le Passeur des Rêves vous permet de vous téléporter à " + rencontre.force + " cases !";
|
||||
state = 'passeur';
|
||||
|
||||
} else if (rencontre.name == "Fleur des Rêves") {
|
||||
await actor.reveActuelIncDec( rencontre.force );
|
||||
message += "La Fleur des rêves s'évanouit en vous fournissant " + rencontre.force + " Points de Rêve";
|
||||
|
||||
} else if (rencontre.name == "Mangeur de Rêve") {
|
||||
message += "Ce Mangeur des Rêves disparait !"
|
||||
|
||||
} else if (rencontre.name == "Changeur de Rêve") {
|
||||
message += "Ce Changeur des Rêves vous propose de vous déplacer sur une autre case de même type."
|
||||
state = 'changeur';
|
||||
|
||||
} else if (rencontre.name == "Briseur de Rêve") {
|
||||
message += "Ce Briseur des Rêves disparait !"
|
||||
|
||||
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
||||
message += "Ce Reflet d'ancien Rêve disparait !"
|
||||
|
||||
} else if (rencontre.name == "Tourbillon blanc") {
|
||||
message += "Ce Tourbillon Blanc disparait !"
|
||||
|
||||
} else if (rencontre.name == "Tourbillon noir") {
|
||||
message += "Ce Tourbillon Noir disparait !"
|
||||
|
||||
} else if (rencontre.name == "Rêve de Dragon") {
|
||||
// TODO: xp particulière
|
||||
message += "Vous maîtrisez le Rêve de Dragon !"
|
||||
message += await actor.appliquerReveDeDragon(rolled, rencontre.force);
|
||||
}
|
||||
return { message: message, state: state };
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static async processRencontreEchec( actor, rencontre, rolled, tmrDialog ) {
|
||||
let message = "<br>";
|
||||
let state = "aucune";
|
||||
|
||||
if (rencontre.name == "Messagers des Rêves") {
|
||||
message += "Le Messager des Rêves s'éloigne de vous !";
|
||||
|
||||
} else if (rencontre.name == "Passeur des Rêves") {
|
||||
message += "Le Passeur des Rêves s'éloigne de vous !";
|
||||
|
||||
} else if (rencontre.name == "Fleur des Rêves") {
|
||||
message += "La Fleur des rêves s'éloigne de vous et se perd dans les Terres Médianes";
|
||||
|
||||
} else if (rencontre.name == "Mangeur de Rêve") {
|
||||
await actor.reveActuelIncDec( -rencontre.force );
|
||||
message += "Ce Mangeur des Rêves croque votre Rêve ! Vous perdez " + rencontre.force + " points de rêve actuels, votre nouveau total est de " + actor.data.data.reve.reve.value;
|
||||
|
||||
} else if (rencontre.name == "Changeur de Rêve") {
|
||||
message += "Ce Changeur des Rêves vous déplace sur un autre case du même type.<br>"
|
||||
let locList = this.getLocationTypeList( actor.data.data.reve.tmrpos.coord );
|
||||
let index = new Roll("1d"+locList.length + " - 1").roll().total;
|
||||
let newCoord = locList[index];
|
||||
tmrDialog.forceDemiRevePosition(newCoord);
|
||||
let cellDescr = TMRUtility.getTMRDescription(newCoord);
|
||||
message += "Vous avez été téléporté en " + newCoord + " - " + cellDescr.label;
|
||||
|
||||
} else if (rencontre.name == "Briseur de Rêve") {
|
||||
message += "Votre Rêve est Brisé, vous quittez les Terres Médianes";
|
||||
|
||||
} else if (rencontre.name == "Passeur fou") {
|
||||
message += "Vous êtes déplacé sur la case de votre sort en réserve le plus proche, ou sinon aléatoirement dans une direction";
|
||||
state = "passeurfou";
|
||||
|
||||
} else if (rencontre.name == "Reflet d'ancien Rêve") {
|
||||
message += "Votre Rêve est figé, vous restez sur cette case tant que ce Reflet n'est pas vaincu!";
|
||||
state = "reflet";
|
||||
|
||||
} else if (rencontre.name == "Tourbillon blanc") {
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonblanc";
|
||||
|
||||
} else if (rencontre.name == "Tourbillon noir") {
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonnoir";
|
||||
|
||||
} else if (rencontre.name == "Tourbillon rouge") {
|
||||
message += "Vous êtes emporté par le Tourbillon...";
|
||||
state = "tourbillonrouge";
|
||||
|
||||
} else if (rencontre.name == "Rêve de Dragon") {
|
||||
message += "Le Rêve de Dragon tourne au cauchemar !"
|
||||
message += actor.appliquerReveDeDragon(rolled, rencontre.force);
|
||||
static getListTMR(terrain) {
|
||||
let list = [];
|
||||
for (let index in TMRMapping) {
|
||||
if (TMRMapping[index].type == terrain){
|
||||
list.push(TMRMapping[index]);
|
||||
}
|
||||
}
|
||||
return { message: message, state: state };
|
||||
return list;
|
||||
}
|
||||
|
||||
static getListCoordTMR(terrain) {
|
||||
return this.getListTMR(terrain).map(it=>it.coord);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static getTMRAleatoire()
|
||||
static getTMRAleatoire(terrain=undefined)
|
||||
{
|
||||
if (terrain) {
|
||||
let list = TMRUtility.getListTMR(terrain);
|
||||
let index = new Roll("1d" + list.length).evaluate().total - 1;
|
||||
return list[index];
|
||||
}
|
||||
let num = new Roll("1d15").roll().total;
|
||||
let letter, letterValue;
|
||||
if ( num == 15) {
|
||||
@ -575,7 +399,8 @@ export class TMRUtility {
|
||||
|
||||
/* -------------------------------------------- */
|
||||
static _checkTMRCoord( x, y ) {
|
||||
if (x >= 0 && x < 13 && y >= 0 && y < 15 ) return true;
|
||||
if (x >= 0 && x < 13 && y >= 0 && y < 14 ) return true;
|
||||
if (x >= 0 && x < 13 && x%2 == 0 && y == 14 ) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -592,10 +417,10 @@ export class TMRUtility {
|
||||
static getSortReserveList( reserveList, coordTMR ) {
|
||||
// TODO : Gérer les têtes spéciales réserve!
|
||||
let sortReserveList
|
||||
let tmrDescr = this.getTMRDescription(coordTMR);
|
||||
let tmrDescr = this.getTMR(coordTMR);
|
||||
//console.log("Sort réserve : ", tmrDescr);
|
||||
if ( tmrDescr.type == 'fleuve') { // Gestion de la reserve en Fleuve
|
||||
sortReserveList = reserveList.filter(it => TMRUtility.getTMRDescription(it.coord).type == 'fleuve' );
|
||||
sortReserveList = reserveList.filter(it => TMRUtility.getTMR(it.coord).type == 'fleuve' );
|
||||
} else { // Reserve sur un case "normale"
|
||||
sortReserveList = reserveList.filter(it => it.coord == coordTMR);
|
||||
}
|
||||
@ -607,6 +432,10 @@ export class TMRUtility {
|
||||
/** Returns a list of case inside a given distance
|
||||
*
|
||||
*/
|
||||
static getTMRPortee(coord, portee) {
|
||||
return TMRUtility.getTMRArea(coord, portee, tmrConstants);
|
||||
}
|
||||
|
||||
static getTMRArea( coord, distance, tmrConstants ) {
|
||||
let pos = this.convertToCellCoord( coord );
|
||||
let posPic = this.computeRealPictureCoordinates( pos, tmrConstants );
|
||||
|
Reference in New Issue
Block a user