示例#1
0
        /// <summary>
        /// Creates a new collection of cursors.
        /// </summary>
        /// <param name="footprint">The footprint of the building.</param>
        public void Create(bool[,] footprint)
        {
            if (_cursors != null)
            {
                GameLogger.FatalError("Can't recreate a footprint cursor while one already exists!");
            }

            int xSize = footprint.GetLength(0);
            int zSize = footprint.GetLength(1);

            _cursors = new GridCursor[xSize, zSize];
            for (int x = 0; x < xSize; ++x)
            {
                for (int z = 0; z < zSize; ++z)
                {
                    if (footprint[x, z])
                    {
                        _cursors[x, z] = GridCursor.Create(_terrain, _validMaterial);
                    }
                    else
                    {
                        _cursors[x, z] = null;
                    }
                }
            }
        }
        /// <summary>
        /// Instantiates an instance of the controller.
        /// </summary>
        /// <param name="terrain">The terrain to edit.</param>
        public SelectingTerrainController(GridMesh terrain)
        {
            _terrain = terrain;
            _cursor  = GridCursor.Create(terrain, ResourceLoader.Load <Material>(ResourceType.Materials, ResourceCategory.Terrain, "cursor_terrain"));
            _cursor.Deactivate();

            OnTerrainSelectionUpdate += SelectionUpdate;
            OnTerrainClicked         += Clicked;
        }
        /// <summary>
        /// Instantiates an instance of the controller.
        /// </summary>
        /// <param name="terrain">The terrain to place construction on.</param>
        public SelectingPathController(GridMesh terrain)
        {
            _terrain = terrain;

            _validMaterial   = ResourceLoader.Load <Material>(ResourceType.Materials, ResourceCategory.Terrain, "cursor_valid");
            _invalidMaterial = ResourceLoader.Load <Material>(ResourceType.Materials, ResourceCategory.Terrain, "cursor_invalid");
            _cursor          = GridCursor.Create(terrain, _validMaterial);

            OnTerrainSelectionUpdate += PlacementUpdate;
            OnTerrainClicked         += Clicked;
        }
示例#4
0
        /// <summary>
        /// Instantiates a line cursor.
        /// </summary>
        /// <param name="terrain">The terrain to put cursors on.</param>
        /// <param name="validMaterial">The material to use when a footprint location is valid.</param>
        /// <param name="invalidMaterial">The material to use when a footprint location is invalid.</param>
        public LineCursor(GridMesh terrain, Material validMaterial, Material invalidMaterial)
        {
            _terrain         = terrain;
            _validMaterial   = validMaterial;
            _invalidMaterial = invalidMaterial;

            // just initialize the max possible and keep them inactive
            // https://answers.unity.com/questions/462942/does-inactive-objects-eat-up-performance.html
            _cursors = new GridCursor[Math.Max(terrain.CountX, terrain.CountZ)];
            for (int i = 0; i < _cursors.Length; ++i)
            {
                _cursors[i] = GridCursor.Create(_terrain, _validMaterial);
                _cursors[i].Deactivate();
            }
        }
 /// <summary>
 /// Instantiates an instance of the controller.
 /// </summary>
 /// <param name="terrain">The terrain to edit.</param>
 public EditingTerrainController(GridMesh terrain)
 {
     _terrain = terrain;
     _cursor  = GridCursor.Create(terrain, ResourceLoader.Load <Material>(ResourceType.Materials, ResourceCategory.Terrain, "cursor_terrain2"));
     _cursor.Deactivate();
 }