Пример #1
0
        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();
            }
        }
Пример #2
0
 /// <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;
     }
 }
Пример #3
0
    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);
                }
            }
        }
    }
Пример #4
0
    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);
                }
            }
        }
    }
Пример #5
0
    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.");
            }
        }
    }