Exemple #1
0
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        Connectionpoint[] connectionPoints = new Connectionpoint[8];

        Vector3 directionVector = direction.ToVector3();

        connectionPoints[0] = new ConnectorCrossPin(direction, directionVector * 7);
        connectionPoints[1] = new ConnectorCrossPin(direction, directionVector * 6);
        connectionPoints[2] = new ConnectorCrossPin(direction, directionVector * 5);
        connectionPoints[3] = new ConnectorCrossPin(direction, directionVector * 4);
        connectionPoints[4] = new ConnectorCrossPin(direction, directionVector * 3);
        connectionPoints[5] = new ConnectorCrossPin(direction, directionVector * 2);
        connectionPoints[6] = new ConnectorCrossPin(direction, directionVector);
        connectionPoints[7] = new ConnectorCrossPin(direction.Opposite(), new Vector3(0f, 0f, 0f));

        return(connectionPoints);
    }
    public ConnectorCrossPower(PartDirection facedDirection, Vector3 relativePosition)
    {
        type = ConnectorType.CROSS_POWER;

        this.facedDirection = facedDirection;
        connectorPosition   = new Vector3Int(relativePosition.x, relativePosition.y, relativePosition.z);

        //Vector3 addVector = Vector3.zero;
        //if (facedDirection == PartDirection.East)
        //    addVector = new Vector3(1f, 0, 0);
        //if (facedDirection == PartDirection.West)
        //    addVector = new Vector3(-1f, 0, 0);
        //
        //this.connectingPosition = relativePosition + addVector;
        boxColliderDirections     = new PartDirection[2];
        boxColliderDirections[0]  = facedDirection.Opposite();
        boxColliderDirections[1]  = facedDirection;
        acceptedConnectortypes    = new ConnectorType[1];
        acceptedConnectortypes[0] = ConnectorType.CROSS_PIN;

        boxColliders = new BoxCollider[2];
    }
Exemple #3
0
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        Connectionpoint[] connectionPoints = new Connectionpoint[4];

        Vector3       directionToGoIn     = direction.ToVector3();
        PartDirection firstHoleDirection  = PartDirection.Down;
        PartDirection secondHoleDirection = PartDirection.Down;

        switch (direction)
        {
        case PartDirection.Down:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.Up:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;
            }
            break;

        case PartDirection.East:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.South;
                break;
            }
            break;

        case PartDirection.South:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.West:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.North;
                break;
            }
            break;

        case PartDirection.North:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;
        }

        connectionPoints[0] = new ConnectorCrossHole(firstHoleDirection, Vector3.zero);
        connectionPoints[1] = new ConnectorCrossHole(secondHoleDirection.Opposite(), -2f * directionToGoIn);
        connectionPoints[2] = new ConnectorCrossPin(secondHoleDirection.Opposite(), secondHoleDirection.Opposite().ToVector3());
        connectionPoints[3] = new ConnectorCrossPin(secondHoleDirection, secondHoleDirection.ToVector3());

        return(connectionPoints);

        //ConnectionpointInfos[] infos = new ConnectionpointInfos[10];
        //for (int i = 0; i < infos.Length; i++)
        //{
        //    infos[i] = new ConnectionpointInfos();
        //    infos[i].connectorType = ConnectorType.ROUND_HOLE;
        //    infos[i].size = new Vector3(1f, 1f, 1f);
        //    if (i < 5)
        //    {
        //        infos[i].direction = PartDirection.East;
        //        infos[i].relativePosition = new Vector3(-1f, 0.5f, 0.5f + i - 2.5f);
        //    }
        //    else
        //    {
        //        infos[i].direction = PartDirection.West;
        //        infos[i].relativePosition = new Vector3(1f, 0.5f, 0.5f + i - 7.5f);
        //    }
        //}
        //
        //return infos;
    }
Exemple #4
0
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        int lengthToBack = 5;

        Connectionpoint[] connectionPoints = new Connectionpoint[9 + (lengthToBack - 1) * 9];

        Vector3       directionVector     = direction.ToVector3();
        Vector3       sideVector          = Vector3.zero;
        PartDirection firstHoleDirection  = PartDirection.Down;
        PartDirection secondHoleDirection = PartDirection.Down;

        switch (direction)
        {
        case PartDirection.Down:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.Up:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;
            }
            break;

        case PartDirection.East:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.South;
                break;
            }
            break;

        case PartDirection.South:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.West:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.North;
                break;
            }
            break;

        case PartDirection.North:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;
        }

        sideVector = firstHoleDirection.ToVector3();
        Vector3 upVector = secondHoleDirection.ToVector3();

        connectionPoints[0] = new ConnectorCrossPower(direction.Opposite(), Vector3.zero);
        connectionPoints[1] = new ConnectorRoundHole(direction.Opposite(), sideVector);
        connectionPoints[2] = new ConnectorRoundHole(direction.Opposite(), -sideVector);
        connectionPoints[3] = new ConnectorRoundHole(direction.Opposite(), upVector);
        connectionPoints[4] = new ConnectorRoundHole(direction.Opposite(), -upVector);
        connectionPoints[5] = new ConnectorSolid(direction, upVector + sideVector);
        connectionPoints[6] = new ConnectorSolid(direction, upVector - sideVector);
        connectionPoints[7] = new ConnectorSolid(direction, -upVector + sideVector);
        connectionPoints[8] = new ConnectorSolid(direction, -upVector - sideVector);

        for (int i = 1; i < lengthToBack; i++)
        {
            connectionPoints[i * 9]     = new ConnectorSolid(direction, upVector + sideVector + directionVector * i);
            connectionPoints[i * 9 + 1] = new ConnectorSolid(direction, upVector - sideVector + directionVector * i);
            connectionPoints[i * 9 + 2] = new ConnectorSolid(direction, -upVector + sideVector + directionVector * i);
            connectionPoints[i * 9 + 3] = new ConnectorSolid(direction, -upVector - sideVector + directionVector * i);
            connectionPoints[i * 9 + 4] = new ConnectorSolid(direction, upVector + directionVector * i);
            connectionPoints[i * 9 + 5] = new ConnectorSolid(direction, -upVector + directionVector * i);
            connectionPoints[i * 9 + 6] = new ConnectorSolid(direction, sideVector + directionVector * i);
            connectionPoints[i * 9 + 7] = new ConnectorSolid(direction, -sideVector + directionVector * i);
            connectionPoints[i * 9 + 8] = new ConnectorSolid(direction, directionVector * i);
        }


        return(connectionPoints);

        //ConnectionpointInfos[] infos = new ConnectionpointInfos[10];
        //for (int i = 0; i < infos.Length; i++)
        //{
        //    infos[i] = new ConnectionpointInfos();
        //    infos[i].connectorType = ConnectorType.ROUND_HOLE;
        //    infos[i].size = new Vector3(1f, 1f, 1f);
        //    if (i < 5)
        //    {
        //        infos[i].direction = PartDirection.East;
        //        infos[i].relativePosition = new Vector3(-1f, 0.5f, 0.5f + i - 2.5f);
        //    }
        //    else
        //    {
        //        infos[i].direction = PartDirection.West;
        //        infos[i].relativePosition = new Vector3(1f, 0.5f, 0.5f + i - 7.5f);
        //    }
        //}
        //
        //return infos;
    }
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        Connectionpoint[] connectionPoints = new Connectionpoint[26];

        Vector3       directionToGoIn     = direction.ToVector3();
        PartDirection firstHoleDirection  = PartDirection.Down;
        PartDirection secondHoleDirection = PartDirection.Down;

        switch (direction)
        {
        case PartDirection.Down:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.Up:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;
            }
            break;

        case PartDirection.East:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.South;
                break;
            }
            break;

        case PartDirection.South:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.West:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.North;
                break;
            }
            break;

        case PartDirection.North:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;
        }

        connectionPoints[0] = new ConnectorRoundHole(direction.Opposite(), firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[1] = new ConnectorRoundHole(direction.Opposite(), firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());
        connectionPoints[2] = new ConnectorRoundHole(direction.Opposite(), -firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[3] = new ConnectorRoundHole(direction.Opposite(), -firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());

        connectionPoints[4] = new ConnectorSolid(direction, Vector3.zero);
        connectionPoints[5] = new ConnectorSolid(direction, firstHoleDirection.ToVector3());
        connectionPoints[6] = new ConnectorSolid(direction, -firstHoleDirection.ToVector3());
        connectionPoints[7] = new ConnectorSolid(direction, secondHoleDirection.ToVector3());
        connectionPoints[8] = new ConnectorSolid(direction, -secondHoleDirection.ToVector3());

        connectionPoints[9]  = new ConnectorSolid(direction, directionToGoIn + firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[10] = new ConnectorSolid(direction, directionToGoIn + firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());
        connectionPoints[11] = new ConnectorSolid(direction, directionToGoIn - firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[12] = new ConnectorSolid(direction, directionToGoIn - firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());
        connectionPoints[13] = new ConnectorSolid(direction, directionToGoIn + Vector3.zero);
        connectionPoints[14] = new ConnectorSolid(direction, directionToGoIn + firstHoleDirection.ToVector3());
        connectionPoints[15] = new ConnectorSolid(direction, directionToGoIn - firstHoleDirection.ToVector3());
        connectionPoints[16] = new ConnectorSolid(direction, directionToGoIn + secondHoleDirection.ToVector3());
        connectionPoints[17] = new ConnectorSolid(direction, directionToGoIn - secondHoleDirection.ToVector3());

        connectionPoints[18] = new ConnectorSolid(direction, 2 * directionToGoIn + firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[19] = new ConnectorSolid(direction, 2 * directionToGoIn + firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());
        connectionPoints[20] = new ConnectorSolid(direction, 2 * directionToGoIn - firstHoleDirection.ToVector3() + secondHoleDirection.ToVector3());
        connectionPoints[21] = new ConnectorSolid(direction, 2 * directionToGoIn - firstHoleDirection.ToVector3() - secondHoleDirection.ToVector3());
        connectionPoints[22] = new ConnectorSolid(direction, 2 * directionToGoIn + Vector3.zero);
        connectionPoints[23] = new ConnectorSolid(direction, 2 * directionToGoIn + firstHoleDirection.ToVector3());
        connectionPoints[24] = new ConnectorSolid(direction, 2 * directionToGoIn - firstHoleDirection.ToVector3());
        connectionPoints[25] = new ConnectorSolid(direction, 2 * directionToGoIn + secondHoleDirection.ToVector3());
        connectionPoints[26] = new ConnectorSolid(direction, 2 * directionToGoIn - secondHoleDirection.ToVector3());

        return(connectionPoints);
    }
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        Connectionpoint[] connectionPoints = new Connectionpoint[3];

        Vector3       directionVector     = direction.ToVector3();
        PartDirection firstHoleDirection  = PartDirection.Down;
        PartDirection secondHoleDirection = PartDirection.Down;

        switch (direction)
        {
        case PartDirection.Down:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.Up:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.East:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.North;
                break;
            }
            break;

        case PartDirection.South:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.West;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.East;
                break;
            }
            break;

        case PartDirection.West:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.South;
                break;
            }
            break;

        case PartDirection.North:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;
        }

        connectionPoints[0] = new ConnectorRoundPin(secondHoleDirection.Opposite(), (-1 * secondHoleDirection.ToVector3()) + directionVector);
        connectionPoints[1] = new ConnectorCrossHole(firstHoleDirection.Opposite(), directionVector);
        connectionPoints[2] = new ConnectorSolid(direction, Vector3.zero);

        return(connectionPoints);
    }
Exemple #7
0
    public override Connectionpoint[] GetConnectionpoints(PartDirection direction, PartRotation rotation)
    {
        Connectionpoint[] connectionPoints = new Connectionpoint[7];

        Vector3       directionVector     = direction.ToVector3();
        Vector3       sideVector          = Vector3.zero;
        PartDirection firstHoleDirection  = PartDirection.Down;
        PartDirection secondHoleDirection = PartDirection.Down;

        switch (direction)
        {
        case PartDirection.Down:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.Up:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.West;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.East;
                break;
            }
            break;

        case PartDirection.East:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.North;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.South;
                break;
            }
            break;

        case PartDirection.South:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;

        case PartDirection.West:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.South;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.South;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.North;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.North;
                break;
            }
            break;

        case PartDirection.North:
            switch (rotation)
            {
            case PartRotation.Down:
                firstHoleDirection  = PartDirection.West;
                secondHoleDirection = PartDirection.Up;
                break;

            case PartRotation.Left:
                firstHoleDirection  = PartDirection.Up;
                secondHoleDirection = PartDirection.East;
                break;

            case PartRotation.Up:
                firstHoleDirection  = PartDirection.East;
                secondHoleDirection = PartDirection.Down;
                break;

            case PartRotation.Right:
                firstHoleDirection  = PartDirection.Down;
                secondHoleDirection = PartDirection.West;
                break;
            }
            break;
        }

        sideVector = firstHoleDirection.ToVector3();

        connectionPoints[0] = new ConnectorRoundHole(firstHoleDirection, Vector3.zero);
        connectionPoints[1] = new ConnectorRoundHole(secondHoleDirection, directionVector);
        connectionPoints[2] = new ConnectorRoundHole(secondHoleDirection, -1 * directionVector);
        connectionPoints[3] = new ConnectorRoundPin(firstHoleDirection, -1 * directionVector + sideVector);
        connectionPoints[4] = new ConnectorRoundPin(firstHoleDirection.Opposite(), -1 * directionVector - sideVector);
        connectionPoints[5] = new ConnectorRoundPin(firstHoleDirection, directionVector + sideVector);
        connectionPoints[6] = new ConnectorRoundPin(firstHoleDirection.Opposite(), directionVector - sideVector);

        return(connectionPoints);
    }