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