Skip to content

Commit

Permalink
Roadmap: Update road cost automatically
Browse files Browse the repository at this point in the history
  • Loading branch information
Greavesy1899 committed Mar 29, 2024
1 parent cf1fb6d commit 0254e0e
Show file tree
Hide file tree
Showing 4 changed files with 88 additions and 0 deletions.
13 changes: 13 additions & 0 deletions Mafia2Libs/Core/IO/FileRoadMap.cs
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,19 @@ public override void Save()
Spline.CalculateLength();
}

foreach(ICostMapEntry CostEntry in NewRoadmap.CostMap)
{
// TODO: Make it work for crossroad/junctions, not been determined
if(CostEntry.RoadGraphEdgeType == RoadGraphEdgeType.Road)
{
IRoadDefinition Road = NewRoadmap.Roads[CostEntry.RoadGraphEdgeLink];
if(Road != null && Road.RoadType == RoadType.Road) // Only for roads for now.
{
CostEntry.Cost = NewRoadmap.CalculateRoadCost(Road);
}
}
}

// now save
using (FileStream FStream = File.Open(file.FullName, FileMode.Open))
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@ public interface IRoadmap : IRoadmapSerializable
ushort GetRoadIndexForRoadGraphEdge(int edgeIndex);
void AddRoadEdge(ushort roadIndex);
void AddCrossroadJunctionEdge(ushort targetRoadIndex);
ushort CalculateRoadCost(IRoadDefinition road);
}

}
37 changes: 37 additions & 0 deletions Mafia2Libs/ResourceTypes/FileTypes/Navigation/Roadmap/RoadmapCe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -861,5 +861,42 @@ public void AddCrossroadJunctionEdge(ushort targetRoadIndex)
{
RoadGraphEdges.Add((ushort) (targetRoadIndex * 2));
}

public ushort CalculateRoadCost(IRoadDefinition road)
{
float splineLength = Splines[road.RoadSplineIndex].Length;

bool hasHighwayFlag = false;
bool hasMainRoadLaneType = false;

foreach (ILaneDefinition lane in road.Lanes)
{
if (lane.LaneFlags.HasFlag(LaneFlags.Highway))
{
hasHighwayFlag = true;
}

if (lane.LaneType == LaneType.MainRoad)
{
hasMainRoadLaneType = true;
}
}

float multCoef = 1.0f;
if (hasHighwayFlag)
{
multCoef = 0.5f;
}
else if (hasMainRoadLaneType)
{
multCoef = 0.75f;
}
else
{
multCoef = 1.5f;
}

return (ushort)(splineLength * multCoef);
}
}
}
37 changes: 37 additions & 0 deletions Mafia2Libs/ResourceTypes/FileTypes/Navigation/Roadmap/RoadmapDe.cs
Original file line number Diff line number Diff line change
Expand Up @@ -564,5 +564,42 @@ private ushort GetLastRoadEdgeIndex()

return 0;
}

public ushort CalculateRoadCost(IRoadDefinition road)
{
float splineLength = Splines[road.RoadSplineIndex].Length;

bool hasHighwayFlag = false;
bool hasMainRoadLaneType = false;

foreach (ILaneDefinition lane in road.Lanes)
{
if (lane.LaneFlags.HasFlag(LaneFlags.Highway))
{
hasHighwayFlag = true;
}

if (lane.LaneType == LaneType.MainRoad)
{
hasMainRoadLaneType = true;
}
}

float multCoef = 1.0f;
if (hasHighwayFlag)
{
multCoef = 0.5f;
}
else if (hasMainRoadLaneType)
{
multCoef = 0.75f;
}
else
{
multCoef = 1.5f;
}

return (ushort)(splineLength * multCoef);
}
}
}

0 comments on commit 0254e0e

Please sign in to comment.