You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
|
namespace Mapbox.Unity.MeshGeneration.Modifiers
|
|
|
|
|
{
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using Mapbox.Unity.MeshGeneration.Data;
|
|
|
|
|
|
|
|
|
|
[CreateAssetMenu(menuName = "Mapbox/Modifiers/Snap Terrain Modifier")]
|
|
|
|
|
public class SnapTerrainModifier : MeshModifier
|
|
|
|
|
{
|
|
|
|
|
public override ModifierType Type { get { return ModifierType.Preprocess; } }
|
|
|
|
|
|
|
|
|
|
private double scaledX;
|
|
|
|
|
private double scaledY;
|
|
|
|
|
private int _counter;
|
|
|
|
|
|
|
|
|
|
public override void Run(VectorFeatureUnity feature, MeshData md, UnityTile tile = null)
|
|
|
|
|
{
|
|
|
|
|
scaledX = tile.Rect.Size.x * tile.TileScale;
|
|
|
|
|
scaledY = tile.Rect.Size.y * tile.TileScale;
|
|
|
|
|
_counter = md.Vertices.Count;
|
|
|
|
|
if (_counter > 0)
|
|
|
|
|
{
|
|
|
|
|
for (int i = 0; i < _counter; i++)
|
|
|
|
|
{
|
|
|
|
|
var h = tile.QueryHeightData(
|
|
|
|
|
(float)((md.Vertices[i].x + md.PositionInTile.x + scaledX / 2) / scaledX),
|
|
|
|
|
(float)((md.Vertices[i].z + md.PositionInTile.z + scaledY / 2) / scaledY));
|
|
|
|
|
md.Vertices[i] += new Vector3(0, h, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
foreach (var sub in feature.Points)
|
|
|
|
|
{
|
|
|
|
|
_counter = sub.Count;
|
|
|
|
|
for (int i = 0; i < _counter; i++)
|
|
|
|
|
{
|
|
|
|
|
var h = tile.QueryHeightData(
|
|
|
|
|
(float)((sub[i].x + md.PositionInTile.x + scaledX / 2) / scaledX),
|
|
|
|
|
(float)((sub[i].z + md.PositionInTile.z + scaledY / 2) / scaledY));
|
|
|
|
|
sub[i] += new Vector3(0, h, 0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|