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); } }
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)); }
//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)); } }
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); } }
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); } }
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); }
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); } }
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); }
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); } }
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); }
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); } }
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); }
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); } }
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); }
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); } } }