Ejemplo n.º 1
0
    public Door(
        Transform parent,
        Material material,
        DoorParams _doorParams
        )
    {
        doorParams = _doorParams;


        CreateDoor(parent, material);
    }
    public void GenerateOpenings(BaseParams baseParams, ref List <WindowParams> windowParams, ref DoorParams doorParams, bool rowSameLit, Vector3?lastFloorWinSize = null)
    {
        List <Quaternion> rotations = new List <Quaternion>();
        List <Vector3>    positions = new List <Vector3>();
        Vector3           finalSize;

        if (baseParams.floorNum < 2)
        {
            finalSize = RandomiseWindowSize(baseParams.finalSize);
        }
        else
        {
            finalSize = (Vector3)lastFloorWinSize;
        }

        GenerateWindowsPositions(baseParams.finalSize, finalSize, baseParams.leftFirewall, baseParams.rightFirewall, baseParams.backFirewall, ref positions, ref rotations);

        Vector2Int glassColor = RandomiseWindowColor();

        if (baseParams.floorNum == 0)
        {
            int r = Random.Range(0, positions.Count);

            Vector3 doorFinalSize = new Vector3(finalSize.x, finalSize.y + positions[r].y, finalSize.z);
            GenerateArcParameters(doorFinalSize);


            doorParams.finalPos  = new Vector3(positions[r].x, 0, positions[r].z);
            doorParams.finalSize = doorFinalSize;
            doorParams.finalRot  = rotations[r];

            doorParams.openingStyle = baseParams.doorStyle;

            if (baseParams.doorStyle == OpeningStyle.ARCH)
            {
                doorParams.archedOpeningParams = new ArchedOpeningParams(outerArcF, outerArcB, innerArcF, innerArcB, frameDimensions);
                doorParams.planeParams         = new PlaneParams(baseParams.doorStyle, ColorManager.GetDoorColor(), BaseObjSizes.planeArcSize, innerArcF, doorFinalSize, windowOffset);
            }
            else
            {
                doorParams.squareOpeningParams = new SquareOpeningParams(frameDimensions);
                doorParams.planeParams         = new PlaneParams(baseParams.doorStyle, ColorManager.GetDoorColor(), BaseObjSizes.planeSqSize, doorFinalSize, windowOffset);
            }

            positions.RemoveAt(r);
            rotations.RemoveAt(r);
        }

        GenerateArcParameters(finalSize);
        GenerateSegmentsPositions(finalSize);

        for (int i = 0; i < positions.Count; i++)
        {
            WindowParams windowParam = new WindowParams();

            if (!rowSameLit)
            {
                glassColor = RandomiseWindowColor();
            }

            if (baseParams.windowStyle == OpeningStyle.ARCH)
            {
                windowParam.archedOpeningParams = new ArchedOpeningParams(outerArcF, outerArcB, innerArcF, innerArcB, frameDimensions);
                windowParam.glassParams         = new PlaneParams(baseParams.windowStyle, glassColor, BaseObjSizes.planeArcSize, innerArcF, finalSize, windowOffset);
            }
            else
            {
                windowParam.squareOpeningParams = new SquareOpeningParams(frameDimensions);
                windowParam.glassParams         = new PlaneParams(baseParams.windowStyle, glassColor, BaseObjSizes.planeSqSize, finalSize, windowOffset);
            }

            windowParam.segmentationParams = new SegmentationParams(vertSegPositions, horSegPositions, segmentDimensions);
            windowParam.finalSize          = finalSize;
            windowParam.finalPos           = positions[i];
            windowParam.finalRot           = rotations[i];
            windowParam.openingStyle       = baseParams.windowStyle;
            windowParams.Add(windowParam);
        }
    }