Beispiel #1
0
 public override void NodeGUI()
 {
     if (NodeEditorGUI.state == NodeEditorGUI.NodeEditorState.Dialogue && outputKnobs.Count > 0)
     {
         DeleteConnectionPort(outputKnobs[0]);
         output = null;
     }
     else if ((NodeEditorGUI.state != NodeEditorGUI.NodeEditorState.Dialogue) && (output == null))
     {
         output = CreateConnectionKnob(OutStyle);
     }
     GUILayout.BeginHorizontal();
     input.DisplayLayout();
     if (!jumpToStart && (NodeEditorGUI.state != NodeEditorGUI.NodeEditorState.Dialogue))
     {
         if (output == null)
         {
             if (outputKnobs.Count == 0)
             {
                 output = CreateConnectionKnob(OutStyle);
             }
             else
             {
                 output = outputKnobs[0];
             }
         }
         output.DisplayLayout();
     }
     GUILayout.EndHorizontal();
     jumpToStart = RTEditorGUI.Toggle(jumpToStart, "Jump to start");
     if (jumpToStart && outputKnobs.Count > 0)
     {
         DeleteConnectionPort(outputKnobs[0]);
         output = null;
     }
     GUILayout.BeginHorizontal();
     openBuilder = RTEditorGUI.Toggle(openBuilder, "Open Yard");
     GUILayout.EndHorizontal();
     if (openTrader = RTEditorGUI.Toggle(openTrader, "Open Trader"))
     {
         GUILayout.BeginHorizontal();
         GUILayout.Label("Trader Inventory JSON");
         traderJSON = GUILayout.TextArea(traderJSON);
         GUILayout.EndHorizontal();
     }
 }
    private void UpdateConnectKnobPosition(ConnectionKnob knob, NodeSide defaultSide, float defaultOffset)
    {
        if (knob.connected())
        {
            Vector2 selfPos  = center;
            Vector2 otherPos = knob.connections[0].body.center;

            Vector2 bottomLeft  = new Vector2(rect.xMin, rect.yMax);
            Vector2 bottomRight = new Vector2(rect.xMax, rect.yMax);
            Vector2 topRight    = new Vector2(rect.xMax, rect.yMin);
            Vector2 topLeft     = new Vector2(rect.xMin, rect.yMin);

            Vector2 intersectPos = Vector2.zero;

            // top
            if (HMathf.SegmentIntersect(selfPos, otherPos, topLeft, topRight, ref intersectPos))
            {
                knob.side         = NodeSide.Top;
                knob.sidePosition = (intersectPos.x - rect.xMin);
            }
            // right
            else if (HMathf.SegmentIntersect(selfPos, otherPos, topRight, bottomRight, ref intersectPos))
            {
                knob.side         = NodeSide.Right;
                knob.sidePosition = (intersectPos.y - rect.yMin);
            }
            // bottom
            else if (HMathf.SegmentIntersect(selfPos, otherPos, bottomRight, bottomLeft, ref intersectPos))
            {
                knob.side         = NodeSide.Bottom;
                knob.sidePosition = (intersectPos.x - rect.xMin);
            }
            // left
            else if (HMathf.SegmentIntersect(selfPos, otherPos, bottomLeft, topLeft, ref intersectPos))
            {
                knob.side         = NodeSide.Left;
                knob.sidePosition = (intersectPos.y - rect.yMin);
            }
        }
        else
        {
            knob.side         = defaultSide;
            knob.sidePosition = defaultOffset;
        }
    }
        public override void NodeGUI()
        {
            if (NodeEditorGUI.state == NodeEditorGUI.NodeEditorState.Dialogue)
            {
                DeleteConnectionPort(input);
                input = null;
            }
            else if (NodeEditorGUI.state != NodeEditorGUI.NodeEditorState.Dialogue && input == null)
            {
                input = CreateConnectionKnob(inputInStyle);
            }

            SpeakToEntity = RTEditorGUI.Toggle(SpeakToEntity, "Speak to entity");
            if (SpeakToEntity)
            {
                GUILayout.Label("Entity ID");
                EntityID = GUILayout.TextField(EntityID);
                if (WorldCreatorCursor.instance != null)
                {
                    if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                    {
                        WorldCreatorCursor.selectEntity += SetEntityID;
                        WorldCreatorCursor.instance.EntitySelection();
                    }
                }

                forceStart         = RTEditorGUI.Toggle(forceStart, "Force dialogue start");
                allowAfterSpeaking = RTEditorGUI.Toggle(allowAfterSpeaking, "Allow passing async");

                if (GUI.changed)
                {
                    if (allowAfterSpeaking)
                    {
                        flowOutput = CreateConnectionKnob(flowInStyle);
                    }
                    else
                    {
                        DeleteConnectionPort(flowOutput);
                    }
                }
            }
        }
        public void Init(int index)
        {
            if (useIDInput && IDInput == null)
            {
                IDInput = inputKnobs[0];
            }

            killCount             = 0;
            Entity.OnEntityDeath += updateState;

            state = ConditionState.Listening;

            if (useIDInput)
            {
                if (IDInput.connected())
                {
                    targetID = (IDInput.connections[0].body as SpawnEntityNode).entityID;
                }
                else
                {
                    Debug.LogWarning("Name Input not connected!");
                }
            }
        }
Beispiel #5
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            if (useIDInput)
            {
                if (IDInput == null)
                {
                    if (inputKnobs.Count == 0)
                    {
                        IDInput = CreateConnectionKnob(IDInStyle);
                    }
                    else
                    {
                        IDInput = inputKnobs[0];
                    }
                }

                IDInput.DisplayLayout();
            }

            output.DisplayLayout();
            GUILayout.EndHorizontal();

            if (nameMode = RTEditorGUI.Toggle(nameMode, "Name Mode"))
            {
                GUILayout.Label("Target Name");
                targetID = GUILayout.TextField(targetID);
            }
            else
            {
                useIDInput = RTEditorGUI.Toggle(useIDInput, "Use ID input");
                if (GUI.changed)
                {
                    if (useIDInput)
                    {
                        IDInput = CreateConnectionKnob(IDInStyle);
                    }
                    else
                    {
                        DeleteConnectionPort(IDInput);
                    }
                }

                if (!useIDInput)
                {
                    GUILayout.Label("Target ID");
                    targetID = GUILayout.TextField(targetID);
                    if (WorldCreatorCursor.instance != null)
                    {
                        if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                        {
                            WorldCreatorCursor.selectEntity += SetEntityID;
                            WorldCreatorCursor.instance.EntitySelection();
                        }
                    }
                }

                passIfEntityDoesNotExist = RTEditorGUI.Toggle(passIfEntityDoesNotExist, "Pass if entity does not exist");
            }

            targetCount         = RTEditorGUI.IntField("Count: ", targetCount);
            targetFaction       = RTEditorGUI.IntField("Faction: ", targetFaction);
            progressionFeedback = RTEditorGUI.Toggle(progressionFeedback, "Progression Feedback");
        }
Beispiel #6
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            input.DisplayLayout();
            output.DisplayLayout();
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (useIDInput)
            {
                if (IDInput == null)
                {
                    if (inputKnobs.Count == 1)
                    {
                        IDInput = CreateConnectionKnob(IDInStyle);
                    }
                    else
                    {
                        IDInput = inputKnobs[1];
                    }
                }

                IDInput.DisplayLayout();
            }

            GUILayout.EndHorizontal();

            useIDInput = RTEditorGUI.Toggle(useIDInput, "Use ID Input", GUILayout.MinWidth(400));
            if (GUI.changed)
            {
                if (useIDInput)
                {
                    IDInput = CreateConnectionKnob(IDInStyle);
                }
                else
                {
                    DeleteConnectionPort(IDInput);
                }
            }

            if (!useIDInput)
            {
                GUILayout.Label("Entity ID");
                entityID = GUILayout.TextField(entityID);
                if (WorldCreatorCursor.instance != null)
                {
                    if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                    {
                        WorldCreatorCursor.selectEntity += SetEntityID;
                        WorldCreatorCursor.instance.EntitySelection();
                    }
                }
            }

            RTEditorGUI.Seperator();

            asynchronous = RTEditorGUI.Toggle(asynchronous, "Asynchronous Mode", GUILayout.MinWidth(400));

            if (GUILayout.Button("Draw Path", GUILayout.ExpandWidth(false)))
            {
                if (path == null)
                {
                    path           = new PathData();
                    path.waypoints = new List <PathData.Node>();
                }

                WorldCreatorCursor.finishPath += SetPath;
                WorldCreatorCursor.instance.pathDrawing(WorldCreatorCursor.WCCursorMode.Control, path);
            }

            GUILayout.BeginHorizontal();
            doNotRotate = GUILayout.Toggle(doNotRotate, "Do Not Rotate", GUILayout.MinWidth(400));
            GUILayout.EndHorizontal();
            if (useCustomMass = GUILayout.Toggle(useCustomMass, "Use Custom Weight", GUILayout.MinWidth(400)))
            {
                GUILayout.Label("Weight");
                mass = float.Parse(GUILayout.TextField(mass.ToString(), GUILayout.MinWidth(400)));
            }
        }
Beispiel #7
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            input.DisplayLayout();
            output.DisplayLayout();
            GUILayout.EndHorizontal();
            GUILayout.BeginHorizontal();
            if (useIDInput)
            {
                if (IDInput == null)
                {
                    if (inputKnobs.Count == 1)
                    {
                        IDInput = CreateConnectionKnob(IDInStyle);
                    }
                    else
                    {
                        IDInput = inputKnobs[1];
                    }
                }
                IDInput.DisplayLayout();
            }
            GUILayout.EndHorizontal();

            GUILayout.BeginHorizontal();
            GUILayout.Label("Subject to tractor");
            GUILayout.EndHorizontal();
            useIDInput = RTEditorGUI.Toggle(useIDInput, "Use Name Input", GUILayout.MinWidth(400));
            if (GUI.changed)
            {
                if (useIDInput)
                {
                    IDInput = CreateConnectionKnob(IDInStyle);
                }
                else
                {
                    DeleteConnectionPort(IDInput);
                }
            }
            if (!useIDInput)
            {
                GUILayout.Label("Entity ID");
                entityID = GUILayout.TextField(entityID);
                if (WorldCreatorCursor.instance != null)
                {
                    if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                    {
                        WorldCreatorCursor.selectEntity += SetEntityID;
                        WorldCreatorCursor.instance.EntitySelection();
                    }
                }
            }

            GUILayout.BeginHorizontal();
            GUILayout.Label("Target for tractor");
            GUILayout.EndHorizontal();
            useIDInputTarget = RTEditorGUI.Toggle(useIDInputTarget, "Use Name Input (Unfinished, don't use)", GUILayout.MinWidth(400));
            if (GUI.changed)
            {
                if (useIDInputTarget)
                {
                    IDInput = CreateConnectionKnob(IDInStyle);
                }
                else
                {
                    DeleteConnectionPort(IDInput);
                }
            }
            if (!useIDInputTarget)
            {
                GUILayout.Label("Entity ID");
                targetEntityID = GUILayout.TextField(targetEntityID);
                if (WorldCreatorCursor.instance != null)
                {
                    if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                    {
                        WorldCreatorCursor.selectEntity += SetTargetID;
                        WorldCreatorCursor.instance.EntitySelection();
                    }
                }
            }

            RTEditorGUI.Seperator();
        }
Beispiel #8
0
        public override void NodeGUI()
        {
            if (!(Canvas is DialogueCanvas))
            {
                bool newValue = GUILayout.Toggle(dialogue, "Dialogue mode");
                if (dialogue != newValue)
                {
                    dialogue = newValue;

                    int count = outputKnobs.Count;
                    while (outputKnobs.Count > 0)
                    {
                        DeleteConnectionPort(outputKnobs[0]);
                    }
                    for (int i = 0; i < count; i++)
                    {
                        CreateConnectionKnob(dialogue ? dialogueOutAttribute : flowOutAttribute);
                    }

                    DeleteConnectionPort(inputKnobs[0]);
                    CreateConnectionKnob(dialogue ? dialogueInAttribute : flowInAttribute);
                }
            }

            if (input == null)
            {
                if (inputKnobs.Count > 0)
                {
                    input = inputKnobs[0];
                }
                else if (Canvas is DialogueCanvas || dialogue)
                {
                    input = CreateConnectionKnob(dialogueInAttribute);
                }
                else
                {
                    input = CreateConnectionKnob(flowInAttribute);
                }
            }

            GUILayout.Label("Outputs and chance weights:");
            for (int i = 0; i < chances.Count; i++)
            {
                RTEditorGUI.Seperator();
                GUILayout.BeginHorizontal();
                if (GUILayout.Button("x", GUILayout.ExpandWidth(false)))
                {
                    DeleteConnectionPort(outputPorts[i]);
                    chances.RemoveAt(i);
                    i--;
                    continue;
                }
                GUILayout.EndHorizontal();
                GUILayout.BeginHorizontal();
                chances[i] = RTEditorGUI.FloatField(chances[i]);
                outputKnobs[i].DisplayLayout();
                GUILayout.EndHorizontal();
            }
            GUILayout.BeginHorizontal();
            if (GUILayout.Button("Add", GUILayout.ExpandWidth(false), GUILayout.MinWidth(100f)))
            {
                CreateConnectionKnob((dialogue || (Canvas is DialogueCanvas)) ? dialogueOutAttribute : flowOutAttribute);
                chances.Add(0);
            }
            GUILayout.EndHorizontal();
        }
        public override int Traverse()
        {
            IDialogueOverrideHandler handler = null;

            if (state != NodeEditorGUI.NodeEditorState.Dialogue)
            {
                handler = TaskManager.Instance;
            }
            else
            {
                handler = DialogueSystem.Instance;
            }


            if (SpeakToEntity)
            {
                handler.GetSpeakerIDList().Add(EntityID);
                if (handler as TaskManager)
                {
                    TryAddObjective();
                }

                if (handler.GetInteractionOverrides().ContainsKey(EntityID))
                {
                    handler.GetInteractionOverrides()[EntityID].Push(() =>
                    {
                        if (handler as TaskManager)
                        {
                            missionCanvasNode = this;
                        }
                        else
                        {
                            dialogueCanvasNode = this;
                        }

                        handler.SetSpeakerID(EntityID);
                        handler.SetNode(output);
                    });
                }
                else
                {
                    var stack = new Stack <UnityEngine.Events.UnityAction>();
                    stack.Push(() =>
                    {
                        if (handler as TaskManager)
                        {
                            missionCanvasNode = this;
                        }
                        else
                        {
                            dialogueCanvasNode = this;
                        }

                        handler.SetSpeakerID(EntityID);
                        handler.SetNode(output);
                    });
                    handler.GetInteractionOverrides().Add(EntityID, stack);
                }

                if (!allowAfterSpeaking)
                {
                    if (forceStart)
                    {
                        if (handler as TaskManager)
                        {
                            missionCanvasNode = this;
                        }
                        else
                        {
                            dialogueCanvasNode = this;
                        }

                        handler.SetSpeakerID(EntityID);
                        return(0);
                    }
                    else
                    {
                        return(-1);
                    }
                }
                else
                {
                    if (flowOutput == null)
                    {
                        flowOutput = outputKnobs[1];
                    }

                    handler.SetNode(flowOutput);
                    return(-1);
                }
            }
            else
            {
                return(0);
            }
        }
Beispiel #10
0
        public override void NodeGUI()
        {
            GUILayout.BeginHorizontal();
            input.DisplayLayout();
            output.DisplayLayout();
            GUILayout.EndHorizontal();

            stopFollowing = RTEditorGUI.Toggle(stopFollowing, "Stop Following");
            if (GUI.changed)
            {
                if (stopFollowing && TargetInput != null)
                {
                    DeleteConnectionPort(TargetInput);
                    TargetInput = null;
                }
                else if (!stopFollowing && useTargetInput && TargetInput == null)
                {
                    TargetInput      = CreateConnectionKnob(IDInStyle);
                    TargetInput.name = "TargetInput";
                }
            }

            RTEditorGUI.Seperator();

            GUILayout.BeginHorizontal();
            if (useFollowerInput)
            {
                if (FollowerInput == null)
                {
                    ConnectionKnob input = connectionKnobs.Find((x) => { return(x.name == "FollowerInput"); });

                    if (input == null)
                    {
                        FollowerInput      = CreateConnectionKnob(IDInStyle);
                        FollowerInput.name = "FollowerInput";
                    }
                    else
                    {
                        FollowerInput = input;
                    }
                }

                FollowerInput.DisplayLayout();
            }

            GUILayout.EndHorizontal();

            if (!stopFollowing)
            {
                GUILayout.BeginHorizontal();
                if (useTargetInput)
                {
                    if (TargetInput == null)
                    {
                        ConnectionKnob input = connectionKnobs.Find((x) => { return(x.name == "TargetInput"); });

                        if (input == null)
                        {
                            TargetInput      = CreateConnectionKnob(IDInStyle);
                            TargetInput.name = "TargetInput";
                        }
                        else
                        {
                            TargetInput = input;
                        }
                    }

                    TargetInput.DisplayLayout();
                }

                GUILayout.EndHorizontal();
            }


            useFollowerInput = RTEditorGUI.Toggle(useFollowerInput, "Get follower ID from input", GUILayout.MinWidth(400));
            if (GUI.changed)
            {
                if (useFollowerInput && FollowerInput == null)
                {
                    FollowerInput      = CreateConnectionKnob(IDInStyle);
                    FollowerInput.name = "FollowerInput";
                }
                else if (!useFollowerInput && FollowerInput != null)
                {
                    DeleteConnectionPort(FollowerInput);
                    FollowerInput = null;
                }
            }

            if (!useFollowerInput)
            {
                GUILayout.Label("Follower ID");
                followerID = GUILayout.TextField(followerID);
                if (WorldCreatorCursor.instance != null)
                {
                    if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                    {
                        WorldCreatorCursor.selectEntity += SetFollowerID;
                        WorldCreatorCursor.instance.EntitySelection();
                    }
                }
            }

            if (!stopFollowing)
            {
                RTEditorGUI.Seperator();

                useTargetInput = RTEditorGUI.Toggle(useTargetInput, "Get target ID from input", GUILayout.MinWidth(400));
                if (GUI.changed)
                {
                    if (useTargetInput && TargetInput == null)
                    {
                        TargetInput      = CreateConnectionKnob(IDInStyle);
                        TargetInput.name = "TargetInput";
                    }
                    else if (!useTargetInput && TargetInput != null)
                    {
                        DeleteConnectionPort(TargetInput);
                        TargetInput = null;
                    }
                }

                if (!useTargetInput)
                {
                    GUILayout.Label("Target ID");
                    targetID = GUILayout.TextField(targetID);
                    if (WorldCreatorCursor.instance != null)
                    {
                        if (GUILayout.Button("Select", GUILayout.ExpandWidth(false)))
                        {
                            WorldCreatorCursor.selectEntity += SetTargetID;
                            WorldCreatorCursor.instance.EntitySelection();
                        }
                    }
                }
            }

            GUILayout.BeginHorizontal();
            disallowAggression = GUILayout.Toggle(disallowAggression, "Disallow Aggression", GUILayout.MinWidth(40));
            GUILayout.EndHorizontal();
        }
Beispiel #11
0
        public override int Traverse()
        {
            if (useFollowerInput)
            {
                ConnectionKnob input = connectionKnobs.Find((x) => { return(x.name == "FollowerInput"); });

                if (useFollowerInput && FollowerInput == null)
                {
                    FollowerInput = input;
                }

                if (FollowerInput.connected())
                {
                    followerID = (FollowerInput.connections[0].body as SpawnEntityNode).entityID;
                }
                else
                {
                    Debug.LogWarning("Follower name input not connected!");
                }
            }

            if (useTargetInput && !stopFollowing)
            {
                ConnectionKnob input = connectionKnobs.Find((x) => { return(x.name == "TargetInput"); });

                if (useTargetInput && TargetInput == null)
                {
                    TargetInput = input;
                }

                if (TargetInput.connected())
                {
                    targetID = (TargetInput.connections[0].body as SpawnEntityNode).entityID;
                }
                else
                {
                    Debug.LogWarning("Target name input not connected!");
                }
            }


            if (!stopFollowing)
            {
                Entity target = SectorManager.instance.GetEntity(targetID);
                if (target != null)
                {
                    for (int i = 0; i < AIData.entities.Count; i++)
                    {
                        if (AIData.entities[i].ID == followerID && AIData.entities[i] is AirCraft airCraft)
                        {
                            airCraft.GetAI().follow(target.transform);


                            if (disallowAggression)
                            {
                                airCraft.GetAI().aggression = AirCraftAI.AIAggression.KeepMoving;
                            }
                        }
                    }
                }
                else
                {
                    Debug.LogWarning("Follow target not found!");
                }
            }
            else
            {
                for (int i = 0; i < AIData.entities.Count; i++)
                {
                    if (AIData.entities[i].ID == followerID && AIData.entities[i] is AirCraft airCraft)
                    {
                        airCraft.GetAI().follow(null);
                    }
                }
            }

            return(0);
        }
Beispiel #12
0
        public override int Traverse()
        {
            if (useIDInput)
            {
                if (useIDInput && IDInput == null)
                {
                    IDInput = inputKnobs[1];
                }

                if (IDInput.connected())
                {
                    entityID = (IDInput.connections[0].body as SpawnEntityNode).entityID;
                }
                else
                {
                    Debug.LogWarning("Name Input not connected!");
                }
            }

            Debug.Log("Entity ID: " + entityID);
            Debug.Log("Target ID: " + targetEntityID);

            if (!(target && entity)) // room for improvement but probably unecessary
            {
                for (int i = 0; i < AIData.entities.Count; i++)
                {
                    if (AIData.entities[i].ID == entityID && AIData.entities[i] is AirCraft)
                    {
                        entity = AIData.entities[i] as AirCraft;
                    }
                    if (AIData.entities[i].ID == targetEntityID && AIData.entities[i] is AirCraft)
                    {
                        target = AIData.entities[i];
                    }
                }
            }

            if (!useNumericalAngle)
            {
                if (!(target && entity))
                {
                    Debug.LogWarning("Could not find target/entity! " + target + " " + entity);
                    return(0);
                }

                Vector2 targetVector = target.transform.position - entity.transform.position;
                //calculate difference of angles and compare them to find the correct turning direction
                if (!(entity is PlayerCore))
                {
                    if (!asynchronous)
                    {
                        entity.GetAI().RotateTo(targetVector, continueTraversing);
                    }
                    else
                    {
                        entity.GetAI().RotateTo(targetVector);
                    }
                }
                else
                {
                    entity.StartCoroutine(rotatePlayer(targetVector));
                }
            }
            else
            {
                entity.transform.rotation = Quaternion.Euler(new Vector3(0, 0, float.Parse(angle)));
                return(0);
            }



            return(asynchronous ? 0 : -1);
        }
 public BranchCase(Node n)
 {
     connection = n.CreateConnectionKnob(StdKnobs.KnobAttributeOUT);
 }