Skip to content
Snippets Groups Projects
Commit b676da87 authored by Sven Gerlach's avatar Sven Gerlach
Browse files

Navigate Articy Flow through DialogueBox

parent 211f2580
No related branches found
No related tags found
No related merge requests found
using Articy.Unity;
using Articy.Unity.Interfaces;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;
public class StartFlowPlayer : MonoBehaviour
{
private ArticyFlowPlayer flowPlayer;
void Start()
{
flowPlayer = GetComponent<ArticyFlowPlayer>();
flowPlayer.StartOn = ArticyDatabase.GetObject(72057594037928251);
Debug.Log("Press A or B to start one of the dialogues");
}
// Start is called before the first frame update
void Update() {
if (Input.GetKeyDown("a"))
flowPlayer.StartOn = ArticyDatabase.GetObject(72057594037928251);
if (Input.GetKeyDown("b"))
flowPlayer.StartOn = ArticyDatabase.GetObject(72057594037928445);
}
}
fileFormatVersion: 2
guid: 5ba11467abf042d4f8e33891cdac93bf
guid: 04f433ebeda01b14092e4f7f84512a40
MonoImporter:
externalObjects: {}
serializedVersion: 2
......
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!29 &1
OcclusionCullingSettings:
m_ObjectHideFlags: 0
serializedVersion: 2
m_OcclusionBakeSettings:
smallestOccluder: 5
smallestHole: 0.25
backfaceThreshold: 100
m_SceneGUID: 00000000000000000000000000000000
m_OcclusionCullingData: {fileID: 0}
--- !u!104 &2
RenderSettings:
m_ObjectHideFlags: 0
serializedVersion: 9
m_Fog: 0
m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
m_FogMode: 3
m_FogDensity: 0.01
m_LinearFogStart: 0
m_LinearFogEnd: 300
m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}
m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}
m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}
m_AmbientIntensity: 1
m_AmbientMode: 0
m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}
m_HaloStrength: 0.5
m_FlareStrength: 1
m_FlareFadeSpeed: 3
m_HaloTexture: {fileID: 0}
m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
m_DefaultReflectionMode: 0
m_DefaultReflectionResolution: 128
m_ReflectionBounces: 1
m_ReflectionIntensity: 1
m_CustomReflection: {fileID: 0}
m_Sun: {fileID: 0}
m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
m_UseRadianceAmbientProbe: 0
--- !u!157 &3
LightmapSettings:
m_ObjectHideFlags: 0
serializedVersion: 12
m_GIWorkflowMode: 1
m_GISettings:
serializedVersion: 2
m_BounceScale: 1
m_IndirectOutputScale: 1
m_AlbedoBoost: 1
m_EnvironmentLightingMode: 0
m_EnableBakedLightmaps: 1
m_EnableRealtimeLightmaps: 0
m_LightmapEditorSettings:
serializedVersion: 12
m_Resolution: 2
m_BakeResolution: 40
m_AtlasSize: 1024
m_AO: 0
m_AOMaxDistance: 1
m_CompAOExponent: 1
m_CompAOExponentDirect: 0
m_ExtractAmbientOcclusion: 0
m_Padding: 2
m_LightmapParameters: {fileID: 0}
m_LightmapsBakeMode: 1
m_TextureCompression: 1
m_FinalGather: 0
m_FinalGatherFiltering: 1
m_FinalGatherRayCount: 256
m_ReflectionCompression: 2
m_MixedBakeMode: 2
m_BakeBackend: 1
m_PVRSampling: 1
m_PVRDirectSampleCount: 32
m_PVRSampleCount: 512
m_PVRBounces: 2
m_PVREnvironmentSampleCount: 256
m_PVREnvironmentReferencePointCount: 2048
m_PVRFilteringMode: 1
m_PVRDenoiserTypeDirect: 1
m_PVRDenoiserTypeIndirect: 1
m_PVRDenoiserTypeAO: 1
m_PVRFilterTypeDirect: 0
m_PVRFilterTypeIndirect: 0
m_PVRFilterTypeAO: 0
m_PVREnvironmentMIS: 1
m_PVRCulling: 1
m_PVRFilteringGaussRadiusDirect: 1
m_PVRFilteringGaussRadiusIndirect: 5
m_PVRFilteringGaussRadiusAO: 2
m_PVRFilteringAtrousPositionSigmaDirect: 0.5
m_PVRFilteringAtrousPositionSigmaIndirect: 2
m_PVRFilteringAtrousPositionSigmaAO: 1
m_ExportTrainingData: 0
m_TrainingDataDestination: TrainingData
m_LightProbeSampleCountMultiplier: 4
m_LightingDataAsset: {fileID: 0}
m_LightingSettings: {fileID: 0}
--- !u!196 &4
NavMeshSettings:
serializedVersion: 2
m_ObjectHideFlags: 0
m_BuildSettings:
serializedVersion: 2
agentTypeID: 0
agentRadius: 0.5
agentHeight: 2
agentSlope: 45
agentClimb: 0.4
ledgeDropHeight: 0
maxJumpAcrossDistance: 0
minRegionArea: 2
manualCellSize: 0
cellSize: 0.16666667
manualTileSize: 0
tileSize: 256
accuratePlacement: 0
maxJobWorkers: 0
preserveTilesOutsideBounds: 0
debug:
m_Flags: 0
m_NavMeshData: {fileID: 0}
--- !u!1 &1256801072
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1256801075}
- component: {fileID: 1256801074}
- component: {fileID: 1256801073}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!81 &1256801073
AudioListener:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1256801072}
m_Enabled: 1
--- !u!20 &1256801074
Camera:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1256801072}
m_Enabled: 1
serializedVersion: 2
m_ClearFlags: 1
m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0}
m_projectionMatrixMode: 1
m_GateFitMode: 2
m_FOVAxisMode: 0
m_SensorSize: {x: 36, y: 24}
m_LensShift: {x: 0, y: 0}
m_FocalLength: 50
m_NormalizedViewPortRect:
serializedVersion: 2
x: 0
y: 0
width: 1
height: 1
near clip plane: 0.3
far clip plane: 1000
field of view: 60
orthographic: 0
orthographic size: 5
m_Depth: -1
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingPath: -1
m_TargetTexture: {fileID: 0}
m_TargetDisplay: 0
m_TargetEye: 3
m_HDR: 1
m_AllowMSAA: 1
m_AllowDynamicResolution: 0
m_ForceIntoRT: 0
m_OcclusionCulling: 1
m_StereoConvergence: 10
m_StereoSeparation: 0.022
--- !u!4 &1256801075
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1256801072}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 0, y: 1, z: -10}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &1933320861
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 1933320863}
- component: {fileID: 1933320862}
m_Layer: 0
m_Name: Directional Light
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!108 &1933320862
Light:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1933320861}
m_Enabled: 1
serializedVersion: 10
m_Type: 1
m_Shape: 0
m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}
m_Intensity: 1
m_Range: 10
m_SpotAngle: 30
m_InnerSpotAngle: 21.80208
m_CookieSize: 10
m_Shadows:
m_Type: 2
m_Resolution: -1
m_CustomResolution: -1
m_Strength: 1
m_Bias: 0.05
m_NormalBias: 0.4
m_NearPlane: 0.2
m_CullingMatrixOverride:
e00: 1
e01: 0
e02: 0
e03: 0
e10: 0
e11: 1
e12: 0
e13: 0
e20: 0
e21: 0
e22: 1
e23: 0
e30: 0
e31: 0
e32: 0
e33: 1
m_UseCullingMatrixOverride: 0
m_Cookie: {fileID: 0}
m_DrawHalo: 0
m_Flare: {fileID: 0}
m_RenderMode: 0
m_CullingMask:
serializedVersion: 2
m_Bits: 4294967295
m_RenderingLayerMask: 1
m_Lightmapping: 4
m_LightShadowCasterMode: 0
m_AreaSize: {x: 1, y: 1}
m_BounceIntensity: 1
m_ColorTemperature: 6570
m_UseColorTemperature: 0
m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
m_UseBoundingSphereOverride: 0
m_UseViewFrustumForShadowCasterCull: 1
m_ShadowRadius: 0
m_ShadowAngle: 0
--- !u!4 &1933320863
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 1933320861}
m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}
m_LocalPosition: {x: 0, y: 3, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}
fileFormatVersion: 2
guid: 002b97dad56c6f843a061ab2ee0578c9
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
using Articy.Unity;
using Articy.Unity.Interfaces;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ArticyStoryline : MonoBehaviour, IArticyFlowPlayerCallbacks {
public IList<Branch> currentBranches;
//previously ApplyTransition
public void OnFlowPlayerPaused(IFlowObject currentNode) {
var dialogueBox = GetComponent<DialogueBox>();
var objWithText = currentNode as IObjectWithText;
if (objWithText != null)
dialogueBox.SetText(objWithText.Text);
var objSpeaker = currentNode as IObjectWithSpeaker;
if (objSpeaker != null) {
var speakerDisplayName = objSpeaker.Speaker as IObjectWithDisplayName;
dialogueBox.SetActor(speakerDisplayName.DisplayName);
}
else
dialogueBox.SetActor(string.Empty);
}
public void OnBranchesUpdated(IList<Branch> branches) {
currentBranches = branches;
GetComponent<DialogueBox>().SetTransitions(currentBranches);
}
public void ApplyTransition(int count) {
GetComponent<DialogueBox>().ClearUI();
GetComponent<ArticyFlowPlayer>().Play(currentBranches[count]);
}
}
fileFormatVersion: 2
guid: d52eb85494921dd48be8d847a8298602
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
using UnityEditor;
using System.Collections.Generic;
using Articy.Unity;
using Articy.Unity.Interfaces;
using Articy.Unity.Utils;
using UnityEngine;
using UnityEngine.Events;
using System.Collections;
using UnityEngine.EventSystems;
using UnityEngine.UIElements;
[RequireComponent(typeof(UIDocument))]
public class DialogueBox : MonoBehaviour {
private UIDocument uiDocument;
[SerializeField] protected VisualTreeAsset visualTree;
[SerializeField] protected StyleSheet styleSheet;
[SerializeField] Katas.Experimental.WorldSpaceUIDocument worldSpaceUIDocument;
private VisualElement root;
private Button[] buttons;
public VisualTreeAsset visualTree;
public StyleSheet styleSheet;
public void Awake() {
worldSpaceUIDocument.onUIDocumentReady.AddListener(setUIDocument);
uiDocument = GetComponent<UIDocument>();
}
private void setUIDocument() {
uiDocument = GetComponent<UIDocument>();
public void OnEnable() {
root = uiDocument.rootVisualElement;
VisualElement tree = visualTree.CloneTree();
tree.styleSheets.Add(styleSheet);
root.Add(tree);
buttons = root.Query<Button>().ToList().ToArray();
ClearUI();
for (var i = 0; i < buttons.Length; i++)
{
for (var i = 0; i < buttons.Length; i++) {
var index = i;
buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<Storyline>().ApplyTransition(index));
buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<ArticyStoryline>().ApplyTransition(index));
}
}
public void OnEnable() {
SetActor("ActorName");
SetText("DialogueText");
public void ClearUI() {
SetActor(string.Empty);
SetText(string.Empty);
for (var i = 0; i < buttons.Length; i++)
buttons[i].visible = false;
}
public void SetActor(string actor) {
public void SetActor(string actor) {
root.Q<Label>("Actor").text = actor;
}
......@@ -48,15 +50,23 @@ public void SetText(string text) {
root.Q<TextElement>("Dialogue").text = text;
}
public void SetTransitions(Storyline.Transition[] transitions) {
for(var i = 0; i < buttons.Length; i++) {
if(i < transitions.Length) {
public void SetTransitions(IList<Branch> branches) {
for (var i = 0; i < buttons.Length; i++) {
buttons[i].text = string.Empty;
if (i < branches.Count) {
buttons[i].visible = true;
buttons[i].text = transitions[i].transitionText;
if (branches.Count > 1) {
var menuText = branches[i].Target as IObjectWithMenuText;
buttons[i].text = menuText.MenuText;
}
else
buttons[i].text = "Continue";
}
else {
else
buttons[i].visible = false;
}
}
}
}
......
fileFormatVersion: 2
guid: f6a8876d339d1ce4dbb83ea0158084f2
guid: 0b06390bd25b8824eb83c9de4937a410
MonoImporter:
externalObjects: {}
serializedVersion: 2
......
using UnityEngine;
public class Storyline : MonoBehaviour {
public Node currentNode;
[SerializeField] Katas.Experimental.WorldSpaceUIDocument worldSpaceUIDocument;
public void Start() {
Transition[] GHI = new Transition[2];
Node testNode = new Node("Actor 3","Testing Text 3",GHI);
Transition testTransition = new Transition("Continue", testNode);
Transition[] ABC = new Transition[1];
ABC[0] = testTransition;
Node TestNode2 = new Node("Actor 2","Testing Text 2", ABC);
Transition testTransition1 = new Transition("Yes", TestNode2);
Transition[] DEF = new Transition[1];
DEF[0] = testTransition1;
Node testNode3 = new Node("Actor 1","Testing Text 1", DEF);
Transition testTransition2 = new Transition("No", testNode3);
GHI[0] = testTransition1;
Transition[] JKL = new Transition[5];
JKL[0] = testTransition1;
JKL[1] = testTransition2;
JKL[3] = testTransition;
JKL[4] = testTransition1;
Node testNode4 = new Node("Actor 4", "Testing Text 4", JKL);
Transition testTransition3 = new Transition("Unsure", testNode4);
GHI[1] = testTransition3;
JKL[2] = testTransition3;
currentNode = testNode4;
worldSpaceUIDocument.onUIDocumentReady.AddListener(UpdateUi);
}
public void ApplyTransition(int count) {
currentNode = currentNode.transitions[count].target;
UpdateUi();
}
public void UpdateUi() {
var dialogueBox = GetComponent<DialogueBox>();
dialogueBox.SetActor(currentNode.actorName);
dialogueBox.SetText(currentNode.dialogueText);
dialogueBox.SetTransitions(currentNode.transitions);
}
public class Node {
public readonly string actorName;
public readonly string dialogueText;
public readonly Transition[] transitions;
public Node(string actor, string dialogue) {
actorName = actor;
dialogueText = dialogue;
}
public Node(string actor, string dialogue, Transition[] transitions) : this(actor, dialogue) {
this.transitions = transitions;
}
}
public class Transition {
public readonly string transitionText;
public readonly Node target;
public Transition(string text, Node target) {
transitionText = text;
this.target = target;
}
}
}
\ No newline at end of file
using UnityEditor;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.UIElements;
public class WorldSpaceDialogueBox : MonoBehaviour {
//Only the different parts for now
private UIDocument uiDocument;
[SerializeField] protected VisualTreeAsset visualTree;
[SerializeField] protected StyleSheet styleSheet;
[SerializeField] Katas.Experimental.WorldSpaceUIDocument worldSpaceUIDocument;
private VisualElement root;
private Button[] buttons;
public void Awake() {
worldSpaceUIDocument.onUIDocumentReady.AddListener(setUIDocument);
}
private void setUIDocument() {
uiDocument = GetComponent<UIDocument>();
root = uiDocument.rootVisualElement;
VisualElement tree = visualTree.CloneTree();
tree.styleSheets.Add(styleSheet);
root.Add(tree);
buttons = root.Query<Button>().ToList().ToArray();
for (var i = 0; i < buttons.Length; i++) {
var index = i;
buttons[i].RegisterCallback<MouseUpEvent>(_ => GetComponent<ArticyStoryline>().ApplyTransition(index));
}
}
}
fileFormatVersion: 2
guid: f6a8876d339d1ce4dbb83ea0158084f2
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment