public void Insert(int index, Block item) { if (item is null) { ThrowHelper.ArgumentNullException_item(); } if (item.Parent != null) { ThrowHelper.ArgumentException("Cannot add this block as it as already attached to another container (block.Parent != null)"); } if ((uint)index > (uint)Count) { ThrowHelper.ArgumentOutOfRangeException_index(); } if (Count == _children.Length) { Grow(); } if (index < Count) { Array.Copy(_children, index, _children, index + 1, Count - index); } _children[index] = new BlockWrapper(item); Count++; item.Parent = this; }
public override void Start(PlayerMachine machine) { KeyInputController = machine.InternalObject.GetComponent <KeyInputController>(); foreach (var block in machine.SimulationBlocks) { NameIndex.Add(block, block.Prefab.Name); GuidIndex.Add(block, block.Guid.ToString()); ClassNameIndex.Add(block, BlockWrapper.GetClassNames(block)); } }
void generateBlocks(int channel) { if (blocksInPool[channel].Count > 0) { BlockWrapper tmpBlockWrapper = blocksInPool[channel].Dequeue(); blocksInChannel[channel].Enqueue(tmpBlockWrapper); tmpBlockWrapper.blockObj.transform.position = startingPoint[channel]; scoreObj.SendMessage("statChange", 0, SendMessageOptions.RequireReceiver); } }
private void Grow() { if (_children.Length == 0) { _children = new BlockWrapper[4]; } else { Debug.Assert(_children[_children.Length - 1].Block is not null); var newArray = new BlockWrapper[_children.Length * 2]; Array.Copy(_children, 0, newArray, 0, Count); _children = newArray; } }
void initiateBlocks(int num) { for (int i = 0; i < channelNum; i++) { blocksInChannel [i] = new Queue <BlockWrapper> (); blocksInPool [i] = new Queue <BlockWrapper> (); GameObject tmpSuperBlockObj = Instantiate(superNote, new Vector3(100, 0, 0), Quaternion.identity) as GameObject; superBlockClone = new BlockWrapper(tmpSuperBlockObj); for (int j = 0; j < blockNumPerChannel; j++) { GameObject tmpObj = Instantiate(note, new Vector3(100, 0, 0), Quaternion.identity) as GameObject; blockClone [i * blockNumPerChannel + j] = new BlockWrapper(tmpObj); blocksInPool [i].Enqueue(blockClone [i * blockNumPerChannel + j]); } } }
public Block this[int index] { [MethodImpl(MethodImplOptions.AggressiveInlining)] get { var array = _children; if ((uint)index >= (uint)array.Length || index >= Count) { ThrowHelper.ThrowIndexOutOfRangeException(); return(null); } return(array[index].Block); } set { if ((uint)index >= (uint)Count) { ThrowHelper.ThrowIndexOutOfRangeException(); } if (value is null) { ThrowHelper.ArgumentNullException_item(); } if (value.Parent != null) { ThrowHelper.ArgumentException("Cannot add this block as it as already attached to another container (block.Parent != null)"); } var existingChild = _children[index].Block; if (existingChild != null) { existingChild.Parent = null; } value.Parent = this; _children[index] = new BlockWrapper(value); } }
public void Add(Block item) { if (item is null) { ThrowHelper.ArgumentNullException_item(); } if (item.Parent != null) { ThrowHelper.ArgumentException("Cannot add this block as it as already attached to another container (block.Parent != null)"); } if (Count == _children.Length) { Grow(); } _children[Count] = new BlockWrapper(item); Count++; item.Parent = this; UpdateSpanEnd(item.Span.End); }
void Update() { #if UNITY_EDITOR if (Input.GetMouseButton(0) || Input.GetMouseButtonDown(0) || Input.GetMouseButtonUp(0)) { touchesOld = new GameObject[touchList.Count]; touchList.CopyTo(touchesOld); touchList.Clear(); Ray ray = myCamera.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(ray, out hit, touchInputMask)) { int choose = 0; GameObject recepient = hit.transform.gameObject; touchList.Add(recepient); if (recepient.name == "TouchZone0") { choose = 0; } else if (recepient.name == "TouchZone1") { choose = 1; } else if (recepient.name == "TouchZone2") { choose = 2; } else if (recepient.name == "TouchZone3") { choose = 3; } else { choose = 4; } int[] count = new int[channelNum]; if (Input.GetMouseButtonDown(0)) { recepient.SendMessage("onTouchDown", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchDown", hit.point, SendMessageOptions.DontRequireReceiver); // mouse click effect clickEff.transform.position = hit.point; clickEff.Play(); // deal with super note lock (PlaneController.mutex) { if (choose == PlaneController.superBlockPos) { BlockWrapper superBlockWrapper = PlaneController.superBlockClone; float tmpSuperBlockPos = planeObj[choose].transform.InverseTransformPoint( superBlockWrapper.blockObj.transform.position).z; if (tmpSuperBlockPos <= PlaneController.touchZoneLocalMin && tmpSuperBlockPos >= PlaneController.endingPointLocalMin) { // catch super note, get score superBlockWrapper.blockObj.transform.position = new Vector3(100, 0, 0); PlaneController.isSuperBlockOnPlane = false; PlaneController.isSuperBlockMove = false; scoreTextObj.SendMessage("statChange", 3, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("superNotePlus", SendMessageOptions.RequireReceiver); wordTextObj.SendMessage("wordTextDisplay", 2, SendMessageOptions.RequireReceiver); // super note effect clickEff.Stop(); getScoreEff.transform.position = hit.point; getScoreEff.Play(); ac.emitGreenCore(); } } } // deal with regular note if (PlaneController.blocksInChannel[choose].Count > 0) { lock (PlaneController.mutex) { foreach (BlockWrapper tmpBlockWrapper in PlaneController.blocksInChannel[choose]) { // get each block's current position float tmpPos = planeObj[choose].transform.InverseTransformPoint( tmpBlockWrapper.blockObj.transform.position).z; // get score if (tmpPos <= PlaneController.touchZoneLocalMin && tmpPos >= PlaneController.endingPointLocalMin) { PlaneController.blocksInPool[choose].Enqueue(tmpBlockWrapper); count[choose]++; tmpBlockWrapper.blockObj.transform.position = new Vector3(100, 0, 0); scoreTextObj.SendMessage("statChange", 2, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("comboChange", 1, SendMessageOptions.RequireReceiver); wordTextObj.SendMessage("wordTextDisplay", 1, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("scorePlus", SendMessageOptions.RequireReceiver); // mouse click & get score effect clickEff.Stop(); getScoreEff.transform.position = hit.point; getScoreEff.Play(); comboCount++; if (comboCount >= comboBonus && !hasChanged) { hasChanged = true; for (int i = 0; i < channelNum; i++) { planeObj[i].SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); touchObj[i].SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); } PlaneMaterialController.isHot = true; TouchZoneMaterialController.isHot = true; // enable the emission of note material note.SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); // change left & right plane animation ac.changePlaneAni(true); } // emit particles if (comboCount == comboBonus) // 20 { ac.particleEmit1(); } if (comboCount % 15 == 0) // 35 { ac.particleEmit(); } if (comboCount % 35 == 0) // 48 { ac.particleEmit2(); } } } while (count[choose]-- > 0) { PlaneController.blocksInChannel[choose].Dequeue(); } } } } if (Input.GetMouseButtonUp(0)) { recepient.SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); } if (Input.GetMouseButton(0)) { recepient.SendMessage("onTouchStay", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchStay", hit.point, SendMessageOptions.DontRequireReceiver); } } foreach (GameObject g in touchesOld) { if (!touchList.Contains(g)) { g.SendMessage("onTouchExit", hit.point, SendMessageOptions.DontRequireReceiver); } } } #endif #if UNITY_IPHONE if (Input.touchCount > 0) { touchesOld = new GameObject[touchList.Count]; touchList.CopyTo(touchesOld); touchList.Clear(); foreach (Touch touch in Input.touches) { Ray ray = myCamera.ScreenPointToRay(touch.position); if (Physics.Raycast(ray, out hit, touchInputMask)) { int choose = 0; GameObject recepient = hit.transform.gameObject; touchList.Add(recepient); if (recepient.name == "TouchZone" + "0") { choose = 0; } else if (recepient.name == "TouchZone1") { choose = 1; } else if (recepient.name == "TouchZone2") { choose = 2; } else if (recepient.name == "TouchZone3") { choose = 3; } else { choose = 4; } int[] count = new int[channelNum]; if (touch.phase == TouchPhase.Began) { recepient.SendMessage("onTouchDown", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchDown", hit.point, SendMessageOptions.DontRequireReceiver); // touch effect clickEff.transform.position = hit.point; clickEff.Play(); // deal with super note lock (PlaneController.mutex) { if (choose == PlaneController.superBlockPos) { BlockWrapper superBlockWrapper = PlaneController.superBlockClone; float tmpSuperBlockPos = planeObj[choose].transform.InverseTransformPoint( superBlockWrapper.blockObj.transform.position).z; if (tmpSuperBlockPos <= PlaneController.touchZoneLocalMin && tmpSuperBlockPos >= PlaneController.endingPointLocalMin) { // catch super note, get score superBlockWrapper.blockObj.transform.position = new Vector3(100, 0, 0); PlaneController.isSuperBlockOnPlane = false; PlaneController.isSuperBlockMove = false; scoreTextObj.SendMessage("statChange", 3, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("superNotePlus", SendMessageOptions.RequireReceiver); wordTextObj.SendMessage("wordTextDisplay", 2, SendMessageOptions.RequireReceiver); // super note effect clickEff.Stop(); getScoreEff.transform.position = hit.point; getScoreEff.Play(); ac.emitGreenCore(); } } } // deal with regular note if (PlaneController.blocksInChannel[choose].Count > 0) { lock (PlaneController.mutex) { foreach (BlockWrapper tmpBlockWrapper in PlaneController.blocksInChannel[choose]) { // get each block's current position float tmpPos = planeObj[choose].transform.InverseTransformPoint( tmpBlockWrapper.blockObj.transform.position).z; // get score if (tmpPos <= PlaneController.touchZoneLocalMin && tmpPos >= PlaneController.endingPointLocalMin) { PlaneController.blocksInPool[choose].Enqueue(tmpBlockWrapper); count[choose]++; tmpBlockWrapper.blockObj.transform.position = new Vector3(100, 0, 0); scoreTextObj.SendMessage("statChange", 2, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("comboChange", 1, SendMessageOptions.RequireReceiver); wordTextObj.SendMessage("wordTextDisplay", 1, SendMessageOptions.RequireReceiver); scoreTextObj.SendMessage("scorePlus", SendMessageOptions.RequireReceiver); // mouse click & get score effect clickEff.Stop(); getScoreEff.transform.position = hit.point; getScoreEff.Play(); comboCount++; if (comboCount >= comboBonus && !hasChanged) { hasChanged = true; for (int i = 0; i < channelNum; i++) { planeObj[i].SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); touchObj[i].SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); } PlaneMaterialController.isHot = true; TouchZoneMaterialController.isHot = true; // enable the emission of note material note.SendMessage("changeMaterial", true, SendMessageOptions.RequireReceiver); // change left & right plane animation ac.changePlaneAni(true); } // emit particles if (comboCount == comboBonus) // 20 { ac.particleEmit1(); } if (comboCount % 35 == 0) // 35 { ac.particleEmit(); } if (comboCount % 48 == 0) // 48 { ac.particleEmit2(); } } } while (count[choose]-- > 0) { PlaneController.blocksInChannel[choose].Dequeue(); } } } } if (touch.phase == TouchPhase.Ended) { recepient.SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); } if (touch.phase == TouchPhase.Stationary) { recepient.SendMessage("onTouchStay", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchStay", hit.point, SendMessageOptions.DontRequireReceiver); } if (touch.phase == TouchPhase.Moved) { recepient.SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchUp", hit.point, SendMessageOptions.DontRequireReceiver); } if (touch.phase == TouchPhase.Canceled) { recepient.SendMessage("onTouchExit", hit.point, SendMessageOptions.DontRequireReceiver); planeObj[choose].SendMessage("onTouchExit", hit.point, SendMessageOptions.DontRequireReceiver); } } } foreach (GameObject g in touchesOld) { if (!touchList.Contains(g)) { g.SendMessage("OnTouchExit", hit.point, SendMessageOptions.DontRequireReceiver); } } } #endif }