private void UpdateMotor()
{
#region release
if (release.active) {
if (headState == PlugState.Locked) {
cableJointLength = 0f;
Deploy();
if (headState == PlugState.Locked) {
extend.active = false;
KAS_Shared.DebugError(
"Deploy(Winch) - Something go wrong, cannot deploy the winch head !!");
}
}
release.isrunning = true;
if (!release.starting) {
retract.active = false;
extend.active = false;
retract.full = false;
release.starting = true;
motorSpeed = 0;
winchStateField = "Released";
}
float tempCablelenghtF = cableRealLenght + releaseOffset;
if (tempCablelenghtF > maxLenght) {
release.active = false;
cableJointLength = maxLenght;
} else {
cableJointLength = tempCablelenghtF;
}
} else {
if (release.isrunning) {
release.isrunning = false;
release.starting = false;
winchStateField = "Idle";
release.active = false;
}
}
#endregion
#region Extend
if (extend.active && !extend.full) {
if (headState == PlugState.Locked) {
cableJointLength = 0f;
Deploy();
if (headState == PlugState.Locked) {
extend.active = false;
KAS_Shared.DebugError(
"Deploy(Winch) - Something go wrong, cannot deploy the winch head !!");
}
}
if (KAS_Shared.RequestPower(this.part, powerDrain)) {
extend.isrunning = true;
if (!extend.starting) {
retract.full = false;
retract.active = false;
release.active = false;
extend.starting = true;
winchStateField = "Extending cable...";
motorSpeed = 0;
fxSndMotorStart.audio.loop = false;
fxSndMotorStart.audio.Play();
}
if (motorSpeedSetting <= 0) {
motorSpeedSetting = motorMinSpeed;
}
BringMotorToSpeed(motorSpeedSetting);
float tempCablelenghtE = cableJointLength + motorSpeed * TimeWarp.deltaTime;
if (tempCablelenghtE > maxLenght) {
extend.full = true;
extend.active = false;
cableJointLength = maxLenght;
} else {
if (!fxSndMotor.audio.isPlaying) {
fxSndMotor.audio.Play();
}
cableJointLength = tempCablelenghtE;
}
} else {
if (this.part.vessel == FlightGlobals.ActiveVessel) {
ScreenMessages.PostScreenMessage("Winch stopped ! Insufficient Power",
5, ScreenMessageStyle.UPPER_CENTER);
}
winchStateField = "Insufficient Power";
StopExtend();
}
} else {
StopExtend();
}
#endregion
#region retract
if (retract.active && !retract.full) {
if (headState == PlugState.Locked) {
StopRetract();
return;
}
if (KAS_Shared.RequestPower(this.part, powerDrain)) {
retract.isrunning = true;
if (!retract.starting) {
extend.full = false;
extend.active = false;
release.active = false;
retract.starting = true;
winchStateField = "Retracting cable...";
motorSpeed = 0;
fxSndMotorStart.audio.loop = false;
fxSndMotorStart.audio.Play();
}
if (motorSpeedSetting <= 0) {
motorSpeedSetting = motorMinSpeed;
}
BringMotorToSpeed(motorSpeedSetting);
float tempCableLenghtR = cableJointLength - motorSpeed * TimeWarp.deltaTime;
if (tempCableLenghtR > 0) {
if (!fxSndMotor.audio.isPlaying) {
fxSndMotor.audio.Play();
}
cableJointLength = tempCableLenghtR;
} else {
OnFullRetract();
}
} else {
if (this.part.vessel == FlightGlobals.ActiveVessel) {
ScreenMessages.PostScreenMessage("Winch stopped ! Insufficient Power",
5, ScreenMessageStyle.UPPER_CENTER);
}
winchStateField = "Insufficient Power";
StopRetract();
}
} else {
StopRetract();
}
#endregion
}