From 43fcba1254ce8d40b0ca4754a8d9fd1b36619e57 Mon Sep 17 00:00:00 2001 From: Sidi Liang <1467329765@qq.com> Date: Mon, 19 Aug 2019 23:00:30 +0800 Subject: [PATCH] Engine: Bug fix --- Nasal/engine.nas | 49 +++++++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/Nasal/engine.nas b/Nasal/engine.nas index 4db90c4..4f32852 100644 --- a/Nasal/engine.nas +++ b/Nasal/engine.nas @@ -44,7 +44,7 @@ var Engine = { power: 0, #kW outputForce: 0, #N - debugMode: 0, + debugMode: 1, elecNodeI: nil, elecNodeV: nil, @@ -61,16 +61,28 @@ var Engine = { var angularDecelaeration = frictionTorque/0.625; #print(angularAcceleration); #print("de"~angularDecelaeration); - if(angularDecelaeration > 0){ - angularDecelaeration *= -1; - } + + + + angularDecelaeration = math.abs(angularDecelaeration) * me.getDirection() * -1; + + + var totalAcceleration = angularAcceleration + angularDecelaeration; - if(angularSpeed + totalAcceleration * 0.1 > 10){ - angularSpeed = angularSpeed + totalAcceleration * 0.1; - }else if(angularSpeed + totalAcceleration * 0.1 < 10){ - #print("angularSpeed + totalAcceleration * 0.1 < 10"); - angularSpeed = angularSpeed + angularAcceleration * 0.1; + if(me.getDirection() == 1){ + if(angularSpeed + totalAcceleration * 0.1 > 10){ + angularSpeed = angularSpeed + totalAcceleration * 0.1; + }else if(angularSpeed + totalAcceleration * 0.1 < 10){ + #print("angularSpeed + totalAcceleration * 0.1 < 10"); + angularSpeed = angularSpeed + angularAcceleration * 0.1; + } + }else if(me.getDirection() == -1){ + if(angularSpeed + totalAcceleration * 0.1 < -10){ + angularSpeed = angularSpeed + totalAcceleration * 0.1; + }else if(angularSpeed + totalAcceleration * 0.1 > -10){ + angularSpeed = angularSpeed + angularAcceleration * 0.1; + } } rps = angularSpeed / 6.2831853; @@ -87,7 +99,7 @@ var Engine = { update_engine: func(){ var throttle = props.getNode("/",1).getValue("/controls/engines/engine/throttle"); - var direction = me.direction; + var direction = me.getDirection(); var mode = props.getNode("/",1).getValue("/controls/mode"); var volt = me.elecNodeV.getValue(); @@ -106,26 +118,25 @@ var Engine = { var cmdPower = throttle * me.maxPower; #print("cmdPower: "~cmdPower); - me.power = me.rpm * me.torque / 10824; + me.power = math.abs(me.rpm * me.torque / 10824); - if(me.rpm < cmdRpm){ + if(math.abs(me.rpm) < cmdRpm){ #print("me.rpm < cmdRpm"); - me.torque = throttle * me.maxTorque; - #print("torque "~ me.torque); + me.torque = throttle * me.maxTorque * direction; var angularAcceleration = me.torque / 0.175; #rad/s^2 me.rpm = me.rpm_calculate(angularAcceleration); }else if(throttle == 0){ me.torque = 0; - var angularAcceleration = me.torque / 0.175; #rad/s^2 + var angularAcceleration = direction * math.abs(me.torque) / 0.175; #rad/s^2 me.rpm = me.rpm_calculate(angularAcceleration); }else{ me.power = cmdPower; - var angularAcceleration = me.torque / 0.175; #rad/s^2 + var angularAcceleration = direction * math.abs(me.torque) / 0.175; #rad/s^2 me.rpm = me.rpm_calculate(angularAcceleration); - me.torque = me.power / me.rpm * 10824; + me.torque = direction * math.abs(me.power / me.rpm * 10824); } - var force = 3.33 * direction * me.torque * me.gear; + var force = 3.33 * me.torque * me.gear; me.outputForce = force; @@ -157,7 +168,7 @@ var Engine = { me.runningState = 1; props.getNode("/",1).setValue("/controls/engines/engine/started",1); me.engineTimer.simulatedTime = 1; - me.rpm = 100; + me.rpm = 100 * me.getDirection(); me.engineTimer.start(); return 1; },