private void ShowEmotePreview(TreeNode node, EmoteNodeProperties.EmoteCondition[] conditions)
        {
            EmoteNodeProperties properties = (EmoteNodeProperties)node.Tag;

            EmoteNodeProperties.EmoteCondition[] allConditions = new EmoteNodeProperties.EmoteCondition[conditions.Length + (properties.Condition != EmoteNodeProperties.EmoteCondition.None ? 1 : 0)];
            conditions.CopyTo(allConditions, 0);
            if (properties.Condition != EmoteNodeProperties.EmoteCondition.None)
            {
                allConditions[allConditions.Length - 1] = properties.Condition;
            }

            EmoteNode dummyEmoteNode = new EmoteNode(node.FullPath, properties);

            if (node.Nodes.Count == 0)
            {
                this.AddOutputNode(this.ToolStripComboBox_Configuration.SelectedItem.ToString() +
                                   " " + dummyEmoteNode.CompletedText, allConditions);
            }
            else
            {
                if (properties.MustContinue == false)
                {
                    this.AddOutputNode(this.ToolStripComboBox_Configuration.SelectedItem.ToString() +
                                       " " + dummyEmoteNode.CompletedText, allConditions);
                }

                foreach (TreeNode childNode in node.Nodes)
                {
                    this.ShowEmotePreview(childNode, allConditions);
                }
            }
        }
 /// <summary>
 /// Fügt der Liste einen kompletten Emote-Knoten einschließlich aller Unterknoten hinzu.
 /// </summary>
 /// <param name="emoteNode">Der Emote-Knoten, der hinzugefügt werden soll.</param>
 public void AddEmoteNode(EmoteNode emoteNode)
 {
     foreach (var flatNode in emoteNode.ToFlatNodes())
     {
         this.AddEmote(flatNode.Key.Text, flatNode.Value.Where(c => c.Condition != EmoteCondition.None).Select(c => c.Condition).Distinct().ToArray());
     }
 }
Ejemplo n.º 3
0
    /// <summary>
    /// Helper for creating an emoteNode
    /// </summary>
    public static EmoteNode Create(float emoteTime, string parameterName, ParameterType type, bool boolValue = true)
    {
        EmoteNode emoteNode = CreateInstance <EmoteNode>();

        emoteNode.emoteTime     = emoteTime;
        emoteNode.parameterName = parameterName;
        emoteNode.parameterType = type;
        emoteNode.boolValue     = boolValue;
        return(emoteNode);
    }
Ejemplo n.º 4
0
    protected override BNode InnerClone(Dictionary <Value, Value> originalValueForClonedValue)
    {
        EmoteNode emoteNode = CreateInstance <EmoteNode>();

        emoteNode.emoteTime     = emoteTime;
        emoteNode.parameterName = parameterName;
        emoteNode.parameterType = parameterType;
        emoteNode.boolValue     = boolValue;
        return(emoteNode);
    }
Ejemplo n.º 5
0
        private TreeNode AddTreeNode(EmoteNode emoteNode)
        {
            TreeNode node = new TreeNode(emoteNode.Text);

            node.Tag = emoteNode.Properties;
            node.Nodes.AddRange(this.ConvertEmotesNodesToTreeNodes(emoteNode.ChildNodes));

            this.currentTreeView.Nodes.Add(node);

            return(node);
        }
        /// <summary>
        /// Konvertiert einen EmoteNode in einen TreeNode.
        /// </summary>
        /// <param name="emoteNode">Der EmoteNode, der konvertiert werden soll.</param>
        /// <returns>Der erzeugte TreeNode.</returns>
        public static TreeNode EmoteNodeToTreeNode(EmoteNode emoteNode)
        {
            TreeNode treeNode = new TreeNode();

            treeNode.Text = emoteNode.Text;
            treeNode.Tag  = emoteNode.Properties;

            if (emoteNode.ChildNodes.Count > 0)
            {
                treeNode.Nodes.AddRange(TreeNodeConverter.EmoteNodesToTreeNodes(emoteNode.ChildNodes).ToArray());
            }

            return(treeNode);
        }
        /// <summary>
        /// Konvertiert einen TreeNode in einen EmoteNode.
        /// </summary>
        /// <param name="treeNode">Der TreeNode, der konvertiert werden soll.</param>
        /// <returns>Der erzeugte EmoteNode.</returns>
        public static EmoteNode TreeNodeToEmoteNode(TreeNode treeNode)
        {
            EmoteNode emoteNode = new EmoteNode();

            emoteNode.Text       = treeNode.Text;
            emoteNode.Properties = (EmoteNodeProperties)treeNode.Tag;

            if (treeNode.Nodes.Count > 0)
            {
                emoteNode.ChildNodes = TreeNodeConverter.TreeNodeCollectionToEmoteNodes(treeNode.Nodes).ToList();
            }

            return(emoteNode);
        }
Ejemplo n.º 8
0
        private TreeNode AddTreeNode(EmoteNode emoteNode, TreeNode parentNode)
        {
            if (parentNode == null)
            {
                return(this.AddTreeNode(emoteNode));
            }

            TreeNode node = new TreeNode(emoteNode.Text);

            node.Tag = emoteNode.Properties;
            node.Nodes.AddRange(this.ConvertEmotesNodesToTreeNodes(emoteNode.ChildNodes));

            parentNode.Nodes.Add(node);

            return(node);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Gibt einen Emote-TreeNode im EmoteOutput-Control aus.
        /// </summary>
        /// <param name="treeNode">Der TreeNode, der ausgegeben werden soll.</param>
        private void ShowEmoteOutputByTreeNode(TreeNode treeNode)
        {
            EmoteNode emoteNode = TreeNodeConverter.TreeNodeToEmoteNode(treeNode);

            // Das hier ist nur eine Notlösung, um beim Markieren eines untergeordneten Emotes
            // trotzdem den kompletten Emote-Text zu sehen. Besser wäre es, wenn beim Flachklopfen
            // des EmoteNodes die übergeordneten Emotes berücksichtigt werden könnten (nur fraglich,
            // ob das dann dort sinnvoll wäre). Wichtig wäre dann auch, die Properties der
            // übergeordneten Emotes zu bekommen, weil die im Moment gar nicht übergeben werden
            // können. Deshalb werden die Bedingungen erst ab dem markierten Emote angezeigt.
            if (treeNode.Parent != null)
            {
                emoteNode.Text = treeNode.Parent.FullPath + " " + emoteNode.Text;
            }

            this.EmoteOutput.PetName = this.currentEmoteConfiguration.Name;
            this.EmoteOutput.Clear();
            this.EmoteOutput.AddEmoteNode(emoteNode);
        }
Ejemplo n.º 10
0
        private EmoteNodeSet ConvertTreeNodesToEmotesNodes(TreeNodeCollection treeNodes)
        {
            EmoteNodeSet emoteNodes = new EmoteNodeSet();

            foreach (TreeNode treeNode in treeNodes)
            {
                EmoteNode emoteNode = new EmoteNode();

                emoteNode.Text       = treeNode.Text;
                emoteNode.Properties = (EmoteNodeProperties)treeNode.Tag;

                if (treeNode.Nodes.Count > 0)
                {
                    emoteNode.ChildNodes = this.ConvertTreeNodesToEmotesNodes(treeNode.Nodes);
                }

                emoteNodes.Nodes.Add(emoteNode);
            }

            return(emoteNodes);
        }
Ejemplo n.º 11
0
    protected override Status SubUpdate()
    {
        switch (state)
        {
        // Setup the Emote Node
        case InnerState.Setup:
            emoteNode = EmoteNode.Create(1f, "interactBox", EmoteNode.ParameterType.Bool, true);
            emoteNode.Restart();
            emoteNode.Beginn(tree);
            state++;
            break;

        // Play the animation which is handled by the inner emote node
        case InnerState.PlayAnimation:
            switch (emoteNode.CurrentStatus)
            {
            case Status.Running:
                emoteNode.Update();
                break;

            case Status.Success:
                state++;
                break;

            case Status.Failure:
                return(Status.Failure);
            }
            break;

        // Save/ Take all items from/ to the box
        case InnerState.SaveItems:
            return(Interact());

        default:
            Debug.LogError("Should not be able to get here. Unimplemented case " + state);
            return(Status.Failure);
        }

        return(Status.Running);
    }
Ejemplo n.º 12
0
        private TreeNode[] ConvertEmotesNodesToTreeNodes(EmoteNodeSet emoteNodes)
        {
            TreeNode[] treeNodes = new TreeNode[emoteNodes.Nodes.Count];

            for (int i = 0; i < emoteNodes.Nodes.Count; i++)
            {
                EmoteNode emoteNode = (EmoteNode)emoteNodes.Nodes[i];
                TreeNode  treeNode  = new TreeNode();

                treeNode.Text = emoteNode.Text;
                treeNode.Tag  = emoteNode.Properties;

                if (emoteNode.ChildNodes.Nodes.Count > 0)
                {
                    treeNode.Nodes.AddRange(this.ConvertEmotesNodesToTreeNodes(emoteNode.ChildNodes));
                }

                treeNodes[i] = treeNode;
            }

            return(treeNodes);
        }
Ejemplo n.º 13
0
    protected override Status SubUpdate()
    {
        // This switch case is a state machine. If a case wants to transition into another state it needs to set the "state" variable.
        // This can be done by setting it directly or incrementing it by 1, i.e. ++.
        switch (state)
        {
        // Prepares the emoteNode
        case InnerState.Setup:
            emoteNode = EmoteNode.Create(0.6f, "pickupItem", EmoteNode.ParameterType.Trigger);
            emoteNode.Restart();
            emoteNode.Beginn(tree);
            state++;
            return(Status.Running);

        // Play the emote node, i.e. pickup item
        case InnerState.PickupItem:
            switch (emoteNode.CurrentStatus)
            {
            case Status.Running:
                emoteNode.Update();
                break;

            case Status.Success:
                state++;
                break;

            case Status.Failure:
                return(Status.Failure);
            }
            return(Status.Running);

        // Puts the item into the inventory of the toy
        case InnerState.SaveItemInInventory:

            if (!item)     // check if someone else alredy picked up the item
            {
                return(Status.Failure);
            }

            int itemsToPickUp = toy.Inventory.CapacityLeft / item.item.SingleWeight;

            Item addToInventory;
            if (itemsToPickUp >= item.item.Amount)     // Can pickup every item
            {
                addToInventory = item.item;
                Destroy(item.gameObject);
            }
            else     // can not pickup every item
            {
                addToInventory        = Instantiate(item.item);
                addToInventory.Amount = itemsToPickUp;
                item.item.Amount     -= itemsToPickUp;
            }
            toy.Inventory.Add(addToInventory);

            return(Status.Success);

        default:
            Debug.LogError("Should not be able to get here. Unimplemented case " + state);
            return(Status.Failure);
        }
    }