using System.Collections; using System.Collections.Generic; using UnityEngine; using LzFramework; namespace DisComputer { /// /// 指令集视图 /// public class ProgressView : MonoBehaviour { [SerializeField] private GameObject actItemGo; //垂直间距 [SerializeField] private float v_offset = 55; private Dictionary actCommandItems = new Dictionary(); // Start is called before the first frame update void Start() { } /// /// 初始化 /// public void InitActItems() { this.gameObject.SetActive(true); CommandData data = VonNeumann.data; List randomList = FuncTools.CreateRanArrVal(data.ActCommandList.Count, data.ActCommandList.Count); int v_index = 0; for(int i = 0;i < data.ActCommandList.Count; i++) { string val = data.ActCommandList[randomList[i]]; if (!actCommandItems.ContainsKey(val)) { GameObject tempGo = Instantiate(actItemGo, transform); tempGo.SetActive(true); tempGo.transform.localPosition = new Vector3(actItemGo.transform.localPosition.x, actItemGo.transform.localPosition.y - v_offset * v_index, 0); ActCommandItem actCommand = tempGo.GetComponent(); if (val == "mov3") { actCommand.SetBtn(val, OnClickMov3); } else if (val == "add") { actCommand.SetBtn(val, OnClickAdd); } else if (val == "out") { actCommand.SetBtn(val, OnClickOut); } else if (val == "halt") { actCommand.SetBtn(val, OnClickHalt); } else if (val == "div") { actCommand.SetBtn(val, OnClickDiv); } else if (val == "mul") { actCommand.SetBtn(val, OnClickMul); } else if (val == "sub") { actCommand.SetBtn(val, OnClickSub); } else if (val == "in") { actCommand.SetBtn(val, OnClickIn); } actCommandItems.Add(val, actCommand); v_index++; } } List jamList = FuncTools.CreateRanArrVal(data.JamCommandList.Count, data.JamCommandList.Count); int limit_index = 3; for(int i = 0;i < jamList.Count; i++) { string val = data.JamCommandList[jamList[i]]; if (!actCommandItems.ContainsKey(val)) { GameObject tempGo = Instantiate(actItemGo, transform); tempGo.SetActive(true); tempGo.transform.localPosition = new Vector3(actItemGo.transform.localPosition.x, actItemGo.transform.localPosition.y - v_offset * v_index, 0); ActCommandItem actCommand = tempGo.GetComponent(); actCommand.SetBtn(val, OnClickWrong); v_index++; limit_index--; } if (limit_index <= 0) break; } } /// /// 清理命令指令 /// public void ClearItem() { actCommandItems.Clear(); ActCommandItem[] childGos = this.transform.GetComponentsInChildren(); for(int i = 0;i< childGos.Length; i++) { Destroy(childGos[i].gameObject); } this.gameObject.SetActive(false); } void OnClickMov3() { if (JudgeRight("mov3")) { int num = VonNeumann.CommandIndex == 0 ? VonNeumann.data.num01 : VonNeumann.data.num02; VonNeumann.data.ActName = "mov3 "+ (VonNeumann.CommandIndex + 1).ToString()+" "+ num.ToString(); VonNeumannControll.Instance.OnMov3(); } else { } } //加法 void OnClickAdd() { if (JudgeRight("add")) { VonNeumann.data.ActName = "add 1 2"; VonNeumannControll.Instance.OnAdd(); } else { } } //减法 void OnClickSub() { if (JudgeRight("sub")) { VonNeumann.data.ActName = "sub 1 2"; VonNeumannControll.Instance.OnSub(); } else { } } //乘法 void OnClickMul() { if (JudgeRight("mul")) { VonNeumann.data.ActName = "mul 1 2"; VonNeumannControll.Instance.OnMul(); } else { } } //除法 void OnClickDiv() { if (JudgeRight("div")) { VonNeumann.data.ActName = "div 1 2"; VonNeumannControll.Instance.OnDiv(); } else { } } //终止 void OnClickHalt() { if (JudgeRight("halt")) { VonNeumann.data.ActName = "halt"; VonNeumannControll.Instance.OnHalt(); } else { } } //输入 void OnClickIn() { if (JudgeRight("in")) { VonNeumann.data.ActName = "in"; VonNeumannControll.Instance.OnIn(); } else { } } //点击错误 void OnClickWrong() { if (JudgeRight("Wrong")) { } } //输出 void OnClickOut() { if (JudgeRight("out")) { VonNeumann.data.ActName = "out 1"; VonNeumannControll.Instance.OnOut(); } else { } } bool JudgeRight(string key) { if (VonNeumann.isRunning) { MessageContainer.SendMessage("指令正在运行中,请等待", this, MsgName.TipVonneumannPoint); return false; } if (string.Equals(VonNeumann.data.ActCommandList[VonNeumann.CommandIndex],key)) return true; MessageContainer.SendMessage("你当前选择步骤有误!",this,MsgName.TipVonneumannPoint); return false; } } }