Instantly share code, notes, and snippets.

Embed
What would you like to do?
Script for saving tiling values for network segment and node textures. Visible instantly in road editor, mod not required for saving the asset, only for loading it ingame.
// Network Tiling Script
// Allows using any tiling value for network segment and node textures.
// Visible instantly in road editor, mod not required for saving the asset, only for loading it ingame.
// For networks using alpha maps - the shadows cast by alpha cutouts will appear as if it's not tiled.
// Don't touch this part, scroll below it.
var asset=ToolsModifierControl.toolController.m_editPrefabInfo as NetInfo;
var basic=0; var elevated=1; var bridge=2; var slope=3; var tunnel=4; var segment=0; var node=1;
NetInfo e = null; NetInfo b = null; NetInfo s = null; NetInfo t = null;
NetInfo.Segment seg = null; NetInfo.Node nod = null;
if(asset.m_netAI.GetType().Name == "RoadAI") { var ai = (asset.m_netAI as RoadAI);
e = ai.m_elevatedInfo; b = ai.m_bridgeInfo; s = ai.m_slopeInfo; t = ai.m_tunnelInfo; }
else if(asset.m_netAI.GetType().Name == "TrainTrackAI") { var ai = (asset.m_netAI as TrainTrackAI);
e = ai.m_elevatedInfo; b = ai.m_bridgeInfo; s = ai.m_slopeInfo; t = ai.m_tunnelInfo; }
else if(asset.m_netAI.GetType().Name == "PedestrianPathAI") { var ai = (asset.m_netAI as PedestrianPathAI);
e = ai.m_elevatedInfo; b = ai.m_bridgeInfo; s = ai.m_slopeInfo; t = ai.m_tunnelInfo; }
else if(asset.m_netAI.GetType().Name == "PedestrianWayAI") { var ai = (asset.m_netAI as PedestrianWayAI);
e = ai.m_elevatedInfo; b = ai.m_bridgeInfo; s = ai.m_slopeInfo; t = ai.m_tunnelInfo; }
Action<int, int, int, float> NetworkTiling = (network, type, id, tiling) => { id--;
if(network == 3 || network == 4) { var te = s; if(network == 4) te = t;
if(type == 0) if(te.m_segments[0].m_material.shader.name == "Custom/Net/Metro") id++;
if(type == 1) if(te.m_nodes[0].m_material.shader.name == "Custom/Net/Metro") id++; }
if(type == 0) { if(network == 0) seg = asset.m_segments[id];
else if(network == 1) seg = e.m_segments[id]; else if(network == 2) seg = b.m_segments[id];
else if(network == 3) seg = s.m_segments[id]; else if(network == 4) seg = t.m_segments[id]; }
else if(type == 1) { if(network == 0) nod = asset.m_nodes[id];
else if(network == 1) nod = e.m_nodes[id]; else if(network == 2) nod = b.m_nodes[id];
else if(network == 3) nod = s.m_nodes[id]; else if(network == 4) nod = t.m_nodes[id]; }
if(type == 0) { if(seg.m_material != null) seg.m_material.mainTextureScale = new Vector2(1, tiling);
if(seg.m_segmentMaterial != null) seg.m_segmentMaterial.mainTextureScale = new Vector2(1, tiling);
if(seg.m_lodMaterial != null) seg.m_lodMaterial.mainTextureScale = new Vector2(1, tiling);
seg.m_material.name = "NetworkTiling " + tiling.ToString("R"); }
else if(type == 1) { if(nod.m_material != null) nod.m_material.mainTextureScale = new Vector2(1, tiling);
if(nod.m_nodeMaterial != null) nod.m_nodeMaterial.mainTextureScale = new Vector2(1, tiling);
if(nod.m_lodMaterial != null) nod.m_lodMaterial.mainTextureScale = new Vector2(1, tiling);
nod.m_material.name = "NetworkTiling " + tiling.ToString("R"); } };
// Below add however many lines you need for your network.
//
// Format: NetworkTiling(network, type, id, tiling);
//
// Networks: basic, elevated, bridge, slope, tunnel
// Types: segment, node
// ID: order number starting from 1 as visible in the road editor segment/node list UI
// Tiling: How much the texture tiles vertically, non-round numbers might cause seams.
// A couple examples: (delete and add your own)
NetworkTiling(basic, segment, 1, 2.0f);
NetworkTiling(elevated, node, 4, 3.0f);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment