Exemplo n.º 1
0
    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
        });
    }
Exemplo n.º 2
0
    // 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;
                }
            }
        }
    }