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