using Microsoft.MixedReality.Toolkit.Utilities; using System; using System.Collections; using System.Collections.Generic; using System.IO.Pipes; using TMPro; using Unity.VisualScripting; using UnityEngine; public class GraphManager : BackButton { [SerializeField] GameObject optionMenuScreen; [SerializeField] List<TextMeshPro> graphKindTexts; [SerializeField] List<TextMeshPro> graphFormulaTexts; [SerializeField] CrossManager crossManager; [SerializeField] GameObject errorWindow; public GraphData[] graphDatas; private void Start() { graphDatas = new GraphData[3]; } public void pressedButton(int i) { if (graphDatas[i] != null) { if (graphDatas[i].isDataListInputted() == true) { optionMenuScreen.GetComponent<GraphOptionMenu>().Initialize(graphDatas[i], i); optionMenuScreen.SetActive(true); } } } public void addNewGraphData(GraphData graphData, int index) { if (index == -1) { int num = 0; foreach (GraphData gd in graphDatas) { if (gd != null) { if (gd.isDataListInputted() == true) { num++; } } } if (num < 3)//0,1,2なら { setGraphInfomation(num, graphData); } else { errorWindow.GetComponent<ErrorWindow>().displayErrorMessage("もう追加できません!!"); base.pressedBackButton(); } } else { setGraphInfomation(index, graphData); } } public void removeGraphData(int index) { switch (index) { case 0: Destroy(graphDatas[0].getgraphObject()); graphDatas[0] = new GraphData(); graphKindTexts[0].text = " "; graphFormulaTexts[0].text = " "; if (graphDatas[1] != null) { if (graphDatas[1].isDataListInputted() == true) { graphDatas[0] = graphDatas[1]; graphKindTexts[0].text = graphKindTexts[1].text; graphFormulaTexts[0].text = graphFormulaTexts[1].text; if (graphDatas[2] != null) { if (graphDatas[2].isDataListInputted() == true) { graphDatas[1] = graphDatas[2]; graphKindTexts[1].text = graphKindTexts[2].text; graphFormulaTexts[1].text = graphFormulaTexts[2].text; graphDatas[2] = new GraphData(); graphKindTexts[2].text = " "; graphFormulaTexts[2].text = " "; } } else { graphDatas[1] = new GraphData(); graphKindTexts[1].text = " "; graphFormulaTexts[1].text = " "; } } } break; case 1: Destroy(graphDatas[1].getgraphObject()); graphDatas[1] = new GraphData(); graphKindTexts[1].text = " "; graphFormulaTexts[1].text = " "; if (graphDatas[2] != null) { if (graphDatas[2].isDataListInputted() == true) { graphDatas[1] = graphDatas[2]; graphKindTexts[1].text = graphKindTexts[2].text; graphFormulaTexts[1].text = graphFormulaTexts[2].text; graphDatas[2] = new GraphData(); graphKindTexts[2].text = " "; graphFormulaTexts[2].text = " "; } } break; case 2: Destroy(graphDatas[2].getgraphObject()); graphDatas[2] = new GraphData(); graphKindTexts[2].text = " "; graphFormulaTexts[2].text = " "; break; } crossManager.crossChecker(graphDatas); } private void setGraphInfomation(int index, GraphData data) { int graphNum = data.getGraphNum(); if (index > 2) { return; } switch (graphNum) { case 0: //直線 Vector3 p = data.getLinePassingPoint(); Vector3 d = data.getLineDirection(); graphKindTexts[index].text = "直線"; graphFormulaTexts[index].text = "点(" + p.x + " ," + p.y + " ," + p.z + ")を通る" + "\nベクトル(" + d.x + " ," + d.y + " ," + d.z+ ")\nに平行な直線"; break; case 1: //平面 Vector4 c = data.getPlaneCoefficient(); graphKindTexts[index].text = "平面"; graphFormulaTexts[index].text = c.x + "x "; if(Mathf.Sign(c.y) == -1) { graphFormulaTexts[index].text += c.y + "y "; } else { graphFormulaTexts[index].text += "+" + c.y + "y "; } if (Mathf.Sign(c.z) == -1) { graphFormulaTexts[index].text += c.z + "z "; } else { graphFormulaTexts[index].text += "+" + c.z + "z "; } if (Mathf.Sign(c.w) == -1) { graphFormulaTexts[index].text += c.w + " = 0"; } else { graphFormulaTexts[index].text += "+" + c.w + " = 0"; } break; case 2: //その他 break; } data.setDataListInputted(true); graphDatas[index] = data; crossManager.crossChecker(graphDatas); } public GraphData getGraphData(int i) { return graphDatas[i]; } public GraphData[] getAllGraphData() { return graphDatas; } }