private void TryWrenching() { if (IsConnected) { DisconnectFromConnector(); UpdateConnected(); return; } var firstConnector = registerObject.Matrix.GetFirst <Connector>(registerObject.LocalPositionServer, true); if (firstConnector != null) { connector = firstConnector; connector.ConnectCanister(this); UpdateConnected(); return; } // TODO: ShuttleFuelConnector should eventually be removed or at least inherit from Connector. var firstFuelConnector = registerObject.Matrix.GetFirst <ShuttleFuelConnector>(registerObject.LocalPositionServer, true); if (firstFuelConnector != null) { connectorFuel = firstFuelConnector; connectorFuel.ConnectCanister(this); UpdateConnected(); } }
/// <summary> /// Disconnects the canister from any connectors it is attached to. /// </summary> public void DisconnectFromConnector() { if (connector != null) { connector.DisconnectCanister(); connector = null; } if (connectorFuel != null) { connectorFuel.DisconnectCanister(); connectorFuel = null; } }
public void ServerPerformInteraction(HandApply interaction) { PlayerNetworkActions pna = interaction.Performer.GetComponent <PlayerNetworkActions>(); GameObject handObj = pna.Inventory[interaction.HandSlot.equipSlot].Item; var tool = handObj != null?handObj.GetComponent <Tool>() : null; //can click on the canister with a wrench to connect/disconnect it from a connector if (tool != null && tool.ToolType == ToolType.Wrench) { if (isConnected) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); Disconnect(); return; } else { var foundConnectors = registerTile.Matrix.Get <Connector>(registerTile.LocalPositionServer, true); foreach (var conn in foundConnectors) { if (conn.objectBehaviour.isNotPushable) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); connector = conn; isConnected = true; connector.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.isNotPushable = true; ServerOnConnectionStatusChange.Invoke(true); return; } } var foundFuelConnectors = registerTile.Matrix.Get <ShuttleFuelConnector>(registerTile.LocalPositionServer, true); foreach (var conn in foundFuelConnectors) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); isConnected = true; connectorFuel = conn; conn.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.isNotPushable = true; ServerOnConnectionStatusChange.Invoke(true); } } } }
public void ServerPerformInteraction(HandApply interaction) { PlayerNetworkActions pna = interaction.Performer.GetComponent <PlayerNetworkActions>(); GameObject handObj = interaction.HandObject; //can click on the canister with a wrench to connect/disconnect it from a connector if (Validations.HasItemTrait(interaction.HandObject, CommonTraits.Instance.Wrench)) { if (isConnected) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); Disconnect(); return; } else { var foundConnectors = registerTile.Matrix.Get <Connector>(registerTile.LocalPositionServer, true); foreach (var conn in foundConnectors) { if (conn.objectBehaviour.IsNotPushable) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); connector = conn; isConnected = true; connector.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.ServerSetPushable(false); ServerOnConnectionStatusChange.Invoke(true); return; } } var foundFuelConnectors = registerTile.Matrix.Get <ShuttleFuelConnector>(registerTile.LocalPositionServer, true); foreach (var conn in foundFuelConnectors) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f); isConnected = true; connectorFuel = conn; conn.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.ServerSetPushable(false); ServerOnConnectionStatusChange.Invoke(true); } } } }
public void ServerPerformInteraction(HandApply interaction) { PlayerNetworkActions pna = interaction.Performer.GetComponent <PlayerNetworkActions>(); var handObj = interaction.HandObject; var playerPerformer = interaction.Performer; ConnectedPlayer currentPlayer = playerPerformer.Player(); //can click on the canister with a wrench to connect/disconnect it from a connector if (Validations.HasItemTrait(interaction.HandObject, CommonTraits.Instance.Wrench)) { if (isConnected) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f, sourceObj: gameObject); Disconnect(); return; } else { var foundConnectors = registerTile.Matrix.Get <Connector>(registerTile.LocalPositionServer, true); foreach (var conn in foundConnectors) { if (conn.ObjectBehavior.IsNotPushable) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f, sourceObj: gameObject); connector = conn; isConnected = true; connector.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.ServerSetPushable(false); ServerOnConnectionStatusChange.Invoke(true); return; } } var foundFuelConnectors = registerTile.Matrix.Get <ShuttleFuelConnector>(registerTile.LocalPositionServer, true); foreach (var conn in foundFuelConnectors) { SoundManager.PlayNetworkedAtPos("Wrench", registerTile.WorldPositionServer, 1f, sourceObj: gameObject); isConnected = true; connectorFuel = conn; conn.ConnectCanister(this); SetConnectedSprite(connectorSprite); objectBehaviour.ServerSetPushable(false); ServerOnConnectionStatusChange.Invoke(true); } } } //can click on the canister with a refillable tank to insert the refillable tank into the canister if (Validations.HasItemTrait(handObj, CommonTraits.Instance.CanisterFillable)) { //don't insert a container if one is already present, lest we wipe out the previous container from existance if (!hasContainerInserted) { //always null check... always... if (handObj.GetComponent <GasContainer>() != null) { //copy the containers properties over, delete the container from the player's hand InsertedContainer = handObj; hasContainerInserted = true; Chat.AddActionMsgToChat(playerPerformer, $"You insert the {handObj.ExpensiveName()} into the canister.", $"{playerPerformer.ExpensiveName()} inserts a tank into the {this.ContentsName} tank."); Inventory.ServerDespawn(handObj); ServerOnExternalTankInserted.Invoke(true); } else { Logger.LogError("Player tried inserting a tank into a canister, but the tank didn't have a GasContainer " + "component associated with it. Something terrible has happened, or an item that should not " + "has the CanisterFillable ItemTrait."); } } else { Chat.AddExamineMsg(playerPerformer, "A tank is already inside this canister."); } } }