예제 #1
0
        void DeconstructPipe()
        {
            DisposalPipe pipe = deconstructInteraction.BasicTile as DisposalPipe;

            // Despawn pipe tile
            var matrix = MatrixManager.AtPoint(deconstructInteraction.WorldPositionTarget.NormalizeTo3Int(), true).Matrix;

            matrix.RemoveUnderFloorTile(deconstructInteraction.TargetCellPos, pipe);

            // Spawn pipe GameObject
            if (deconstructInteraction.BasicTile.SpawnOnDeconstruct == null)
            {
                return;
            }

            var spawn = Spawn.ServerPrefab(deconstructInteraction.BasicTile.SpawnOnDeconstruct, deconstructInteraction.WorldPositionTarget);

            if (!spawn.Successful)
            {
                return;
            }

            if (!spawn.GameObject.TryGetComponent(out Directional directional))
            {
                return;
            }
            directional.FaceDirection(Orientation.FromEnum(pipe.DisposalPipeObjectOrientation));

            if (!spawn.GameObject.TryGetComponent(out ObjectBehaviour behaviour))
            {
                return;
            }
            behaviour.ServerSetPushable(false);
        }
        private void DeconstructPipe(TileApply interaction)
        {
            DisposalPipe pipe = interaction.BasicTile as DisposalPipe;

            // Despawn pipe tile
            var matrix = MatrixManager.AtPoint(interaction.WorldPositionTarget.NormalizeTo3Int(), true).Matrix;

            matrix.TileChangeManager.RemoveTile(interaction.TargetCellPos, LayerType.Underfloor);

            // Spawn pipe GameObject
            if (interaction.BasicTile.SpawnOnDeconstruct == null)
            {
                return;
            }

            var spawn = Spawn.ServerPrefab(interaction.BasicTile.SpawnOnDeconstruct, interaction.WorldPositionTarget);

            if (spawn.Successful == false)
            {
                return;
            }

            if (spawn.GameObject.TryGetComponent <Directional>(out var directional))
            {
                directional.FaceDirection(Orientation.FromEnum(pipe.DisposalPipeObjectOrientation));
            }

            if (spawn.GameObject.TryGetComponent <ObjectBehaviour>(out var behaviour))
            {
                behaviour.ServerSetPushable(false);
            }
        }
        private void DeconstructPipe(TileApply interaction)
        {
            DisposalPipe pipeTile = interaction.BasicTile as DisposalPipe;

            // Despawn pipe tile
            var              matrix       = MatrixManager.AtPoint(interaction.WorldPositionTarget.NormalizeTo3Int(), true).Matrix;
            MetaDataNode     metaDataNode = matrix.GetMetaDataNode(interaction.TargetCellPos, false);
            DisposalPipeNode disPipeNode  = null;

            for (var i = 0; i < metaDataNode.DisposalPipeData.Count; i++)
            {
                if (metaDataNode.DisposalPipeData[i].DisposalPipeTile == pipeTile)
                {
                    disPipeNode = metaDataNode.DisposalPipeData[i];
                }
            }
            if (disPipeNode == null)
            {
                Logger.LogError($"Impossible to deconstruct the disposal pipe at {interaction.TargetCellPos} in {matrix.gameObject.scene.name} - {matrix.name}. Disposal pipe node wasn't found",
                                Category.Pipes);
                return;
            }
            matrix.TileChangeManager.RemoveTile(disPipeNode.NodeLocation, LayerType.Underfloor);

            // Spawn pipe GameObject
            if (interaction.BasicTile.SpawnOnDeconstruct == null)
            {
                return;
            }

            var spawn = Spawn.ServerPrefab(interaction.BasicTile.SpawnOnDeconstruct, interaction.WorldPositionTarget);

            if (spawn.Successful == false)
            {
                return;
            }

            if (spawn.GameObject.TryGetComponent <Directional>(out var directional))
            {
                directional.FaceDirection(Orientation.FromEnum(pipeTile.DisposalPipeObjectOrientation));
            }

            if (spawn.GameObject.TryGetComponent <ObjectBehaviour>(out var behaviour))
            {
                behaviour.ServerSetPushable(false);
            }
        }
예제 #4
0
        private void ChangePipeObjectToTile()
        {
            Orientation orientation = GetComponent <Directional>().CurrentDirection;

            // Spawn the correct disposal pipe tile, based on current orientation.
            DisposalPipe pipeTileToSpawn = GetPipeTileByOrientation(orientation);

            if (pipeTileToSpawn != null)
            {
                var   matrixTransform = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one);
                Color pipeColor       = GetComponentInChildren <SpriteRenderer>().color;
                registerTile.Matrix.AddUnderFloorTile(registerTile.LocalPositionServer, pipeTileToSpawn, matrixTransform, pipeColor);
                tileChangeManager.UpdateTile(registerTile.LocalPositionServer, pipeTileToSpawn);
                Despawn.ServerSingle(gameObject);
            }
            else
            {
                Logger.LogError($"Failed to spawn disposal pipe tile! Is {name} missing reference to tile asset for {orientation}?");
            }
        }
예제 #5
0
        private void ChangePipeObjectToTile()
        {
            var orientation = GetComponent <Rotatable>().CurrentDirection;

            // Spawn the correct disposal pipe tile, based on current orientation.
            DisposalPipe pipeTileToSpawn = GetPipeTileByOrientation(orientation);

            if (pipeTileToSpawn != null)
            {
                var        matrixTransform = Matrix4x4.TRS(Vector3.zero, Quaternion.identity, Vector3.one);
                Color      pipeColor       = GetComponentInChildren <SpriteRenderer>().color;
                Vector3Int searchVec       = registerTile.Matrix.TileChangeManager.MetaTileMap.SetTile(registerTile.LocalPositionServer, pipeTileToSpawn, matrixTransform, pipeColor);
                pipeTileToSpawn.InitialiseNode(searchVec, registerTile.Matrix);
                _ = Despawn.ServerSingle(gameObject);
            }
            else
            {
                Logger.LogError($"Failed to spawn disposal pipe tile! Is {name} missing reference to tile asset for {orientation}?",
                                Category.Pipes);
            }
        }