using System.Collections; using System.Collections.Generic; using UnityEngine; public class Operation { public int idx, val, op; } public class Initalize : MonoBehaviour { public GameObject AllBoxes; public GameObject[] Boxes; public NewTextModify[] Label; public DoorAnimation[] Door; public int IndexChange = -1, ActionChange = -1; public bool ActionExisted = false, ActionMoving = false; Queue AllOperation = new Queue(); // Start is called before the first frame update void Start() { for(int i = 0; i < 100; ++i) { Boxes[i] = AllBoxes.gameObject.transform.GetChild(i).gameObject; Label[i] = Boxes[i].GetComponent(); Door[i] = Boxes[i].gameObject.transform.GetChild(0).GetChild(0).GetComponent(); Label[i].Init(i); } } public Operation Cope(int idx, int val, int op) { var Op = new Operation(); Op.idx = idx; Op.val = val; Op.op = op; return Op; } void UpdateValue(int idx, int value) { AllOperation.Enqueue(Cope(idx, 0, 1)); AllOperation.Enqueue(Cope(idx, value, 0)); AllOperation.Enqueue(Cope(idx, 0, 2)); } // Update is called once per frame void Update() { if(ActionExisted) { if(!Door[IndexChange].DoorIsMoving) { if(ActionChange == 1) Door[IndexChange].OpenDoor(); else Door[IndexChange].CloseDoor(); } if(Door[IndexChange].TimeRotation == 900) { ActionExisted = false; IndexChange = -1; ActionChange = -1; } } else { if(AllOperation.Count == 0) return; var Current = AllOperation.Peek(); AllOperation.Dequeue(); if(Current.op == 0) { Label[Current.idx].ChangeValue(Current.val); } else { ActionExisted = true; IndexChange = Current.idx; ActionChange = Current.op; } } } }