You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
7.2 KiB
291 lines
7.2 KiB
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
using LzFramework;
|
|
|
|
namespace DisComputer
|
|
{
|
|
|
|
/// <summary>
|
|
/// 指令集视图
|
|
/// </summary>
|
|
public class ProgressView : MonoBehaviour
|
|
{
|
|
[SerializeField]
|
|
private GameObject actItemGo;
|
|
|
|
//垂直间距
|
|
[SerializeField]
|
|
private float v_offset = 55;
|
|
|
|
private Dictionary<string,ActCommandItem> actCommandItems = new Dictionary<string, ActCommandItem>();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 初始化
|
|
/// </summary>
|
|
public void InitActItems()
|
|
{
|
|
this.gameObject.SetActive(true);
|
|
CommandData data = VonNeumann.data;
|
|
List<int> 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<ActCommandItem>();
|
|
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<int> 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<ActCommandItem>();
|
|
actCommand.SetBtn(val, OnClickWrong);
|
|
v_index++;
|
|
limit_index--;
|
|
}
|
|
if (limit_index <= 0)
|
|
break;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 清理命令指令
|
|
/// </summary>
|
|
public void ClearItem()
|
|
{
|
|
actCommandItems.Clear();
|
|
ActCommandItem[] childGos = this.transform.GetComponentsInChildren<ActCommandItem>();
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|