/// <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; }
/// <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(); }