コード例 #1
0
        protected override void StartDelayed(InteractionEvent interactionEvent)
        {
            var         targetBehaviour = (IGameObjectProvider)interactionEvent.Target;
            TileManager tileManager     = Object.FindObjectOfType <TileManager>();
            TileObject  targetTile      = targetBehaviour.GameObject.GetComponentInParent <TileObject>();
            var         tile            = targetTile.Tile;

            // Deconstruct
            if (tile.turf?.isWall == true)
            {
                tile.turf = null;
            }
            else // Construct
            {
                tile.turf = WallToConstruct;
            }

            // TODO: Change rotation from defaulting to North
            tile.fixtures.SetFloorFixtureAtLayer(null, FloorFixtureLayers.FurnitureFixtureMain);
            FixturesContainer.ValidateFixtures(tile);

            // TODO: Make an easier way of doing this.
            tile.subStates = new object[2];

            tileManager.UpdateTile(targetTile.transform.position, tile);
        }
コード例 #2
0
        protected override void StartDelayed(InteractionEvent interactionEvent)
        {
            var         targetBehaviour = (IGameObjectProvider)interactionEvent.Target;
            TileManager tileManager     = Object.FindObjectOfType <TileManager>();
            TileObject  targetTile      = targetBehaviour.GameObject.GetComponentInParent <TileObject>();
            var         tile            = targetTile.Tile;

            if (tile.fixtures.GetFloorFixtureAtLayer(FloorFixtureLayers.FurnitureFixtureMain) != null)                 // If there is a fixture on the place
            {
                if (tile.fixtures.GetFloorFixtureAtLayer(FloorFixtureLayers.FurnitureFixtureMain) == TableToConstruct) // If the fixture is a table
                {
                    tile.fixtures.SetFloorFixtureAtLayer(null, FloorFixtureLayers.FurnitureFixtureMain);               // Deconstruct
                }
            }
            else // If there is no fixture on place
            {
                tile.fixtures.SetFloorFixtureAtLayer(TableToConstruct, FloorFixtureLayers.FurnitureFixtureMain); // Construct
            }

            // TODO: Make an easier way of doing this.
            tile.subStates = new object[2];

            // Validate if we can actually place the table
            FixturesContainer.ValidateFixtures(tile);
            tile.fixtures = (FixturesContainer)tile.fixtures.Clone();

            tileManager.UpdateTile(targetTile.transform.position, tile);
        }
コード例 #3
0
ファイル: TileMapEditorHelpers.cs プロジェクト: Ryan089/SS3D
        public static void DeleteTileLayer(TileManager tileManager, int layerIndex, int x, int y)
        {
            if (tileManager.GetTile(x, y) == null)
            {
                return;
            }

            // Save old definition
            TileDefinition oldDefinition = tileManager.GetTile(x, y).Tile;

            // Copy object to avoid dupplication between editor and tilemap
            if (oldDefinition.fixtures != null)
            {
                FixturesContainer f = (FixturesContainer)oldDefinition.fixtures.Clone();
                oldDefinition.fixtures = f;
            }

            // Existing tile found. We try to update the non-null items in the tiledefinition
            List <TileBase> tileBases = GetTileItems(oldDefinition);

            for (int i = 0; i < tileBases.ToArray().Length; i++)
            {
                if (tileBases[i] != null && i == layerIndex)
                {
                    oldDefinition = SetTileItem(oldDefinition, null, i);
                }
            }

            Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile");
            tileManager.EditorUpdateTile(x, y, oldDefinition);
        }
コード例 #4
0
        /**
         * Sets the tile at the given position
         * to the currently selected tile type.
         *
         * Will create the tile if one does not exist
         */
        public static void SetTile(TileManager tileManager, TileDefinition tileDefinition, int x, int y)
        {
            // Copy object to avoid dupplication between editor and tilemap
            if (tileDefinition.fixtures != null)
            {
                FixturesContainer f = (FixturesContainer)tileDefinition.fixtures.Clone();
                tileDefinition.fixtures = f;
            }

            if (tileManager.GetTile(x, y) == null)
            {
                // Create a new tile, but only if the plenum is not empty
                if (tileDefinition.plenum == null)
                {
                    return;
                }

                tileManager.EditorCreateTile(x, y, tileDefinition);
                Undo.RegisterCreatedObjectUndo(tileManager.GetTile(x, y).gameObject, "Created tile");
            }
            else
            {
                // Save old definition
                TileDefinition oldDefinition = tileManager.GetTile(x, y).Tile;
                // Copy object to avoid dupplication between editor and tilemap
                if (oldDefinition.fixtures != null)
                {
                    FixturesContainer f = (FixturesContainer)oldDefinition.fixtures.Clone();
                    oldDefinition.fixtures = f;
                }


                // Existing tile found. We try to update the non-null items in the tiledefinition
                List <TileBase> tileBases = GetTileItems(tileDefinition);
                for (int i = 0; i < tileBases.ToArray().Length; i++)
                {
                    if (tileBases[i] != null)
                    {
                        oldDefinition = SetTileItem(oldDefinition, tileBases[i], i);
                    }
                }

                Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile");
                tileManager.EditorUpdateTile(x, y, oldDefinition);
            }
        }
コード例 #5
0
        /**
         * Sets the tile at the given position
         * to the currently selected tile type.
         *
         * Will create the tile if one does not exist
         */
        public static void SetTile(TileManager tileManager, TileDefinition tileDefinition, int x, int y)
        {
            // Copy object to avoid dupplication between editor and tilemap
            FixturesContainer f = (FixturesContainer)tileDefinition.fixtures.Clone();

            tileDefinition.fixtures = f;

            if (tileManager.GetTile(x, y) == null)
            {
                tileManager.EditorCreateTile(x, y, tileDefinition);
                Undo.RegisterCreatedObjectUndo(tileManager.GetTile(x, y).gameObject, "Created tile");
            }
            else
            {
                Undo.RecordObject(tileManager.GetTile(x, y).gameObject, "Updated tile");
                tileManager.EditorUpdateTile(x, y, tileDefinition);
            }
        }