public void Connect(CraneNode connection) { Vector3 connectDirection = (connection.position - position).normalized; connections.Add(new Connection() { connected = connection, direction = connectDirection }); connection.connections.Add(new Connection() { connected = this, direction = -connectDirection }); }
// Update is called once per frame protected override void Update() { base.Update(); if (loading) { return; } float distanceToClosest = Mathf.Infinity; CraneNode closest = null; foreach (var node in path.nodes) { if (Vector3.Distance(cranePart.transform.position, node.position) < distanceToClosest) { distanceToClosest = Vector3.Distance(cranePart.transform.position, node.position); closest = node; } } bool movedX = false, movedY = false; foreach (var node in closest.connections) { if (MoveVector.x != 0 && !movedX) { if (Mathf.Abs(cranePart.transform.position.z - closest.position.z) < tollerance && Vector3.Angle(Vector3.right * MoveVector.x, node.direction) < 10) { cranePart.transform.position += Vector3.right * MoveVector.x * speed * Time.deltaTime; movedX = true; } else if (Mathf.Abs(cranePart.transform.position.z - closest.position.z) < tollerance && Vector3.Angle(Vector3.right * MoveVector.x, closest.position - cranePart.transform.position) < 30) { cranePart.transform.position += Vector3.right * MoveVector.x * speed * Time.deltaTime; movedX = true; } } if (MoveVector.z != 0 && !movedY) { if (Mathf.Abs(cranePart.transform.position.x - closest.position.x) < tollerance && Vector3.Angle(Vector3.forward * MoveVector.z, node.direction) < 10) { cranePart.transform.position += Vector3.forward * MoveVector.z * speed * Time.deltaTime; movedY = true; } else if (Mathf.Abs(cranePart.transform.position.x - closest.position.x) < tollerance && Vector3.Angle(Vector3.forward * MoveVector.z, (closest.position - cranePart.transform.position).normalized) < 30) { cranePart.transform.position += Vector3.forward * MoveVector.z * speed * Time.deltaTime; movedY = true; } } } }