Esempio n. 1
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);
            }
        }
    }
Esempio n. 2
0
    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);
                }
            }
        }
    }