Petit programme de java qui bug.
onizuka1000 Messages postés 18 Statut Membre -
Bonjour à tous,
Voila je vous explique la situation, j'ai trouvé un petit programme en java pour m'aider à calculer des valeurs.
Le programme fonctionne à la perfection mais il plante systématiquement quand je recherche des valeurs un peu élevés. Je n'y connais absolument rien en JS )=. Es que quelqu'un aurais l'amabilité d'y jeter un petit coup d'œil rapide pour me dire si c'est rectifiable ou non s.v.p <3.
Je vous met un lien pour le télécharger. Pour le tester ne vous embêtez pas, essayez simplement de rentrer Status Power : 250 et faite directement "drive set" puis "generate hwi" il va directement planter )=.
Si vous rentrez des valeurs comme 150 ou 200 par exemple ca va fonctionner. J'ai l'impression qu'il plante quand il dépasse une certaine valeur à calculer.
https://drive.google.com/file/d/1bFlp6gZxQ6Jru44JFaRsZfMTHeSj93ZV/view?usp=drive_web
Merci.
Windows / Chrome 108.0.0.0
- Petit programme de java qui bug.
- Jeux java itel - Télécharger - Jeux vidéo
- Waptrick java football - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Waptrick java voiture - Télécharger - Jeux vidéo
- Java apk - Télécharger - Langages
2 réponses
Bonjour
Pour commencer, merci de partager le code directement sur le forum on utilisant l'icône prévu à cet effet lorsque tu rédige ton message.
Ensuite, peux-tu nous préciser si il s'agit du langage Java comme le sous-entend ton titre ou bien de code javascript comme tu sembles le dire ensuite...
Ce sont deux langages différents merci donc de préciser.
Bonjour,
Voici le code :
const DESVIO_SCALE_PANGYA_TO_YARD = 0.3125 / 1.5;
class Vector3D {
constructor(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
normalize() {
return this.divideScalar( this.length() );
}
multiplyScalar(value) {
this.x *= value;
this.y *= value;
this.z *= value;
return this;
}
add(vector3d) {
this.x += vector3d.x;
this.y += vector3d.y;
this.z += vector3d.z;
return this;
}
add3D(x, y, z) {
this.x += x;
this.y += y;
this.z += z;
return this;
}
sub(vector3d) {
this.x -= vector3d.x;
this.y -= vector3d.y;
this.z -= vector3d.z;
return this;
}
sub3D(x, y, z) {
this.x -= x;
this.y -= y;
this.z -= z;
return this;
}
divideScalar(value) {
if (value != 0) {
let scalar = 1 / value;
this.x *= scalar;
this.y *= scalar;
this.z *= scalar;
}else {
this.x = 0.0;
this.y = 0.0;
this.z = 0.0;
}
return this;
}
cross(vector3d) {
let x = this.x, y = this.y, z = this.z;
this.x = y * vector3d.z - z * vector3d.y;
this.y = z * vector3d.x - x * vector3d.z;
this.z = x * vector3d.y - y * vector3d.x;
return this;
}
length() {
return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
}
clone() {
return new Vector3D(this.x, this.y, this.z);
}
}
const TYPE_DISTANCE = {
LESS_10: 0,
LESS_15: 1,
LESS_28: 2,
LESS_58: 3,
BIGGER_OR_EQUAL_58: 4,
}
function calculeTypeDistance(distance) {
let type = TYPE_DISTANCE.BIGGER_OR_EQUAL_58;
if (distance >= 58.0)
return TYPE_DISTANCE.BIGGER_OR_EQUAL_58;
else if (distance < 10.0)
return TYPE_DISTANCE.LESS_10;
else if (distance < 15.0)
return TYPE_DISTANCE.LESS_15;
else if (distance < 28.0)
return TYPE_DISTANCE.LESS_28;
else if (distance < 58.0)
return TYPE_DISTANCE.LESS_58; // Esse não precisa já que ele passou do primeiro if, mas deixar assim
return type;
}
function calculeTypeDistanceByPosition(position1, position2) {
return calculeTypeDistance(Math.sqrt(Math.pow(position1.x - position2.x) + Math.pow(position1.z - position2.z)) * 0.3125);
}
// JP Base ball Static Object
class Ball {
position = new Vector3D(0.0, 0.0, 0.0);
slope = new Vector3D(0.0, 1.0, 0.0);
// Ball Flag state process
state_process = 0;
max_height = 0.0;
num_max_height = -1;
count = 0;
// Velocity
velocity = new Vector3D(0.0, 0.0, 0.0);
ball_28 = 0.0;
ball_2C = 0.0;
ball_30 = 0.0;
curva = 0.0;
spin = 0.0;
rotation_curve = 0.0;
rotation_spin = 0.0;
// Flags
ball_44 = 0;
ball_48 = 0;
ball_70 = -1;
ball_90 = 0;
ball_BC = 0;
mass = 0.045926999;
diametro = 0.14698039;
copy(other) {
let cpy = this;
cpy.position = other.position.clone();
cpy.slope = other.slope.clone();
cpy.velocity = other.velocity.clone();
cpy.state_process = other.state_process;
cpy.max_height = other.max_height;
cpy.spin = other.spin;
cpy.curva = other.curva;
cpy.count = other.count;
cpy.num_max_height = other.num_max_height;
cpy.ball_28 = other.ball_28;
cpy.ball_2C = other.ball_2C;
cpy.ball_30 = other.ball_30;
cpy.ball_3C = other.ball_3C;
cpy.ball_40 = other.ball_40;
cpy.ball_44 = other.ball_44;
cpy.ball_48 = other.ball_48;
cpy.ball_70 = other.ball_70;
cpy.ball_90 = other.ball_90;
cpy.ball_BC = other.ball_BC;
cpy.ball_C4 = other.ball_C4;
cpy.ball_C8 = other.ball_C8;
}
}
const POWER_SHOT_FACTORY = {
NO_POWER_SHOT: 0,
ONE_POWER_SHOT: 1,
TWO_POWER_SHOT: 2,
ITEM_15_POWER_SHOT: 3
}
function getPowerShotFactory(ps) {
let power_shot_factory = 0.0;
switch (ps) {
case POWER_SHOT_FACTORY.ONE_POWER_SHOT:
power_shot_factory = 10.0;
break;
case POWER_SHOT_FACTORY.TWO_POWER_SHOT:
power_shot_factory = 20.0;
break;
case POWER_SHOT_FACTORY.ITEM_15_POWER_SHOT:
power_shot_factory = 15.0;
break;
}
return power_shot_factory
}
const CLUB_TYPE = {
WOOD: 0,
IRON: 1,
PW: 2,
PT: 3
}
class ClubInfo {
constructor(type, rotation_spin, rotation_curve, power_factor, degree, power_base) {
this.type = type;
this.rotation_spin = rotation_spin;
this.rotation_curve = rotation_curve;
this.power_factor = power_factor;
this.degree = degree;
this.power_base = power_base;
}
}
const CLUB_INFO = {
_1W: new ClubInfo(CLUB_TYPE.WOOD, 0.55, 1.61, 236.0, 10.0, 230.0),
_2W: new ClubInfo(CLUB_TYPE.WOOD, 0.50, 1.41, 204.0, 13.0, 210.0),
_3W: new ClubInfo(CLUB_TYPE.WOOD, 0.45, 1.26, 176.0, 16.0, 190.0),
_2I: new ClubInfo(CLUB_TYPE.IRON, 0.45, 1.07, 161.0, 20.0, 180.0),
_3I: new ClubInfo(CLUB_TYPE.IRON, 0.45, 0.95, 149.0, 24.0, 170.0),
_4I: new ClubInfo(CLUB_TYPE.IRON, 0.45, 0.83, 139.0, 28.0, 160.0),
_5I: new ClubInfo(CLUB_TYPE.IRON, 0.45, 0.73, 131.0, 32.0, 150.0),
_6I: new ClubInfo(CLUB_TYPE.IRON, 0.41, 0.67, 124.0, 36.0, 140.0),
_7I: new ClubInfo(CLUB_TYPE.IRON, 0.36, 0.61, 118.0, 40.0, 130.0),
_8I: new ClubInfo(CLUB_TYPE.IRON, 0.30, 0.57, 114.0, 44.0, 120.0),
_9I: new ClubInfo(CLUB_TYPE.IRON, 0.25, 0.53, 110.0, 48.0, 110.0),
PW: new ClubInfo(CLUB_TYPE.PW, 0.18, 0.49, 107.0, 52.0, 100.0),
SW: new ClubInfo(CLUB_TYPE.PW, 0.17, 0.42, 93.0, 56.0, 80.0),
PT1: new ClubInfo(CLUB_TYPE.PT, 0.00, 0.00, 30.0, 0.00, 20.0),
PT2: new ClubInfo(CLUB_TYPE.PT, 0.00, 0.00, 21.0, 0.00, 10.0)
}
const CLUB_INFO_ENUM = [
'_1W',
'_2W',
'_3W',
'_2I',
'_3I',
'_4I',
'_5I',
'_6I',
'_7I',
'_8I',
'_9I',
'PW',
'SW',
'PT1',
'PT2'
]
const POWER_SHOT_FACTORY_ENUM = [
'NO_POWER_SHOT',
'ONE_POWER_SHOT',
'TWO_POWER_SHOT',
'ITEM_15_POWER_SHOT'
]
const SHOT_TYPE_ENUM = [
'DUNK',
'TOMAHAWK',
'SPIKE',
'COBRA'
]
class Club {
type = CLUB_TYPE.WOOD; // 1W
type_distance = TYPE_DISTANCE.BIGGER_OR_EQUAL_58;
// 1W
rotation_spin = 0.55; // Rotação spin
rotation_curve = 1.61; // Rotação curva
power_factor = 236; // Power shot
degree = 10; // Angulo
power_base = 230; // Base power
init(club_info) {
this.type = club_info.type;
this.rotation_spin = club_info.rotation_spin;
this.rotation_curve = club_info.rotation_curve;
this.power_factor = club_info.power_factor;
this.degree = club_info.degree;
this.power_base = club_info.power_base;
}
getDregRad() {
return this.degree * Math.PI / 180;
}
getPower(extraPower, pwrSlot, ps, spin) {
// Get Auxpart
// Get Card
// Get Mascot
let pwrjard = 0.0;
switch(this.type) {
case CLUB_TYPE.WOOD: {
pwrjard = extraPower.total(ps) + getPowerShotFactory(ps) + ((pwrSlot - 15) * 2);
pwrjard *= 1.5;
pwrjard /= this.power_base;
pwrjard += 1;
pwrjard *= this.power_factor;
break;
}
case CLUB_TYPE.IRON: {
pwrjard = ((getPowerShotFactory(ps) / this.power_base + 1.0) * this.power_factor) + (extraPower.total(ps) * this.power_factor * 1.3) / this.power_base;
break;
}
case CLUB_TYPE.PW: { // SW e PW
const getPowerByDegree = (degree, spin) => {
return 0.5 + ((0.5 * (degree + (spin * _00D19B98))) / (56/*Ang*/ / 180 * Math.PI));
}
switch (this.type_distance) {
case TYPE_DISTANCE.LESS_10:
case TYPE_DISTANCE.LESS_15:
case TYPE_DISTANCE.LESS_28:
pwrjard = (getPowerByDegree(this.getDregRad(), spin) * (52.0 + (ps ? 28.0 : 0))) + (extraPower.total(ps) * this.power_factor) / this.power_base;
break;
case TYPE_DISTANCE.LESS_58:
pwrjard = (getPowerByDegree(this.getDregRad(), spin) * (80.0 + (ps ? 18.0 : 0))) + (extraPower.total(ps) * this.power_factor) / this.power_base;
break;
case TYPE_DISTANCE.BIGGER_OR_EQUAL_58:
pwrjard = ((getPowerShotFactory(ps) / this.power_base + 1.0) * this.power_factor) + (extraPower.total(ps) * this.power_factor) / this.power_base;
break;
}
break;
}
case CLUB_TYPE.PT: {
pwrjard = this.power_factor;
break;
}
}
return pwrjard;
}
// Rotation
getPower2(extraPower, pwrSlot, ps) {
let pwrjard = (extraPower.auxpart + extraPower.mascot + extraPower.card) / 2 + (pwrSlot - 15);
if (ps)
pwrjard += (extraPower.ps_card / 2);
pwrjard /= 170;
return pwrjard + 1.5;
}
getRange(extraPower, pwrSlot, ps) {
let pwr_range = this.power_base + extraPower.total(ps) + getPowerShotFactory(ps);
if (this.type == CLUB_TYPE.WOOD)
pwr_range += ((pwrSlot - 15) * 2)
if (this.type == CLUB_TYPE.PW) {
switch (this.type_distance) {
case TYPE_DISTANCE.LESS_10:
case TYPE_DISTANCE.LESS_15:
case TYPE_DISTANCE.LESS_28:
pwr_range = 30.0 + (ps ? 30.0 : 0.0) + extraPower.total(ps)
break;
case TYPE_DISTANCE.LESS_58:
pwr_range = 60.0 + (ps ? 20.0 : 0.0) + extraPower.total(ps)
break;
case TYPE_DISTANCE.BIGGER_OR_EQUAL_58:
pwr_range = this.power_base + extraPower.total(ps) + getPowerShotFactory(ps);
break;
}
}
return pwr_range;
}
}
class Wind {
wind = 0;
degree = 0;
getWind() {
return new Vector3D(this.wind * Math.sin(this.degree * Math.PI / 180) * -1, 0, this.wind * Math.cos(this.degree * Math.PI / 180));
}
}
// const Object ball
const ball = new Ball();
// const club
const club = new Club();
// const wind
const wind = new Wind();
// Const values
const _00D3D008 = 0.00001; // compare with 0 acho
const _00D046A8 = -1.0; // -1 value constant
const _00D00190 = 0.75; // const
const _00D083A0 = 0.02; // Step time, pangya 0.02
const _00D66CF8 = 3.0; // Valor 3 que não sei bem o que é
const _00D3D028 = 0.00008; // Efeito Mangnus acho
const _00D1A888 = 12.566371; // Não sei
const _00D3D210 = 25.132742; // Não sei
const _00CFF040 = 0.1;
const _00D66CA0 = 0.5;
const _00D16928 = 0.002;
const _00D17908 = 0.349065847694874;
const _00D19B98 = 0.0698131695389748;
const _00D16758 = 0.01
const slope_break_to_curve_slope = 0.00875;
const _00E42544_vect_slope = new Vector3D(0.0, 0.0, 1.0);
class QuadTree {
constructor() {
this.ball = new Ball();
this.club = new Club();
this.wind = new Wind();
}
gravityFactor = 1;
gravity = 34.295295715332; // gravity in Yards(scale pangya)
_21D8_vect = new Vector3D(0.0, 0.0, 0.0);
getGravity() {
return this.gravity * this.gravityFactor;
}
ball = undefined;
club = undefined;
wind = undefined;
// Usa no cobra
ball_position_init = new Vector3D(0.0, 0.0, 0.0);
power_range_shot = 0.0;
shot = SHOT_TYPE.DUNK;
power_factor_shot = 0.0;
percentShot_sqrt = 0.0;
spike_init = -1;
spike_med = -1;
power_factor = 0.0;
cobra_init = -1;
// Init Shot
initShot(ball, club, wind, options) {
this.ball = ball;
this.club = club;
this.wind = wind;
this.shot = options.shot;
this.spike_init = -1;
this.spike_med = -1;
this.cobra_init = -1;
this.ball.position = options.position.clone();
// Usa no Cobra
this.ball_position_init = options.position.clone();
// Type distance
this.club.type_distance = calculeTypeDistance(options.distance);
// init max_height
this.ball.max_height = this.ball.position.y;
this.ball.count = 0;
this.ball.num_max_height = -1;
let pwr = this.club.getPower(options.power.options, options.power.pwr, options.ps, options.spin);
// Guarda para usa no cobra
this.power_range_shot = this.club.getRange(options.power.options, options.power.pwr, options.ps);
// Guarda para usar no spike
this.power_factor = pwr;
pwr *= Math.sqrt(options.percentShot);
// Multiplica por 1.0 ou 1.3
if (options.shot == SHOT_TYPE.TOMAHAWK || options.shot == SHOT_TYPE.SPIKE/*Toma e spike */)
pwr *= 1.3;
else
pwr *= 1.0;
// Percent Erro de pangya e ground
pwr *= Math.sqrt(options.ground * 0.01);
// Guarda para usar no spike
this.power_factor_shot = pwr;
this.percentShot_sqrt = Math.sqrt(options.percentShot);
this.ball.curva = options.curva;
this.ball.spin = options.spin;
let value1 = this.getValuesDegree(options.mira_rad + (0 - (this.ball.curva * _00D17908)), 1);
let value2 = this.getValuesDegree((this.club.type_distance == TYPE_DISTANCE.BIGGER_OR_EQUAL_58 ? this.club.getDregRad() : this.club.getDregRad() + (this.ball.spin * _00D19B98)), 0);
this.ball.curva -= this.getSlope(options.mira_rad - options.slope_mira_rad, Math.random()/* Rotation Ball Line */);
pwr *= ((Math.abs(this.ball.curva) * 0.1) + 1);
// tava cos2, neg_rad, neg_sin
let vectA = new Vector3D(value2.neg_sin, value2.neg_rad, value2.cos2);
vectA.multiplyScalar(pwr);
let v1 = new Vector3D(value1.cos, value1.rad, value1.sin);
let v2 = new Vector3D(value1._C, value1._10, value1._14);
let v3 = new Vector3D(value1.neg_sin, value1.neg_rad, value1.cos2);
let v4 = new Vector3D(value1._24, value1._28, value1._2C);
this.ball.velocity.x = v2.x * vectA.y + vectA.x * v1.x + v3.x * vectA.z + v4.x;
this.ball.velocity.y = v1.y * vectA.x + v2.y * vectA.y + v3.y * vectA.z + v4.y;
this.ball.velocity.z = v1.z * vectA.x + v2.z * vectA.y + v3.z * vectA.z + v4.z;
// Rotação eixo X, Z
this.ball.rotation_curve = this.ball.curva * options.percentShot;
this.ball.rotation_spin = this.club.type_distance == TYPE_DISTANCE.BIGGER_OR_EQUAL_58
? (this.club.getPower2(options.power.options, options.power.pwr, options.ps) * options.percentShot) * options.percentShot
: 0.0;
this.ball.ball_48 = this.ball.ball_44; // Flag Power Shot
}
getSlope(mira, line_ball) {
// values Degree To Matrix
const valuesDegreeToMatrix = (value) => {
return {
v1: new Vector3D(value.cos, value.rad, value.sin),
v2: new Vector3D(value._C, value._10, value._14),
v3: new Vector3D(value.neg_sin, value.neg_rad, value.cos2),
v4: new Vector3D(value._24, value._28, value._2C)
}
}
// Matrix cross Matrix
const applyMatrix = (m1, m2) => {
return {
v1: new Vector3D(
m1.v1.x * m2.v1.x + m1.v1.y * m2.v2.x + m1.v1.z * m2.v3.x,
m1.v1.x * m2.v1.y + m1.v1.y * m2.v2.y + m1.v1.z * m2.v3.y,
m1.v1.x * m2.v1.z + m1.v1.y * m2.v2.z + m1.v1.z * m2.v3.z
),
v2: new Vector3D(
m1.v2.x * m2.v1.x + m1.v2.y * m2.v2.x + m1.v2.z * m2.v3.x,
m1.v2.x * m2.v1.y + m1.v2.y * m2.v2.y + m1.v2.z * m2.v3.y,
m1.v2.x * m2.v1.z + m1.v2.y * m2.v2.z + m1.v2.z * m2.v3.z
),
v3: new Vector3D(
m1.v3.x * m2.v1.x + m1.v3.y * m2.v2.x + m1.v3.z * m2.v3.x,
m1.v3.x * m2.v1.y + m1.v3.y * m2.v2.y + m1.v3.z * m2.v3.y,
m1.v3.x * m2.v1.z + m1.v3.y * m2.v2.z + m1.v3.z * m2.v3.z
),
v4: new Vector3D(
m1.v4.x * m2.v1.x + m1.v4.y * m2.v2.x + m1.v4.z * m2.v3.x + m2.v4.x,
m1.v4.x * m2.v1.y + m1.v4.y * m2.v2.y + m1.v4.z * m2.v3.y + m2.v4.y,
m1.v4.x * m2.v1.z + m1.v4.y * m2.v2.z + m1.v4.z * m2.v3.z + m2.v4.z
)
};
};
// Calc slope
let ball_slope_cross_const_vect = this.ball.slope.clone().cross(_00E42544_vect_slope);
let slope_matrix = {
v1: ball_slope_cross_const_vect.clone().normalize(),
v2: this.ball.slope.clone(),
v3: ball_slope_cross_const_vect.clone().cross(this.ball.slope).normalize(),
v4: new Vector3D(0.0, 0.0, 0.0)
};
let value1 = this.getValuesDegree(mira * -1, 1);
let value2 = this.getValuesDegree(line_ball * -2.0, 1);
let m1 = applyMatrix(valuesDegreeToMatrix(value2), slope_matrix);
let m2 = applyMatrix(m1, valuesDegreeToMatrix(value1));
return m2.v2.x * _00D66CA0;
}
getValuesDegree(degree, option = 0) {
let obj = new Object();
if (option == 0) {
obj.cos = 1.0;
obj.rad = 0.0; // degree
obj.sin = 0.0;
obj._C = 0.0;
obj._10 = Math.cos(degree);
obj._14 = Math.sin(degree) * -1;
obj.neg_sin = 0.0;
obj.neg_rad = Math.sin(degree);
obj.cos2 = obj._10;
obj._24 = 0.0;
obj._28 = 0.0;
obj._2C = 0.0;
}else if (option == 1) {
obj.cos = Math.cos(degree);
obj.rad = 0.0; // degree
obj.sin = Math.sin(degree);
obj._C = 0.0;
obj._10 = 1.0;
obj._14 = 0.0;
obj.neg_sin = obj.sin * -1;
obj.neg_rad = 0.0;
obj.cos2 = obj.cos;
obj._24 = 0.0;
obj._28 = 0.0;
obj._2C = 0.0;
}
return obj;
}
ballProcess(steptime, final = undefined) {
this.bounceProcess(steptime, final);
// Cobra
if (this.shot == SHOT_TYPE.COBRA && this.cobra_init < 0) {
if (this.percentShot_sqrt < Math.sqrt(0.8))
this.percentShot_sqrt = Math.sqrt(0.8); // 80%
if (this.ball.count == 0) {
this.ball.velocity.y = 0.0;
this.ball.velocity.normalize().multiplyScalar(this.power_factor_shot);
}
let diff = this.ball.position.clone().sub(this.ball_position_init).length();
let cobra_init_up = ((this.power_range_shot * this.percentShot_sqrt) - 100.0) * 3.2;
if (diff >= cobra_init_up) {
// 1W, 2W e 3W
let power_multiply = 0.0;
if (this.club.type == CLUB_TYPE.WOOD) {
switch (this.club.power_base) {
case 230.0:
power_multiply = 74.0;
break;
case 210.0:
power_multiply = 76.0;
break;
case 190.0:
power_multiply = 80.0;
break;
}
}
this.cobra_init = this.ball.count;
this.ball.velocity.normalize().multiplyScalar(power_multiply).multiplyScalar(this.percentShot_sqrt);
this.ball.rotation_spin = 2.5;
}
}else {
if (this.spike_init < 0 && this.cobra_init < 0 && this.club.type_distance == TYPE_DISTANCE.BIGGER_OR_EQUAL_58) {
this.ball.rotation_spin -= ((_00D66CA0 - (this.ball.spin * _00CFF040)) * _00D083A0);
}else if ((this.shot == SHOT_TYPE.SPIKE && this.spike_init >= 0) || (this.shot == SHOT_TYPE.COBRA && this.cobra_init >= 0))
this.ball.rotation_spin -= _00D083A0;
if (this.shot == SHOT_TYPE.SPIKE && this.ball.count == 0) {
this.ball.velocity.y = 0.0;
this.ball.velocity.normalize().multiplyScalar(this.power_factor_shot);
// check se a bola andou já
this.ball.velocity.normalize().multiplyScalar(72.5).multiplyScalar(this.percentShot_sqrt * 2);
this.ball.rotation_spin = 3.1;
this.spike_init = this.ball.count;
}
if (this.shot == SHOT_TYPE.SPIKE && this.ball.num_max_height >= 0 && (this.ball.num_max_height + 0x3C) < this.ball.count && this.spike_med < 0) {
this.spike_med = this.ball.count;
if (this.club.type == CLUB_TYPE.WOOD) {
let new_power = 0.0;
switch (this.club.power_base) {
case 230.0:
new_power = 344.0;
if ((this.power_factor * this.percentShot_sqrt) < 344.0)
new_power -= (this.power_factor * this.percentShot_sqrt);
else
new_power = 0.0;
new_power = new_power / 112.0 * 21.5;
new_power = -8 - new_power;
this.ball.velocity.y = new_power;
break;
case 210.0:
new_power = 306.0;
if ((this.power_factor * this.percentShot_sqrt) < 306.0)
new_power -= (this.power_factor * this.percentShot_sqrt);
else
new_power = 0.0;
new_power = new_power / 105.0 * 20.5;
new_power = -10.3 - new_power;
this.ball.velocity.y = new_power;
break;
case 190.0:
new_power = 273.0;
if ((this.power_factor * this.percentShot_sqrt) < 273.0)
new_power -= (this.power_factor * this.percentShot_sqrt);
else
new_power = 0.0;
new_power = new_power / 100 * 20.2;
new_power = -10.8 - new_power;
this.ball.velocity.y = new_power;
break;
}
}
this.ball.velocity.multiplyScalar(this.percentShot_sqrt * 7);
this.ball.rotation_spin = this.ball.spin;
}
}
if (this.ball.velocity.y < 0 && this.ball.num_max_height < 0) {
this.ball.max_altura = this.ball.position.y;
this.ball.num_max_height = this.ball.count;
}
this.ball.count++;
}
bounceProcess(steptime, final = undefined) {
if (this.shot == SHOT_TYPE.SPIKE && this.ball.num_max_height >= 0 && (this.ball.num_max_height + 0x3C) > this.ball.count)
return;
let accellVect = this.applyForce();
let otherVect = accellVect.clone();
otherVect.divideScalar(this.ball.mass).multiplyScalar(steptime);
this.ball.velocity.add(otherVect);
if (this.ball.num_max_height == -1) {
let tmpVect = this._21D8_vect.clone().divideScalar(this.ball.mass).multiplyScalar(steptime);
this.ball.velocity.add(tmpVect);
}
this.ball.ball_2C += (this.ball.rotation_curve * _00D1A888 * steptime);
this.ball.ball_30 += (this.ball.rotation_spin * _00D3D210 * steptime);
this.ball.position.add(this.ball.velocity.clone().multiplyScalar((final !== undefined ? final : steptime)));
}
applyForce() {
let retVect = new Vector3D(0.0, 0.0, 0.0);
if (this.ball.rotation_curve != 0) {
let vectorb = new Vector3D(this.ball.velocity.z * _00D046A8, 0, this.ball.velocity.x);
vectorb.normalize();
if (this.cobra_init < 0 || this.spike_init < 0)
vectorb.multiplyScalar(_00D00190 * this.ball.rotation_curve * this.club.rotation_curve);
retVect.add(vectorb);
}
if (this.shot == SHOT_TYPE.SPIKE && this.spike_init < 0)
return new Vector3D(0.0, 0.0, 0.0);
else if (this.shot == SHOT_TYPE.COBRA && this.cobra_init < 0)
return retVect;
let windVect = this.wind.getWind();
windVect.multiplyScalar((this.shot == SHOT_TYPE.SPIKE ? _00D16758 : _00D083A0));
retVect.add(windVect);
retVect.y = retVect.y - (this.getGravity() * this.ball.mass);
if (this.ball.rotation_spin != 0)
retVect.y = retVect.y + (this.club.rotation_spin * _00D66CF8 * this.ball.rotation_spin);
let velVect = this.ball.velocity.clone();
velVect.multiplyScalar(velVect.length() * _00D3D028);
retVect.sub(velVect);
// return
return retVect;
}
}
const diffYZ = function(vect1, vect2) {
return Math.sqrt(Math.pow(vect1.x - vect2.x, 2) + Math.pow(vect1.z - vect2.z, 2));
};
const find_power = (power_player, club_info, shot, power_shot, distancia, altura, vento, angulo, terreno, spin, curva, slope, mira = undefined, percent = undefined) => {
const altura_colision = altura * 1.094 * 3.2;
const distanciaScale = distancia * 3.2;
var vball = new Ball();
const vclub = club;
// init Club Info
if (club != undefined)
vclub.init(club_info);
// Calcule type distance
vclub.type_distance = calculeTypeDistance(distancia);
let slope_mira_rad = 0.0;
if (slope instanceof Vector3D) {
slope_mira_rad = slope.y;
vball.slope = slope.clone();
vball.slope.y = 1.0;
}else if (!isNaN(slope))
vball.slope = new Vector3D(slope * slope_break_to_curve_slope * -1, 1.0, 0.0);
const margin = 0.05;
const limit_checking = 1000;
let count = 0;
let isFind = false;
let found = {
power: -1,
desvio: 0.0
}
wind.wind = vento;
wind.degree = angulo;
const options = {
distance: distancia,
percentShot: percent || 1.0,
ground: terreno,
mira_rad: mira || 0.0,
slope_mira_rad: slope_mira_rad,
spin: spin/30,
curva: curva/30,
position: new Vector3D(0.0, 0.0, 0.0),
shot: shot,
ps: power_shot,
power: power_player || {
pwr: 31,
options: {
auxpart: 0,
mascot: 4,
card: 4,
ps_auxpart: 0,
ps_mascot: 0,
ps_card: 8,
total: function(option) {
let pwr = this.auxpart + this.mascot + this.card;
if (option == 1 || option == 2 || options == 3)
pwr += this.ps_auxpart + this.ps_mascot + this.ps_card;
return pwr;
}
}
}
}
const powerRange = vclub.getRange(options.power.options, options.power.pwr, options.ps);
const findAlturaColision = (qt, altura_colision) => {
let count = 0;
let copy_ball = new Ball();
do {
copy_ball.copy(vball);
qt.ballProcess(_00D083A0);
}while((vball.position.y > altura_colision || vball.num_max_height == -1) && (count++) < 3000)
let last_step = Math.abs((altura_colision - copy_ball.position.y) / (vball.position.y - copy_ball.position.y));
vball.copy(copy_ball);
qt.ballProcess(_00D083A0, _00D083A0 * last_step);
if (Math.abs(distanciaScale - vball.position.z) <= margin)
return 0;
return distanciaScale - vball.position.z;
}
const qt = new QuadTree();
let ret = 0;
let lado = 0;
let feed = 0.00006;
do {
// 130% é um limite seguro, para ter a % da tacada mesmo que não chega, só para saber se estava perto e usar no macro de silvia cannon
if (options.percentShot > 1.3)
options.percentShot = 1.3;
else if (options.percentShot < 0.0)
options.percentShot = 0.1;
qt.initShot(vball, vclub, wind, options);
ret = findAlturaColision(qt, altura_colision);
if (ret == 0)
isFind = true;
else {
// Não tem como achar a força por que nem mandando 100% chega
// 130% é um limite seguro, para ter a % da tacada mesmo que não chega, só para saber se estava perto e usar no macro de silvia cannon
if (options.percentShot == 1.3 && ret > 0)
break;
// Não tem como achar a força por que não pode mandar 0.0 de porcentagem
if (options.percentShot == 0.1 && ret < 0)
break;
if (lado == 0)
lado = (ret < 0 ? -1 : 1);
else if ((ret < 0 && lado == 1) || (ret > 0 && lado == -1))
feed *= 0.5;
options.percentShot += ret * feed;
}
} while (!isFind && (count++) < limit_checking);
if (isFind) {
found.power = options.percentShot;
found.desvio = (vball.position.x + (options.position.x + (Math.tan(options.mira_rad) * distanciaScale))) * DESVIO_SCALE_PANGYA_TO_YARD
found.power_range = powerRange;
found.smartData = { desvio: found.desvio, altura: altura_colision, club: vclub, options: options };
}
return found;
}
const SHOT_TYPE = {
DUNK: 0,
TOMAHAWK: 1,
SPIKE: 2,
COBRA: 3,
}
function checkValidInput(value) {
if (value == '' || isNaN(value))
return 0.0;
return Number(value);
}
function checkValidInputSlope(value) {
if (value == '')
return 0.0;
if (isNaN(value)) {
let split = value.split(',');
if (split.length !== 3 || isNaN(split[0]) || isNaN(split[1]) || isNaN(split[2]))
return 0.0;
return new Vector3D(Number(split[0]) * slope_break_to_curve_slope, Number(split[1]) * Math.PI / 180, Number(split[2]) * slope_break_to_curve_slope);
}
return Number(value);
}
function calc(el) {
let PB_DIVIDE = checkValidInput(document.getElementById('PB_DIVIDE').value);
const W_DIRECT = checkValidInput(document.getElementById('W_DIRECT').value);
let degree = 0;
if(W_DIRECT==0){
degree = checkValidInput(document.getElementById('degree').value);
}
if(W_DIRECT==1){
degree = checkValidInput(document.getElementById('degree').value);
}
if(W_DIRECT==2){
degree = 180 - checkValidInput(document.getElementById('degree').value);
}
if(W_DIRECT==3){
degree = 270 - (90-checkValidInput(document.getElementById('degree').value));
}
if(W_DIRECT==4){
degree = 360 - checkValidInput(document.getElementById('degree').value);
}
const PB_SIZE_SET = checkValidInput(document.getElementById('PB_Measure_Config').value);
let power = checkValidInput(document.getElementById('power').value);
let auxpart_pwr = checkValidInput(document.getElementById('auxpart_pwr').value);
let card_pwr = checkValidInput(document.getElementById('card_pwr').value);
let mascot_pwr = checkValidInput(document.getElementById('mascot_pwr').value);
let card_ps_pwr = checkValidInput(document.getElementById('card_ps_pwr').value);
let club = document.getElementById('club')
club = club.options[club.selectedIndex].value
club = CLUB_INFO[CLUB_INFO_ENUM[club]];
let shot = document.getElementById('shot')
shot = shot.options[shot.selectedIndex].value
shot = SHOT_TYPE[SHOT_TYPE_ENUM[shot]];
let power_shot = document.getElementById('power_shot')
power_shot = power_shot.options[power_shot.selectedIndex].value
power_shot = POWER_SHOT_FACTORY[POWER_SHOT_FACTORY_ENUM[power_shot]];
let distance = checkValidInput(document.getElementById('distance').value);
let height = checkValidInput(document.getElementById('height').value);
let wind = checkValidInput(document.getElementById('wind').value);
//let degree = checkValidInput(document.getElementById('degree').value);
let ground = checkValidInput(document.getElementById('ground').value)
let spin = checkValidInput(document.getElementById('spin').value);
let curve = checkValidInput(document.getElementById('curve').value);
let slope_break = checkValidInputSlope(document.getElementById('slope_break').value);
// 100 % ground
if (ground == 0.0)
ground = 100.0;
let result = document.getElementById('result');
// Make options
const input_values = {
power_player: {
pwr: power,
options: {
auxpart: auxpart_pwr,
mascot: mascot_pwr,
card: card_pwr,
ps_auxpart: 0,
ps_mascot: 0,
ps_card: card_ps_pwr,
total: function(option) {
let pwr = this.auxpart + this.mascot + this.card;
if (option == 1 || option == 2 || option == 3)
pwr += this.ps_auxpart + this.ps_mascot + this.ps_card;
return pwr;
}
}
},
club_info: club,
shot: shot,
power_shot: power_shot,
distance: distance,
height: height,
wind: wind,
degree: degree,
ground: ground,
spin: spin,
curva: curve,
slope: slope_break
};
// Calc
const found = find_power( input_values.power_player,
input_values.club_info,
input_values.shot,
input_values.power_shot,
input_values.distance,
input_values.height,
input_values.wind,
input_values.degree,
input_values.ground,
input_values.spin,
input_values.curva,
input_values.slope);
let f = [found];
let index_f = 0;
if (found.power != -1) {
do {
index_f++;
f.push
(
find_power
(
input_values.power_player,
input_values.club_info,
input_values.shot,
input_values.power_shot,
input_values.distance,
input_values.height,
input_values.wind,
input_values.degree,
input_values.ground,
input_values.spin,
input_values.curva,
input_values.slope,
Math.atan2(f[index_f - 1].desvio * 1.5, input_values.distance),
f[index_f - 1].power
)
);
} while (f[index_f].power != -1 && f[index_f -1].power != -1 && Math.abs(f[index_f - 1].desvio - f[index_f].desvio) >= 0.05);
}
if (f[index_f].power != -1 && f[index_f].power <= 1.1) {
result.color = 'Black';
result.innerHTML =
`
<input style="display:none" type="text" id="power_percent_chk" style="" value="${(f[index_f].power).toFixed(10)}">
<input style="display:none" type="text" id="power_percent" style="" value="${(f[index_f].power).toFixed(10)}">
<input style="display:none" type="text" id="pin" style="" value="${(distance).toFixed(10)}">
<input style="display:none" type="text" id="realhwi" style="" value="${(f[index_f].desvio / 0.2167 * -1 * PB_SIZE_SET).toFixed(10)}">
`;
}else {
result.color = 'Black';
result.innerHTML =
`
<input style="display:none" type="text" id="power_percent_chk" style="" value="${(f[index_f].power).toFixed(10)}">
<input style="display:none" type="text" id="power_percent" style="" value="${(f[index_f].power).toFixed(10)}">
<input style="display:none" type="text" id="pin" style="" value="${(distance).toFixed(10)}">
<input style="display:none" type="text" id="realhwi" style="" value="${(f[index_f].desvio / 0.2167 * -1 * PB_SIZE_SET).toFixed(10)}">
`;
}
}
function GenHWI() {
document.getElementById('calc_btn').style ="display:none";
document.getElementById('RESET').style ="width: 350px; height: 45px;";
calc(this)
uriContent = "data:application/octet-stream,";
uriContent = uriContent + encodeURIComponent("SHOT_PERCENT");
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent("PIN");
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent("REAL_HWI");
uriContent = uriContent + "\r\n";
// data_collector start
if(checkValidInput(document.getElementById('power_percent_chk').value)<= 1.1){
do{//loop start here
//save start
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('power_percent').value));
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('pin').value));
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('realhwi').value));
uriContent = uriContent + "\r\n";
//save end
document.getElementById('distance').value = (checkValidInput(document.getElementById('distance').value) - (-1)).toFixed(0);//set next
calc(this)//get next result
}while(checkValidInput(document.getElementById('power_percent_chk').value)<= 1.1);//repeat loop
}
// data_collector end.
//printf collected data start
newWindow = window.open(uriContent, 'Result.html');
//printf collected data end.
}
function save(){
calc(this)
uriContent = "data:application/octet-stream,";
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('power_percent').value));
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('pin').value));
uriContent = uriContent + encodeURIComponent(" ");
uriContent = uriContent + encodeURIComponent(checkValidInput(document.getElementById('realhwi').value));
uriContent = uriContent + encodeURIComponent("<br/>");
newWindow = window.open(uriContent,'Result.html');
}
function drive_checker() {
const power_status = checkValidInput(document.getElementById('power').value);
const ring_y = checkValidInput(document.getElementById('auxpart_pwr').value);
const card_y = checkValidInput(document.getElementById('card_pwr').value);
const mascot_y = checkValidInput(document.getElementById('mascot_pwr').value);
const lolo_y = checkValidInput(document.getElementById('card_ps_pwr').value);
const true_drive = (200+(power_status*2))+card_y+mascot_y+ring_y;
document.getElementById('Drive_Check').value = `${true_drive}+${lolo_y}`;
document.getElementById('PB_Measure_Config_Check').value = checkValidInput(document.getElementById('PB_Measure_Config').value);
}
function DRIVE_SET(){
drive_checker()
document.getElementById('wedegt-config').style = "display:none";
document.getElementById('div_calc_club_select').style = "";
document.getElementById('div_calc_data_input').style = "";
document.getElementById('calc_btn').style = "width: 350px; height: 45px;";
/*
if(checkValidInput(document.getElementById('Degree_Measure_Config').value)==2){
document.getElementById('Label_W_DIRECT').style = "display:none";
document.getElementById('W_DIRECT').style = "display:none";
document.getElementById('ground').data-index = "5";
document.getElementById('spin').data-index = "6";
document.getElementById('curve').data-index = "7";
document.getElementById('slope_break').data-index = "8";
}else {
document.getElementById('Label_W_DIRECT').style = "";
document.getElementById('W_DIRECT').style = "";
document.getElementById('ground').data-index = "6";
document.getElementById('spin').data-index = "7";
document.getElementById('curve').data-index = "8";
document.getElementById('slope_break').data-index = "9";
}
*/ //fail can not use .data-index
}
function SetPreset(){
const Drive_Preset = document.getElementById('Drive_Preset').value;
if(Drive_Preset == "1"){
document.getElementById('power').value = "33";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "0";
}
if(Drive_Preset == "2"){
document.getElementById('power').value = "36";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "0";
}
if(Drive_Preset == "3"){
document.getElementById('power').value = "38";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "6";
}
if(Drive_Preset == "4"){
document.getElementById('power').value = "46";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "0";
}
if(Drive_Preset == "5"){
document.getElementById('power').value = "46";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "2";
}
if(Drive_Preset == "6"){
document.getElementById('power').value = "52";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "2";
}
if(Drive_Preset == "7"){
document.getElementById('power').value = "57";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "8";
}
if(Drive_Preset == "8"){
document.getElementById('power').value = "58";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "6";
}
if(Drive_Preset == "9"){
document.getElementById('power').value = "66";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "0";
}
if(Drive_Preset == "10"){
document.getElementById('power').value = "76";
document.getElementById('auxpart_pwr').value = "0";
document.getElementById('card_pwr').value = "0";
document.getElementById('mascot_pwr').value = "0";
document.getElementById('card_ps_pwr').value = "8";
}
drive_checker()
document.getElementById('wedegt-config').style = "display:none";
document.getElementById('div_calc_club_select').style = "";
document.getElementById('div_calc_data_input').style = "";
document.getElementById('calc_btn').style = "width: 350px; height: 45px;";
/*
if(checkValidInput(document.getElementById('Degree_Measure_Config').value)==2){
document.getElementById('Label_W_DIRECT').style = "display:none";
document.getElementById('W_DIRECT').style = "display:none";
document.getElementById('ground').data-index = "5";
document.getElementById('spin').data-index = "6";
document.getElementById('curve').data-index = "7";
document.getElementById('slope_break').data-index = "8";
}else {
document.getElementById('Label_W_DIRECT').style = "";
document.getElementById('W_DIRECT').style = "";
document.getElementById('ground').data-index = "6";
document.getElementById('spin').data-index = "7";
document.getElementById('curve').data-index = "8";
document.getElementById('slope_break').data-index = "9";
}
*/ //fail can not use .data-index
}
function Back_to_Setting(){
document.getElementById('wedegt-config').style = "";
document.getElementById('div_calc_club_select').style = "display:none";
document.getElementById('div_calc_data_input').style = "display:none";
document.getElementById('calc_btn').style = "display:none";
document.getElementById('label_Select_Caliper').style = "display:none";
document.getElementById('Select_Caliper').style = "display:none";
document.getElementById('fit_calip_btn').style = "display:none";
}
function toggleView(el) {
let display = 'none';
let label = 'Show';
let top = el;
if (el.innerHTML.toUpperCase() == 'SHOW') {
display = 'grid';
label = 'Hidden';
}
// set label
el.innerHTML = label;
while ((top = top.nextElementSibling)) {
if (top.nodeName !== 'SCRIPT')
top.style.display = display;
}
}
function RESET(){
document.getElementById('calc_btn').style ="width: 350px; height: 45px;";
document.getElementById('RESET').style ="display:none";
document.getElementById('distance').value = "0";
document.getElementById('height').value = "";
document.getElementById('wind').value = "1";
document.getElementById('degree').value = "90";
document.getElementById('W_DIRECT').value = "0";
document.getElementById('ground').value = "100";
document.getElementById('spin').value = "";
document.getElementById('curve').value = "";
document.getElementById('slope_break').value = "";
document.getElementById('club').value = "0";
document.getElementById('power_shot').value = "0";
document.getElementById('shot').value = "0";
document.getElementById('data_input_form').elements[0].focus();
result.color = 'White';
result.innerHTML = ``;
}
function PressEnter(event) {
if(event.key==="Enter"){
const form = document.getElementById('data_input_form');
const index = [...form].indexOf(event.target);
if(index==8){
document.getElementById('calc_btn').focus();
}else{
form.elements[index+1].focus();
}
}
}
function PressEnterSelectCalip(event) {
if(event.key==="Enter"){
document.getElementById('fit_calip_btn').focus();
}
}
function PressEnterpower(event) {
if(event.key==="Enter"){
document.getElementById('auxpart_pwr').focus();
}
}
function PressEnterauxpart_pwr(event) {
if(event.key==="Enter"){
document.getElementById('card_pwr').focus();
}
}
function PressEntercard_pwr(event) {
if(event.key==="Enter"){
document.getElementById('mascot_pwr').focus();
}
}
function PressEntermascot_pwr(event) {
if(event.key==="Enter"){
document.getElementById('card_ps_pwr').focus();
}
}
function PressEntercard_ps_pwr(event) {
if(event.key==="Enter"){
document.getElementById('DRIVE_SET_BTN').focus();
}
}
const YARDS_TO_PB = 0.2167;
const YARDS_TO_PBA = 0.8668;
const YARDS_TO_PBA_PLUS = 1.032;
function desvioByDegree(yards, distance) {
return Math.sin(Math.atan2(yards * -1.5, distance)) * distance / 1.5;
}
function fix(value) {
if (value < 0)
value = Math.ceil(value);
else
value = Math.floor(value);
return value;
}
function getSlopeByResolution() {
const resolution = {
width: checkValidInput(document.getElementById('rel-width').value),
height: checkValidInput(document.getElementById('rel-height').value)
};
const auto_fit = document.getElementById('auto-fit').checked;
if (resolution.height < 480)
return 1.0;
let value = resolution.height / 480;
if (!auto_fit)
value = fix(value);
if (value == 0)
value = 1.0;
return value;
}
function getResolutionPBLimit() {
const resolution = {
width: checkValidInput(document.getElementById('rel-width').value),
height: checkValidInput(document.getElementById('rel-height').value)
};
let value = ((480 / resolution.height * 0.006) * (resolution.width / 2)) / YARDS_TO_PB;
if (value <= 0)
value = 1.0;
return value;
}
function smartDesvio(smartData) {
let MAX_PB = checkValidInput(document.getElementById('smart-dev-limit').value);
if (MAX_PB <= 0) // no limit
MAX_PB = Math.floor(getResolutionPBLimit() * 10) / 10;
const yards = desvioByDegree(smartData.desvio, smartData.options.distance);
let pb_sample = yards / YARDS_TO_PB;
if (Math.abs(pb_sample) <= MAX_PB)
return `${pb_sample.toFixed(2)}pb`;
pb_sample = yards / YARDS_TO_PBA;
if (Math.abs(pb_sample) <= MAX_PB)
return `${pb_sample.toFixed(2)}pba`;
pb_sample = yards / YARDS_TO_PBA_PLUS;
if (Math.abs(pb_sample) <= MAX_PB)
return `${pb_sample.toFixed(2)}pba+`;
// key 0 from keybord
let powerRange = 230;
for (let i = 12; i >= 0; --i) {
smartData.club.init(CLUB_INFO[CLUB_INFO_ENUM[i]]);
powerRange = smartData.club.getRange(smartData.options.power.options, smartData.options.power.pwr, smartData.options.ps);
pb_sample = (yards / YARDS_TO_PB) / ((powerRange * 3.2 * 1.4 - smartData.altura) * 0.0625)
if (Math.abs(pb_sample) <= MAX_PB)
return `${pb_sample.toFixed(2)}pba${powerRange}`
}
return `${pb_sample.toFixed(2)}pba${powerRange}`
}
Quand à la nature du code je ne saurais le dire malheureusement...