Javascript-форум (https://javascript.ru/forum/)
-   (X)HTML/CSS (https://javascript.ru/forum/xhtml-html-css/)
-   -   помогите разобраться с кодом (https://javascript.ru/forum/xhtml-html-css/53735-pomogite-razobratsya-s-kodom.html)

Mc'Intosh 16.02.2015 10:30

помогите разобраться с кодом
 
помогите разобраться с кодом, есть симулятор графических повреждений называется BeamNG drive, в интерфейсе есть скрипт который считывает время ( разгон до 100, торможение, называется perfomance timers ), как изменить код так чтобы тот считал время прохождения заданного расстояния допустим 1000 условных единиц (Считает он как в имперской системе так и в метрической), что нужно переделать, может нужно какие то переменные добавить?

function SimplePerfTimers(){}

SimplePerfTimers.prototype.initialize = function(){
    this.table = $('<table><thead><tr> <th> <b>Type</b> </th> <th> <b>Start</b> </th> <th> <b>End</b> </th> <th> <b>Time</b> </th> <th> <b>Distance</b> </th></tr></thead><tbody id="resultstable"><tr></tr></tbody></table>').appendTo(this.rootElement).addClass('table');
    this.div = $('<div></div>').appendTo(this.rootElement).addClass('div');

    this.wheelTimer      = 0;
    this.wheelTimerState = 0;   // 0 - No timer / 1 - Acceleration / 3 - braking
    this.timerSpeedLimit = null;
    this.speedMargin     = 0.5;
    this.startPos        = null;
    this.startVelo       = null;
    this.stopVelo        = null;
    this.testing         = "";
    this.aborted         = "";

    this.prevTime        = 0;
    this.curTime         = 0;



    //If no unit was previously selected, default to km/h
    if ((this.persistance.Unit != "Imperial") && (this.persistance.Unit != "Metric")) this.persistance.Unit = "Metric";

    var self = this;
    this.table.click(function(){self.toggleUnit();});
};

SimplePerfTimers.prototype.toggleUnit = function(){
    //Toggle between Imperial and Metric, save the option to persistance system
    this.persistance.Unit = this.persistance.Unit === 'Imperial' ? 'Metric' : 'Imperial';
	HookManager.trigger('Message',{msg:'Switched SimplePerfTimers to ' + this.persistance.Unit + " speed",ttl: 2});
    this.save();
};

function appendToTable (data) {
    $('#resultstable tr:first').before('<tr style="text-align:right;"> <td style="text-align:center;"> ' + data[0] + ' </td> <td> ' + data[1] + ' </td> <td> ' + data[2] + ' </td> <td> ' + data[3] + ' </td> <td> ' + data[4] + ' </td> </tr>');
}

SimplePerfTimers.prototype.update = function(streams){


    var throttle = streams.electrics.throttle.toFixed(2);
    var brake    = streams.electrics.brake.toFixed(2);
    var position = streams.sensors.position;

    if (this.persistance.Unit == "Metric"){
		var airspeed = (streams.electrics.airspeed*3.6).toFixed(2);
		var speedUnits = "km/h";
		this.timerSpeedLimit = 100;
    }
	else {
		var airspeed = (streams.electrics.airspeed*2.23693629).toFixed(2);
		var speedUnits = "MPH";
		this.timerSpeedLimit = 60;
	}


    this.prevTime = this.curTime;
    this.curTime  = performance.now();
    var dt = (this.curTime - this.prevTime)/1000;

    // speed testing
    if (throttle > 0.5 && airspeed > this.speedMargin && airspeed < this.speedMargin*3 && this.wheelTimerState === 0) {
        this.wheelTimerState = 1;
        this.wheelTimer      = 0;
        this.startPos        = position;
        this.startVelo       = airspeed;
        this.aborted         = "";
        this.testing         = "";
    } else if (this.wheelTimerState == 1) {
        this.wheelTimer = this.wheelTimer + dt;
        if (airspeed > this.timerSpeedLimit) {
            // console.log("TOP SPEED")
            var  stopPos    = position;
            this.stopVelo        = airspeed;
            var distance    = Math.sqrt( Math.pow((stopPos.x - this.startPos.x), 2) + Math.pow((stopPos.y - this.startPos.y), 2) );
            this.wheelTimerState = 0;
            this.testing         = "";

            appendToTable(["Speed", Math.floor(this.startVelo) + " " + speedUnits, Math.floor(this.stopVelo) + " " + speedUnits, this.wheelTimer.toFixed(2) + " s", distance.toFixed(2) + " m"]);
        }
        if (throttle < 0.5) {
            // console.log("ABORTED");
            this.aborted = "Aborted: Throttle < 0.5";
            this.wheelTimerState = 0;
        }
    }
    if (this.wheelTimerState == 1) {
        this.testing = "Speed Testing... " + airspeed + " " + speedUnits + ", " + this.wheelTimer.toFixed(2) + " s";
    }

    //brake testing
    if (brake > 0.5 && airspeed > 10 - this.speedMargin && this.wheelTimerState === 0) {
        this.wheelTimerState = 3;
        this.wheelTimer      = 0;
        this.startPos        = position;
        this.startVelo       = airspeed;
        this.aborted         = "";
        this.testing         = "";
    } else if (this.wheelTimerState == 3) {
        this.wheelTimer = this.wheelTimer + dt;
        if (airspeed < this.speedMargin) {
            // console.log("STOPPED")
            var  stopPos         = position;
            this.stopVelo        = airspeed;
            var distance          = Math.sqrt( Math.pow((stopPos.x - this.startPos.x), 2) + Math.pow((stopPos.y - this.startPos.y), 2) ).toFixed(2);
            this.wheelTimerState = 0;
            this.testing         = "";

            appendToTable(["Brake", Math.floor(this.startVelo) + " " + speedUnits, Math.floor(this.stopVelo) + " " + speedUnits, this.wheelTimer.toFixed(2) + " s", distance + " m"]);
        }
        if (brake < 0.5) {
            // console.log("ABORTED");
            this.aborted = "Aborted: Brake < 0.5";
            this.wheelTimerState = 0;
        }
    }
    if (this.wheelTimerState == 3) {
        this.testing = "Brake Testing... " + airspeed + " " + speedUnits + ", " + this.wheelTimer.toFixed(2) + " s";
    }
    var str =  this.testing;
    str    += "<br>" + this.aborted;

    this.div.html(str);
};


P.S. пруф на скачивание, директория самого файла BeamNG.drive\html\apps\SimplePerfTimers

Заранее благодарю за помощь

Vuhrashka 25.03.2015 07:40

Помогите, пожалуйста. Программа не считает стоимость заливки, пишет NAN... Срочно нужно, 2 дня маюсь(((( делала первый раз калькулятор))))
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Калькулятор на JavaScript</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
/*
* Функция подсчета стоимости заливки наливного пола
*/
function calc() {
//получаем ссылку на элемент Select (Тип пола)
var type_floor = document.getElementById("type_floor");
//получаем ссылку на элемент Select (Дополнительные работы)
var additional_works = document.getElementById("additional_works");
//получаем ссылку на чекбокс (Требуется стяжка?)
var is_html = document.getElementById("is_html");
//получаем ссылку на элемент input (Площадь)
var count = document.getElementById("area");
//получаем ссылку на элемент span, в него будем писать стоимость заливки
var result = document.getElementById("result");

var price = ((document.getElementById("type_floor").value*docu ment.getElementById("area").value)
+ (document.getElementById("additional_works").value *document.getElementById("area").value)
+ (document.getElementById("is_html")*document.getEl ementById("area").value)); 0;

result.innerHTML = price;

}

</script>
</head>
<body>
<b>Тип пола:</b><br/>
<select onchange="calc()" id="type_floor">
<option value="0">Выбрать</option>
<option value="4800">Декоративный пол</option>
<option value="4500">Декоративные полы с узором</option>
<option value="2800">Одноцветный наливной пол</option>
</select><br/>
Дополнительные работы:</b><br/>
<select onchange="calc()" id="additional_works">
<option value="0">Выбрать</option>
<option value="200">Демонтаж плитки</option>
<option value="150">Демонтаж деревянного пола</option>
<option value="100">Демонтаж ламината</option>
<option value="50">Демонтаж паркета</option>
<option value="50">Демонтаж линолеума</option>
</select><br/>
<input type="checkbox" onchange="calc()" value="250" id="is_html" />
<label for="is_html">Требуется стяжка?</label>
Площадь: <input type="text" id="area" onchange="calc()" />
<div>Стоимость заливки пола: <span id="result">0</span> руб.</div>
</body>
</html>

hfts_rider 25.03.2015 10:08

Не верно выбрал категорию, тебе в JS.

hfts_rider 25.03.2015 10:20

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Калькулятор на JavaScript</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
/*
* Функция подсчета стоимости заливки наливного пола
*/

  

function calc() {

var type_floor = document.getElementById("type_floor").value;
var additional_works = document.getElementById("additional_works").value;
var is_html = document.getElementById("is_html").value;
var count = document.getElementById("area").value;
var result = document.getElementById("result");  

var price = ((type_floor * count) + (additional_works * count)
+ (is_html * count));

result.innerHTML = price;

}

</script>
</head>
<body>
<b>Тип пола:</b><br/>
<select onchange="calc()" id="type_floor">
<option value="0">Выбрать</option>
<option value="4800">Декоративный пол</option>
<option value="4500">Декоративные полы с узором</option>
<option value="2800">Одноцветный наливной пол</option>
</select><br/> 
Дополнительные работы:</b><br/>
<select onchange="calc()" id="additional_works">
<option value="0">Выбрать</option>
<option value="200">Демонтаж плитки</option>
<option value="150">Демонтаж деревянного пола</option>
<option value="100">Демонтаж ламината</option>
<option value="50">Демонтаж паркета</option>
<option value="50">Демонтаж линолеума</option>
</select><br/>
<input type="checkbox" onchange="calc()" value="250" id="is_html" />
<label for="is_html">Требуется стяжка?</label>
Площадь: <input type="text" id="area" onchange="calc()" />
<div>Стоимость заливки пола: <span id="result">0</span> руб.</div>
</body>
</html>


Часовой пояс GMT +3, время: 03:19.