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); } }
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}?"); } }
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); } }