Ejemplo n.º 1
0
        public void calculateMovementAndRotation()
        {
            Vector3 previousPosition = targetPos;
            float   distance         = (0.1f) - Camera.main.transform.position.y;

            targetPos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, -distance);
            targetPos = Camera.main.ScreenToWorldPoint(targetPos);

            if (previousPosition != initialPosition && previousPosition != targetPos)
            {
                MazeGame.instance.appendToLine(targetPos);
            }

            var raycastSource = new Vector3(Input.mousePosition.x, Input.mousePosition.y, Mathf.Abs(Camera.main.transform.position.y - raycastCheckTarget.y));

            raycastSource = Camera.main.ScreenToWorldPoint(raycastSource);

            if (previousPosition != targetPos)
            {
                characterWayPoints.Add(targetPos + new Vector3(0, 0.5f, 0));
                var oldDrawingToolPosition = MazeGame.instance.drawingTool.transform.position;
                var newDrawingToolPosition = targetPos + new Vector3(0, 0.5f, 0);
                MazeGame.instance.drawingTool.transform.position = newDrawingToolPosition;

                if (MazeGame.instance.pointsList.Count >= 2)
                {
                    RaycastHit hitInfo;

                    raycastCheckTarget   = MazeGame.instance.pointsList[MazeGame.instance.pointsList.Count - 2];
                    raycastCheckTarget.y = TrackBounds.instance.transform.position.y;

                    if (Physics.Raycast(raycastSource, raycastCheckTarget - raycastSource, out hitInfo, Vector3.Distance(raycastSource, raycastCheckTarget), LayerMask.GetMask("TrackBounds")))
                    {
                        var collisionPoint = hitInfo.point;

                        var adjustedLinePoint = Camera.main.WorldToScreenPoint(collisionPoint);
                        adjustedLinePoint = new Vector3(adjustedLinePoint.x, adjustedLinePoint.y, -distance);
                        adjustedLinePoint = Camera.main.ScreenToWorldPoint(adjustedLinePoint);
                        MazeGame.instance.AdjustLastPointOfLine(adjustedLinePoint);

                        var pointOfImpact = Camera.main.WorldToScreenPoint(collisionPoint);
                        pointOfImpact = new Vector3(pointOfImpact.x, pointOfImpact.y, Camera.main.transform.position.y - transform.position.y - 2f);
                        pointOfImpact = Camera.main.ScreenToWorldPoint(pointOfImpact);

                        mazeLetter.OnPointerOverTrackBounds(pointOfImpact);
                    }
                }
            }

            if ((_fruits[_fruits.Count - 1].transform.position - targetPos).sqrMagnitude < 0.1f)
            {
                toggleVisibility(true);
                initMovement();
                MazeGame.instance.timer.StopTimer();
            }
        }