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

Refactored tasks for a directed driver into a local function. Removed dead code.

This commit is contained in:
Rich Dunne 2020-10-08 06:15:31 -06:00
parent a3b553cbff
commit a47e736494

View file

@ -4,6 +4,9 @@ using System.Linq;
namespace SceneManager
{
// Driving styles https://gtaforums.com/topic/822314-guide-driving-styles/
// also https://vespura.com/fivem/drivingstyle/
class AITasking
{
internal static void AssignWaypointTasks(CollectedVehicle collectedVehicle, List<Waypoint> waypoints, Waypoint currentWaypoint)
@ -15,20 +18,8 @@ namespace SceneManager
if (currentWaypoint != null && collectedVehicle.Directed)
{
collectedVehicle.Dismissed = false;
collectedVehicle.Directed = false;
float acceptedDistance = GetAcceptedStoppingDistance(waypoints, waypoints.IndexOf(currentWaypoint));
Logger.Log($"{collectedVehicle.Vehicle.Model.Name} distance to collection waypoint: {collectedVehicle.Vehicle.DistanceTo2D(currentWaypoint.Position)}");
Logger.Log($"{collectedVehicle.Vehicle.Model.Name} is driving to path {currentWaypoint.Path.Number} waypoint {currentWaypoint.Number}");
if(currentWaypoint.DrivingFlag == VehicleDrivingFlags.IgnorePathFinding)
{
collectedVehicle.Driver.Tasks.DriveToPosition(currentWaypoint.Position, currentWaypoint.Speed, (VehicleDrivingFlags)17040299, acceptedDistance);
}
else
{
collectedVehicle.Driver.Tasks.DriveToPosition(currentWaypoint.Position, currentWaypoint.Speed, (VehicleDrivingFlags)263075, acceptedDistance);
}
AssignTasksForDirectedDriver(acceptedDistance);
LoopWhileDrivingToDirectedWaypoint(acceptedDistance);
}
@ -49,6 +40,23 @@ namespace SceneManager
collectedVehicle.Dismiss();
}
void AssignTasksForDirectedDriver(float acceptedDistance)
{
collectedVehicle.Dismissed = false;
collectedVehicle.Directed = false;
//Logger.Log($"{collectedVehicle.Vehicle.Model.Name} distance to collection waypoint: {collectedVehicle.Vehicle.DistanceTo2D(currentWaypoint.Position)}");
Logger.Log($"{collectedVehicle.Vehicle.Model.Name} is driving to path {currentWaypoint.Path.Number} waypoint {currentWaypoint.Number}");
if (currentWaypoint.DrivingFlag == VehicleDrivingFlags.IgnorePathFinding)
{
collectedVehicle.Driver.Tasks.DriveToPosition(currentWaypoint.Position, currentWaypoint.Speed, (VehicleDrivingFlags)17040299, acceptedDistance);
}
else
{
collectedVehicle.Driver.Tasks.DriveToPosition(currentWaypoint.Position, currentWaypoint.Speed, (VehicleDrivingFlags)263075, acceptedDistance);
}
}
void LoopWhileDrivingToDirectedWaypoint(float acceptedDistance)
{
while (VehicleAndDriverAreValid(collectedVehicle) && !collectedVehicle.Dismissed && !collectedVehicle.SkipWaypoint && collectedVehicle.Vehicle.FrontPosition.DistanceTo2D(currentWaypoint.Position) > acceptedDistance)
@ -73,12 +81,12 @@ namespace SceneManager
Logger.Log($"Preparing to run task loop for {collectedVehicle.Vehicle.Model.Name}");
for (int currentWaypointTask = currentWaypoint.Number; currentWaypointTask < waypoints.Count; currentWaypointTask++)
{
Logger.Log($"{collectedVehicle.Vehicle.Model.Name} in the task loop");
//Logger.Log($"{collectedVehicle.Vehicle.Model.Name} in the task loop");
collectedVehicle.SkipWaypoint = false;
if (collectedVehicle.Dismissed || collectedVehicle == null)
{
Logger.Log($"Vehicle dismissed, return");
Logger.Log($"Vehicle dismissed or null, return");
return;
}
@ -119,7 +127,9 @@ namespace SceneManager
{
return;
}
driver.Tasks.PerformDrivingManeuver(collectedVehicle.Vehicle, VehicleManeuver.GoForwardWithCustomSteeringAngle, 3).WaitForCompletion();
// Do we need this?
if (driver)
{
driver.Tasks.Clear();
@ -131,17 +141,6 @@ namespace SceneManager
{
while (VehicleAndDriverAreValid(collectedVehicle) && !collectedVehicle.Dismissed && !collectedVehicle.SkipWaypoint && waypoints.ElementAtOrDefault(nextWaypoint) != null && collectedVehicle.Vehicle.FrontPosition.DistanceTo2D(waypoints[nextWaypoint].Position) > acceptedDistance)
{
//Logger.Log($"Dismissed: {collectedVehicle.Dismissed} SkipWaypoint: {collectedVehicle.SkipWaypoint}");
//if (waypoints[nextWaypoint].DrivingFlag == VehicleDrivingFlags.IgnorePathFinding)
//{
// driver.Tasks.DriveToPosition(waypoints[nextWaypoint].Position, waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)17040299, acceptedDistance);
//}
//else
//{
// driver.Tasks.DriveToPosition(waypoints[nextWaypoint].Position, waypoints[nextWaypoint].Speed, (VehicleDrivingFlags)263075, acceptedDistance);
//}
//Logger.Log($"Looping while {collectedVehicle.Vehicle.Model.Name} drives to waypoint {waypoints[nextWaypoint].Number} ({collectedVehicle.Vehicle.DistanceTo2D(waypoints[nextWaypoint].Position)}m away from collector radius {waypoints[nextWaypoint].CollectorRadius})");
//Logger.Log($"Distance of front of vehicle to waypoint: {collectedVehicle.Vehicle.FrontPosition.DistanceTo2D(waypoints[nextWaypoint].Position)}");
GameFiber.Sleep(100);
}
}
@ -183,31 +182,6 @@ namespace SceneManager
return true;
}
private static bool VehicleAndDriverAreValid(List<Waypoint> waypoints, int nextWaypoint, CollectedVehicle collectedVehicle)
{
if (waypoints.ElementAtOrDefault(nextWaypoint) == null)
{
Logger.Log($"Waypoint is null");
return false;
}
if(collectedVehicle == null)
{
Logger.Log($"CollectedVehicle is null");
return false;
}
if (!collectedVehicle.Vehicle)
{
Logger.Log($"Vehicle is null");
return false;
}
if (!collectedVehicle.Driver)
{
Logger.Log($"Driver is null");
return false;
}
return true;
}
private static void StopVehicleAtWaypoint(Waypoint currentWaypoint, CollectedVehicle collectedVehicle)
{
if (!VehicleAndDriverAreValid(collectedVehicle))