mirror of
https://github.com/thegeneralist01/Scene-Manager-DevRepo
synced 2026-01-11 15:40:29 +01:00
Refactored collectedVehicles from Dictionary to List
This commit is contained in:
parent
e8c5e2ca69
commit
95f65c792c
3 changed files with 62 additions and 60 deletions
|
|
@ -97,16 +97,16 @@ namespace SceneManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static bool IsInCollectedVehicles(this Vehicle v)
|
private static bool IsInCollectedVehicles(this Vehicle vehicle)
|
||||||
{
|
{
|
||||||
if (v && VehicleCollector.collectedVehicles.ContainsKey(v.LicensePlate))
|
if (vehicle && VehicleCollector.collectedVehicles.Any(cv => cv.Vehicle == vehicle))
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"{v.Model.Name} was found in the collection.");
|
Game.LogTrivial($"{vehicle.Model.Name} was found in the collection.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"{v.Model.Name} was not found in the collection.");
|
Game.LogTrivial($"{vehicle.Model.Name} was not found in the collection.");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -116,20 +116,20 @@ namespace SceneManager
|
||||||
// Before deleting a path, we need to dismiss any vehicles controlled by that path and remove the vehicles from ControlledVehicles
|
// Before deleting a path, we need to dismiss any vehicles controlled by that path and remove the vehicles from ControlledVehicles
|
||||||
//Game.LogTrivial($"Deleting path {index+1}");
|
//Game.LogTrivial($"Deleting path {index+1}");
|
||||||
Game.LogTrivial($"Deleting path {path.PathNum}");
|
Game.LogTrivial($"Deleting path {path.PathNum}");
|
||||||
var pathVehicles = VehicleCollector.collectedVehicles.Where(cv => cv.Value.Path == path.PathNum).ToList();
|
var pathVehicles = VehicleCollector.collectedVehicles.Where(cv => cv.Path == path.PathNum).ToList();
|
||||||
|
|
||||||
Game.LogTrivial($"Removing all vehicles on the path");
|
Game.LogTrivial($"Removing all vehicles on the path");
|
||||||
foreach (KeyValuePair<string, CollectedVehicle> cv in pathVehicles.Where(cv => cv.Value.Vehicle && cv.Value.Vehicle.Driver))
|
foreach (CollectedVehicle cv in pathVehicles.Where(cv => cv.Vehicle && cv.Vehicle.Driver))
|
||||||
{
|
{
|
||||||
cv.Value.SetDismissNow(true);
|
cv.SetDismissNow(true);
|
||||||
cv.Value.Vehicle.Driver.Tasks.Clear();
|
cv.Vehicle.Driver.Tasks.Clear();
|
||||||
cv.Value.Vehicle.Driver.Dismiss();
|
cv.Vehicle.Driver.Dismiss();
|
||||||
cv.Value.Vehicle.Driver.IsPersistent = false;
|
cv.Vehicle.Driver.IsPersistent = false;
|
||||||
cv.Value.Vehicle.Dismiss();
|
cv.Vehicle.Dismiss();
|
||||||
cv.Value.Vehicle.IsPersistent = false;
|
cv.Vehicle.IsPersistent = false;
|
||||||
|
|
||||||
//Game.LogTrivial($"{cv.vehicle.Model.Name} cleared from path {cv.path}");
|
//Game.LogTrivial($"{cv.vehicle.Model.Name} cleared from path {cv.path}");
|
||||||
VehicleCollector.collectedVehicles.Remove(cv.Value.LicensePlate);
|
VehicleCollector.collectedVehicles.Remove(cv);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove the speed zone so cars don't continue to be affected after the path is deleted
|
// Remove the speed zone so cars don't continue to be affected after the path is deleted
|
||||||
|
|
@ -233,11 +233,9 @@ namespace SceneManager
|
||||||
VehicleCollector.SetVehicleAndDriverPersistence(nearbyVehicle);
|
VehicleCollector.SetVehicleAndDriverPersistence(nearbyVehicle);
|
||||||
if (nearbyVehicle.IsInCollectedVehicles())
|
if (nearbyVehicle.IsInCollectedVehicles())
|
||||||
{
|
{
|
||||||
var vehicle = VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate];
|
|
||||||
|
|
||||||
Game.LogTrivial($"[Direct Driver] {nearbyVehicle.Model.Name} already in collection. Clearing tasks.");
|
Game.LogTrivial($"[Direct Driver] {nearbyVehicle.Model.Name} already in collection. Clearing tasks.");
|
||||||
nearbyVehicle.Driver.Tasks.Clear();
|
nearbyVehicle.Driver.Tasks.Clear();
|
||||||
vehicle.AssignPropertiesFromDirectedTask(pathNum, totalPathWaypoints, 1, tasksAssigned: false, dismiss: true, stoppedAtWaypoint: false);//, redirected: true);
|
//VehicleCollector.collectedVehicles[nearbyVehicle].AssignPropertiesFromDirectedTask(pathNum, totalPathWaypoints, 1, tasksAssigned: false, dismiss: true, stoppedAtWaypoint: false);
|
||||||
|
|
||||||
if (directOptions.SelectedItem == "First waypoint")
|
if (directOptions.SelectedItem == "First waypoint")
|
||||||
{
|
{
|
||||||
|
|
@ -256,14 +254,15 @@ namespace SceneManager
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
VehicleCollector.collectedVehicles.Add(nearbyVehicle.LicensePlate, new CollectedVehicle(nearbyVehicle, nearbyVehicle.LicensePlate, paths[directDriver.Index].Waypoints[0].Path, paths[directDriver.Index].Waypoints.Count, 1, false, false));
|
VehicleCollector.collectedVehicles.Add(new CollectedVehicle(nearbyVehicle, nearbyVehicle.LicensePlate, paths[directDriver.Index].Waypoints[0].Path, paths[directDriver.Index].Waypoints.Count, 1, false, false));
|
||||||
|
var collectedVehicle = VehicleCollector.collectedVehicles.Where(cv => cv.Vehicle == nearbyVehicle) as CollectedVehicle;
|
||||||
Game.LogTrivial($"[Direct Driver] {nearbyVehicle.Model.Name} not in collection, adding to collection for path {paths[directDriver.Index].PathNum} with {paths[directDriver.Index].Waypoints.Count} waypoints");
|
Game.LogTrivial($"[Direct Driver] {nearbyVehicle.Model.Name} not in collection, adding to collection for path {paths[directDriver.Index].PathNum} with {paths[directDriver.Index].Waypoints.Count} waypoints");
|
||||||
|
|
||||||
if (directOptions.SelectedItem == "First waypoint")
|
if (directOptions.SelectedItem == "First waypoint")
|
||||||
{
|
{
|
||||||
GameFiber.StartNew(() =>
|
GameFiber.StartNew(() =>
|
||||||
{
|
{
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.DriveToPosition(firstWaypoint.Position, firstWaypoint.Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
nearbyVehicle.Driver.Tasks.DriveToPosition(firstWaypoint.Position, firstWaypoint.Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
||||||
|
|
||||||
for (int nextWaypoint = firstWaypoint.Number; nextWaypoint < paths[directDriver.Index].Waypoints.Count; nextWaypoint++)
|
for (int nextWaypoint = firstWaypoint.Number; nextWaypoint < paths[directDriver.Index].Waypoints.Count; nextWaypoint++)
|
||||||
{
|
{
|
||||||
|
|
@ -273,28 +272,28 @@ namespace SceneManager
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} is driving to waypoint {paths[directDriver.Index].Waypoints[nextWaypoint].Number}");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} is driving to waypoint {paths[directDriver.Index].Waypoints[nextWaypoint].Number}");
|
||||||
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && !VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].StoppedAtWaypoint)
|
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && !collectedVehicle.StoppedAtWaypoint)
|
||||||
{
|
{
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.DriveToPosition(paths[directDriver.Index].Waypoints[nextWaypoint].Position, paths[directDriver.Index].Waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
nearbyVehicle.Driver.Tasks.DriveToPosition(paths[directDriver.Index].Waypoints[nextWaypoint].Position, paths[directDriver.Index].Waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && paths[directDriver.Index].Waypoints[nextWaypoint].DrivingFlag == VehicleDrivingFlags.StopAtDestination)
|
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && paths[directDriver.Index].Waypoints[nextWaypoint].DrivingFlag == VehicleDrivingFlags.StopAtDestination)
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} stopping at waypoint.");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} stopping at waypoint.");
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.PerformDrivingManeuver(VehicleManeuver.GoForwardStraightBraking);
|
nearbyVehicle.Driver.Tasks.PerformDrivingManeuver(VehicleManeuver.GoForwardStraightBraking);
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].SetStoppedAtWaypoint(true);
|
collectedVehicle.SetStoppedAtWaypoint(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} all tasks complete.");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} all tasks complete.");
|
||||||
AITasking.DismissDriver(VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate]);
|
AITasking.DismissDriver(collectedVehicle);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GameFiber.StartNew(() =>
|
GameFiber.StartNew(() =>
|
||||||
{
|
{
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.DriveToPosition(nearestWaypoint[0].Position, nearestWaypoint[0].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
nearbyVehicle.Driver.Tasks.DriveToPosition(nearestWaypoint[0].Position, nearestWaypoint[0].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
||||||
|
|
||||||
for (int nextWaypoint = nearestWaypoint[0].Number; nextWaypoint < paths[directDriver.Index].Waypoints.Count; nextWaypoint++)
|
for (int nextWaypoint = nearestWaypoint[0].Number; nextWaypoint < paths[directDriver.Index].Waypoints.Count; nextWaypoint++)
|
||||||
{
|
{
|
||||||
|
|
@ -304,21 +303,21 @@ namespace SceneManager
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} is driving to waypoint {paths[directDriver.Index].Waypoints[nextWaypoint].Number}");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} is driving to waypoint {paths[directDriver.Index].Waypoints[nextWaypoint].Number}");
|
||||||
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && !VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].StoppedAtWaypoint)
|
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && !collectedVehicle.StoppedAtWaypoint)
|
||||||
{
|
{
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.DriveToPosition(paths[directDriver.Index].Waypoints[nextWaypoint].Position, paths[directDriver.Index].Waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
nearbyVehicle.Driver.Tasks.DriveToPosition(paths[directDriver.Index].Waypoints[nextWaypoint].Position, paths[directDriver.Index].Waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)263043, 2f).WaitForCompletion();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && paths[directDriver.Index].Waypoints[nextWaypoint].DrivingFlag == VehicleDrivingFlags.StopAtDestination)
|
if (paths[directDriver.Index].Waypoints.ElementAtOrDefault(nextWaypoint) != null && paths[directDriver.Index].Waypoints[nextWaypoint].DrivingFlag == VehicleDrivingFlags.StopAtDestination)
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} stopping at waypoint.");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} stopping at waypoint.");
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Driver.Tasks.PerformDrivingManeuver(VehicleManeuver.GoForwardStraightBraking);
|
nearbyVehicle.Driver.Tasks.PerformDrivingManeuver(VehicleManeuver.GoForwardStraightBraking);
|
||||||
VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].SetStoppedAtWaypoint(true);
|
collectedVehicle.SetStoppedAtWaypoint(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Game.LogTrivial($"{VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate].Vehicle.Model.Name} all tasks complete.");
|
Game.LogTrivial($"{nearbyVehicle.Model.Name} all tasks complete.");
|
||||||
AITasking.DismissDriver(VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate]);
|
AITasking.DismissDriver(collectedVehicle);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -336,11 +335,11 @@ namespace SceneManager
|
||||||
Game.LogTrivial($"Dismiss from path");
|
Game.LogTrivial($"Dismiss from path");
|
||||||
if (nearbyVehicle.IsInCollectedVehicles())
|
if (nearbyVehicle.IsInCollectedVehicles())
|
||||||
{
|
{
|
||||||
var controlledVehicle = VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate];
|
var collectedVehicle = VehicleCollector.collectedVehicles.Where(cv => cv.Vehicle == nearbyVehicle) as CollectedVehicle;
|
||||||
controlledVehicle.SetDismissNow(true);
|
collectedVehicle.SetDismissNow(true);
|
||||||
controlledVehicle.Vehicle.Driver.Tasks.Clear();
|
collectedVehicle.Vehicle.Driver.Tasks.Clear();
|
||||||
controlledVehicle.Vehicle.Driver.Dismiss();
|
collectedVehicle.Vehicle.Driver.Dismiss();
|
||||||
Game.LogTrivial($"Dismissed driver of {controlledVehicle.Vehicle.Model.Name} from path {controlledVehicle.Path}");
|
Game.LogTrivial($"Dismissed driver of {collectedVehicle.Vehicle.Model.Name} from path {collectedVehicle.Path}");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -352,19 +351,19 @@ namespace SceneManager
|
||||||
Game.LogTrivial($"Dismiss from waypoint");
|
Game.LogTrivial($"Dismiss from waypoint");
|
||||||
if (nearbyVehicle.IsInCollectedVehicles())
|
if (nearbyVehicle.IsInCollectedVehicles())
|
||||||
{
|
{
|
||||||
var controlledVehicle = VehicleCollector.collectedVehicles[nearbyVehicle.LicensePlate];
|
var collectedVehicle = VehicleCollector.collectedVehicles.Where(cv => cv.Vehicle == nearbyVehicle) as CollectedVehicle;
|
||||||
controlledVehicle.SetStoppedAtWaypoint(false);
|
collectedVehicle.SetStoppedAtWaypoint(false);
|
||||||
controlledVehicle.Vehicle.Driver.Tasks.Clear();
|
collectedVehicle.Vehicle.Driver.Tasks.Clear();
|
||||||
controlledVehicle.Vehicle.Driver.Dismiss();
|
collectedVehicle.Vehicle.Driver.Dismiss();
|
||||||
|
|
||||||
if (controlledVehicle.CurrentWaypoint == controlledVehicle.TotalWaypoints && !controlledVehicle.StoppedAtWaypoint)
|
if (collectedVehicle.CurrentWaypoint == collectedVehicle.TotalWaypoints && !collectedVehicle.StoppedAtWaypoint)
|
||||||
{
|
{
|
||||||
controlledVehicle.SetDismissNow(true);
|
collectedVehicle.SetDismissNow(true);
|
||||||
Game.LogTrivial($"Dismissed driver of {controlledVehicle.Vehicle.Model.Name} from final waypoint and ultimately the path");
|
Game.LogTrivial($"Dismissed driver of {collectedVehicle.Vehicle.Model.Name} from final waypoint and ultimately the path");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"Dismissed driver of {controlledVehicle.Vehicle.Model.Name} from waypoint {controlledVehicle.CurrentWaypoint}");
|
Game.LogTrivial($"Dismissed driver of {collectedVehicle.Vehicle.Model.Name} from waypoint {collectedVehicle.CurrentWaypoint}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ namespace SceneManager
|
||||||
{
|
{
|
||||||
public static UIMenu settingsMenu { get; private set; }
|
public static UIMenu settingsMenu { get; private set; }
|
||||||
public static UIMenuCheckboxItem debugGraphics = new UIMenuCheckboxItem("Enable 3D Waypoints", false),
|
public static UIMenuCheckboxItem debugGraphics = new UIMenuCheckboxItem("Enable 3D Waypoints", false),
|
||||||
hints = new UIMenuCheckboxItem("Enable Hints", true);
|
hints = new UIMenuCheckboxItem("Enable Hints", true); // Refactor this to be true/false based off the ini
|
||||||
public static UIMenuListScrollerItem<SpeedUnitsOfMeasure> speedUnits = new UIMenuListScrollerItem<SpeedUnitsOfMeasure>("Speed Unit of Measure", "", new[] { SpeedUnitsOfMeasure.MPH, SpeedUnitsOfMeasure.KPH });
|
public static UIMenuListScrollerItem<SpeedUnitsOfMeasure> speedUnits = new UIMenuListScrollerItem<SpeedUnitsOfMeasure>("Speed Unit of Measure", "", new[] { SpeedUnitsOfMeasure.MPH, SpeedUnitsOfMeasure.KPH });
|
||||||
public enum SpeedUnitsOfMeasure
|
public enum SpeedUnitsOfMeasure
|
||||||
{
|
{
|
||||||
|
|
@ -52,6 +52,7 @@ namespace SceneManager
|
||||||
if(checkboxItem == hints)
|
if(checkboxItem == hints)
|
||||||
{
|
{
|
||||||
Hints.Enabled = hints.Checked ? true : false;
|
Hints.Enabled = hints.Checked ? true : false;
|
||||||
|
// Update the setting in the .ini when check state is changed
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,8 @@ namespace SceneManager
|
||||||
TotalControl = AllowWrongWay | AvoidObjects | AvoidPeds | TakeShortestPath | StopForTrafficLights | IgnorePathfinding | StopForVehicles
|
TotalControl = AllowWrongWay | AvoidObjects | AvoidPeds | TakeShortestPath | StopForTrafficLights | IgnorePathfinding | StopForVehicles
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Dictionary<string, CollectedVehicle> collectedVehicles = new Dictionary<string, CollectedVehicle>();
|
//public static Dictionary<string, CollectedVehicle> collectedVehicles = new Dictionary<string, CollectedVehicle>();
|
||||||
|
public static List<CollectedVehicle> collectedVehicles = new List<CollectedVehicle>();
|
||||||
|
|
||||||
public static void StartCollectingAtWaypoint(List<Path> paths, Path path, Waypoint waypoint)
|
public static void StartCollectingAtWaypoint(List<Path> paths, Path path, Waypoint waypoint)
|
||||||
{
|
{
|
||||||
|
|
@ -55,8 +56,9 @@ namespace SceneManager
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var collectedVehicle = collectedVehicles.Where(cv => cv.Vehicle == vehicle) as CollectedVehicle;
|
||||||
// If the vehicle is not in the collection yet
|
// If the vehicle is not in the collection yet
|
||||||
if (!collectedVehicles.ContainsKey(vehicle.LicensePlate))
|
if(collectedVehicle == null)
|
||||||
{
|
{
|
||||||
SetVehicleAndDriverPersistence(vehicle);
|
SetVehicleAndDriverPersistence(vehicle);
|
||||||
CollectedVehicle newCollectedVehicle = AddVehicleToCollection(path, waypoint, vehicle);
|
CollectedVehicle newCollectedVehicle = AddVehicleToCollection(path, waypoint, vehicle);
|
||||||
|
|
@ -66,20 +68,20 @@ namespace SceneManager
|
||||||
AssignTasksFiber.Start();
|
AssignTasksFiber.Start();
|
||||||
}
|
}
|
||||||
// If the vehicle is in the collection, but has no tasks
|
// If the vehicle is in the collection, but has no tasks
|
||||||
else if (collectedVehicles.ContainsKey(vehicle.LicensePlate) && !collectedVehicles[vehicle.LicensePlate].TasksAssigned)
|
else if (!collectedVehicle.TasksAssigned)
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"[WaypointVehicleCollector] {vehicle.Model.Name} already in collection, but with no tasks. Assigning tasks.");
|
Game.LogTrivial($"[WaypointVehicleCollector] {vehicle.Model.Name} already in collection, but with no tasks. Assigning tasks.");
|
||||||
collectedVehicles[vehicle.LicensePlate].SetTasksAssigned(true);
|
collectedVehicle.SetTasksAssigned(true);
|
||||||
|
|
||||||
GameFiber AssignTasksFiber = new GameFiber(() => AITasking.AssignWaypointTasks(collectedVehicles[vehicle.LicensePlate], path.Waypoints, waypoint));
|
GameFiber AssignTasksFiber = new GameFiber(() => AITasking.AssignWaypointTasks(collectedVehicle, path.Waypoints, waypoint));
|
||||||
AssignTasksFiber.Start();
|
AssignTasksFiber.Start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Vehicle[] GetNearbyVehicles(Vector3 collectorPosition, float radius)
|
private static Vehicle[] GetNearbyVehicles(Vector3 collectorPosition, float collectorRadius)
|
||||||
{
|
{
|
||||||
return (from v in World.GetAllVehicles() where v.IsValidForCollection() && v.DistanceTo(collectorPosition) <= radius select v).ToArray(); //v.IsValidForCollection()
|
return (from v in World.GetAllVehicles() where v.DistanceTo(collectorPosition) <= collectorRadius && v.IsValidForCollection() select v).ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void AssignStopForVehiclesFlag(List<Path> paths, Path path, Waypoint waypointData)
|
private static void AssignStopForVehiclesFlag(List<Path> paths, Path path, Waypoint waypointData)
|
||||||
|
|
@ -106,7 +108,7 @@ namespace SceneManager
|
||||||
private static CollectedVehicle AddVehicleToCollection(Path path, Waypoint waypoint, Vehicle v)
|
private static CollectedVehicle AddVehicleToCollection(Path path, Waypoint waypoint, Vehicle v)
|
||||||
{
|
{
|
||||||
var collectedVehicle = new CollectedVehicle(v, v.LicensePlate, path.PathNum, path.Waypoints.Count, waypoint.Number, true, false);
|
var collectedVehicle = new CollectedVehicle(v, v.LicensePlate, path.PathNum, path.Waypoints.Count, waypoint.Number, true, false);
|
||||||
collectedVehicles.Add(v.LicensePlate, collectedVehicle);
|
collectedVehicles.Add(collectedVehicle);
|
||||||
Game.LogTrivial($"[WaypointVehicleCollector] Added {v.Model.Name} to collection from path {path.PathNum}, waypoint {waypoint.Number}.");
|
Game.LogTrivial($"[WaypointVehicleCollector] Added {v.Model.Name} to collection from path {path.PathNum}, waypoint {waypoint.Number}.");
|
||||||
return collectedVehicle;
|
return collectedVehicle;
|
||||||
}
|
}
|
||||||
|
|
@ -121,7 +123,7 @@ namespace SceneManager
|
||||||
|
|
||||||
private static bool IsValidForCollection(this Vehicle v)
|
private static bool IsValidForCollection(this Vehicle v)
|
||||||
{
|
{
|
||||||
if(v && v.Speed > 0 && v.IsOnAllWheels && v != Game.LocalPlayer.Character.CurrentVehicle && (v.IsCar || v.IsBike || v.IsBicycle || v.IsQuadBike || (v.HasSiren && !v.IsSirenOn)) && !collectedVehicles.ContainsKey(v.LicensePlate))
|
if(v && v.Speed > 1 && v.IsOnAllWheels && v != Game.LocalPlayer.Character.CurrentVehicle && v != Game.LocalPlayer.Character.LastVehicle && (v.IsCar || v.IsBike || v.IsBicycle || v.IsQuadBike || (v.HasSiren && !v.IsSirenOn)) && !collectedVehicles.Any(cv => cv.Vehicle == v))
|
||||||
{
|
{
|
||||||
if(v.HasDriver && !v.Driver.IsAlive)
|
if(v.HasDriver && !v.Driver.IsAlive)
|
||||||
{
|
{
|
||||||
|
|
@ -157,14 +159,14 @@ namespace SceneManager
|
||||||
var collectorWaypoints = waypointData.Where(wp => wp.IsCollector);
|
var collectorWaypoints = waypointData.Where(wp => wp.IsCollector);
|
||||||
var vehicleFarEnoughAwayFromCollectors = collectorWaypoints.All(wp => cv.Vehicle.DistanceTo(wp.Position) > wp.CollectorRadius);
|
var vehicleFarEnoughAwayFromCollectors = collectorWaypoints.All(wp => cv.Vehicle.DistanceTo(wp.Position) > wp.CollectorRadius);
|
||||||
|
|
||||||
if (collectedVehicles.ContainsKey(cv.LicensePlate) && vehicleFarEnoughAwayFromCollectors)
|
if (collectedVehicles.Contains(cv) && vehicleFarEnoughAwayFromCollectors)
|
||||||
{
|
{
|
||||||
Game.LogTrivial($"{cv.Vehicle.Model.Name} is far enough away from all attractor waypoints and has been removed from the collection.");
|
Game.LogTrivial($"{cv.Vehicle.Model.Name} is far enough away from all attractor waypoints and has been removed from the collection.");
|
||||||
cv.SetTasksAssigned(false);
|
cv.SetTasksAssigned(false);
|
||||||
cv.Vehicle.Driver.BlockPermanentEvents = false;
|
cv.Vehicle.Driver.BlockPermanentEvents = false;
|
||||||
cv.Vehicle.Driver.IsPersistent = false;
|
cv.Vehicle.Driver.IsPersistent = false;
|
||||||
cv.Vehicle.IsPersistent = false;
|
cv.Vehicle.IsPersistent = false;
|
||||||
collectedVehicles.Remove(cv.LicensePlate);
|
collectedVehicles.Remove(cv);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue