Exemplo n.º 1
0
	public static void Unpack(out HamTimelineNode node, DataUnpacker unpacker)
	{
		byte typeByte;
		unpacker.Unpack(out typeByte);
		TimelineNodeType type = (TimelineNodeType)typeByte;

		int id;
		unpacker.Unpack(out id);

		int numPrevIDs;
		unpacker.Unpack(out numPrevIDs);
		List<int> previousNodeIDs = new List<int>();
		for (int i = 0; i < numPrevIDs; ++i)
		{
			int prevID;
			unpacker.Unpack(out prevID);
			previousNodeIDs.Add(prevID);
		}

		switch (type)
		{
		case TimelineNodeType.Dialog:
			node = new HamDialogNode();
			break;
		case TimelineNodeType.Branch:
			node = new HamBranchNode();
			break;
		case TimelineNodeType.Decision:
			node = new HamDecisionNode();
			break;
		case TimelineNodeType.Consequence:
			node = new HamConsequenceNode();
			break;
		default:
			node = null;
			return;
		}
		node.ID = id;
		node.Type = type;
		node.PreviousNodeIDs = previousNodeIDs;

		node.Unpack(unpacker);
	}
Exemplo n.º 2
0
	public HamTimelineNode AddDialogNode(int sceneID, int speakerID, string dialog, List<int> characters = null)
	{
		int id = this.IDCount++;
		HamTimelineNode node = new HamDialogNode(id, sceneID, speakerID, dialog, characters);
		this.Nodes[id] = node;
		this.NodeLinkageDirty = true;
		return node;
	}
Exemplo n.º 3
0
    private void RenderDialogNode(Vector2 nodePosition, Vector2 offset, HamDialogNode node)
    {
        GUILayout.BeginVertical();

        GUILayout.BeginHorizontal(Style("DialogNode"));
        GUILayout.Label("(" + node.ID + ") Dialog");
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal();
        GUILayout.BeginVertical(Style("GenericNode"));
        GUILayout.Label(this.activeTimeline.Scenes[node.SceneID].Name);
        GUILayout.EndVertical();
        GUILayout.BeginVertical(Style("GenericNode"));
        GUILayout.Label(this.activeTimeline.Characters[node.SpeakerID].Name);
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.BeginHorizontal(Style("GenericNode"), GUILayout.ExpandHeight(true));
        GUILayout.Label(node.Dialog);
        GUILayout.EndHorizontal();

        if (node.NextNodeID != HamTimeline.InvalidID)
        {
#if LINKAGE_DEBUG
            Debug.Log("Node " + node.ID + " transitions to " + node.NextNodeID);
#endif
            HamTimelineNode nextNode = this.activeTimeline.Nodes[node.NextNodeID];
            Vector2 nextNodePosition = GetOverviewPosition(nextNode);
            Vector2 outputPosition = nodePosition + offset + new Vector2(0f, kNodeSizeY / 2f);
            Vector2 inputPosition  = nextNodePosition + offset - new Vector2(0f, kNodeSizeY / 2f);
            Color connectionColor = Color.white;
            if (this.selection.NodeSelected(node.ID))
            {
                connectionColor = Color.green;
            }
            else if (this.selection.NodeSelected(node.NextNodeID))
            {
                connectionColor = Color.red;
            }
            this.connections.Add(new NodeConnection(outputPosition, inputPosition, connectionColor));
        }

        GUILayout.EndVertical();
        if (GUI.Button(GUILayoutUtility.GetLastRect(), GUIContent.none, Style("InvisibleButton")))
        {
            if (Event.current.button == 0)
            {
                this.selection.ClickedNode(this.activeTimeline, node);
            }
            else if (Event.current.button == 1)
            {
                RightClickNodeContext(node, 0);
            }
        }
    }
Exemplo n.º 4
0
    private void DialogNodeEditing(HamDialogNode node)
    {
        GUILayout.Label("Dialog Node", Style("SubTitle"));

        // Node Editing
        GUILayout.BeginVertical(Style("box"));
        GUILayout.BeginHorizontal(GUILayout.MaxWidth(300));
        GUILayout.Label("Scene");
        if (GUILayout.Button(this.activeTimeline.Scenes[node.SceneID].Name))
        {
            GenericMenu menu = new GenericMenu();
            foreach (HamScene scene in this.activeTimeline.Scenes.Values)
            {
                menu.AddItem(
                    new GUIContent(scene.Name),
                    (scene.ID == node.SceneID),
                    (userData) => { node.SceneID = (int)userData; },
                    scene.ID 
                );
            }
            menu.ShowAsContext();
        }
        GUILayout.EndHorizontal(); 

        GUILayout.BeginHorizontal(GUILayout.MaxWidth(300));
        GUILayout.Label("Speaker");
        if (GUILayout.Button(this.activeTimeline.Characters[node.SpeakerID].Name))
        {
            GenericMenu menu = new GenericMenu();
            foreach (HamCharacter character in this.activeTimeline.Characters.Values)
            {
                menu.AddItem(
                    new GUIContent(character.Name),
                    (character.ID == node.SpeakerID),
                    (userData) => { node.SpeakerID = (int)userData; },
                    character.ID 
                );
            }
            menu.ShowAsContext();
        }
        GUILayout.EndHorizontal();

        GUILayout.Label("Dialog Content");
        node.Dialog = GUILayout.TextArea(node.Dialog);

        GUILayout.Label("Characters Present");
        for (int i = 0; i < node.CharacterIDs.Count; ++i)
        {
            HamCharacter c = this.activeTimeline.Characters[node.CharacterIDs[i]];
            GUILayout.BeginHorizontal(GUILayout.MaxWidth(200));
            GUILayout.Label(c.Name);
            if (GUILayout.Button("-", Style("SmallButton")))
            {
                node.CharacterIDs.Remove(c.ID);
            }
            GUILayout.EndHorizontal();
        }
        if (GUILayout.Button("Add Character"))
        {
            GenericMenu menu = new GenericMenu();
            foreach (HamCharacter character in this.activeTimeline.Characters.Values)
            {
                if (!node.CharacterIDs.Contains(character.ID))
                {
                    menu.AddItem(
                        new GUIContent(character.Name),
                        false,
                        (userData) => { node.CharacterIDs.Add((int)userData); },
                        character.ID 
                    );
                }
            }
            menu.ShowAsContext();
        }
        GUILayout.EndVertical();
    }