Exemplo n.º 1
0
 public void setSliderOnWayByDirection(Vector3 direction, SimpleMovableElement element)
 {
     if (direction == Vector3.forward)
     {
         sliderOnMaxWayZ = element;
     }
     if (direction == Vector3.back)
     {
         sliderOnMinWayZ = element;
     }
     if (direction == Vector3.left)
     {
         sliderOnMinWayX = element;
     }
     if (direction == Vector3.right)
     {
         sliderOnMaxWayX = element;
     }
     if (direction == Vector3.up)
     {
         sliderOnMaxWayY = element;
     }
     if (direction == Vector3.down)
     {
         sliderOnMinWayY = element;
     }
 }
Exemplo n.º 2
0
    public void pushInMax(Vector3 dragPosition)
    {
        if (parent.getAxisOfVector(dragPosition) - parent.getAxisOfVector(transform.position) > 0)
        {
            if (sliderOnMinWayActive)
            {
                sliderOnMinWayActive = false;
                this.parent          = this;
                setCurrentSlider();
            }


            if (sliderOnMaxWay != null)
            {
                if (parent.getAxisOfVector(dragPosition) > parent.getAxisOfVector(sliderOnMaxWay.transform.position) - 1 && Mathf.Abs(parent.getAxisOfVector(getPosition()) - parent.getAxisOfVector(sliderOnMaxWay.getPosition())) < 1.5)
                {
                    sliderOnMaxWayActive = true;
                    sliderOnMaxWay.setCurrentSlider(this.parent);
                    sliderOnMaxWay.parent = parent;
                    sliderOnMaxWay.pushInMax(dragPosition + parent.getPositiveDirectionOfAxis());
                    if (parent.getAxisOfVector(sliderOnMaxWay.GetCurrentRange().max) <= parent.getAxisOfVector(GetCurrentRange().max))
                    {
                        GetCurrentRange().max = parent.setAxisOfVector(GetCurrentRange().max, parent.getAxisOfVector(sliderOnMaxWay.GetCurrentRange().max) - 1);
                    }
                }
            }
        }
    }
Exemplo n.º 3
0
 void OnTriggerStay(Collider other)
 {
     if (other.gameObject.tag == "SlidingElement")
     {
         SimpleMovableElement element = other.gameObject.GetComponentInParent <SimpleMovableElement>();
         transform.parent = element.transform;
     }
 }
Exemplo n.º 4
0
 void Start()
 {
     updateStartPosition();
     stoneRenderer = GetComponentInChildren <Renderer> ();
     mat           = stoneRenderer.material;
     parent        = this;
     cameraOrbit   = FindObjectOfType <CameraOrbit>();
 }
Exemplo n.º 5
0
 void OnTriggerExit(Collider other)
 {
     if (other.gameObject.tag == "SlidingElement")
     {
         SimpleMovableElement element = other.gameObject.GetComponentInParent <SimpleMovableElement>();
         element.SetPlayerOnTop(false);
         transform.parent = element.getLevel().transform;
     }
 }
Exemplo n.º 6
0
    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.tag == "SlidingElement")
        {
            SimpleMovableElement element = other.gameObject.GetComponentInParent <SimpleMovableElement>();
            transform.parent = element.transform;
            element.SetPlayerOnTop(true);
        }

        if (other.gameObject.tag == "EndScreen")
        {
            int clicks = GameManager.GetInstance().GetTotalClicks();
            UIManager.GetInstance().showEndPanel(clicks);
        }

        if (other.gameObject.tag == "Gate")
        {
            Gate gate = other.gameObject.GetComponentInParent <Gate>();
            if (gate != null)
            {
                gate.TryToOpen();
            }
        }

        if (other.gameObject.tag == "LevelEntry")
        {
            LevelEntryDoor door = other.gameObject.GetComponentInParent <LevelEntryDoor>();
            if (door != null)
            {
                door.startLevel();
            }
        }

        if (other.gameObject.tag == "LevelDoor")
        {
            LevelDoor door = other.gameObject.GetComponentInParent <LevelDoor>();
            if (door != null)
            {
                door.startLevel();
            }
        }

        if (other.gameObject.tag == "Key")
        {
            Key key = other.gameObject.GetComponent <Key> ();
            if (key != null)
            {
                key.setFound();
                key.GetComponent <PathElement> ().SetActive(false);
            }
        }
    }
Exemplo n.º 7
0
 public void startDragging()
 {
     if (sliderOnMinWay != null)
     {
         sliderOnMinWay.sliderOnMaxWayActive = false;
     }
     if (sliderOnMaxWay != null)
     {
         sliderOnMaxWay.sliderOnMinWayActive = false;
     }
     setCurrentSlider();
     this.parent = this;
 }
Exemplo n.º 8
0
 public void setCurrentSlider(SimpleMovableElement element)
 {
     if (element.xAxis == Movement.Slidable)
     {
         sliderOnMaxWay = sliderOnMaxWayX;
         sliderOnMinWay = sliderOnMinWayX;
     }
     if (element.yAxis == Movement.Slidable)
     {
         sliderOnMaxWay = sliderOnMaxWayY;
         sliderOnMinWay = sliderOnMinWayY;
     }
     if (element.zAxis == Movement.Slidable)
     {
         sliderOnMaxWay = sliderOnMaxWayZ;
         sliderOnMinWay = sliderOnMinWayZ;
     }
 }
Exemplo n.º 9
0
    public void roundAllPathElementsPosition()
    {
        gameObject.transform.position = new Vector3(0, 0, 0);

        foreach (Transform cube in transform)
        {
            if (cube.GetComponent <PathElement>() != null && cube.gameObject.activeSelf == true)
            {
                cube.GetComponent <PathElement>().roundPosition();
                cube.GetComponent <PathElement> ().roundRotation();

                SimpleMovableElement movableElement = cube.GetComponent <SimpleMovableElement> ();
                if (movableElement != null)
                {
                    movableElement.turnModelToDirection();
                }
            }
        }
    }
Exemplo n.º 10
0
    // Update is called once per frame
    void Update()
    {
        //Wenn man auf UI klickt, keine Inputs annehmen
        if (!IsPointerOverUIObject())
        {
            clickedPathElement = null;

            if (Input.GetMouseButtonUp(0))
            {
                if (!dragging && !draggingNotMovable)
                {
                    RaycastHit hit;
                    Ray        ray = mainCamera.ScreenPointToRay(Input.mousePosition);
                    if (Physics.Raycast(ray, out hit, 1000, layer_mask))
                    {
                        if (hit.collider.gameObject.GetComponent <SimplePathElement> () != null)
                        {
                            clickedPathElement = hit.collider.gameObject.GetComponent <SimplePathElement> ();
                            if (hasClickedPathElement != null)
                            {
                                hasClickedPathElement(clickedPathElement);
                            }
                        }
                    }
                }
                if (dragging)
                {
                    //EndDragging
                    if (slidingElement != null)
                    {
                        slidingElement.endDragging();
                        if (endedDragging != null)
                        {
                            endedDragging(slidingElement);
                        }
                    }
                }
                dragging           = false;
                draggingNotMovable = false;
                if (currentSlidingElement != null)
                {
                    currentSlidingElement = null;

                    //ReleasedSlidingElement
                    slidingElement.hasReleased();
                    if (endedHoldingMovableElement != null)
                    {
                        endedHoldingMovableElement(slidingElement);
                    }
                }
            }

            if (Input.GetMouseButtonDown(0))
            {
                dragStartPosition = Input.mousePosition;
                RaycastHit hit;
                Ray        ray = mainCamera.ScreenPointToRay(dragStartPosition);
                if (Physics.Raycast(ray, out hit, 1000, layer_mask))
                {
                    if (hit.collider.gameObject.GetComponent <SimpleMovableElement> () != null)
                    {
                        currentSlidingElement = hit.collider.gameObject.GetComponent <SimpleMovableElement> ();
                        if (currentSlidingElement != null)
                        {
                            slidingElement = currentSlidingElement;
                            //startHoldingSlidingElement
                            slidingElement.hasClicked();
                            if (startedHoldingMovableElement != null)
                            {
                                startedHoldingMovableElement(slidingElement);
                            }
                        }
                        dragStartDistance = (mainCamera.transform.position - currentSlidingElement.transform.position).magnitude;
                    }
                }
            }

            pointer_x = Input.GetAxisRaw("Mouse X");
            pointer_y = Input.GetAxisRaw("Mouse Y");

            if (Input.touchCount > 0)
            {
                pointer_x = Input.touches [0].deltaPosition.x;
                pointer_y = Input.touches [0].deltaPosition.y;
            }

            if (pointer_x != 0 || pointer_y != 0)
            {
                float dragDistance = (dragStartPosition - new Vector2(Input.mousePosition.x, Input.mousePosition.y)).magnitude;
                if (currentSlidingElement != null)
                {
                    if (dragDistance > 5f)
                    {
                        if (dragging == false)
                        {
                            //StartDragging
                            slidingElement.startDragging();
                            if (startedDragging != null)
                            {
                                startedDragging(slidingElement);
                            }
                        }
                        dragging     = true;
                        dragPosition = mainCamera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, dragStartDistance));
                        slidingElement.isDragging(dragPosition);
                        if (isDraggingMovableElement != null)
                        {
                            isDraggingMovableElement(slidingElement, dragPosition);
                        }
                    }
                    else
                    {
                        dragging = false;
                    }
                }
                else
                {
                    //Not Sliding a movalble Element
                    if ((Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) || Input.GetMouseButton(0))
                    {
                        if (isDragging != null)
                        {
                            if (dragDistance > 5f)
                            {
                                isDragging(pointer_x, pointer_y);
                                draggingNotMovable = true;
                            }
                        }
                    }
                }
            }
        }
    }
Exemplo n.º 11
0
    public void updateMoveRange()
    {
        Vector3[] directions =
        {
            Vector3.forward,
            Vector3.back,
            Vector3.left,
            Vector3.right,
            Vector3.up,
            Vector3.down
        };
        List <Vector3> moveRange = new List <Vector3> ();

        moveRange.Add(transform.position);

        bool           playerInsideElement = false;
        List <Vector3> playerOnTopRange    = new List <Vector3> ();

        SimplePathElement firstPlayerPositionElement = null;

        getLevel().GetAllElements().TryGetValue(transform.position + Vector3.up, out firstPlayerPositionElement);
        if (firstPlayerPositionElement == null)
        {
            playerOnTopRange.Add(transform.position);
        }
        else
        {
            playerInsideElement = true;
        }

        sliderOnMaxWayX = null;
        sliderOnMinWayX = null;
        sliderOnMaxWayY = null;
        sliderOnMinWayY = null;
        sliderOnMaxWayZ = null;
        sliderOnMinWayZ = null;

        foreach (Vector3 direction in directions)
        {
            bool    hasFoundWay;
            Vector3 newDirection = direction;

            bool playerRangeEnded = playerInsideElement;

            do
            {
                hasFoundWay = false;


                Vector3 walkPosition          = transform.position + newDirection;
                Vector3 playerElementPosition = walkPosition + Vector3.up;

                SimplePathElement walkElement           = null;
                SimplePathElement playerPositionElement = null;

                getLevel().GetAllElements().TryGetValue(walkPosition, out walkElement);
                getLevel().GetAllElements().TryGetValue(playerElementPosition, out playerPositionElement);


                if (direction != Vector3.up && getLevel().GetPlayer().isPositionInWalkingPath(walkPosition))
                {
                    hasFoundWay = false;
                    continue;
                }


                if (walkElement != null)
                {
                    if (walkElement.gameObject.GetComponent <SimpleMovableElement>() != null)
                    {
                        if (getSliderOnWayByDirection(direction) == null && !walkElement.gameObject.Equals(gameObject))
                        {
                            setSliderOnWayByDirection(direction, walkElement.gameObject.GetComponent <SimpleMovableElement>());
                        }
                    }
                }

                //Normal Walk
                if (walkElement == null || (walkElement.gameObject.GetComponent <SimpleMovableElement>() != null))
                {
                    if (getLevel().getRange().isPointInRange(walkPosition))
                    {
                        if (direction != Vector3.down && !playerRangeEnded)
                        {
                            if (playerPositionElement == null)
                            {
                                playerOnTopRange.Add(transform.position + newDirection);
                            }
                            else
                            {
                                playerRangeEnded = true;
                            }
                        }
                        if (direction == Vector3.down)
                        {
                            if (playerPositionElement == this || playerPositionElement == null)
                            {
                                playerOnTopRange.Add(transform.position + newDirection);
                            }
                            else
                            {
                                playerRangeEnded = true;
                            }
                        }


                        moveRange.Add(transform.position + newDirection);
                        hasFoundWay = true;
                    }
                }
                newDirection = newDirection + direction;
            } while(hasFoundWay);
        }
        movementRange.setRangeFromArray(moveRange.ToArray());


        playerOnTopMovementRange.setRangeFromArray(playerOnTopRange.ToArray());
    }
Exemplo n.º 12
0
 public void removeFromMovableElements(SimpleMovableElement element)
 {
     movableElements.Remove(element);
 }
Exemplo n.º 13
0
 public void addToMovableElements(SimpleMovableElement element)
 {
     movableElements.Add(element);
 }
Exemplo n.º 14
0
 //Wenn Element wieder losgelassen wird
 protected virtual void endedDragging(SimpleMovableElement obj)
 {
     //Klicks hochzählen
     clicks++;
 }
Exemplo n.º 15
0
 //Wenn ein Element bewegt wird
 void isDraggingMovableElement(SimpleMovableElement movableElement, Vector3 dragPosition)
 {
 }