/// <summary> /// Places objects on the TerrainTile if positions have /// already been computed. /// </summary> public void PlaceObjects() { //Get TerraSettings instance TerraSettings settings = UnityEngine.Object.FindObjectOfType <TerraSettings>(); if (Positions != null && settings != null) { foreach (PositionsContainer p in Positions) { ObjectContainer container = GetContainerForType(p.Type); Transform parent = GetParent(); if (container != null) { foreach (Vector3 pos in p.Positions) { GameObject go = container.GetObject(parent); p.Type.TransformGameObject(go, pos, settings.Length, Tile.transform.position); PlacedObjects.Add(go); } } } } }
/// <summary> /// Uses raycast hit information to check whether a grass /// vertex can be placed at this location in the world. /// Checks against grass height and angle information found /// in TerraSettings. /// </summary> /// <param name="hit">Raycast hit</param> /// <returns>true if this vertex should be placed here</returns> private bool CanPlaceAt(RaycastHit hit) { float height = hit.point.y; float angle = Vector3.Angle(Vector3.up, hit.normal); TerraSettings set = TerraSettings.Instance; bool passesHeight = height >= set.GrassMinHeight && height <= set.GrassMaxHeight; bool passesAngle = angle >= set.GrassAngleMin && angle <= set.GrassAngleMax; if (set.GrassConstrainHeight && set.GrassConstrainAngle) { return(passesHeight && passesAngle); } else if (set.GrassConstrainHeight) { return(passesHeight); } else if (set.GrassConstrainAngle) { return(passesAngle); } else { return(true); } }
/// <summary> /// Creates a new ObjectPlacer that uses mesh information provided /// by TerraSettings to calculate where to place objects on meshes. /// Optionally disable observing TerrainTiles if you wish to /// manage the placement of tiles manually rather than displaying /// and hiding when a TerrainTile activates or deactivates. /// </summary> /// <param name="observeTiles">Observe TerrainTile events?</param> public ObjectRenderer(bool observeTiles = true) { Settings = TerraSettings.Instance; ObserveTiles = observeTiles; ObjectsToPlace = Settings.ObjectPlacementSettings; Pool = new ObjectPool(this); if (ObserveTiles) { TerraEvent.OnTileActivated += OnTerrainTileActivate; TerraEvent.OnTileDeactivated += OnTerrainTileDeactivate; } }
// Use this for initialization void Start() { TerraSettings settings = FindObjectOfType <TerraSettings>(); m = settings.CustomMaterial; }
public TerraGUI(TerraSettings settings) { this.Settings = settings; matList = new ReorderableMaterialList(settings); }
public ReorderableMaterialList(TerraSettings settings) : base(settings.SplatSettings, null, MAX_HEIGHT) { Settings = settings; }