[TASK] Initial commit with basic product setup
This commit is contained in:
@@ -0,0 +1,116 @@
|
||||
namespace Mapbox.Unity.MeshGeneration.Modifiers
|
||||
{
|
||||
using UnityEngine;
|
||||
using Mapbox.Unity.MeshGeneration.Data;
|
||||
using Mapbox.Unity.MeshGeneration.Components;
|
||||
using Mapbox.Unity.MeshGeneration.Interfaces;
|
||||
using System.Collections.Generic;
|
||||
using Mapbox.Unity.Map;
|
||||
using System;
|
||||
|
||||
[CreateAssetMenu(menuName = "Mapbox/Modifiers/Prefab Modifier")]
|
||||
public class PrefabModifier : GameObjectModifier
|
||||
{
|
||||
private Dictionary<GameObject, GameObject> _objects;
|
||||
[SerializeField]
|
||||
private SpawnPrefabOptions _options;
|
||||
private List<GameObject> _prefabList = new List<GameObject>();
|
||||
|
||||
public override void Initialize()
|
||||
{
|
||||
if (_objects == null)
|
||||
{
|
||||
_objects = new Dictionary<GameObject, GameObject>();
|
||||
}
|
||||
}
|
||||
|
||||
public override void SetProperties(ModifierProperties properties)
|
||||
{
|
||||
_options = (SpawnPrefabOptions)properties;
|
||||
_options.PropertyHasChanged += UpdateModifier;
|
||||
}
|
||||
|
||||
public override void Run(VectorEntity ve, UnityTile tile)
|
||||
{
|
||||
if (_options.prefab == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
GameObject go = null;
|
||||
|
||||
if (_objects.ContainsKey(ve.GameObject))
|
||||
{
|
||||
go = _objects[ve.GameObject];
|
||||
}
|
||||
else
|
||||
{
|
||||
go = Instantiate(_options.prefab);
|
||||
_prefabList.Add(go);
|
||||
_objects.Add(ve.GameObject, go);
|
||||
go.transform.SetParent(ve.GameObject.transform, false);
|
||||
}
|
||||
|
||||
PositionScaleRectTransform(ve, tile, go);
|
||||
|
||||
if (_options.AllPrefabsInstatiated != null)
|
||||
{
|
||||
_options.AllPrefabsInstatiated(_prefabList);
|
||||
}
|
||||
}
|
||||
|
||||
public void PositionScaleRectTransform(VectorEntity ve, UnityTile tile, GameObject go)
|
||||
{
|
||||
RectTransform goRectTransform;
|
||||
IFeaturePropertySettable settable = null;
|
||||
var centroidVector = new Vector3();
|
||||
foreach (var point in ve.Feature.Points[0])
|
||||
{
|
||||
centroidVector += point;
|
||||
}
|
||||
centroidVector = centroidVector / ve.Feature.Points[0].Count;
|
||||
|
||||
go.name = ve.Feature.Data.Id.ToString();
|
||||
|
||||
goRectTransform = go.GetComponent<RectTransform>();
|
||||
if (goRectTransform == null)
|
||||
{
|
||||
go.transform.localPosition = centroidVector;
|
||||
if (_options.scaleDownWithWorld)
|
||||
{
|
||||
go.transform.localScale = _options.prefab.transform.localScale * (tile.TileScale);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
goRectTransform.anchoredPosition3D = centroidVector;
|
||||
if (_options.scaleDownWithWorld)
|
||||
{
|
||||
goRectTransform.localScale = _options.prefab.transform.localScale * (tile.TileScale);
|
||||
}
|
||||
}
|
||||
|
||||
//go.transform.localScale = Constants.Math.Vector3One;
|
||||
|
||||
settable = go.GetComponent<IFeaturePropertySettable>();
|
||||
if (settable != null)
|
||||
{
|
||||
settable.Set(ve.Feature.Properties);
|
||||
}
|
||||
}
|
||||
|
||||
public override void ClearCaches()
|
||||
{
|
||||
base.ClearCaches();
|
||||
foreach (var gameObject in _objects.Values)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
|
||||
foreach (var gameObject in _prefabList)
|
||||
{
|
||||
Destroy(gameObject);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user