void InitBlock(LiveNote note1, LiveNote note2) { if (note1.x > note2.x) { var temp = note2; note2 = note1; note1 = temp; } if (leftSide == Side.Right) { UseLeft(Heading.Right, note1); leftSide = Side.Left; } else { UseLeft(leftHeading, note1); } if (rightSide == Side.Left) { UseRight(Heading.Left, note2); rightSide = Side.Right; } else { UseRight(rightHeading, note2); } }
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; }
void UseRight(Heading heading, LiveNote note) { heading = GetDerivedHeading(heading); CreateBlock(Side.Right, heading, note); rightHeading = GetEndHeading(heading); }
void UseLeft(Heading heading, LiveNote note) { heading = GetDerivedHeading(heading); CreateBlock(Side.Left, heading, note); leftHeading = GetEndHeading(heading); }
void InitBlock(LiveNote note) { float lane = note.x; const float middle = 0.2f; // 1 3 6 8 // [4] // 0 2 5 7 if (lane < -middle) // left side { if (rightSide == Side.Left) { UseRight(rightHeading, note); } else if (leftSide == Side.Left) { UseLeft(leftHeading, note); } else // no hand on left, use left hand { UseLeft(Heading.Right, note); leftSide = Side.Left; } } else if (lane > middle) // right side { if (leftSide == Side.Right) { UseLeft(leftHeading, note); } else if (rightSide == Side.Right) { UseRight(rightHeading, note); } else // no hand on right, use right hand { UseRight(Heading.Left, note); rightSide = Side.Right; } } else // middle { if (leftSide == Side.Right) // left hand on right { UseLeft(Heading.Right, note); leftSide = Side.Left; } else if (rightSide == Side.Left) // right hand on left { UseRight(Heading.Left, note); rightSide = Side.Right; } else // no hand is inversed, choose at random { if (rand.NextDouble() < 0.5) { UseLeft(Heading.Left, note); leftSide = Side.Right; } else { UseRight(Heading.Right, note); rightSide = Side.Left; } } } }