1
Fork 0
mirror of https://github.com/thegeneralist01/Scene-Manager-DevRepo synced 2026-01-11 23:50:29 +01:00

Organized code into local functions within DeletePath. Deleted duplicate speed zone removal code. collectedVehicle is now dismissed when directed to another path in order to remove them from their current path.

This commit is contained in:
Rich Dunne 2020-10-04 13:52:52 -06:00
parent 3367e1a682
commit 334ec2358c

View file

@ -104,47 +104,9 @@ namespace SceneManager
internal static void DeletePath(Path path, Delete pathsToDelete) internal static void DeletePath(Path path, Delete pathsToDelete)
{ {
Game.LogTrivial($"Preparing to delete path {path.Number}"); Game.LogTrivial($"Preparing to delete path {path.Number}");
var pathVehicles = VehicleCollector.collectedVehicles.Where(cv => cv.Path.Number == path.Number).ToList();
Game.LogTrivial($"Removing all vehicles on the path"); RemoveVehiclesFromPath();
foreach (CollectedVehicle cv in pathVehicles.Where(cv => cv != null && cv.Vehicle && cv.Driver)) RemoveBlipsAndYieldZones();
{
if (cv.StoppedAtWaypoint)
{
Rage.Native.NativeFunction.Natives.x260BE8F09E326A20(cv.Vehicle, 1f, 1, true);
}
cv.StoppedAtWaypoint = false;
if (cv.Driver.GetAttachedBlip())
{
cv.Driver.GetAttachedBlip().Delete();
}
cv.Driver.Tasks.Clear();
cv.Driver.Dismiss();
cv.Vehicle.IsSirenOn = false;
cv.Vehicle.IsSirenSilent = true;
cv.Vehicle.Dismiss();
//Game.LogTrivial($"{cv.vehicle.Model.Name} cleared from path {cv.path}");
VehicleCollector.collectedVehicles.Remove(cv);
}
// Remove the speed zone so cars don't continue to be affected after the path is deleted
Game.LogTrivial($"Removing yield zone and waypoint blips");
foreach (Waypoint waypoint in path.Waypoints)
{
if (waypoint.SpeedZone != 0)
{
waypoint.RemoveSpeedZone();
}
if (waypoint.Blip)
{
waypoint.Blip.Delete();
}
if (waypoint.CollectorRadiusBlip)
{
waypoint.CollectorRadiusBlip.Delete();
}
}
Game.LogTrivial($"Clearing path waypoints"); Game.LogTrivial($"Clearing path waypoints");
path.Waypoints.Clear(); path.Waypoints.Clear();
@ -163,9 +125,57 @@ namespace SceneManager
EditPathMenu.editPathMenu.Reset(true, true); EditPathMenu.editPathMenu.Reset(true, true);
EditPathMenu.disablePath.Enabled = true; EditPathMenu.disablePath.Enabled = true;
void RemoveVehiclesFromPath()
{
Game.LogTrivial($"Removing all vehicles on the path");
var pathVehicles = VehicleCollector.collectedVehicles.Where(cv => cv.Path.Number == path.Number).ToList();
foreach (CollectedVehicle cv in pathVehicles.Where(cv => cv != null && cv.Vehicle && cv.Driver))
{
if (cv.StoppedAtWaypoint)
{
Rage.Native.NativeFunction.Natives.x260BE8F09E326A20(cv.Vehicle, 1f, 1, true);
}
cv.StoppedAtWaypoint = false;
if (cv.Driver.GetAttachedBlip())
{
cv.Driver.GetAttachedBlip().Delete();
}
Logger.Log($"{cv.Vehicle.Model.Name} task status before clear/dismiss: {cv.Driver.Tasks.CurrentTaskStatus.ToString()}");
cv.Driver.Tasks.Clear();
cv.Driver.Tasks.ClearSecondary();
cv.Driver.Dismiss();
Logger.Log($"{cv.Vehicle.Model.Name} task status after clear/dismiss: {cv.Driver.Tasks.CurrentTaskStatus.ToString()}");
cv.Vehicle.IsSirenOn = false;
cv.Vehicle.IsSirenSilent = true;
cv.Vehicle.Dismiss();
//Game.LogTrivial($"{cv.vehicle.Model.Name} cleared from path {cv.path}");
VehicleCollector.collectedVehicles.Remove(cv);
}
} }
private static void UpdatePathBlips() void RemoveBlipsAndYieldZones()
{
Game.LogTrivial($"Removing waypoint blips and yield zones.");
foreach (Waypoint waypoint in path.Waypoints)
{
if (waypoint.SpeedZone != 0)
{
waypoint.RemoveSpeedZone();
}
if (waypoint.Blip)
{
waypoint.Blip.Delete();
}
if (waypoint.CollectorRadiusBlip)
{
waypoint.CollectorRadiusBlip.Delete();
}
}
}
void UpdatePathBlips()
{ {
foreach (Path p in paths) foreach (Path p in paths)
{ {
@ -178,13 +188,14 @@ namespace SceneManager
} }
} }
private static void UpdatePathNumbers() void UpdatePathNumbers()
{ {
for (int i = 0; i < paths.Count; i++) for (int i = 0; i < paths.Count; i++)
{ {
paths[i].Number = i + 1; paths[i].Number = i + 1;
} }
} }
}
private static void PathMenu_OnItemSelected(UIMenu sender, UIMenuItem selectedItem, int index) private static void PathMenu_OnItemSelected(UIMenu sender, UIMenuItem selectedItem, int index)
{ {
@ -219,14 +230,7 @@ namespace SceneManager
{ {
DeletePath(paths[i], Delete.All); DeletePath(paths[i], Delete.All);
} }
foreach (Path path in paths)
{
foreach(Waypoint waypoint in path.Waypoints.Where(wp => wp.SpeedZone != 0))
{
waypoint.RemoveSpeedZone();
}
path.Waypoints.Clear();
}
paths.Clear(); paths.Clear();
BuildPathMenu(); BuildPathMenu();
pathMainMenu.Visible = true; pathMainMenu.Visible = true;
@ -237,11 +241,10 @@ namespace SceneManager
if (selectedItem == directDriver) if (selectedItem == directDriver)
{ {
var nearbyVehicle = Game.LocalPlayer.Character.GetNearbyVehicles(1).Where(v => v.VehicleAndDriverValid()).SingleOrDefault(); var nearbyVehicle = Game.LocalPlayer.Character.GetNearbyVehicles(1).Where(v => v.VehicleAndDriverValid()).SingleOrDefault();
CollectedVehicle collectedVehicle;
if (nearbyVehicle) if (nearbyVehicle)
{ {
collectedVehicle = VehicleCollector.collectedVehicles.Where(cv => cv.Vehicle == nearbyVehicle).FirstOrDefault(); var collectedVehicle = VehicleCollector.collectedVehicles.Where(cv => cv.Vehicle == nearbyVehicle).FirstOrDefault();
var path = paths[directDriver.Index]; var path = paths[directDriver.Index];
var waypoints = path.Waypoints; var waypoints = path.Waypoints;
var firstWaypoint = waypoints.First(); var firstWaypoint = waypoints.First();
@ -268,8 +271,10 @@ namespace SceneManager
collectedVehicle.StoppedAtWaypoint = false; collectedVehicle.StoppedAtWaypoint = false;
Rage.Native.NativeFunction.Natives.x260BE8F09E326A20(collectedVehicle.Vehicle, 0f, 1, true); Rage.Native.NativeFunction.Natives.x260BE8F09E326A20(collectedVehicle.Vehicle, 0f, 1, true);
} }
collectedVehicle.Dismiss();
collectedVehicle.Directed = true; collectedVehicle.Directed = true;
if (directOptions.SelectedItem == "First waypoint") if (directOptions.SelectedItem == "First waypoint")
{ {
GameFiber.StartNew(() => GameFiber.StartNew(() =>