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); } } }
public void ServerPerformInteraction(HandApply interaction) { var slot = interaction.HandSlot; 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 ProgressCompleteAction(() => ExceptItem(slot, interaction)); UIManager.ServerStartProgress(ProgressAction.Construction, registerObject.WorldPositionServer, _Object.TimeNeeded, progressFinishAction, interaction.Performer); } else { ConstructionStages[CurrentStage].PresentParts.Add(slot.ItemObject); //TODO: In need of refactor throughout this component to not use Inventory.Vanish, instead should have an ItemStorage of its own most likely Inventory.ServerVanish(slot); _Object.NumberPresent++; } } } else if (_Object.CType != ConstructionElementType.Null) { var Item = slot.ItemObject?.GetComponent <ConstructionComponent>(); if (Item != null) { if (Item.CType == _Object.CType && Item.level >= _Object.level) { if (_Object.TimeNeeded > 0) { var progressFinishAction = new ProgressCompleteAction(() => ExceptItem(slot, interaction)); UIManager.ServerStartProgress(ProgressAction.Construction, registerObject.WorldPositionServer, _Object.TimeNeeded, progressFinishAction, interaction.Performer); } else { ConstructionStages[CurrentStage].PresentParts.Add(slot.ItemObject); Inventory.ServerVanish(slot); _Object.NumberPresent++; } } } } } } } var attrs = slot.Item?.GetComponent <ItemAttributes>(); var tool = slot.Item?.GetComponent <Tool>(); if (attrs == null || tool == null) { return; } foreach (var trait in attrs.GetTraits()) { if (ConstructionStages[CurrentStage].TraitStage.ContainsKey(trait)) { var Jump = ConstructionStages[CurrentStage].TraitStage[trait]; if (Jump.ConstructionTime > 0) { var progressFinishAction = new ProgressCompleteAction(() => JumpLanding(tool, attrs)); UIManager.ServerStartProgress(ProgressAction.Construction, registerObject.WorldPositionServer, Jump.ConstructionTime / tool.SpeedMultiplier, progressFinishAction, interaction.Performer); } else { JumpLanding(tool, attrs); } } } }