Пример #1
0
    protected override void ServerPerformInteraction(PositionalHandApply interaction)
    {
        if (!isCleaning)
        {
            //server is performing server-side logic for the interaction
            //do the mopping
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.INTERRUPTED)
                {
                    CancelCleanTile();
                }
                else if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    CleanTile(interaction.WorldPositionTarget);
                }
            }
                );
            isCleaning = true;

            //Start the progress bar:
            UIManager.ProgressBar.StartProgress(interaction.WorldPositionTarget.RoundToInt(),
                                                5f, progressFinishAction, interaction.Performer);
        }
    }
Пример #2
0
    public override bool Interact(GameObject originator, Vector3 position, string hand)
    {
        //TODO:  Fill this in.

        if (UIManager.Hands.CurrentSlot.Item != gameObject)
        {
            return(base.Interact(originator, position, hand));
        }
        var targetWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);

        if (PlayerManager.PlayerScript.IsInReach(targetWorldPos))
        {
            if (!isServer)
            {
                InteractMessage.Send(gameObject, hand);
            }
            else
            {
                var progressFinishAction = new FinishProgressAction(
                    FinishProgressAction.Action.CleanTile,
                    targetWorldPos,
                    this
                    );

                //Start the progress bar:
                UIManager.ProgressBar.StartProgress(Vector3Int.RoundToInt(targetWorldPos),
                                                    5f, progressFinishAction, originator);
            }
        }

        return(base.Interact(originator, position, hand));
    }
Пример #3
0
    //Server only
    public void ProcessDeconstructRequest(GameObject player, GameObject matrixRoot, TileType tileType,
                                          Vector3 cellPos, Vector3 worldCellPos)
    {
        if (Vector3.Distance(player.transform.position, worldCellPos) > 1.5f)
        {
            //Not in range on the server, do not process any further:
            return;
        }
        //Process Wall deconstruct request:
        if (tileType == TileType.Wall)
        {
            //Set up the action to be invoked when progress bar finishes:
            var progressFinishAction = new FinishProgressAction(
                finishReason =>
            {
                if (finishReason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    CraftingManager.Deconstruction.TryTileDeconstruct(
                        matrixRoot.GetComponent <TileChangeManager>(), tileType, cellPos, worldCellPos);
                }
            }
                );

            //Start the progress bar:
            UIManager.ProgressBar.StartProgress(Vector3Int.RoundToInt(worldCellPos),
                                                10f, progressFinishAction, player, "Weld", 0.8f);

            SoundManager.PlayNetworkedAtPos("Weld", worldCellPos, Random.Range(0.9f, 1.1f));
        }
    }
Пример #4
0
    protected override void ServerPerformInteraction(HandApply interaction)
    {
        if (interaction.TargetObject != gameObject)
        {
            return;
        }

        if (Validations.HasComponent <Metal>(interaction.HandObject))
        {
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    ConstructWall(interaction);
                }
            }
                );
            UIManager.ProgressBar.StartProgress(registerObject.WorldPositionServer, 5f, progressFinishAction, interaction.Performer);
        }
        else if (Validations.IsTool(interaction.HandObject, ToolType.Wrench))
        {
            SoundManager.PlayNetworkedAtPos("Wrench", transform.localPosition, 1f);
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    Disassemble();
                }
            }
                );
            UIManager.ProgressBar.StartProgress(registerObject.WorldPositionServer, 5f, progressFinishAction, interaction.Performer);
        }
    }
Пример #5
0
    private void ServerMop(GameObject originator, Vector3 position)
    {
        if (!isCleaning)
        {
            //server is performing server-side logic for the interaction
            //do the mopping
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.INTERRUPTED)
                {
                    CancelCleanTile();
                }
                else if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    CleanTile(position);
                }
            }
                );
            isCleaning = true;

            //Start the progress bar:
            UIManager.ProgressBar.StartProgress(position.RoundToInt(),
                                                5f, progressFinishAction, originator);
        }
    }
Пример #6
0
    public override bool Interact(GameObject originator, Vector3 position, string hand)
    {
        if (!CanUse(originator, hand, position, false))
        {
            return(false);
        }
        if (!isServer)
        {
            //ask server to perform the interaction
            InteractMessage.Send(gameObject, position, hand);
            return(true);
        }

        PlayerNetworkActions pna     = originator.GetComponent <PlayerNetworkActions>();
        GameObject           handObj = pna.Inventory[hand].Item;

        if (handObj == null)
        {
            return(false);
        }
        if (handObj.GetComponent <MetalTrigger>())
        {
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    ConstructWall(handObj);
                }
            }
                );
            UIManager.ProgressBar.StartProgress(position.RoundToInt(), 5f, progressFinishAction, originator);
        }

        if (handObj.GetComponent <WrenchTrigger>())
        {
            SoundManager.PlayAtPosition("Wrench", transform.localPosition);
            var progressFinishAction = new FinishProgressAction(
                reason =>
            {
                if (reason == FinishProgressAction.FinishReason.COMPLETED)
                {
                    Disassemble();
                }
            }
                );
            UIManager.ProgressBar.StartProgress(position.RoundToInt(), 5f, progressFinishAction, originator);
        }


        return(true);
    }
Пример #7
0
 private void startBuilding(GameObject originator, Vector3 position)
 {
     if (!isBuilding)
     {
         var progressFinishAction = new FinishProgressAction(
             reason =>
         {
             if (reason == FinishProgressAction.FinishReason.INTERRUPTED)
             {
                 CancelBuild();
             }
             else if (reason == FinishProgressAction.FinishReason.COMPLETED)
             {
                 BuildGirder(position);
             }
         }
             );
         isBuilding = true;
         UIManager.ProgressBar.StartProgress(position.RoundToInt(), 5f, progressFinishAction, originator);
     }
 }
Пример #8
0
    protected override void ServerPerformInteraction(HandApply interaction)
    {
        GameObject target    = interaction.TargetObject;
        GameObject performer = interaction.Performer;

        var progressFinishAction = new FinishProgressAction(
            reason =>
        {
            if (reason == FinishProgressAction.FinishReason.COMPLETED)
            {
                if (performer.GetComponent <PlayerScript>()?.IsInReach(target, true) ?? false)
                {
                    target.GetComponent <PlayerMove>().Cuff(gameObject, interaction.Performer.GetComponent <PlayerNetworkActions>());
                }
            }
        }
            );

        SoundManager.PlayNetworkedAtPos(sound, target.transform.position);
        UIManager.ProgressBar.StartProgress(target.transform.position, applyTime, progressFinishAction, performer);
    }
Пример #9
0
 private void SelfHeal(GameObject originator, BodyPartBehaviour targetBodyPart)
 {
     if (!isSelfHealing)
     {
         var progressFinishAction = new FinishProgressAction(
             reason =>
         {
             if (reason == FinishProgressAction.FinishReason.INTERRUPTED)
             {
                 isSelfHealing = false;
             }
             else if (reason == FinishProgressAction.FinishReason.COMPLETED)
             {
                 ApplyHeal(targetBodyPart);
                 isSelfHealing = false;
             }
         }
             );
         isSelfHealing = true;
         UIManager.ProgressBar.StartProgress(originator.transform.position.RoundToInt(), 5f, progressFinishAction, originator);
     }
 }
Пример #10
0
    public void StartProgress(Vector3 pos, float timeForCompletion,
                              FinishProgressAction finishProgressAction, GameObject _player,
                              string _additionalSfx = "", float _additionalSfxPitch = 1f)
    {
        var _playerSprites = _player.GetComponent <PlayerSprites>();

        playerProgress.Add(new PlayerProgressEntry
        {
            player               = _player,
            timeToFinish         = timeForCompletion,
            completedAction      = finishProgressAction,
            position             = pos,
            playerSprites        = _playerSprites,
            playerPositionCache  = _player.transform.position,
            facingDirectionCache = _playerSprites.CurrentDirection,
            additionalSfx        = _additionalSfx,
            additionalSfxPitch   = _additionalSfxPitch
        });

        //Start the progress for the player:
        ProgressBarMessage.Send(_player, 0, pos);
    }
Пример #11
0
 private void startBuilding(HandActivate interaction)
 {
     if (!isBuilding)
     {
         var position             = interaction.Performer.transform.position;
         var progressFinishAction = new FinishProgressAction(
             reason =>
         {
             if (reason == FinishProgressAction.FinishReason.INTERRUPTED)
             {
                 CancelBuild();
             }
             else if (reason == FinishProgressAction.FinishReason.COMPLETED)
             {
                 BuildGirder(interaction, position);
             }
         }
             );
         isBuilding = true;
         UIManager.ProgressBar.StartProgress(position.RoundToInt(), 5f, progressFinishAction, interaction.Performer);
     }
 }
Пример #12
0
    public void StartProgress(Vector3 pos, float timeForCompletion,
                              FinishProgressAction finishProgressAction, GameObject _player,
                              string _additionalSfx = "", float _additionalSfxPitch = 1f, bool _allowTurning = true)
    {
        var _playerDirectional = _player.GetComponent <Directional>();

        playerProgress.Add(new PlayerProgressEntry
        {
            player               = _player,
            timeToFinish         = timeForCompletion,
            completedAction      = finishProgressAction,
            position             = pos,
            playerDirectional    = _playerDirectional,
            playerPositionCache  = _player.TileWorldPosition(),
            facingDirectionCache = _playerDirectional.CurrentDirection,
            additionalSfx        = _additionalSfx,
            additionalSfxPitch   = _additionalSfxPitch,
            allowTurning         = _allowTurning
        });

        //Start the progress for the player:
        ProgressBarMessage.Send(_player, 0, pos);
    }
Пример #13
0
    public void CmdRequestCPR(GameObject rescuer, GameObject cardiacArrestPlayer)
    {
        var cardiacArrestPlayerRegister = cardiacArrestPlayer.GetComponent <RegisterPlayer>();

        if (doingCPR)
        {
            return;
        }

        var progressFinishAction = new FinishProgressAction(
            reason =>
        {
            switch (reason)
            {
            case FinishProgressAction.FinishReason.INTERRUPTED:
                CancelCPR();
                doingCPR = false;
                break;

            case FinishProgressAction.FinishReason.COMPLETED:
                DoCPR(rescuer, cardiacArrestPlayer);
                doingCPR = false;
                break;
            }
        }
            );

        doingCPR = true;
        UIManager.ProgressBar.StartProgress(cardiacArrestPlayerRegister.WorldPosition, 5f, progressFinishAction,
                                            rescuer);
        ChatRelay.Instance.AddToChatLogServer(new ChatEvent
        {
            channels = ChatChannel.Local,
            message  = $"{rescuer.Player()?.Name} is trying to perform CPR on {cardiacArrestPlayer.Player()?.Name}.",
            position = cardiacArrestPlayerRegister.WorldPosition.To2Int()
        });
    }
    public override IEnumerator Process()
    {
        yield return(WaitFor(PlayerToUncuff));

        GameObject actor          = SentByPlayer.GameObject;
        GameObject playerToUncuff = NetworkObject;

        var finishProgressAction = new FinishProgressAction(
            finishReason =>
        {
            if (finishReason == FinishProgressAction.FinishReason.COMPLETED)
            {
                playerToUncuff.GetComponent <PlayerMove>().RequestUncuff(actor);
            }
        }
            );

        var restraint = playerToUncuff.GetComponent <PlayerNetworkActions>().Inventory[EquipSlot.handcuffs]?.Item?.GetComponent <Restraint>();

        if (restraint)
        {
            UIManager.ProgressBar.StartProgress(actor.transform.position, restraint.RemoveTime, finishProgressAction, actor);
        }
    }
Пример #15
0
    protected override void ServerPerformInteraction(HandApply interaction)
    {
        GameObject target    = interaction.TargetObject;
        GameObject performer = interaction.Performer;

        var progressFinishAction = new FinishProgressAction(
            reason =>
        {
            if (reason == FinishProgressAction.FinishReason.COMPLETED)
            {
                if (performer.GetComponent <PlayerScript>()?.IsInReach(target, true) ?? false)
                {
                    target.GetComponent <PlayerMove>().Cuff(gameObject);

                    // Hacky! Hand doesn't automatically update so we have to do it manually
                    performer.GetComponent <PlayerNetworkActions>()?.UpdatePlayerEquipSprites(InventoryManager.GetSlotFromItem(gameObject), null);
                }
            }
        }
            );

        SoundManager.PlayNetworkedAtPos(sound, target.transform.position);
        UIManager.ProgressBar.StartProgress(target.transform.position, applyTime, progressFinishAction, performer);
    }
Пример #16
0
    protected override void ServerPerformInteraction(HandApply interaction)
    {
        InventorySlot slot = InventoryManager.GetSlotFromOriginatorHand(interaction.Performer, interaction.HandSlot.equipSlot);

        if (RelatedInterface != null)
        {
            if (!RelatedInterface.InteractionUpdate(interaction, slot, this))
            {
                return;
            }
        }
        if (ContainedObjects[CurrentStage] != null)
        {
            foreach (var _Object in ContainedObjects[CurrentStage])
            {
                if (_Object.NumberNeeded > _Object.NumberPresent)
                {
                    if (_Object.GameObject != null)
                    {
                        if (slot.Item.GetComponent(_Object.IdentifyingComponent) != null)
                        {
                            if (_Object.TimeNeeded > 0)
                            {
                                var progressFinishAction = new FinishProgressAction(reason =>
                                {
                                    if (reason == FinishProgressAction.FinishReason.COMPLETED)
                                    {
                                        ExceptItem(slot, interaction);
                                    }
                                });
                                UIManager.ProgressBar.StartProgress(registerObject.WorldPositionServer, _Object.TimeNeeded, progressFinishAction, interaction.Performer);
                            }
                            else
                            {
                                ConstructionStages[CurrentStage].PresentParts.Add(slot.Item);
                                InventoryManager.ClearInvSlot(slot);
                                _Object.NumberPresent++;
                            }
                        }
                    }
                    else if (_Object.CType != ConstructionElementType.Null)
                    {
                        var Item = slot.Item?.GetComponent <ConstructionComponent>();
                        if (Item != null)
                        {
                            if (Item.CType == _Object.CType && Item.level >= _Object.level)
                            {
                                if (_Object.TimeNeeded > 0)
                                {
                                    var progressFinishAction = new FinishProgressAction(reason =>
                                    {
                                        if (reason == FinishProgressAction.FinishReason.COMPLETED)
                                        {
                                            ExceptItem(slot, interaction);
                                        }
                                    });
                                    UIManager.ProgressBar.StartProgress(registerObject.WorldPositionServer, _Object.TimeNeeded, progressFinishAction, interaction.Performer);
                                }
                                else
                                {
                                    ConstructionStages[CurrentStage].PresentParts.Add(slot.Item);
                                    InventoryManager.ClearInvSlot(slot);
                                    _Object.NumberPresent++;
                                }
                            }
                        }
                    }
                }
            }
        }

        var tool = slot.Item?.GetComponent <Tool>();

        if (tool == null)
        {
            return;
        }
        if (ConstructionStages[CurrentStage].ToolStage.ContainsKey(tool.ToolType))
        {
            var Jump = ConstructionStages[CurrentStage].ToolStage[tool.ToolType];
            if (Jump.ConstructionTime > 0)
            {
                var progressFinishAction = new FinishProgressAction(reason =>
                {
                    if (reason == FinishProgressAction.FinishReason.COMPLETED)
                    {
                        JumpLanding(tool);
                    }
                });
                UIManager.ProgressBar.StartProgress(registerObject.WorldPositionServer, Jump.ConstructionTime / tool.SpeedMultiplier, progressFinishAction, interaction.Performer);
            }
            else
            {
                JumpLanding(tool);
            }
        }
    }