void CreateBlock(Side hand, Heading heading, LiveNote note) { // print("create " + hand + " " + heading); LiveBlock block = null; var node = deadBlockList.First; while (node != null) { var next = node.Next; var deadBlock = node.Value; if (deadBlock.startTime + recycleInterval < MusicPlayer.LiveTime) // Ready to be revived { block = deadBlock; deadBlockList.Remove(node); break; } node = next; } if (block == null) { node = inactiveBlockList.First; if (node != null) { block = node.Value; block.gameObject.SetActive(true); inactiveBlockList.RemoveFirst(); } } if (block == null) { var go = Instantiate(blockPrototype, transform); block = go.GetComponent <LiveBlock>(); } block.Init(hand); block.heading = heading; block.createTime = MusicPlayer.LiveTime; block.startTime = note.startTime; block.isParallel = note.isPara; block.isLong = note.isSpecial; block.startX = note.x; block.startY = note.y + 1; block.x = note.x; block.y = note.y; block.transform.Rotate(HeadingToRotation(heading), 0, 0); block.canvas.rotation = Quaternion.identity; // block.uiDirectionTrans.localEulerAngles = new Vector3(0, 0, -HeadingToRotation(heading)); liveBlockList.AddLast(block); total += 1; }