コード例 #1
0
ファイル: HamTimelineNode.cs プロジェクト: datalurkur/HAM
	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);
	}
コード例 #2
0
ファイル: HamTimeline.cs プロジェクト: datalurkur/HAM
	public HamTimelineNode AddDecisionNode()
	{
		int id = this.IDCount++;
		HamTimelineNode node = new HamDecisionNode(id);
		this.Nodes[id] = node;
		this.NodeLinkageDirty = true;
		return node;
	}
コード例 #3
0
ファイル: HamTimelineEditor.cs プロジェクト: datalurkur/HAM
    private void RenderDecisionNode(Vector2 nodePosition, Vector2 offset, HamDecisionNode node)
    {
        // Determine dimensions of various components
        float decisionChunkSize = kNodeSizeX / node.Decisions.Count;
        Vector2 ulCorner = new Vector2(
            nodePosition.x + offset.x - kNodeSizeX / 2f,
            nodePosition.y + offset.y - kNodeSizeY / 2f
        );
        float yMax = ulCorner.y + kNodeSizeY;

        // Node title
        GUILayout.BeginHorizontal(Style("DecisionNode"));
        GUILayout.Label("(" + node.ID + ") Decision");
        GUILayout.EndHorizontal();
        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, -1);
            }
        }

        // Decision area
        GUILayout.BeginHorizontal();
        for (int i = 0; i < node.Decisions.Count; ++i)
        {
            float decisionX = ulCorner.x + (decisionChunkSize * i);
            HamDecisionNode.Decision d = node.Decisions[i];
            GUILayout.BeginVertical(Style("GenericNode"), GUILayout.ExpandHeight(true), GUILayout.MaxWidth(decisionChunkSize));
            GUILayout.Label(d.IsDialog ? String.Format("\"{0}\"", d.DecisionText) : d.DecisionText);
            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, i);
                }
            }

            if (d.NextNodeID != HamTimeline.InvalidID)
            {
#if LINKAGE_DEBUG
                Debug.Log("Node " + node.ID + " transitions to " + d.NextNodeID);
#endif
                HamTimelineNode nextNode = this.activeTimeline.Nodes[d.NextNodeID];
                Vector2 nextNodePosition = GetOverviewPosition(nextNode);
                Vector2 inputPosition  = nextNodePosition + offset - new Vector2(0f, kNodeSizeY / 2f);
                Vector2 outputPosition = new Vector2(decisionX + (decisionChunkSize / 2f), yMax);
                Color connectionColor = Color.white;
                if (this.selection.NodeSelected(node.ID))
                {
                    connectionColor = Color.green;
                }
                else if (this.selection.NodeSelected(d.NextNodeID))
                {
                    connectionColor = Color.red;
                }
                this.connections.Add(new NodeConnection(outputPosition, inputPosition, connectionColor));
            }
        }
        GUILayout.EndHorizontal();
    }
コード例 #4
0
ファイル: HamTimelineEditor.cs プロジェクト: datalurkur/HAM
    private void DecisionEditing(HamDecisionNode node, int i)
    {
        HamDecisionNode.Decision d = node.Decisions[i];
        GUILayout.BeginVertical();

        GUILayout.BeginVertical(Style("box"));
        GUILayout.Label("Decision Text");
        d.DecisionText = GUILayout.TextField(d.DecisionText);

        d.IsDialog = GUILayout.Toggle(d.IsDialog, "Is Dialog");
        GUILayout.EndVertical();

        GUILayout.EndVertical(); 
    }
コード例 #5
0
ファイル: HamTimelineEditor.cs プロジェクト: datalurkur/HAM
    private void DecisionNodeEditing(HamDecisionNode node)
    {
        GUILayout.Label("Decision Node", Style("SubTitle"));

        GUILayout.BeginVertical();
        for (int i = 0; i < node.Decisions.Count; ++i)
        {
            DecisionEditing(node, i);
        }
        GUILayout.BeginHorizontal(Style("box"));
        if (GUILayout.Button("Add Decision", Style("FlexButton")))
        {
            node.AddDecision("New Decision", false);
        }
        GUILayout.EndHorizontal();
        GUILayout.EndVertical();
    }
コード例 #6
0
ファイル: HamTimelineEvent.cs プロジェクト: datalurkur/HAM
	public void AddChoice(int id, HamDecisionNode.Decision decision)
	{
		this.Choices[id] = decision;
	}