Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
 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);
     }
 }
Exemplo n.º 4
0
        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]);
         }
     }
 }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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
    }