Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 53 additions & 32 deletions source/OpenBVE/Graphics/Renderer/Overlays.HUD.cs
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,10 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
switch (Command)
{
case "reverser":
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
if (TrainManager.PlayerTrain.Handles.Reverser.Driver < 0)
{
sc = MessageColor.Orange;
Expand Down Expand Up @@ -86,7 +90,7 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
Element.TransitionState = 0.0;
break;
case "power":
if (TrainManager.PlayerTrain.Handles.SingleHandle)
if (TrainManager.PlayerTrain.Handles.SingleHandle || Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
Expand Down Expand Up @@ -118,7 +122,7 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
Element.TransitionState = 0.0;
break;
case "brake":
if (TrainManager.PlayerTrain.Handles.SingleHandle)
if (TrainManager.PlayerTrain.Handles.SingleHandle || Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
Expand Down Expand Up @@ -229,7 +233,7 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
Element.TransitionState = 0.0;
break;
case "locobrake":
if (!TrainManager.PlayerTrain.Handles.HasLocoBrake)
if (!TrainManager.PlayerTrain.Handles.HasLocoBrake || Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
Expand Down Expand Up @@ -305,7 +309,7 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
Element.TransitionState = 0.0;
break;
case "single":
if (!TrainManager.PlayerTrain.Handles.SingleHandle)
if (!TrainManager.PlayerTrain.Handles.SingleHandle || Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
Expand Down Expand Up @@ -373,7 +377,10 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
break;
case "doorsleft":
case "doorsright":
{
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
if ((LeftDoors & TrainManager.TrainDoorState.AllClosed) == 0 | (RightDoors & TrainManager.TrainDoorState.AllClosed) == 0)
{
Element.TransitionState -= speed * TimeElapsed;
Expand All @@ -384,6 +391,7 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
Element.TransitionState += speed * TimeElapsed;
if (Element.TransitionState > 1.0) Element.TransitionState = 1.0;
}

TrainManager.TrainDoorState Doors = Command == "doorsleft" ? LeftDoors : RightDoors;
if ((Doors & TrainManager.TrainDoorState.Mixed) != 0)
{
Expand All @@ -401,49 +409,62 @@ private static void RenderHUDElement(HUD.Element Element, double TimeElapsed)
{
sc = MessageColor.Blue;
}

t = Command == "doorsleft" ? Translations.QuickReferences.DoorsLeft : Translations.QuickReferences.DoorsRight;
} break;
break;
case "stopleft":
case "stopright":
case "stopnone":
{
int s = TrainManager.PlayerTrain.Station;
if (s >= 0 && Game.PlayerStopsAtStation(s) && Interface.CurrentOptions.GameMode != Interface.GameMode.Expert)
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
bool cond;
if (Command == "stopleft")
{
cond = Game.Stations[s].OpenLeftDoors;
}
else if (Command == "stopright")
{
cond = Game.Stations[s].OpenRightDoors;
}
else
{
cond = !Game.Stations[s].OpenLeftDoors & !Game.Stations[s].OpenRightDoors;
}
if (TrainManager.PlayerTrain.StationState == TrainManager.TrainStopState.Pending & cond)
return;
}

{
int s = TrainManager.PlayerTrain.Station;
if (s >= 0 && Game.PlayerStopsAtStation(s) && Interface.CurrentOptions.GameMode != Interface.GameMode.Expert)
{
Element.TransitionState -= speed * TimeElapsed;
if (Element.TransitionState < 0.0) Element.TransitionState = 0.0;
bool cond;
if (Command == "stopleft")
{
cond = Game.Stations[s].OpenLeftDoors;
}
else if (Command == "stopright")
{
cond = Game.Stations[s].OpenRightDoors;
}
else
{
cond = !Game.Stations[s].OpenLeftDoors & !Game.Stations[s].OpenRightDoors;
}

if (TrainManager.PlayerTrain.StationState == TrainManager.TrainStopState.Pending & cond)
{
Element.TransitionState -= speed * TimeElapsed;
if (Element.TransitionState < 0.0) Element.TransitionState = 0.0;
}
else
{
Element.TransitionState += speed * TimeElapsed;
if (Element.TransitionState > 1.0) Element.TransitionState = 1.0;
}
}
else
{
Element.TransitionState += speed * TimeElapsed;
if (Element.TransitionState > 1.0) Element.TransitionState = 1.0;
}

t = Element.Text;
}
else
{
Element.TransitionState += speed * TimeElapsed;
if (Element.TransitionState > 1.0) Element.TransitionState = 1.0;
}
t = Element.Text;
} break;
break;
case "stoplefttick":
case "stoprighttick":
case "stopnonetick":
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
{
int s = TrainManager.PlayerTrain.Station;
if (s >= 0 && Game.PlayerStopsAtStation(s) && Interface.CurrentOptions.GameMode != Interface.GameMode.Expert)
Expand Down
5 changes: 5 additions & 0 deletions source/OpenBVE/OldCode/TrainManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using System.Windows.Forms;
using OpenBveApi.Interface;
using OpenBveApi.Objects;
using OpenTK.Graphics.ES11;

namespace OpenBve
{
Expand Down Expand Up @@ -153,6 +154,10 @@ internal static void UpdateTrainObjects(double TimeElapsed, bool ForceUpdate)
/// <param name="TimeElapsed">The time elapsed since the last call to this function</param>
internal static void UpdateTrains(double TimeElapsed)
{
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
return;
}
for (int i = 0; i < Trains.Length; i++) {
Trains[i].Update(TimeElapsed);
}
Expand Down
2 changes: 1 addition & 1 deletion source/OpenBVE/Parsers/Train/TrainDatParser.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Linq;
using System.Windows.Forms;
using OpenBve.BrakeSystems;
Expand Down
25 changes: 17 additions & 8 deletions source/OpenBVE/System/GameWindow.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
Expand Down Expand Up @@ -656,14 +656,23 @@ private void SetupSimulation()
// initialize camera
if (World.CameraRestriction == Camera.RestrictionMode.NotAvailable)
{
World.CameraMode = CameraViewMode.InteriorLookAhead;
World.CameraMode = Interface.CurrentOptions.GameMode != Interface.GameMode.Developer ? CameraViewMode.InteriorLookAhead : CameraViewMode.Track;
}
//Place the initial camera in the driver car
TrainManager.PlayerTrain.Cars[TrainManager.PlayerTrain.DriverCar].UpdateCamera();
World.CameraTrackFollower.Update(-1.0, true, false);
ObjectManager.UpdateVisibility(World.CameraTrackFollower.TrackPosition + World.CameraCurrentAlignment.Position.Z);
World.CameraSavedExterior = new World.CameraAlignment(new OpenBveApi.Math.Vector3(-2.5, 1.5, -15.0), 0.3, -0.2, 0.0, PlayerFirstStationPosition, 1.0);
World.CameraSavedTrack = new World.CameraAlignment(new OpenBveApi.Math.Vector3(-3.0, 2.5, 0.0), 0.3, 0.0, 0.0, TrainManager.PlayerTrain.Cars[0].FrontAxle.Follower.TrackPosition - 10.0, 1.0);
if (Interface.CurrentOptions.GameMode != Interface.GameMode.Developer)
{
//Place the initial camera in the driver car
TrainManager.PlayerTrain.Cars[TrainManager.PlayerTrain.DriverCar].UpdateCamera();
World.CameraTrackFollower.Update(-1.0, true, false);
ObjectManager.UpdateVisibility(World.CameraTrackFollower.TrackPosition + World.CameraCurrentAlignment.Position.Z);
World.CameraSavedExterior = new World.CameraAlignment(new OpenBveApi.Math.Vector3(-2.5, 1.5, -15.0), 0.3, -0.2, 0.0, PlayerFirstStationPosition, 1.0);
World.CameraSavedTrack = new World.CameraAlignment(new OpenBveApi.Math.Vector3(-3.0, 2.5, 0.0), 0.3, 0.0, 0.0, TrainManager.PlayerTrain.Cars[0].FrontAxle.Follower.TrackPosition - 10.0, 1.0);
}
else
{
World.CameraSavedExterior = new World.CameraAlignment(new OpenBveApi.Math.Vector3(0, 2.5, -5.0), 0.0, 0.0, 0.0, World.CameraTrackFollower.TrackPosition, 1.0);
World.CameraCurrentAlignment = World.CameraSavedExterior;
}

// signalling sections
for (int i = 0; i < TrainManager.Trains.Length; i++)
{
Expand Down
13 changes: 13 additions & 0 deletions source/OpenBVE/System/Input/ProcessControls.cs
Original file line number Diff line number Diff line change
Expand Up @@ -635,6 +635,13 @@ internal static void ProcessControls(double TimeElapsed)
Game.Menu.PushMenu(Menu.MenuType.Quit);
break;
case Translations.Command.CameraInterior:
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
Game.AddMessage("Interior camera is unavailable in Route Viewer mode.",
MessageManager.MessageDependency.CameraView, Interface.GameMode.Developer,
MessageColor.White, Game.SecondsSinceMidnight + 2.0, null);
return;
}
// camera: interior
MainLoop.SaveCameraSettings();
bool lookahead = false;
Expand Down Expand Up @@ -876,6 +883,12 @@ internal static void ProcessControls(double TimeElapsed)
break;
case Translations.Command.CameraReset:
// camera: reset
if (Interface.CurrentOptions.GameMode == Interface.GameMode.Developer)
{
World.CameraSavedExterior = new World.CameraAlignment(new OpenBveApi.Math.Vector3(0, 2.5, -5.0), 0.0, 0.0, 0.0, World.CameraTrackFollower.TrackPosition, 1.0);
World.CameraCurrentAlignment = World.CameraSavedExterior;
return;
}
if (World.CameraMode == CameraViewMode.Interior |
World.CameraMode == CameraViewMode.InteriorLookAhead)
{
Expand Down
62 changes: 52 additions & 10 deletions source/OpenBVE/System/Loading.cs
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,34 @@ private static void LoadThreaded() {
}
Complete = true;
}
private static void LoadEverythingThreaded() {

private static void LoadEverythingThreaded()
{
LoadRouteFile();
if (Interface.CurrentOptions.GameMode != Interface.GameMode.Developer)
{
LoadTrains();
}
else
{

TrainManager.Trains = new TrainManager.Train[1];
TrainManager.Trains[0] = new TrainManager.Train(TrainManager.TrainState.Pending)
{
Cars = new TrainManager.Car[1]
};
TrainManager.Trains[0].Cars[0] = new TrainManager.Car(TrainManager.Trains[0], 0);
TrainManager.PlayerTrain = TrainManager.Trains[0];
//TrainDatParser.ParseTrainData(String.Empty, Encoding.UTF8, TrainManager.Trains[0]);
//TrainManager.PlayerTrain = TrainManager.Trains[0];
//TrainManager.PlayerTrain.PlaceCars(0.0);
//CurrentTrainFolder = String.Empty;
//LoadTrains();
}
}

private static void LoadRouteFile()
{
Program.FileSystem.AppendToLogFile("Loading route file: " + CurrentRouteFile);
string RailwayFolder = GetRailwayFolder(CurrentRouteFile);
string ObjectFolder = OpenBveApi.Path.CombineDirectory(RailwayFolder, "Object");
Expand All @@ -177,7 +204,7 @@ private static void LoadEverythingThreaded() {
Game.Reset(true);
Game.MinimalisticSimulation = true;
// screen
World.CameraTrackFollower = new TrackManager.TrackFollower{ Train = null, CarIndex = -1 };
World.CameraTrackFollower = new TrackManager.TrackFollower {Train = null, CarIndex = -1};
World.CameraMode = CameraViewMode.Interior;
//First, check the format of the route file
//RW routes were written for BVE1 / 2, and have a different command syntax
Expand All @@ -186,21 +213,31 @@ private static void LoadEverythingThreaded() {
CsvRwRouteParser.ParseRoute(CurrentRouteFile, IsRW, CurrentRouteEncoding, CurrentTrainFolder, ObjectFolder, SoundFolder, false);
Thread createIllustrations = new Thread(Game.RouteInformation.LoadInformation) {IsBackground = true};
createIllustrations.Start();
System.Threading.Thread.Sleep(1); if (Cancel) return;
System.Threading.Thread.Sleep(1);
if (Cancel) return;
Game.CalculateSeaLevelConstants();
if (Game.BogusPretrainInstructions.Length != 0) {
if (Game.BogusPretrainInstructions.Length != 0)
{
double t = Game.BogusPretrainInstructions[0].Time;
double p = Game.BogusPretrainInstructions[0].TrackPosition;
for (int i = 1; i < Game.BogusPretrainInstructions.Length; i++) {
if (Game.BogusPretrainInstructions[i].Time > t) {
for (int i = 1; i < Game.BogusPretrainInstructions.Length; i++)
{
if (Game.BogusPretrainInstructions[i].Time > t)
{
t = Game.BogusPretrainInstructions[i].Time;
} else {
}
else
{
t += 1.0;
Game.BogusPretrainInstructions[i].Time = t;
}
if (Game.BogusPretrainInstructions[i].TrackPosition > p) {

if (Game.BogusPretrainInstructions[i].TrackPosition > p)
{
p = Game.BogusPretrainInstructions[i].TrackPosition;
} else {
}
else
{
p += 1.0;
Game.BogusPretrainInstructions[i].TrackPosition = p;
}
Expand All @@ -212,9 +249,14 @@ private static void LoadEverythingThreaded() {
//Log the fact that only a single station is present, as this is probably not right
Program.FileSystem.AppendToLogFile("The processed route file only contains a single station.");
}

Program.FileSystem.AppendToLogFile("Route file loaded successfully.");
RouteProgress = 1.0;
// initialize trains
}

private static void LoadTrains()
{
// initialize trains
System.Threading.Thread.Sleep(1); if (Cancel) return;
TrainManager.Trains = new TrainManager.Train[Game.PrecedingTrainTimeDeltas.Length + 1 + (Game.BogusPretrainInstructions.Length != 0 ? 1 : 0)];
for (int k = 0; k < TrainManager.Trains.Length; k++)
Expand Down
1 change: 1 addition & 0 deletions source/OpenBVE/System/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ internal enum GameMode
Arcade = 0,
Normal = 1,
Expert = 2,
Developer = 3
}

internal enum XParsers
Expand Down
Loading