-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #10 from CitiesSkylinesMods/v_0.6
Version 0.6
- Loading branch information
Showing
18 changed files
with
911 additions
and
69 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
using System.Collections.Generic; | ||
using BrokenNodeDetector.Highlighter; | ||
using UnityEngine; | ||
|
||
namespace BrokenNodeDetector { | ||
public class BndResultHighlightManager: SimulationManagerBase<BndResultHighlightManager, ResultHighlightProperties>, IRenderableManager { | ||
private static bool _instantiated; | ||
|
||
private static BndResultHighlightManager _instance; | ||
|
||
private IHighlightable _highlightable; | ||
|
||
private Dictionary<HighlightType, IHighlightable> _highlightables = new Dictionary<HighlightType, IHighlightable>(); | ||
private void Awake() { | ||
_highlightables = new Dictionary<HighlightType, IHighlightable> { | ||
{HighlightType.Building, new BuildingHighlight()}, | ||
{HighlightType.Segment, new SegmentHighlight()}, | ||
{HighlightType.PTStop, new PTStopHighlight()}, | ||
{HighlightType.Node, new BrokenNodeHighlight()} | ||
}; | ||
_instantiated = true; | ||
} | ||
|
||
private void OnDestroy() { | ||
_instance = null; | ||
_instantiated = false; | ||
_highlightables.Clear(); | ||
} | ||
|
||
private void OnDisable() { | ||
_highlightable?.SetHighlightData(default); | ||
} | ||
|
||
public void Highlight(HighlightData data) { | ||
if (data.Type == HighlightType.Unknown) return; | ||
|
||
Debug.Log($"Highlighting " + data); | ||
EnsureHighlighter(data); | ||
enabled = true; | ||
} | ||
|
||
private void EnsureHighlighter(HighlightData data) { | ||
if (_highlightable == null) { | ||
_highlightable = _highlightables[data.Type]; | ||
} else { | ||
if (_highlightable.Type != data.Type) { | ||
_highlightable.SetHighlightData(default); | ||
_highlightable = _highlightables[data.Type]; | ||
} | ||
} | ||
_highlightable.SetHighlightData(data); | ||
} | ||
|
||
protected override void BeginOverlayImpl(RenderManager.CameraInfo cameraInfo) { | ||
base.BeginOverlayImpl(cameraInfo); | ||
if (!IsInstanceValid()) return; | ||
|
||
_highlightable.Render(cameraInfo); | ||
} | ||
|
||
private bool IsInstanceValid() { | ||
return _highlightable != null && _highlightable.IsValid; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
using ColossalFramework.Math; | ||
using UnityEngine; | ||
|
||
namespace BrokenNodeDetector.Highlighter { | ||
public class BrokenNodeHighlight: IHighlightable { | ||
private HighlightData _data; | ||
public bool IsValid => IsValidData(); | ||
public HighlightType Type => HighlightType.Node; | ||
|
||
public void SetHighlightData(HighlightData data) { | ||
_data = data; | ||
} | ||
|
||
public void Render(RenderManager.CameraInfo cameraInfo) { | ||
if (!IsValidData()) return; | ||
|
||
NetManager manager = NetManager.instance; | ||
for (int i = 0; i < 8; i++) { | ||
|
||
uint segmentId = manager.m_nodes.m_buffer[_data.NodeID].GetSegment(i); | ||
if (segmentId == 0) | ||
continue; | ||
ref NetSegment segment = ref manager.m_segments.m_buffer[segmentId]; | ||
Color color = Color.white; | ||
color.a = 0.8f; | ||
Bezier3 bezier; | ||
bezier.a = NetManager.instance.m_nodes.m_buffer[segment.m_startNode].m_position; | ||
bezier.d = NetManager.instance.m_nodes.m_buffer[segment.m_endNode].m_position; | ||
NetSegment.CalculateMiddlePoints(bezier.a, segment.m_startDirection, bezier.d, segment.m_endDirection, false, false, out bezier.b, out bezier.c); | ||
Bounds bounds = bezier.GetBounds(); | ||
RenderManager.instance.OverlayEffect.DrawBezier(cameraInfo, color, bezier, segment.Info.m_halfWidth * 2f, -100f, -100f, bounds.min.y - 10f, bounds.max.y + 10f, false, true); | ||
} | ||
|
||
ref NetNode node = ref manager.m_nodes.m_buffer[_data.NodeID]; | ||
Color nodeColor = Color.red; | ||
nodeColor.a = 0.8f; | ||
RenderManager.instance.OverlayEffect.DrawCircle(cameraInfo, nodeColor, node.m_position, node.m_bounds.size.x, node.m_position.y - 30f, node.m_position.y + 30f, true, false); | ||
} | ||
|
||
public bool IsValidData() { | ||
if (_data != null && _data.Type == HighlightType.Node && _data.NodeID != 0) { | ||
if ((NetManager.instance.m_nodes.m_buffer[_data.NodeID].m_flags & NetNode.Flags.Created) != 0) { | ||
return true; | ||
} | ||
|
||
_data.Reset(Type); | ||
} | ||
|
||
return false; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
using UnityEngine; | ||
|
||
namespace BrokenNodeDetector.Highlighter { | ||
public class BuildingHighlight : IHighlightable { | ||
private HighlightData _data; | ||
public bool IsValid => IsValidData(); | ||
public HighlightType Type => HighlightType.Building; | ||
|
||
public void SetHighlightData(HighlightData data) { | ||
_data = data; | ||
} | ||
|
||
public void Render(RenderManager.CameraInfo cameraInfo) { | ||
if (!IsValidData()) return; | ||
|
||
BuildingManager buildingManager = BuildingManager.instance; | ||
uint buildingId = _data.BuildingID; | ||
BuildingInfo info = buildingManager.m_buildings.m_buffer[buildingId].Info; | ||
int length = buildingManager.m_buildings.m_buffer[buildingId].Length; | ||
Vector3 position = buildingManager.m_buildings.m_buffer[buildingId].m_position; | ||
float angle = buildingManager.m_buildings.m_buffer[buildingId].m_angle; | ||
Color color = Color.red; | ||
color.a = 0.7f; | ||
BuildingTool.RenderOverlay(cameraInfo, info, length, position, angle, color, false); | ||
} | ||
|
||
private bool IsValidData() { | ||
if (_data != null && _data.Type == HighlightType.Building && _data.BuildingID != 0) { | ||
if ((BuildingManager.instance.m_buildings.m_buffer[_data.BuildingID].m_flags & Building.Flags.Created) != 0) { | ||
return true; | ||
} | ||
|
||
_data.Reset(Type); | ||
} | ||
|
||
return false; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
namespace BrokenNodeDetector.Highlighter { | ||
public interface IHighlightable { | ||
bool IsValid { get; } | ||
|
||
HighlightType Type { get; } | ||
|
||
void SetHighlightData(HighlightData data); | ||
|
||
void Render( RenderManager.CameraInfo cameraInfo); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
using UnityEngine; | ||
|
||
namespace BrokenNodeDetector.Highlighter { | ||
public class PTStopHighlight: IHighlightable { | ||
private HighlightData _data; | ||
public bool IsValid => IsValidData(); | ||
public HighlightType Type => HighlightType.PTStop; | ||
|
||
public void SetHighlightData(HighlightData data) { | ||
_data = data; | ||
} | ||
|
||
public void Render(RenderManager.CameraInfo cameraInfo) { | ||
if (!IsValidData()) return; | ||
|
||
NetNode node = NetManager.instance.m_nodes.m_buffer[_data.NodeID]; | ||
Color color = Color.red; | ||
color.a = 0.7f; | ||
RenderManager.instance.OverlayEffect.DrawCircle(cameraInfo, color, node.m_position, node.m_bounds.size.x, node.m_position.y - 20f, node.m_position.y + 20f, false, false); | ||
} | ||
|
||
private bool IsValidData() { | ||
if (_data != null && _data.Type == HighlightType.PTStop && _data.NodeID != 0) { | ||
if ((NetManager.instance.m_nodes.m_buffer[_data.NodeID].m_flags & NetNode.Flags.Created) != 0) { | ||
return true; | ||
} | ||
|
||
_data.Reset(Type); | ||
} | ||
|
||
return false; | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,42 @@ | ||
using ColossalFramework.Math; | ||
using UnityEngine; | ||
|
||
namespace BrokenNodeDetector.Highlighter { | ||
public class SegmentHighlight : IHighlightable { | ||
private HighlightData _data; | ||
public bool IsValid => IsValidData(); | ||
public HighlightType Type => HighlightType.Segment; | ||
|
||
public void SetHighlightData(HighlightData data) { | ||
_data = data; | ||
} | ||
|
||
public void Render(RenderManager.CameraInfo cameraInfo) { | ||
if (!IsValidData()) return; | ||
|
||
NetManager netManager = NetManager.instance; | ||
ref NetSegment segment = ref netManager.m_segments.m_buffer[_data.SegmentID]; | ||
Color color = Color.red; | ||
color.a = 0.7f; | ||
|
||
Bezier3 bezier; | ||
bezier.a = NetManager.instance.m_nodes.m_buffer[segment.m_startNode].m_position; | ||
bezier.d = NetManager.instance.m_nodes.m_buffer[segment.m_endNode].m_position; | ||
NetSegment.CalculateMiddlePoints(bezier.a, segment.m_startDirection, bezier.d, segment.m_endDirection, false, false, out bezier.b, out bezier.c); | ||
Bounds bounds = bezier.GetBounds(); | ||
RenderManager.instance.OverlayEffect.DrawBezier(cameraInfo, color, bezier, segment.Info.m_halfWidth * 2f, -100f, -100f, bounds.min.y - 10f, bounds.max.y + 10f, false, true); | ||
} | ||
|
||
private bool IsValidData() { | ||
if (_data != null && _data.Type == HighlightType.Segment && _data.SegmentID != 0) { | ||
if ((NetManager.instance.m_segments.m_buffer[_data.SegmentID].m_flags & NetSegment.Flags.Created) != NetSegment.Flags.None) { | ||
return true; | ||
} | ||
|
||
_data.Reset(Type); | ||
} | ||
|
||
return false; | ||
} | ||
} | ||
} |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.