diff --git a/.gitignore b/.gitignore
index f9cc0eb..986bb1f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -362,5 +362,4 @@ MigrationBackup/
# Fody - auto-generated XML schema
FodyWeavers.xsd
-**/TGMT-CBTC-EX.csproj
-**/TGMT-CBTC-EX_WCU.csproj
\ No newline at end of file
+*.csproj
\ No newline at end of file
diff --git a/TGMT-CBTC-EX/Inputs.cs b/TGMT-CBTC-EX/Inputs.cs
index 4597a95..adfa9e6 100644
--- a/TGMT-CBTC-EX/Inputs.cs
+++ b/TGMT-CBTC-EX/Inputs.cs
@@ -117,13 +117,15 @@ private void SetBeaconData(AtsEx.PluginHost.Native.BeaconPassedEventArgs e) {
FixIncompatibleModes();
if (signalMode == 1) {
if (e.SignalIndex > 0) {
+ ITCNextSectionPos = e.Optional;
Log("移动授权延伸到 " + e.Optional);
// 延伸移动授权终点
- movementEndpoint = new SpeedLimit(0, e.Optional);
+ movementEndpoint = new SpeedLimit(0, e.Optional - Config.ITCSafetyDistance);
releaseSpeed = false;
} else {
+ ITCNextSectionPos = location + e.Distance;
Log("红灯 移动授权终点是 " + location + e.Distance);
- movementEndpoint = new SpeedLimit(0, location + e.Distance);
+ movementEndpoint = new SpeedLimit(0, location + e.Distance - Config.ITCSafetyDistance);
}
}
break;
@@ -139,6 +141,7 @@ private void Initialize(AtsEx.PluginHost.Native.StartedEventArgs e) {
driveMode = 1;
FixIncompatibleModes();
+ ITCNextSectionPos = 0;
movementEndpoint = SpeedLimit.inf;
nextLimit = null;
selectingMode = -1;
diff --git a/TGMT-CBTC-EX/Load.cs b/TGMT-CBTC-EX/Load.cs
index f3425a9..45937e8 100644
--- a/TGMT-CBTC-EX/Load.cs
+++ b/TGMT-CBTC-EX/Load.cs
@@ -42,6 +42,7 @@ public partial class TGMTAts : AssemblyPluginBase {
public static int TrainNumber = 0;
public static int DestinationNumber = 0;
+ public static double ITCNextSectionPos = 0;
public static int VBCount = 0;
public static int FBCount = 0;
diff --git a/TGMT-CBTC-EX/Patterns/CalculatedLimit.cs b/TGMT-CBTC-EX/Patterns/CalculatedLimit.cs
index 6091230..b2f7315 100644
--- a/TGMT-CBTC-EX/Patterns/CalculatedLimit.cs
+++ b/TGMT-CBTC-EX/Patterns/CalculatedLimit.cs
@@ -26,15 +26,17 @@ public static CalculatedLimit Calculate(double location, double idealdecel, doub
currentTarget = Math.Min(currentTarget, limits[i].AtLocation(location, idealdecel, voffset));
}
SpeedLimit nextLimit;
+ var LimitSpeedDown = false;
if (pointer < limits.Length) {
var pointer_ = pointer;
for (int i = pointer; i < limits.Length; i++) {
if (nextTarget > limits[i].AtLocation(limits[pointer].Location, idealdecel, voffset)) {
pointer_ = i;
- break;
+ LimitSpeedDown = true;
} else {
- nextTarget = Math.Min(nextTarget, limits[i].AtLocation(limits[pointer].Location, idealdecel, voffset));
- }
+ if (LimitSpeedDown) break;
+ }
+ nextTarget = Math.Min(nextTarget, limits[i].AtLocation(limits[pointer].Location, idealdecel, voffset));
}
nextLimit = new SpeedLimit(limits[pointer_].Limit, limits[pointer_].Location);
} else {
diff --git a/TGMT-CBTC-EX/TGMT-CBTC-EX.csproj b/TGMT-CBTC-EX/TGMT-CBTC-EX.csproj
index f9931d0..7d77102 100644
--- a/TGMT-CBTC-EX/TGMT-CBTC-EX.csproj
+++ b/TGMT-CBTC-EX/TGMT-CBTC-EX.csproj
@@ -99,7 +99,6 @@
-
-
+ COPY $(TargetPath) D:\Scenarios\TGMT_i\AtsEX\AtsEXPlugins\$(TargetFileName)
\ No newline at end of file
diff --git a/TGMT-CBTC-EX/TickNew.cs b/TGMT-CBTC-EX/TickNew.cs
index f7db3e1..ed3ddf1 100644
--- a/TGMT-CBTC-EX/TickNew.cs
+++ b/TGMT-CBTC-EX/TickNew.cs
@@ -143,16 +143,22 @@ public override TickResult Tick(TimeSpan elapsed) {
nextLimit = targetCurve.NextLimit;
targetDistance = targetCurve.NextLimit.Location - location;
targetSpeed = targetCurve.NextLimit.Limit;
- if (location > movementEndpoint.Location) {
- // 如果已冲出移动授权终点,释放速度无效
- if (releaseSpeed) Log("超出了移动授权终点, 释放速度无效");
- recommendSpeed = 0;
- ebSpeed = 0;
- releaseSpeed = false;
- }
- if (releaseSpeed) {
- ebSpeed = Math.Max(ebSpeed, Config.ReleaseSpeed);
- recommendSpeed = Math.Max(recommendSpeed, Config.ReleaseSpeed - Config.RecommendSpeedOffset);
+ if(signalMode == 1) {
+ if (location > ITCNextSectionPos) {
+ // 如果已冲出移动授权终点,释放速度无效
+ if (releaseSpeed) Log("超出了移动授权终点, 释放速度无效");
+ recommendSpeed = 0;
+ ebSpeed = 0;
+ releaseSpeed = false;
+ }
+ if (releaseSpeed) {
+ if (location < ITCNextSectionPos && location > movementEndpoint.Location) {
+ targetDistance = -10;
+ targetSpeed = 0;
+ }
+ ebSpeed = Math.Max(ebSpeed, Config.ReleaseSpeed);
+ recommendSpeed = Math.Max(recommendSpeed, Config.ReleaseSpeed - Config.RecommendSpeedOffset);
+ }
}
}
@@ -217,20 +223,6 @@ public override TickResult Tick(TimeSpan elapsed) {
ebSpeed = recommendSpeed = 0;
}
- panel_[11] = distanceToPixel(targetDistance);
- panel_[19] = (int)targetDistance;
- panel_[16] = (int)(ebSpeed * speedMultiplier);
- if (driveMode < 2) {
- panel_[15] = (int)(recommendSpeed * speedMultiplier);
- } else {
- panel_[15] = -1;
- }
- distanceToColor(targetSpeed, targetDistance);
- targetSpeed = Math.Min(targetSpeed, Config.MaxSpeed);
- panel_[17] = (int)targetSpeed;
- panel_[18] = (targetSpeed < 0) ? 1 : 0;
- panel_[31] = 0;
-
// 显示出发信息
if (signalMode > 1 && state.Speed == 0) {
if (Math.Abs(StationManager.NextStation.StopPosition - location) < Config.DoorEnableWindow
@@ -251,6 +243,20 @@ public override TickResult Tick(TimeSpan elapsed) {
} else {
panel_[32] = 0;
}
+
+ panel_[11] = distanceToPixel(targetDistance);
+ panel_[19] = (int)targetDistance;
+ panel_[16] = (int)(ebSpeed * speedMultiplier);
+ if (driveMode < 2) {
+ panel_[15] = (int)(recommendSpeed * speedMultiplier);
+ } else {
+ panel_[15] = -1;
+ }
+ distanceToColor(targetSpeed, targetDistance);
+ targetSpeed = Math.Min(targetSpeed, Config.MaxSpeed);
+ panel_[17] = (int)targetSpeed;
+ panel_[18] = (targetSpeed < 0) ? 1 : 0;
+ panel_[31] = 0;
// 如果没有无线电,显示无线电故障
@@ -298,7 +304,7 @@ public override TickResult Tick(TimeSpan elapsed) {
if (state.Speed == 0 && handles.Power.Notch == 0) {
// 低于制动缓解速度
if (ebState > 0) {
- if (location > movementEndpoint.Location) {
+ if (location > ITCNextSectionPos) {
// 冲出移动授权终点,要求RM
ackMessage = 6;
} else {
@@ -329,7 +335,7 @@ public override TickResult Tick(TimeSpan elapsed) {
panel_[10] = 0;
}
}
- } else if (signalMode == 1) {
+ } else if (signalMode == 1 && !doorOpen && panel_[29] != 3) {
// ITC下冲出移动授权终点。
if (state.Speed == 0) {
// 停稳后降级到RM模式。等待确认。
@@ -349,7 +355,8 @@ public override TickResult Tick(TimeSpan elapsed) {
if (state.Speed < 0.5 && handles.Power.Notch < 1 && handles.Brake.Notch < 1 && driveMode != 2) {
bCommand = Math.Min(Math.Max(bCommand, 1), handles.Brake.MaxServiceBrakeNotch);
}
- if (doorOpen) {
+
+ if (doorOpen || panel_[32] == 4) {
panel_[15] = -10 * speedMultiplier;
panel_[16] = 0;
if (handles.Brake.Notch < 4) bCommand = Math.Min(Math.Max(bCommand, 1), handles.Brake.MaxServiceBrakeNotch);
diff --git a/TGMT-CBTC-EX_WCU/TGMT-CBTC-EX_WCU.csproj b/TGMT-CBTC-EX_WCU/TGMT-CBTC-EX_WCU.csproj
index dbe1def..6fde2b9 100644
--- a/TGMT-CBTC-EX_WCU/TGMT-CBTC-EX_WCU.csproj
+++ b/TGMT-CBTC-EX_WCU/TGMT-CBTC-EX_WCU.csproj
@@ -68,7 +68,6 @@
-
-
+ COPY $(TargetPath) D:\Scenarios\新浜線(架空)\NiihamaLine\MapPlugins\$(TargetFileName)
\ No newline at end of file