//public Dictionary<String, String> Materials;

        public Slidewindow(Data.Cord loc, Data.Rot rot, Data.Size size, double frame)
        {
            this.Location = loc;
            this.Rotation = rot;
            this.Size     = size;
            this.Frame    = frame;
        }
Exemple #2
0
 public Floor(Data.Cord location, double thickness, List <Data.Cord> verts, Dictionary <string, string> materials)
 {
     this.Location  = location;
     this.Thickness = thickness;
     this.Vertices  = verts;
     this.Materials = materials;
 }
 public Pointlight(Data.Cord location, double intensity, int red, int green, int blue)
 {
     this.Location = location;
     this.Intensity = intensity;
     this.Red = red;
     this.Green = green;
     this.Blue = blue;
 }
Exemple #4
0
 public Fixedwindow(Data.Cord loc, Data.Rot rot, Data.Size size, double frame, Dictionary <String, String> materials)
 {
     this.Location  = loc;
     this.Rotation  = rot;
     this.Size      = size;
     this.Frame     = frame;
     this.Materials = materials;
 }
Exemple #5
0
 public Flatroof(Data.Cord loc, Data.Rot rot, double roofH, double sideR, double mainR, Dictionary <String, String> materials)
 {
     this.Location   = loc;
     this.Rotation   = rot;
     this.RoofHeight = roofH;
     this.SideRafter = sideR;
     this.MainRafter = mainR;
     this.Materials  = materials;
 }
Exemple #6
0
 public Wall(Data.Cord startPoint, Data.Cord endPoint, double width, double height, List <Data.Hole> holes, Dictionary <String, String> materials)
 {
     this.Start     = startPoint;
     this.End       = endPoint;
     this.Width     = width;
     this.Height    = height;
     this.Holes     = holes;
     this.Materials = materials;
 }
Exemple #7
0
        //배치를 바꿔다시 계산하는 의외로 중요한 함수
        public void ChangeLocation(Data.Cord newLocation)
        {
            double x = newLocation.X - Location.X;
            double y = newLocation.Y - Location.Y;
            double z = newLocation.Z - Location.Z;

            this.Location = (Data.Cord)newLocation.Clone();

            UpdateSides(x, y, z);
        }
 public Fullstair(Data.Cord location, Data.Rot rotation, int stepNumber, double stepLength, double stepWidth, double stepHeight, double foundation, Dictionary <String, String> materials)
 {
     this.Location   = location;
     this.Rotation   = rotation;
     this.StepNumber = stepNumber;
     this.StepLength = stepLength;
     this.StepWidth  = stepWidth;
     this.StepHeight = stepHeight;
     this.Foundation = foundation;
     this.Materials  = materials;
 }
Exemple #9
0
        //TODO: Side를 체크해서 연결된 부분의 방향에 따라, 계단의 배치가 변경되도록 코딩할 필요가 있다.
        protected virtual void CreateFullstair(RelationLevel level)
        {
            //계단 생성을 위한 변수
            Data.Cord location = new Data.Cord();
            Data.Rot  rotation = new Data.Rot();

            int    number     = 7;
            double width      = this.Size.Length / 2 - Data.Config.WallTickness;
            double length     = (this.Size.Width - (width * 2)) / number;
            double height     = (Data.Config.RoomHeight / 2) / 8;
            double foundation = 0;

            //처음 진입하는 계단
            rotation = new Data.Rot(0, 0, 270);
            location = new Data.Cord(
                this.Location.X + Data.Config.WallTickness,
                this.Location.Y + this.Size.Width - width - 10, // -10은 Stair 모델에서 튀어나온 부분 때문에 겹치지 않도록 하느라...
                this.Location.Z + Data.Config.FloorTickness);
            this.Components.Add(new Model.Fullstair(location, rotation, number, length, width, height, foundation, Materials[Model.ModelType.Fullstair]));

            //2층 계단으로 진입하기 전, 평지

            //오른쪽
            foundation = (Data.Config.RoomHeight / 2) - height;
            location   = new Data.Cord(
                this.Location.X + Data.Config.WallTickness,
                this.Location.Y + this.Size.Width - Data.Config.WallTickness,
                this.Location.Z + Data.Config.FloorTickness + foundation);
            this.Components.Add(new Model.Fullstair(location, rotation, 1, width, width, height, foundation, Materials[Model.ModelType.Fullstair]));
            //왼쪽
            rotation = new Data.Rot(0, 0, 90);
            location = new Data.Cord(this.Location.X - Data.Config.WallTickness + this.Size.Length,
                                     this.Location.Y + this.Size.Width - Data.Config.WallTickness - width,
                                     this.Location.Z + Data.Config.FloorTickness + foundation);
            this.Components.Add(new Model.Fullstair(location, rotation, 1, width, width, height, foundation, Materials[Model.ModelType.Fullstair]));


            //2층 진입 계단
            foundation = (Data.Config.RoomHeight / 2);
            location   = new Data.Cord(
                this.Location.X + this.Size.Length - Data.Config.WallTickness,
                this.Location.Y + width - 10,
                this.Location.Z + Data.Config.FloorTickness + (Data.Config.RoomHeight / 2));
            this.Components.Add(new Model.Fullstair(location, rotation, number, length, width, height, foundation, Materials[Model.ModelType.Fullstair]));

            //2층 계단과 연결되는 평지
            foundation = 0;
            rotation   = new Data.Rot(0, 0, 90);
            location   = new Data.Cord(this.Location.X + this.Size.Length,
                                       this.Location.Y + Data.Config.WallTickness,
                                       this.Location.Z + Data.Config.FloorTickness + Data.Config.RoomHeight - Data.Config.FloorTickness);
            this.Components.Add(new Model.Fullstair(location, rotation, 1, width, width * 2, height, foundation, Materials[Model.ModelType.Fullstair]));
        }
Exemple #10
0
        //카메라가 바라보는 방향을 방의 타입에 따라, 현관은 입구를, 거실은 창을, 방은 창문을 바라본다.
        protected virtual void CreateCamera(int cameraNumber)
        {
            double rotation = 0;

            Data.Cord a = new Data.Cord(Location.X + (0.5 * Size.Length), Location.Y + (0.5 * Size.Width), Location.Z + 170);

            Data.SideType current = Data.SideType.Wall;
            foreach (Data.SideCardinalDirection sideDirection in Enum.GetValues(typeof(Data.SideCardinalDirection)))
            {
                foreach (Data.Side side in this.Sides[sideDirection])
                {
                    if (current < side.Type)
                    {
                        Data.Cord b = side.GetMidCord();

                        double y = b.Y - a.Y;
                        double x = b.X - a.X;

                        if (x == 0)
                        {
                            if (y > 0)
                            {
                                rotation = 90;
                            }
                            else
                            {
                                rotation = 270;
                            }
                        }
                        else
                        {
                            rotation = (Math.Acos(y / x) * (180 / Math.PI));

                            if (rotation < 0)
                            {
                                rotation += 360;
                            }
                        }


                        current = side.Type;
                    }
                }
            }


            this.Components.Add(new Model.Camera(new Data.Cord(Location.X + (0.5 * Size.Length), Location.Y + (0.5 * Size.Width), Location.Z + 170), new Data.Rot(0, 0, rotation), cameraNumber));
        }
Exemple #11
0
        public Room(Data.Size size, Dictionary <Model.ModelType, Dictionary <string, string> > materials, Dictionary <StaticCompType, string> staticComp)
        {
            id            = Guid.NewGuid();
            this.Location = new Data.Cord();
            //this.Type = type;
            this.Size             = size;
            this.Components       = new List <Model.Modelable>();
            this.Sides            = new Dictionary <Data.SideCardinalDirection, List <Data.Side> >();
            this.Materials        = materials;
            this.StaticComponents = staticComp;

            foreach (Data.SideCardinalDirection sidePosition in Enum.GetValues(typeof(Data.SideCardinalDirection)))
            {
                Sides[sidePosition] = new List <Data.Side>();
            }

            InitializeSides();
        }
Exemple #12
0
        private void InitializeSides()
        {
            //초기화
            foreach (Data.SideCardinalDirection sidePosition in Enum.GetValues(typeof(Data.SideCardinalDirection)))
            {
                Sides[sidePosition].Clear();
            }

            //좌표계산
            Data.Cord p0 = new Data.Cord(this.Location, 0, 0, 0);
            Data.Cord p1 = new Data.Cord(this.Location, 0, Size.Width, 0);
            Data.Cord p2 = new Data.Cord(this.Location, Size.Length, Size.Width, 0);
            Data.Cord p3 = new Data.Cord(this.Location, Size.Length, 0, 0);

            //좌표입력
            this.Sides[Data.SideCardinalDirection.West].Add(new Data.Side(Data.SideCardinalDirection.West, Data.SideType.Wall, p0, p1));
            this.Sides[Data.SideCardinalDirection.North].Add(new Data.Side(Data.SideCardinalDirection.North, Data.SideType.Wall, p1, p2));
            this.Sides[Data.SideCardinalDirection.East].Add(new Data.Side(Data.SideCardinalDirection.East, Data.SideType.Wall, p2, p3));
            this.Sides[Data.SideCardinalDirection.South].Add(new Data.Side(Data.SideCardinalDirection.South, Data.SideType.Wall, p3, p0));
        }
Exemple #13
0
 public Camera(Data.Cord location, Data.Rot rotation, int cameraNumber)
 {
     this.Location     = location;
     this.Rotation     = rotation;
     this.CameraNumber = cameraNumber;
 }
Exemple #14
0
 //TODO: 당장은 평지붕이 올라가도록 디자인했다.
 private void CreateRoof()
 {
     Data.Cord location = this.Location.Clone() as Data.Cord;
     this.Components.Add(new Model.Flatroof(new Data.Cord(location.X - 0.01, location.Y - 0.01, location.Z + Data.Config.RoomHeight), new Data.Rot(), Data.Config.FloorTickness - 0.01, Size.Width + 0.02, Size.Length + 0.02, Materials[Model.ModelType.Flatroof]));
 }
Exemple #15
0
 private Model.Wall CreateWall(Data.Cord startPoint, Data.Cord endPoint, List <Data.Hole> holes, Dictionary <string, string> wallMat)
 {
     Model.Wall wall = new Model.Wall(startPoint, endPoint, Data.Config.WallTickness, Size.Height, holes, wallMat);
     return(wall);
 }
Exemple #16
0
        //TODO: 현재 삽입되는 부가적인 모델(창문이나 문 또는 가구)의 피벗(기준점) 위치가 정해지지 않아, 임시적으로 현재 언리얼에 있는 모델을 기준으로 계산되어 있다.
        private void CreateWalls()
        {
            foreach (Data.SideCardinalDirection sidePos in Enum.GetValues(typeof(Data.SideCardinalDirection)))
            {
                foreach (Data.Side side in Sides[sidePos])
                {
                    List <Data.Hole> holes = new List <Data.Hole>();

                    if (side.Type == Data.SideType.Wall)
                    {
                        //그냥 벽일 경우, 특정한 작업을 딱히 할 필요는 없다.
                    }
                    else if (side.Type == Data.SideType.Door)
                    {
                        double doorPos = 0;
                        if (side.Position == Data.SideCardinalDirection.East)
                        {
                            doorPos = (side.End.Y - side.Start.Y) / 2.0;
                            Model.Static door = new Model.Static(
                                new Data.Cord(side.Start.X - Data.Config.TempStdWidDstDr, side.Start.Y + doorPos + Data.Config.DoorLength / 2, side.Start.Z + Data.Config.FloorTickness),
                                new Data.Rot(0, 0, 90),
                                this.StaticComponents[StaticCompType.Door]
                                );
                            this.Components.Add(door);
                        }
                        else if (side.Position == Data.SideCardinalDirection.West)
                        {
                            doorPos = (side.End.Y - side.Start.Y) / 2.0;
                            Model.Static door = new Model.Static(
                                new Data.Cord(side.Start.X + Data.Config.TempStdWidDstDr, side.Start.Y + doorPos - Data.Config.DoorLength / 2, side.Start.Z + Data.Config.FloorTickness),
                                new Data.Rot(0, 0, 270),
                                this.StaticComponents[StaticCompType.Door]
                                );
                            this.Components.Add(door);
                        }
                        else if (side.Position == Data.SideCardinalDirection.North)
                        {
                            doorPos = (side.End.X - side.Start.X) / 2.0;
                            Model.Static door = new Model.Static(
                                new Data.Cord(side.Start.X + doorPos - Data.Config.DoorLength / 2, side.Start.Y + Data.Config.TempStdWidDstDr, side.Start.Z + Data.Config.FloorTickness),
                                new Data.Rot(0, 0, 180),
                                this.StaticComponents[StaticCompType.Door]
                                );
                            this.Components.Add(door);
                        }
                        else if (side.Position == Data.SideCardinalDirection.South)
                        {
                            doorPos = (side.End.X - side.Start.X) / 2.0;
                            Model.Static door = new Model.Static(
                                new Data.Cord(side.Start.X + doorPos + Data.Config.DoorLength / 2, side.Start.Y + Data.Config.TempStdWidDstDr, side.Start.Z + Data.Config.FloorTickness),
                                new Data.Rot(0, 0, 0),
                                this.StaticComponents[StaticCompType.Door]
                                );
                            this.Components.Add(door);
                        }
                        Data.Hole doorHole = new Data.Hole(doorPos, Data.Config.FloorTickness + 1, Data.Config.DoorLength, Data.Config.DoorHeight);
                        holes.Add(doorHole);
                    }
                    else if (side.Type == Data.SideType.Open)
                    {
                        //DO NOT CREATE Wall
                    }
                    else if (side.Type == Data.SideType.Window)
                    {
                        double winX = 0;
                        double winY = Data.Config.WindowY;
                        if (side.Position == Data.SideCardinalDirection.East)
                        {
                            winX = (side.End.Y - side.Start.Y) / 2.0;
                            Model.Static window = new Model.Static(
                                new Data.Cord(side.Start.X - Data.Config.TempStdWidDstWin, side.Start.Y + winX, side.Start.Z + winY + Data.Config.WindowHeight / 2),
                                new Data.Rot(0, 0, 90),
                                this.StaticComponents[StaticCompType.Window]
                                );
                            this.Components.Add(window);
                        }
                        else if (side.Position == Data.SideCardinalDirection.West)
                        {
                            winX = (side.End.Y - side.Start.Y) / 2.0;
                            Model.Static window = new Model.Static(
                                new Data.Cord(side.Start.X + Data.Config.TempStdWidDstWin, side.Start.Y + winX, side.Start.Z + winY + Data.Config.WindowHeight / 2),
                                new Data.Rot(0, 0, 90),
                                this.StaticComponents[StaticCompType.Window]
                                );
                            this.Components.Add(window);
                        }
                        else if (side.Position == Data.SideCardinalDirection.North)
                        {
                            winX = (side.End.X - side.Start.X) / 2.0;
                            Model.Static window = new Model.Static(
                                new Data.Cord(side.Start.X + winX, side.Start.Y - Data.Config.TempStdWidDstWin, side.Start.Z + winY + Data.Config.WindowHeight / 2),
                                new Data.Rot(0, 0, 0),
                                this.StaticComponents[StaticCompType.Window]
                                );
                            this.Components.Add(window);
                        }
                        else if (side.Position == Data.SideCardinalDirection.South)
                        {
                            winX = (side.End.X - side.Start.X) / 2.0;
                            Model.Static window = new Model.Static(
                                new Data.Cord(side.Start.X + winX, side.Start.Y + Data.Config.TempStdWidDstWin, side.Start.Z + winY + Data.Config.WindowHeight / 2),
                                new Data.Rot(0, 0, 0),
                                this.StaticComponents[StaticCompType.Window]
                                );
                            this.Components.Add(window);
                        }
                        Data.Hole windowHole = new Data.Hole(winX, winY, Data.Config.WindowLength, Data.Config.WindowHeight);
                        holes.Add(windowHole);
                    }
                    else if (side.Type == Data.SideType.WindowWall)
                    {
                        double tempL = 270;
                        double tempH = 250;

                        double winX = 0;
                        double winY = Data.Config.FloorTickness;
                        if (side.Position == Data.SideCardinalDirection.East || side.Position == Data.SideCardinalDirection.West)
                        {
                            winX = (side.End.Y - side.Start.Y) / 2.0;
                            Model.Static window1 = new Model.Static(
                                new Data.Cord(side.Start.X, side.Start.Y + winX - tempL / 2, side.Start.Z + winY),
                                new Data.Rot(0, 0, 90),
                                this.StaticComponents[StaticCompType.SlideWindow]
                                );
                            Model.Static window2 = new Model.Static(
                                new Data.Cord(side.Start.X, side.Start.Y + winX + tempL / 2, side.Start.Z + winY),
                                new Data.Rot(0, 0, 90),
                                this.StaticComponents[StaticCompType.SlideWindow]
                                );
                            this.Components.Add(window1);
                            this.Components.Add(window2);
                        }
                        else if (side.Position == Data.SideCardinalDirection.North || side.Position == Data.SideCardinalDirection.South)
                        {
                            winX = (side.End.X - side.Start.X) / 2.0;
                            Model.Static window1 = new Model.Static(
                                new Data.Cord(side.Start.X + winX - tempL / 2, side.Start.Y, side.Start.Z + winY),
                                new Data.Rot(0, 0, 0),
                                this.StaticComponents[StaticCompType.SlideWindow]
                                );
                            Model.Static window2 = new Model.Static(
                                new Data.Cord(side.Start.X + winX + tempL / 2, side.Start.Y, side.Start.Z + winY),
                                new Data.Rot(0, 0, 0),
                                this.StaticComponents[StaticCompType.SlideWindow]
                                );
                            this.Components.Add(window1);
                            this.Components.Add(window2);
                        }

                        Data.Hole windowwallHole = new Data.Hole(winX, winY, tempL * 2, tempH); //TODO: 하드코딩되어 있는 미닫이창 크기
                        holes.Add(windowwallHole);
                    }


                    /* 다이나믹하게 생성가능한 슬라이드 윈도우를 활용하는 방법
                     * else if (side.Type == Data.SideType.WindowWall)
                     * {
                     *  double winX = 0;
                     *  double winY = Data.Config.FloorTickness + Data.Config.WallTickness;
                     *  if (side.Position == Data.SideCardinalDirection.East || side.Position == Data.SideCardinalDirection.West)
                     *  {
                     *      winX = (side.End.Y - side.Start.Y) / 2.0;
                     *
                     *      Model.Fixedwindow win = new Model.Fixedwindow(
                     *          new Data.Cord(side.Start.X - Data.Config.WallTickness / 2, side.Start.Y + winX, side.Start.Z + winY),
                     *          new Data.Rot(0, 0, 270),
                     *          new Data.Size(((winX - (Data.Config.WallTickness * 2)) * 2), Data.Config.WallTickness + 5, Data.Config.RoomHeight - (Data.Config.WallTickness * 2) - Data.Config.FloorTickness),
                     *          Data.Config.WindowFrame,
                     *          Materials[Model.ModelType.Fixedwindow]
                     *      );
                     *      this.Components.Add(win);
                     *  }
                     *  else if (side.Position == Data.SideCardinalDirection.North || side.Position == Data.SideCardinalDirection.South)
                     *  {
                     *      winX = (side.End.X - side.Start.X) / 2.0;
                     *
                     *      Model.Fixedwindow win = new Model.Fixedwindow(
                     *          new Data.Cord(side.Start.X + winX, side.Start.Y + Data.Config.WallTickness / 2, side.Start.Z + winY),
                     *          new Data.Rot(0, 0, 0),
                     *          new Data.Size(((winX - (Data.Config.WallTickness * 2)) * 2), Data.Config.WallTickness + 5, Data.Config.RoomHeight - (Data.Config.WallTickness * 2) - Data.Config.FloorTickness),
                     *          Data.Config.WindowFrame,
                     *          Materials[Model.ModelType.Fixedwindow]
                     *      );
                     *      this.Components.Add(win);
                     *  }
                     *
                     *  Data.Hole windowwallHole = new Data.Hole(winX, winY, ((winX - (Data.Config.WallTickness * 2)) * 2), Data.Config.RoomHeight - (Data.Config.WallTickness * 2) - Data.Config.FloorTickness);
                     *  holes.Add(windowwallHole);
                     *
                     * }
                     */

                    if (side.Type != Data.SideType.Open)
                    {
                        //미세하게 어긋나는 계산 조정 및 Materal이 정확하게 반연되기 위한 논리
                        Data.Cord start = new Data.Cord(side.Start.X, side.Start.Y, side.Start.Z);
                        Data.Cord end   = new Data.Cord(side.End.X, side.End.Y, side.End.Z);

                        //start.Z = start.Z + Data.Config.FloorTickness;
                        //end.Z = end.Z + Data.Config.FloorTickness;

                        if (side.Position == Data.SideCardinalDirection.East)
                        {
                            start.X = start.X - Data.Config.WallTickness / 2;
                            end.X   = end.X - Data.Config.WallTickness / 2;

                            this.Components.Add(CreateWall(end, start, holes, Materials[Model.ModelType.Wall]));
                        }
                        else if (side.Position == Data.SideCardinalDirection.North)
                        {
                            start.Y = start.Y - Data.Config.WallTickness / 2;
                            end.Y   = end.Y - Data.Config.WallTickness / 2;

                            this.Components.Add(CreateWall(start, end, holes, Materials[Model.ModelType.Wall]));
                        }
                        else if (side.Position == Data.SideCardinalDirection.West)
                        {
                            start.X = start.X + Data.Config.WallTickness / 2;
                            end.X   = end.X + Data.Config.WallTickness / 2;

                            this.Components.Add(CreateWall(start, end, holes, Materials[Model.ModelType.Wall]));
                        }
                        else if (side.Position == Data.SideCardinalDirection.South)
                        {
                            start.Y = start.Y + Data.Config.WallTickness / 2;
                            end.Y   = end.Y + Data.Config.WallTickness / 2;

                            this.Components.Add(CreateWall(end, start, holes, Materials[Model.ModelType.Wall]));
                        }
                    }
                }
            }
        }
Exemple #17
0
 public Static(Data.Cord loc, Data.Rot rot, string mesh)
 {
     this.Location = loc;
     this.Rotation = rot;
     this.Mesh     = mesh;
 }