public void UpdateMatrix(uint time, int animation, out Matrix matrix, M2Animator animator, BillboardParameters billboard) { var boneMatrix = Matrix.Identity; if (IsBillboarded && billboard != null) { var billboardMatrix = Matrix.Identity; billboardMatrix.Row1 = new Vector4(billboard.Forward, 0); billboardMatrix.Row2 = new Vector4(billboard.Right, 0); billboardMatrix.Row3 = new Vector4(billboard.Up, 0); boneMatrix = billboard.InverseRotation * billboardMatrix; } if (IsTransformed) { var position = mTranslation.GetValue(animation, time, animator.AnimationLength); position.Y = -position.Y; var scaling = mScaling.GetValue(animation, time, animator.AnimationLength); var rotation = mRotation.GetValue(animation, time, animator.AnimationLength); boneMatrix *= Matrix.RotationQuaternion(rotation) * Matrix.Scaling(scaling) * Matrix.Translation(position); } boneMatrix = mInvPivot * boneMatrix * mPivot; if (mBone.parentBone >= 0) { boneMatrix *= animator.GetBoneMatrix(time, mBone.parentBone, billboard); } matrix = boneMatrix; }
private DecembristVertex AddPeople(TextTextureFactory textTextureFactory, UnityEngine.Object man, GraphForBillboardVertexes graphController, Texture2D selectFrame, bool isDec) { var picked = (Texture2D)man; var name = textTextureFactory.MakeTextTexture(picked.name.Replace(',', '\n').Replace(' ', '\n').Replace("\n\n", "\n"), true); const float scale = 15f; var resizedTexture = Texture2DExtension.ResizeTexture(picked, name.width, picked.height / picked.width * name.width); var image1 = new PositionedImage[2] { (resizedTexture, new Vector2Int(0, name.height)), (name, new Vector2Int(0, 0)) }; var image2 = new PositionedImage[1] { (selectFrame, Vector2Int.zero) }; var width = Math.Max(resizedTexture.width, name.width); var height = resizedTexture.height + name.height; var comIm1 = new CombinedImages(image1, width, height, initTransparentBackground: true); var billPar1 = new BillboardParameters[1] { new BillboardParameters(Texture2DExtension.CombineTextures(comIm1), Vector4.zero, new Vector2(scale, height * scale / width), 0.1f, false, Color.white) }; var comIm2 = new CombinedImages(image2, selectFrame.width, selectFrame.height, initTransparentBackground: true); var value = Mathf.Max(scale + 3.5f, height * scale / width + 3.5f); var billPar2 = new BillboardParameters(Texture2DExtension.CombineTextures(comIm2), Vector4.zero, new Vector2(value, value), 0.1f, true, Color.red); var verPar = new SelectableVertexParameters(billPar1, billPar2); var vertex = graphController.SpawnVertex <DecembristVertex, SelectableVertexParameters>(verPar); vertex.IsDec = isDec; vertex.Name = picked.name; return(vertex); }
public void CreateVertex() { var texture = _defaultTexture; if (!string.IsNullOrEmpty(_imagePath.text)) { texture = Texture2D.whiteTexture; using var fs = new FileStream(_imagePath.text, FileMode.Open); var bytes = new byte[fs.Length]; fs.Read(bytes, 0, bytes.Length); texture.LoadImage(bytes); } var customFont = FontsGenerator.GetOrCreateFont("Broadway", 32); var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 200, 200); selectFrame.name = "SelectFrame"; var TextTextureFactory = new TextTextureFactory(customFont, 0); var imageParameters = new BillboardParameters(texture, scale: _scale.Vector * 3f); var selectFrameParameters = new BillboardParameters(selectFrame, scale: _scale.Vector * 6f, isMonoColor: true, useCache: false); var text = TextTextureFactory.MakeTextTexture(_name.text, true); float scale = 10; var textParameters = new BillboardParameters(text, new Vector4(0, -Mathf.Max(_scale.Vector.x, _scale.Vector.y) - 10, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale)); var currentVertex = AbstractGraph.GetComponent <AbstractGraph>().SpawnVertex <SelectableVertex, SelectableVertexParameters>( new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, _positon.Vector)); }
public GraphForBillboardVertexes CreateGraph() { var graph = new GameObject("Graph"); var graphControler = graph.AddComponent <GraphForBillboardVertexes>(); Graphs.Add(graphControler); graphControler.SetupParams(new GraphParameters(new Vector3(0, -20), "Test")); var customFont = FontsGenerator.GetOrCreateFont("Broadway", 32); var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 200, 200); mainTexture.name = "Target"; var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 200, 200); selectFrame.name = "SelectFrame"; var textTextureFactory = new TextTextureFactory(customFont, 0); var baseScale = Vector2.one; var imageParameters = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true); var selectFrameParameters = new BillboardParameters(selectFrame, scale: baseScale * 6f, isMonoColor: true, useCache: false); var edgeParameters = new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.white, true), new SpringParameters(1, 10)); BillboardVertex?vertex = null; for (var i = 0; i < 1000; ++i) { var text = textTextureFactory.MakeTextTexture($"Vertex{i}", true); const float scale = 10; var textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale)); var currentVertex = graphControler.SpawnVertex <SelectableVertex, SelectableVertexParameters>( new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, new Vector3(i % 32 * 10, i / 32 * 10))); if (vertex != null) { currentVertex.Link <StretchableEdge, StretchableEdgeParameters>(vertex, edgeParameters); } vertex = currentVertex; } return(graphControler); }
public Matrix GetBoneMatrix(uint time, short bone, BillboardParameters billboard) { lock (mBones) { if (bone < 0 || bone >= mBones.Length) { return(Matrix.Identity); } if (mBoneCalculated[bone]) { return(BoneMatrices[bone]); } mBones[bone].UpdateMatrix(time, mAnimationId, out BoneMatrices[bone], this, billboard); mBoneCalculated[bone] = true; return(BoneMatrices[bone]); } }
public Matrix GetBoneMatrix(int bone, BillboardParameters billboard) { uint time = (uint)(Environment.TickCount - mBoneStart); return(GetBoneMatrix(time, (short)bone, billboard)); }
public void Update(BillboardParameters billboard) { if (mHasAnimation == false) { return; } var now = Environment.TickCount; var time = (uint)(now - mBoneStart); if (time >= mAnimation.length && ((mAnimation.flags & 0x20) == 0 || mAnimation.nextAnimation >= 0)) { if (mIsFinished) { if (mAnimation.nextAnimation < 0 || mAnimation.nextAnimation >= mAnimations.Length) { return; } mIsFinished = false; mBoneStart = now; mAnimationId = mAnimation.nextAnimation; mAnimation = mAnimations[mAnimationId]; return; } time = mAnimation.length; mIsFinished = true; } else { if (mAnimation.length > 0) { time %= mAnimation.length; } } for (var i = 0; i < mBoneCalculated.Length; ++i) { mBoneCalculated[i] = false; } lock (mBones) { for (var i = 0; i < mBones.Length; ++i) { if (mBoneCalculated[i]) { continue; } mBones[i].UpdateMatrix(time, mAnimationId, out BoneMatrices[i], this, billboard); mBoneCalculated[i] = true; } } time = (uint)(now - mUvStart); lock (mUvAnimations) { for (var i = 0; i < mUvAnimations.Length; ++i) { mUvAnimations[i].UpdateMatrix(0, time, out UvMatrices[i]); } } time = (uint)(now - mTexColorStart); lock (mTexColorAnimations) { for (var i = 0; i < mTexColorAnimations.Length; ++i) { mTexColorAnimations[i].UpdateValue(0, time, out Colors[i]); } } time = (uint)(now - mAlphaStart); lock (mAlphaAnimations) { for (var i = 0; i < mAlphaAnimations.Length; ++i) { mAlphaAnimations[i].UpdateValue(0, time, out Transparencies[i]); } } mIsDirty = true; }
public override void InitTask() { var graph = new GameObject("Graph"); var graphControler = graph.AddComponent <GraphForBillboardVertexes>(); Graphs.Add(graphControler); graphControler.SetupParams(new GraphParameters(new Vector3(0, -20), "Test")); var customFont = FontsGenerator.GetOrCreateFont("Arial", 32); var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800); mainTexture.name = "Target"; var dotTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 800, 800); mainTexture.name = "Dot"; var selectFrame = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_selectFrameTexture), 800, 800); selectFrame.name = "SelectFrame"; var textTextureFactory = new TextTextureFactory(customFont, 0); var baseScale = Vector2.one; var imageParameters = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true); var selectFrameParameters = new BillboardParameters(selectFrame, scale: baseScale * 6f, isMonoColor: true, useCache: false); var text = textTextureFactory.MakeTextTexture($"Select Me", true); const float scale = 10; var textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white); _selectableVertex = graphControler.SpawnVertex <SelectableVertex, SelectableVertexParameters>( new SelectableVertexParameters(new[] { imageParameters, textParameters }, selectFrameParameters, new Vector3(-20, 20))); var dotImageParameters = new BillboardParameters(mainTexture, scale: baseScale * 3f, useCache: true); text = textTextureFactory.MakeTextTexture($"Dot 1", true); textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white); _dot1 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>( new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(0, 20))); text = textTextureFactory.MakeTextTexture($"Dot 2", true); textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white); _dot2 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>( new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(20, 20))); text = textTextureFactory.MakeTextTexture($"Move me", true); textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white); _moveVertex = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>( new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(30, 20, -10))); text = textTextureFactory.MakeTextTexture($"Click me", true); textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale), isMonoColor: true, monoColor: Color.white); var clickVeretex = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>( new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-50, 20, -10))); var snowPref = Resources.Load <GameObject>(@"Prefabs\Snowflake"); clickVeretex.gameObject.AddComponent <Button3D>().Action = (g) => { _clickCount++; Destroy(Instantiate(snowPref, clickVeretex.transform.position, Quaternion.identity), 2); }; var colors = new List <Color>(7) { new Color(1f, 0f, 0f), new Color(1f, 127f / 255f, 0f), new Color(1f, 1f, 0f), new Color(0f, 1f, 0f), new Color(0f, 0f, 1f), new Color(75f / 255f, 0f, 130f / 255f), new Color(143f, 0f, 1f), }; var edgeTypes = new List <(Type type, EdgeParameters parameters)>(1) { (typeof(StretchableEdge), new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.white), new SpringParameters(1, 10))) }; var player = CreatePlayer(); player.SetupParams(new PlayerParameters(Vector3.zero, Vector3.zero, SceneParametersContainer.PlayerSpeed, 20, isVR: SceneParametersContainer.IsVR, new ToolConfig[4] { new ToolConfig(typeof(SelectItemTool), new SelectItemToolParams(colors)), new ToolConfig(typeof(GrabItemTool), new GrabItemToolParams()), new ToolConfig(typeof(EdgeCreaterTool), new EdgeCreaterToolParams(edgeTypes)), new ToolConfig(typeof(ClickTool), new ClickToolParams()) })); }
public override void InitTask() { var player = CreatePlayer(); var toolConfig = new ToolConfig(typeof(ClickTool), new ClickToolParams()); player.SetupParams(new PlayerParameters(new Vector3(0, 0, -50), Vector3.zero, SceneParametersContainer.PlayerSpeed, sceneInfo: "Hub scene", isVR: SceneParametersContainer.IsVR, toolConfigs: new[] { toolConfig })); //ToDo : Replace with auto generation var customFont = FontsGenerator.GetOrCreateFont("Arial", 128); var textTextureFactory = new TextTextureFactory(customFont, 0); { var graph = new GameObject("Tutorial tasks"); var graphControler = graph.AddComponent <GraphForBillboardVertexes>(); graphControler.ColliderEnable = false; Graphs.Add(graphControler); var baseScale = Vector2.one; graphControler.SetupParams(new GraphParameters(new Vector3(-20, 0, 0), "Tutorial tasks")); var text = textTextureFactory.MakeTextTexture("Tools test", true); var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 400, 400); var imageParameters = new BillboardParameters(mainTexture, Vector4.zero, new Vector2(9, 2), useCache: true); var textParameters = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), useCache: false, isMonoColor: true, monoColor: Color.white); var vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-30, 18, 0)); var toolsTest = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters); toolsTest.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <ToolTestTasks>(); text = textTextureFactory.MakeTextTexture("Movement test", true); textParameters = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false); vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(-20, 9, 0)); var movementTest = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters); movementTest.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <MovementTestTask>(); movementTest.Link <StretchableEdge, StretchableEdgeParameters>(toolsTest, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); } { var graph = new GameObject("Beautiful scenes"); var graphControler = graph.AddComponent <GraphForBillboardVertexes>(); graphControler.ColliderEnable = false; Graphs.Add(graphControler); var baseScale = Vector2.one; graphControler.SetupParams(new GraphParameters(new Vector3(20, 0, 0), "Beautiful scenes")); var text = textTextureFactory.MakeTextTexture("Plants Kingdom", true); var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 400, 400); var imageParameters = new BillboardParameters(mainTexture, Vector4.zero, new Vector2(9, 2), useCache: true); var textParameters = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), useCache: false, isMonoColor: true, monoColor: Color.white); var vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(10, 10, 0)); var v1 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters); v1.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <PlantsKingdom>(); text = textTextureFactory.MakeTextTexture("Social graph 1", true); textParameters = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false); vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(30, 19, 0)); var v2 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters); v2.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <OneGroupEnemyAndFriendsScene>(); text = textTextureFactory.MakeTextTexture("Social graph 2", true); textParameters = new BillboardParameters(text, Vector4.zero, new Vector2(4, 0.4f), isMonoColor: true, monoColor: Color.white, useCache: false); vertexParameters = new BillboardVertexParameters(new[] { imageParameters, textParameters }, new Vector3(20, 28, 0)); var v3 = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(vertexParameters); v3.gameObject.AddComponent <Button3D>().Action = (gameObject) => SceneLoader.Instance.LoadScene <MultyGroupFriendsScene>(); v1.Link <StretchableEdge, StretchableEdgeParameters>(v2, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); v2.Link <StretchableEdge, StretchableEdgeParameters>(v1, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); v1.Link <StretchableEdge, StretchableEdgeParameters>(v3, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); v3.Link <StretchableEdge, StretchableEdgeParameters>(v1, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); v2.Link <StretchableEdge, StretchableEdgeParameters>(v3, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); v3.Link <StretchableEdge, StretchableEdgeParameters>(v2, new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.green), new SpringParameters(1, 5))); } }
public GraphForBillboardVertexes CreateGraph() { var graph = new GameObject("Graph"); var graphControler = graph.AddComponent <GraphForBillboardVertexes>(); graph.AddComponent <Button3D>().Action = (g) => graphControler.StartForceBasedLayout(1000); Graphs.Add(graphControler); graphControler.SetupParams(new GraphParameters(new Vector3(-69, -15, -30), "Click me")); var customFont = Resources.Load <Font>(_fontPath); var mainTexture = Texture2DExtension.ResizeTexture(Resources.Load <Texture2D>(_mainTexture), 200, 200); mainTexture.name = "Target"; var textTextureFactory = new TextTextureFactory(customFont, 32); var resizedTetxure = Texture2DExtension.ResizeTexture(mainTexture, 200, 200); var baseScale = Vector2.one; var imageParameters = new BillboardParameters(resizedTetxure, scale: baseScale * 3f, useCache: true); var stretchableEdgeMaterialParameters = new StretchableEdgeMaterialParameters(Color.white, true); var edgeParameters = new StretchableEdgeParameters(new StretchableEdgeMaterialParameters(Color.yellow, true), new SpringParameters(1, 5)); var coordinates = new Vector3[26] { new Vector3(-91.62799f, -2.3942585f, -43.161083f), new Vector3(-91.138885f, -3.3022366f, -17.54464f), new Vector3(-68.31055f, -9.711845f, -29.303394f), new Vector3(-71.31007f, -2.7437487f, -56.661026f), new Vector3(-45.411583f, -2.9353018f, -42.584347f), new Vector3(-47.30028f, -3.1969986f, -22.738922f), new Vector3(-64.77525f, -3.20299f, -2.5527115f), new Vector3(-49.3282f, 5.356124f, -2.7157516f), new Vector3(-37.920048f, 5.7275085f, -30.361862f), new Vector3(-52.707493f, 8.093277f, -57.873806f), new Vector3(-88.294876f, 7.605483f, -57.47967f), new Vector3(-81.45683f, 6.2511196f, -1.4397621f), new Vector3(-105.84165f, 6.152034f, -28.007107f), new Vector3(-99.75531f, 16.45427f, -11.093414f), new Vector3(-38.78393f, 16.683071f, -14.812604f), new Vector3(-40.808224f, 15.8126135f, -44.379215f), new Vector3(-73.01358f, 14.908555f, -55.7931f), new Vector3(-68.13217f, 15.000669f, 1.9544525f), new Vector3(-83.44349f, 25.460217f, -8.76181f), new Vector3(-59.4664f, 24.522339f, -10.350107f), new Vector3(-47.37295f, 23.873238f, -31.69215f), new Vector3(-92.189575f, 24.484436f, -28.520731f), new Vector3(-81.99469f, 23.73766f, -46.882977f), new Vector3(-56.52922f, 23.624348f, -43.66665f), new Vector3(-72.91645f, 30.9808f, -30.28012f), new Vector3(-93f, 20f, -42f), }; var currentVertex = new BillboardVertex[coordinates.Length]; for (var i = 0; i < coordinates.Length; ++i) { currentVertex[i] = graphControler.SpawnVertex <BillboardVertex, BillboardVertexParameters>(new BillboardVertexParameters(new[] { imageParameters }, coordinates[i])); } currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[2], edgeParameters); currentVertex[0].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters); currentVertex[1].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters); currentVertex[3].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters); currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters); currentVertex[4].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters); currentVertex[5].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters); currentVertex[6].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters); currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters); currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters); currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters); currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters); currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters); currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters); currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters); currentVertex[9].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters); currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[3], edgeParameters); currentVertex[10].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters); currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[0], edgeParameters); currentVertex[12].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters); currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[1], edgeParameters); currentVertex[11].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters); currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[6], edgeParameters); currentVertex[7].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters); currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[5], edgeParameters); currentVertex[8].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[4], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters); currentVertex[24].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters); currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[19], edgeParameters); currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[18], edgeParameters); currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters); currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters); currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[23], edgeParameters); currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[20], edgeParameters); currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters); currentVertex[18].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters); currentVertex[21].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters); currentVertex[22].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters); currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters); currentVertex[23].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters); currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters); currentVertex[20].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters); currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters); currentVertex[19].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters); currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters); currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[15], edgeParameters); currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[14], edgeParameters); currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[17], edgeParameters); currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters); currentVertex[15].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters); currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[8], edgeParameters); currentVertex[14].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters); currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[7], edgeParameters); currentVertex[17].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters); currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[11], edgeParameters); currentVertex[13].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters); currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters); currentVertex[16].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[9], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[10], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[12], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[13], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[21], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[22], edgeParameters); currentVertex[25].Link <StretchableEdge, StretchableEdgeParameters>(currentVertex[16], edgeParameters); var text = textTextureFactory.MakeTextTexture($"Click me", true); const float scale = 20; var textParameters = new BillboardParameters(text, new Vector4(0, -5, 0, 0), new Vector2(scale, text.height * 1.0f / text.width * scale)); return(graphControler); }