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; } }
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); } } } } }
void OnTriggerStay(Collider other) { if (other.gameObject.tag == "SlidingElement") { SimpleMovableElement element = other.gameObject.GetComponentInParent <SimpleMovableElement>(); transform.parent = element.transform; } }
void Start() { updateStartPosition(); stoneRenderer = GetComponentInChildren <Renderer> (); mat = stoneRenderer.material; parent = this; cameraOrbit = FindObjectOfType <CameraOrbit>(); }
void OnTriggerExit(Collider other) { if (other.gameObject.tag == "SlidingElement") { SimpleMovableElement element = other.gameObject.GetComponentInParent <SimpleMovableElement>(); element.SetPlayerOnTop(false); transform.parent = element.getLevel().transform; } }
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); } } }
public void startDragging() { if (sliderOnMinWay != null) { sliderOnMinWay.sliderOnMaxWayActive = false; } if (sliderOnMaxWay != null) { sliderOnMaxWay.sliderOnMinWayActive = false; } setCurrentSlider(); this.parent = this; }
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; } }
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(); } } } }
// 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; } } } } } } }
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()); }
public void removeFromMovableElements(SimpleMovableElement element) { movableElements.Remove(element); }
public void addToMovableElements(SimpleMovableElement element) { movableElements.Add(element); }
//Wenn Element wieder losgelassen wird protected virtual void endedDragging(SimpleMovableElement obj) { //Klicks hochzählen clicks++; }
//Wenn ein Element bewegt wird void isDraggingMovableElement(SimpleMovableElement movableElement, Vector3 dragPosition) { }