Beispiel #1
0
        private IEnumerator checkIfPuzzleSolved(JigsawPiece scriptObj, float delayTime)
        {
            yield return(new WaitForSeconds(delayTime));

            solveCount++;
            if (solveCount >= pieceCount)
            {
                scriptObj.PixelMouseExit();
                isSolved = true;
                dispatcher.DispatchEvent(default(JigsawEvents.AllPiecesSolved));
                if (string.IsNullOrEmpty(switchTo))
                {
                    playAudioEvent(audioPuzzleSolved);
                }
                else
                {
                    audioSetSwitchEvent(audioPuzzleSolved, switchTo, switchGameObject);
                }
            }
        }
Beispiel #2
0
        private void Update()
        {
            if (!hasInitalizedPuzzle || isSolved)
            {
                return;
            }
            Vector3    touchPosition;
            RaycastHit hitInfo;
            Vector3    vector;

            switch (getTouchPhase(out touchPosition))
            {
            case TouchPhaseExtended.Began:
                oldPos = touchPosition;
                if (IsMeshPuzzle)
                {
                    focusHit = GetMeshHit(touchPosition);
                }
                else
                {
                    focusHit = GetPixelHit(touchPosition);
                }
                if (focusHit.collider != null)
                {
                    focusObj = focusHit.collider.gameObject;
                }
                else
                {
                    focusObj = null;
                }
                if (focusObj != oldFocus)
                {
                    if (oldFocus != null)
                    {
                        JigsawPiece component = oldFocus.GetComponent <JigsawPiece>();
                        component.PixelMouseExit();
                    }
                    if (focusObj != null)
                    {
                        JigsawPiece component = focusObj.GetComponent <JigsawPiece>();
                        component.PixelMouseOver();
                    }
                    oldFocus = focusObj;
                }
                if (focusObj != null && bkgArtworkColl.Raycast(guiCam.ScreenPointToRay(touchPosition), out hitInfo, 500f))
                {
                    pickupOffset   = focusObj.transform.position - hitInfo.point;
                    pickupOffset.z = 0f;
                    LayerToTop(focusObj.name);
                }
                break;

            case TouchPhaseExtended.Moved:
                if (focusObj != null && bkgArtworkColl.Raycast(guiCam.ScreenPointToRay(touchPosition), out hitInfo, 500f))
                {
                    JigsawPiece component = focusObj.GetComponent <JigsawPiece>();
                    vector   = hitInfo.point + pickupOffset + shadowLiftOffset;
                    vector.z = 0f;
                    if (hitInfo.point.y > areaDividerObj.transform.position.y)
                    {
                        focusObj.transform.SetParent(solveContainer, worldPositionStays: false);
                    }
                    else
                    {
                        focusObj.transform.SetParent(startContainer, worldPositionStays: false);
                    }
                    if (vector.x < xMin)
                    {
                        vector.x = xMin;
                    }
                    else if (vector.x > xMax)
                    {
                        vector.x = xMax;
                    }
                    if (vector.y < yMin)
                    {
                        vector.y = yMin;
                    }
                    else if (vector.y > yMax)
                    {
                        vector.y = yMax;
                    }
                    component.PixelMouseDrag(vector);
                }
                break;

            case TouchPhaseExtended.Ended:
            {
                if (!(focusObj != null) || !SolvePositions.ContainsKey(focusObj.name))
                {
                    break;
                }
                Vector3 vector2 = SolvePositions[focusObj.name];
                vector2.z = 0f;
                float       num       = Vector2.Distance(focusObj.transform.position, vector2);
                JigsawPiece component = focusObj.GetComponent <JigsawPiece>();
                if (num <= SnapDistance + shadowDistanceAdjust + snapModifier)
                {
                    snapModifier -= snapDecay;
                    if (snapModifier < 0f)
                    {
                        snapModifier = 0f;
                    }
                    component.Lock(vector2);
                    playAudioEvent(audioPuzzlePieceDrop);
                    LayerToLocked(focusObj.name);
                    if (ParticlesLockPiece != null)
                    {
                        GameObject gameObject = Object.Instantiate(ParticlesLockPiece, PieceParticlePosition, Quaternion.identity);
                        gameObject.transform.SetParent(focusObj.transform, worldPositionStays: false);
                        gameObject.transform.localScale = PieceParticleScale;
                        gameObject.layer = LayerMask.NameToLayer("UI");
                        if (ParticlesLockPiece != null)
                        {
                            ParticleSystem component2 = ParticlesLockPiece.GetComponent <ParticleSystem>();
                            if (component2 != null)
                            {
                                solveEffectsDelay = component2.main.duration;
                            }
                        }
                    }
                    CoroutineRunner.Start(checkIfPuzzleSolved(component, solveEffectsDelay), this, "checkIfPuzzleSolved");
                }
                else
                {
                    vector    = focusObj.transform.position;
                    component = focusObj.GetComponent <JigsawPiece>();
                    component.PixelMouseDrop(vector - shadowLiftOffset);
                }
                break;
            }

            case TouchPhaseExtended.Stationary:
            case TouchPhaseExtended.Canceled:
                break;

            case TouchPhaseExtended.Mouse:
                if (oldPos == touchPosition)
                {
                    break;
                }
                oldPos = touchPosition;
                if (IsMeshPuzzle)
                {
                    focusHit = GetMeshHit(touchPosition);
                }
                else
                {
                    focusHit = GetPixelHit(touchPosition);
                }
                if (focusHit.collider != null)
                {
                    if (IsMeshPuzzle)
                    {
                        focusObj = focusHit.collider.gameObject;
                    }
                    else
                    {
                        focusObj = focusHit.collider.gameObject;
                    }
                }
                else
                {
                    focusObj = null;
                }
                if (!(focusObj != oldFocus))
                {
                    break;
                }
                if (oldFocus != null)
                {
                    JigsawPiece component = oldFocus.GetComponent <JigsawPiece>();
                    if (component != null)
                    {
                        component.PixelMouseExit();
                    }
                }
                if (focusObj != null)
                {
                    JigsawPiece component = focusObj.GetComponent <JigsawPiece>();
                    if (component != null)
                    {
                        component.PixelMouseOver();
                    }
                }
                oldFocus = focusObj;
                break;

            case TouchPhaseExtended.NoEvent:
                break;
            }
        }