Пример #1
0
    public void ContinueProceduralArea()
    {
        Debug.Log("Spawn procedural pieces");

        //For each of the current piece's exit locations
        for (int i = 0; i < currentBPP.exitLocations.Count; i++)
        {
            //Check if it's a connection
            PathConnectionPiece pcpLeft = currentPathArea.GetConnectionPieceOfBPP(currentBPP.exitLocations[i].nextLeftPathPiece);
            //If it's null, there was nothing to return
            //If not, then it is a connection piece, and extensions should be spawned for it
            if (pcpLeft != null)
            {
                BuildConnectionsToConnectedArea(pcpLeft);
            }
            //Else, spawn extensions normally
            else
            {
                BuildExtensionsForBPP(currentBPP.exitLocations[i].nextLeftPathPiece);
            }

            //Check if it's a connection
            PathConnectionPiece pcpRight = currentPathArea.GetConnectionPieceOfBPP(currentBPP.exitLocations[i].nextRightPathPiece);
            //If it's null, there was nothing to return
            //If not, then it is a connection piece, and extensions should be spawned for it
            if (pcpRight != null)
            {
                BuildConnectionsToConnectedArea(pcpRight);
            }
            //Else, spawn extensions normally
            else
            {
                BuildExtensionsForBPP(currentBPP.exitLocations[i].nextRightPathPiece);
            }
        }
    }
Пример #2
0
    //[TODO] Extension code could probably / definitely be cleaned up (duplicates)
    //Procedural version of the above
    void BuildConnectionsToConnectedArea(PathConnectionPiece connectionPiece)
    {
        PathedArea connectedPathArea = ppMan.GetAreaOfType(connectionPiece.areaTo);

        //Move fixed areas accordingly
        if (connectedPathArea.thisAreaFormat == AreaFormat.Fixed)
        {
            //[TODO] properly reposition
            PositionFixedArea(connectionPiece.thisConnectionPiece, connectedPathArea);
        }
        //OR spawn extensions of next procedural area
        else
        {
            //Get Exit Location ref
            BuiltPathPiece extensionBPP = connectionPiece.thisConnectionPiece;
            //Get position for pieces to be placed
            Vector3 exitPosition = extensionBPP.exitLocations[0].pathTurnLocation.position;

            if (extensionBPP.exitLocations[0].canDoLeft)
            {
                //Spawn a left piece for this pathed area
                BuiltPathPiece leftPiece = ppMan.GetValidBPPForAreaType(connectionPiece.areaTo);

                //Position and rotate accordingly
                leftPiece.intendedMoveDirection = GetLeftMoveDirection(connectionPiece.connectionPieceDirection);
                leftPiece.transform.position    = GetNextPlacementPosition(leftPiece.intendedMoveDirection,
                                                                           exitPosition,
                                                                           leftPiece);
                leftPiece.transform.eulerAngles = GetEulerAnglesForMoveDirection(leftPiece.intendedMoveDirection);

                extensionBPP.exitLocations[0].nextLeftPathPiece = leftPiece;
                switch (leftPiece.intendedMoveDirection)
                {
                case MoveDirection.North:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.northPiece = leftPiece;
                    break;

                case MoveDirection.East:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.eastPiece = leftPiece;
                    break;

                case MoveDirection.South:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.southPiece = leftPiece;
                    break;

                case MoveDirection.West:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.westPiece = leftPiece;
                    break;
                }

                //Activate piece
                ppMan.ActivatePathPiece_InConnectedArea(connectedPathArea, leftPiece, true, false);
            }
            if (extensionBPP.exitLocations[0].canDoRight)
            {
                //Spawn a right piece for this pathed area
                BuiltPathPiece rightPiece = ppMan.GetValidBPPForAreaType(connectionPiece.areaTo);

                //Position and rotate accordingly
                rightPiece.intendedMoveDirection = GetRightMoveDirection(connectionPiece.connectionPieceDirection);
                rightPiece.transform.position    = GetNextPlacementPosition(rightPiece.intendedMoveDirection,
                                                                            exitPosition,
                                                                            rightPiece);
                rightPiece.transform.eulerAngles = GetEulerAnglesForMoveDirection(rightPiece.intendedMoveDirection);

                extensionBPP.exitLocations[0].nextRightPathPiece = rightPiece;
                switch (rightPiece.intendedMoveDirection)
                {
                case MoveDirection.North:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.northPiece = rightPiece;
                    break;

                case MoveDirection.East:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.eastPiece = rightPiece;
                    break;

                case MoveDirection.South:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.southPiece = rightPiece;
                    break;

                case MoveDirection.West:
                    extensionBPP.exitLocations[0].connectedTurnTriggerArea.westPiece = rightPiece;
                    break;
                }
                //Activate piece
                ppMan.ActivatePathPiece_InConnectedArea(connectedPathArea, rightPiece, false, true);
            }
        }
    }