Beispiel #1
0
            /// <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);
            }
        }
Beispiel #3
0
        /// <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;
    }
Beispiel #5
0
 public TerraGUI(TerraSettings settings)
 {
     this.Settings = settings;
     matList       = new ReorderableMaterialList(settings);
 }
 public ReorderableMaterialList(TerraSettings settings) : base(settings.SplatSettings, null, MAX_HEIGHT)
 {
     Settings = settings;
 }