|
|
|
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, TimeStop = 0;
|
|
|
|
public bool ActionExisted = false, ActionMoving = false;
|
|
|
|
Queue<Operation> AllOperation = new Queue<Operation>();
|
|
|
|
|
|
|
|
// 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<NewTextModify>();
|
|
|
|
Door[i] = Boxes[i].gameObject.transform.GetChild(0).GetChild(0).GetComponent<DoorAnimation>();
|
|
|
|
Label[i].Init(i);
|
|
|
|
}
|
|
|
|
UpdateValue(23, 10);
|
|
|
|
}
|
|
|
|
|
|
|
|
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(0, 100, 3));
|
|
|
|
AllOperation.Enqueue(Cope(idx, 0, 2));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Update is called once per frame
|
|
|
|
void Update()
|
|
|
|
{
|
|
|
|
if(TimeStop > 0) {
|
|
|
|
TimeStop -= 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
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 if(Current.op == 3) {
|
|
|
|
TimeStop = Current.val;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ActionExisted = true;
|
|
|
|
IndexChange = Current.idx;
|
|
|
|
ActionChange = Current.op;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|