Example #1
0
    public void Test()
    {
        //Teeb world geni randomiks

        xOffset = Random.Range(0, 9999);
        yOffset = Random.Range(0, 9999);

        //Teeb kindlaks et mapi laiused oleksid paaritud arvud

        if (width % 2 == 0)
        {
            width += 1;
        }
        if (heigth % 2 == 0)
        {
            heigth += 1;
        }

        //Genereerib noisemapi

        float[,] noiseMap = NoiseGen.GenerateNoise(width, heigth, scale, levels, intensity, opacity, xOffset, yOffset, opacity2);

        //DrawTexture drawScript = GetComponent<DrawTexture>();

        //drawScript.DrawNoise(width,heigth,noiseMap);

        MakeMesh makeMesh = GetComponent <MakeMesh>();

        makeMesh.CreateMesh(width, heigth, noiseMap, heigths, coast, waterLevel, mapRadius, animalSpawnDist);
    }
Example #2
0
    public void Start()
	{
		stlHolder = GameObject.Find ("stlHolder").transform;
        var tbSpace = 20;
        GetComponent<InspectorL>().MainRect = new Rect(5, tbSpace, 250, 570);
        windowStyle.fontSize = 50;
        MM = GameObject.Find("MESH").GetComponent<MakeMesh>();
        MM.material = Mat;
        MM.Begin();
    }
Example #3
0
    /// <summary>
    /// <b>호출</b> : ElementPresenter.MakeWall()<br></br>
    /// <b>참조</b> : CalcPadding(),FindRotateAngle(), MakeMesh.MakeWalls(), Outliner.FindAllOutline()<br></br>
    /// 문/창문 위치 반영한 벽 생성 함수.
    /// Outliner로 방의 외곽선 점을 얻은 다음,
    /// 그 점들을 따라 quad로 기준이 될 벽을 생성하고,
    /// MakeMesh.MakeWalls()으로 기준 벽에 문/창문 오브젝트의 정보를 반영하여 새로운 벽 오브젝트를 생성한 뒤,
    /// 생성된 오브젝트와 그 벽의 면적을 딕셔너리로 묶어서 저장하여 반환한다.
    /// </summary>
    /// <param name="rooms">모든 방 리스트</param>
    /// <param name="elements">모든 문/창문 오브젝트 리스트</param>
    /// <param name="height">벽 높이</param>
    /// <param name="material">생성된 벽에 적용할 기본 재질</param>
    /// <param name="wallParent">생성된 벽 오브젝트를 담을 부모 오브젝트</param>
    /// <param name="isDebug">디버그 옵션</param>
    /// <returns>생성된 벽 오브젝트와 벽의 면적을 담은 딕셔너리</returns>
    public static Dictionary <Transform, float> MakeWalls(List <Transform> rooms, List <Transform> elements, float height, Material material, out Transform wallParent, bool isDebug = false)
    {
        Dictionary <Transform, float> generatedWallList = new Dictionary <Transform, float>();

        wallParent = new GameObject().transform;
        wallParent.transform.parent = rooms[0].parent;
        wallParent.name             = "Walls";
        foreach (var room in rooms)
        {
            // 방 외곽선을 이루는 점 수집
            List <Transform> subFloors = new List <Transform>();
            for (int i = 0; i < room.childCount; i++)
            {
                subFloors.Add(room.GetChild(i));
            }
            Outliner           outliner = new Outliner();
            List <List <Dot> > allDots  = outliner.FindAllOutline(subFloors);

            // 외곽선을 따라 벽 오브젝트 생성
            foreach (var dots in allDots)
            {
                for (int i = 0; i < dots.Count; i++)
                {
                    Vector3 dot1 = dots[i].position;
                    Vector3 dot2 = dots[(i + 1) % dots.Count].position;

                    // quad로 기준 벽을 생성
                    Transform wall    = GameObject.CreatePrimitive(PrimitiveType.Quad).transform;
                    float     angle   = FindRotateAngle(dot1, dot2);
                    Vector3   padding = CalcPadding(angle);
                    wall.position = (dot1 + dot2) * 0.5f + Vector3.up * height * 0.5f;
                    wall.GetComponent <Renderer>().material.color = Color.black;
                    wall.localScale = new Vector3(Mathf.Max(Mathf.Abs(dot1.x - dot2.x), Mathf.Abs(dot1.z - dot2.z)), height, 1);
                    wall.Rotate(Vector3.up * angle);

                    // 기준 벽과 문/창문 오브젝트 정보를 이용하여 새로운 벽 오브젝트 생성
                    Transform madeWall = MakeMesh.MakeWalls(wall, elements, material, out float area, isDebug).transform;
                    generatedWallList.Add(madeWall, area);

                    madeWall.parent = wallParent;
                    GameObject.Destroy(wall.gameObject);
                }
            }
        }
        return(generatedWallList);
    }
    /// <summary>
    /// 공간설정 종료 후 문/창문 설치를 위한 벽(wallTop)과 병합된 바닥 생성.
    /// </summary>
    void MakeWallsAndFloors()
    {
        //테두리 제거
        Transform borders = GameObject.Find("Borders").transform;

        for (int i = 0; i < borders.childCount; i++)
        {
            Destroy(borders.GetChild(i).gameObject);
        }
        foreach (var room in model.Room.Rooms)
        {
            for (int i = 0; i < room.childCount; i++)
            {
                FloatFloor(room.GetChild(i), 0);
            }
        }

        float border = 0.1f;
        float height = 2.2f;

        // 공간설정 완료하고 벽 세우기
        Util.MakeWallTops(model.Room.Rooms, border, height);

        //병합된 바닥 생성하기
        Transform mergedFloorParent = new GameObject().transform;

        mergedFloorParent.parent = model.Room.Rooms[0].parent;
        mergedFloorParent.name   = "MergedRooms";
        int number = 0;

        foreach (var room in model.Room.Rooms)
        {
            GameObject floor = MakeMesh.MakeRoomFloor(Util.GetChildTransform(room), out float area, isDebugMode);
            model.Room.MergedRooms.Add(floor.transform, area);
            if (floor != null)
            {
                floor.name             = "Room" + (number++).ToString();
                floor.transform.parent = mergedFloorParent;
                floor.GetComponent <MeshRenderer>().material = model.Floor.DefaultFloorMaterial;
            }
            room.gameObject.SetActive(false);
        }

        SceneManager.LoadScene("ElementSettingScene");
    }
Example #5
0
    /// <summary>
    /// <b>호출</b> : ElementPresenter.MakeWall()<br></br>
    /// <b>참조</b> : FindRotateAngle(), MakeMesh.MakeWalls(), Outliner.FindAllOutline()<br></br>
    /// 외곽벽을 생성하는 함수.
    /// Outliner를 이용하여 전체 방의 외곽 점을 수집한 뒤, 점사이 공간에 quad로 임시 벽을 생성한다.
    /// 임시벽의 위치, 크기, 회전을 참조해서 문/창문 오브젝트를 고려한 벽을 MakeMesh 클래스를 이용하여 생성한다.
    /// </summary>
    /// <param name="allFloors">전체 바닥 정보</param>
    /// <param name="elements">문/창문 리스트</param>
    /// <param name="border">벽 두께</param>
    /// <param name="height">벽 높이</param>
    /// <param name="material">외곽벽 생성시 적용할 기본 오브젝트</param>
    /// <returns>생성된 외곽벽 오브젝트를 담은 부모 오브젝트</returns>
    public static GameObject MakeOutlineWalls(List <Transform> allFloors, List <Transform> elements, float border, float height, Material material)
    {
        // 위치,크기,회전 참조를 위해 quad로 임시 생성한 벽 오브젝트를 담을 부모 오브젝트
        Transform wallParent = new GameObject().transform;

        wallParent.name = "OutlineWalls";

        // 문/창문 오브젝트를 고려하여 다시 생성한 벽 오브젝트를 담을 부모 오브젝트
        Transform outlinewallParent = new GameObject().transform;

        outlinewallParent.name = "OutlineWalls";

        // 전체 방 외곽 점 수집
        Outliner           outliner = new Outliner();
        List <List <Dot> > allDots  = outliner.FindAllOutline(allFloors);

        foreach (var dots in allDots)
        {
            for (int i = 0; i < dots.Count; i++)
            {
                Vector3 dot1  = dots[i].position;
                Vector3 dot2  = dots[(i + 1) % dots.Count].position;
                float   angle = FindRotateAngle(dot1, dot2);

                // 임시 벽 생성
                Transform wall = GameObject.CreatePrimitive(PrimitiveType.Quad).transform;
                wall.position   = (dot1 + dot2) * 0.5f + Vector3.up * height * 0.5f;
                wall.localScale = new Vector3(Mathf.Max(Mathf.Abs(dot1.x - dot2.x), Mathf.Abs(dot1.z - dot2.z)), height, 1);
                wall.Rotate(Vector3.up * ((angle + 180) % 360));
                wall.parent = wallParent;

                // 문/창문 고려한 벽 생성
                Transform madeWall = MakeMesh.MakeWalls(wall, elements, material, out float area).transform;
                madeWall.parent = outlinewallParent;
                madeWall.GetComponent <Renderer>().receiveShadows = false;
            }
        }

        GameObject.Destroy(wallParent.gameObject);
        return(outlinewallParent.gameObject);
    }
Example #6
0
    public Curve(
        bool isSelected,
        bool isBeingDrawn,
        bool isBeingMoving,
        bool isClosed,
        List <Vector3> positions,
        Vector3 position,
        Quaternion rotation)
    {
        this.isSelected   = isSelected;
        this.isBeingDrawn = isBeingDrawn;
        this.isBeingMoved = isBeingMoving;
        this.isClosed     = isClosed;
        this.positions    = positions;

        if (positions.Count >= 2)
        {
            this.mesh = MakeMesh.Curve(this.positions, this.meridian, this.radius, this.isClosed);
        }

        this.position = position;
        this.rotation = rotation;
    }
Example #7
0
        public IKnotState Update()
        {
            int ind1         = KnotStateChoose1.FindClosestPoint(this.data.oculusTouch, this.data.points);
            var chosenPoints = new List <Vector3>()
            {
                this.data.points[ind1]
            };
            Mesh pointMesh = MakeMesh.GetMeshAtPoints(chosenPoints, this.data.radius * 3);

            Graphics.DrawMesh(this.knotMesh, Vector3.zero, Quaternion.identity, this.data.curveMaterial, 0);
            Graphics.DrawMesh(pointMesh, Vector3.zero, Quaternion.identity, this.data.pointMaterial, 0);

            if (this.data.oculusTouch.GetButtonDown(this.data.buttonA))
            {
                return(new KnotStateChoose2(this.data, ind1));
            }
            else if (this.data.oculusTouch.GetButtonDown(this.data.buttonB))
            {
                return(new KnotStateBase(this.data));
            }

            return(null);
        }
Example #8
0
 private void Start()
 {
     hunterScript    = gameObject.GetComponent <HunterMethods>();
     hunterVariables = gameObject.GetComponent <HunterVariables>();
     worldScript     = GameObject.FindWithTag("GenObject").GetComponent <MakeMesh>();
 }
Example #9
0
    void Start ()
    {
        stlInterpreter = new StlInterpreter();
        mainMenu = GameObject.Find("Main Menu");
        folderWindow = GameObject.Find("Folder Window");
        sceneWindow = GameObject.Find("Scene Window");

        folderWindow.GetComponent<PanelFades>().FadeOut();
        sceneWindow.GetComponent<PanelFades>().FadeOut();
        _cursor = Instantiate(cursor) as GameObject;
        _cursor.transform.SetParent(mainMenu.transform);
        var pos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y + mouseYoffset, -1f));
        var rot = new Quaternion(0, 0, 0, 0);
        _cursor.transform.localPosition = pos;
        _cursor.transform.localRotation = rot;
        MM = GameObject.Find("MESH").GetComponent<MakeMesh>();
        MM.material = Mat;
        MM.Begin();

        for (int i = 0; i < landscapes.Count; i++)
        {
            var l = Instantiate(landscapes[i]);
            l.name = landscapes[i].name;
            l.active = false;
            landscapes[i] = l;
        }

        for (int i = 0; i < props.Count; i++)
        {
            var p = Instantiate(props[i]);
            p.name = props[i].name;
            p.active = false;
            props[i] = p;
        }

        var options = new List<Dropdown.OptionData>(skyboxes.Count);
        foreach (var skybox in skyboxes)
        {
            var newOption = new Dropdown.OptionData(skybox.name);
            options.Add(newOption);
        }
        skyboxDD.options = options;

        options = new List<Dropdown.OptionData>(MM.materials.Count);
        foreach (var mat in MM.materials)
        {
            var newOption = new Dropdown.OptionData(mat.name);
            options.Add(newOption);
        }
        materialDD.options = options;

        options = new List<Dropdown.OptionData>(landscapes.Count);
        var none = new Dropdown.OptionData("None");
        options.Add(none);
        foreach (var landscape in landscapes)
        {
            var newOption = new Dropdown.OptionData(landscape.name);
            options.Add(newOption);
        }
        landscapeDD.options = options;

        options = new List<Dropdown.OptionData>(props.Count);
        options.Add(none);
        foreach (var prop in props)
        {
            var newOption = new Dropdown.OptionData(prop.name);
            options.Add(newOption);
        }
        propDD.options = options;
        currentProp = null;



        materialDD.onValueChanged.AddListener(delegate {
            MaterialDropdownValueChangedHandler(materialDD);
        });

        skyboxDD.onValueChanged.AddListener(delegate {
            SkyboxDropdownValueChangedHandler(skyboxDD);
        });

        landscapeDD.onValueChanged.AddListener(delegate {
            LandscapeDropdownValueChangedHandler(landscapeDD);
        });

        propDD.onValueChanged.AddListener(delegate {
            PropDropdownValueChangedHandler(propDD);
        });
    }
Example #10
0
 public static MeshData GetMeshData(Vector2[] line, float width, int materialNum, float zValue)
 {
     return(MakeMesh.MakeMain(line, width, materialNum, zValue));
 }
Example #11
0
 public static MeshData GetMeshDataMk2(Vector2[] line, float width, int materialLeft, int materialMain, int materialRight, float zValue)
 {
     return(MakeMesh.MakeMainMk2(line, width, materialLeft, materialMain, materialRight, zValue));
 }
Example #12
0
 public KnotStateChoose2(KnotData data, int ind1)
 {
     this.data     = data;
     this.knotMesh = MakeMesh.GetMesh(this.data.points, this.data.meridian, this.data.radius, true);
     this.ind1     = ind1;
 }
Example #13
0
 public KnotStateChoose1(KnotData data)
 {
     this.data     = data;
     this.knotMesh = MakeMesh.GetMesh(this.data.points, this.data.meridian, this.data.radius, true);
 }
Example #14
0
 void Start()
 {
     MM = GameObject.Find("MESH").GetComponent<MakeMesh>();
 }
Example #15
0
 public void MeshUpdate()
 {
     this.mesh = MakeMesh.Curve(this.positions, this.meridian, this.radius, this.isClosed);
 }
Example #16
0
 void Start()
 {
     data      = FindObjectOfType <Data>();
     MeshMaker = GetComponent <MakeMesh>();
     hexMesh   = MeshMaker.GenerateHex();
 }
Example #17
0
    void Start()
    {
        MM = GameObject.Find("MESH").GetComponent<MakeMesh>();
        Min = new Vector3(1000, 1000, 1000);
        Max = new Vector3(-1000, -1000, -1000);
        gameObject.AddComponent<MeshFilter>();
        gameObject.AddComponent<MeshRenderer>();

        mesh = GetComponent<MeshFilter>().mesh;
        mesh.Clear();

        var rnd = GetComponent<MeshRenderer>();
        rnd.material = material;
        rnd.receiveShadows = true;
        rnd.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.On;
    }
    /// <summary>
    /// 오브젝트에 이벤트를 바인딩하는 함수.
    /// 오브젝트와 항목 선택 상태에 따라 클릭 시 선택/취소 되거나, 재질이 적용되도록 함.
    /// sliding door의 경우 애니메이션을 위해 문짝 모델을 분리하여 별도의 클릭 이벤트를 바인딩 해줌.
    /// no door의 경우 이벤트 바인딩을 하는 대신에
    /// 재질 적용릉 위해 벽지/천장/바닥 부분을 땜빵하는 Quad 모델을 Probuilder로 다시 생성함.
    /// 이때 다시 생성된 mesh들은 nodoor mesh 부모 오브젝트 아래로 들어가서 벽지 또는 바닥재가 적용될 수 있도록 바인딩한다.
    /// </summary>
    /// <param name="item">바인딩 대상 오브젝트</param>
    /// <param name="type">오브젝트 타입</param>
    private void BindItem(Transform item, DecorateType type)
    {
        if (type == DecorateType.None)
        {
            type = FindType(item);
        }
        GameObject itemObject = (type == DecorateType.Furniture ? item.parent.gameObject : item.gameObject);

        #region for door
        Transform d             = null;
        float     dir           = 0;
        Vector3   angle         = Vector3.zero;
        Vector3   localPosition = Vector3.zero;
        // Sliding Door용 X좌표.
        float defaultX = 0;
        float defaultY = 0;
        bool  isMoving = false;
        bool  isOpen = false;
        float startPos = 0, endPos = 0;
        float animationTime = 0.5f;
        float currentTime   = 0;

        if (type == DecorateType.Door)
        {
            if (type == DecorateType.Door && item.name == "NoDoor(Clone)")
            {
                GameObject mesh;
                float      area;
                mesh = MakeMesh.MakeQuad(item.GetChild(0).Find("WallL").gameObject, model.Floor.DefaultFloorMaterial, out area);
                mesh.transform.parent = nodoorMeshParent;
                nodoorMeshs.Add(mesh, area);
                mesh = MakeMesh.MakeQuad(item.GetChild(0).Find("WallR").gameObject, model.Floor.DefaultFloorMaterial, out area);
                mesh.transform.parent = nodoorMeshParent;
                nodoorMeshs.Add(mesh, area);
                mesh = MakeMesh.MakeQuad(item.GetChild(0).Find("Floor").gameObject, model.Floor.DefaultFloorMaterial, out area);
                mesh.transform.parent = nodoorMeshParent;
                nodoorMeshs.Add(mesh, area);
                mesh = MakeMesh.MakeQuad(item.GetChild(0).Find("Ceiling").gameObject, model.Floor.DefaultFloorMaterial, out area);
                mesh.transform.parent = nodoorMeshParent;
                nodoorMeshs.Add(mesh, area);
                return;
            }

            // 애니메이션과 클릭 이벤트가 적용될 문짝 오브젝트
            d             = item.GetChild(0).GetChild(0);
            d.parent      = item.transform;
            dir           = item.GetChild(0).localScale.x > 0 ? 1 : -1;
            angle         = d.eulerAngles;
            localPosition = d.localPosition;
            defaultX      = localPosition.x;
            defaultY      = angle.y;

            item.UpdateAsObservable()
            .Where(condition => isMoving)
            .Subscribe(_ =>
            {
                if (currentTime > animationTime)
                {
                    isMoving    = false;
                    currentTime = 0;
                }
                else
                {
                    currentTime  += Time.deltaTime;
                    angle.y       = Mathf.Lerp(startPos, endPos, currentTime / animationTime);
                    d.eulerAngles = angle;
                }
            });
            Destroy(item.GetComponent <BoxCollider>());
            item = item.GetComponentInChildren <MeshCollider>().transform;
        }
        #endregion

        // 오브젝트 클릭시
        if (item.GetComponent <Collider>() == null)
        {
            item.gameObject.AddComponent <MeshCollider>();
        }
        item.OnMouseDownAsObservable()
        .Where(_ => !EventSystem.current.IsPointerOverGameObject())
        .Subscribe(_ =>
        {
            if (selectedObject == null || selectedObject != itemObject)
            {
                // 처음 클릭시
                if (!selectable)
                {
                    return;
                }
                else
                {
                    Select(itemObject, type);
                }
            }
            else if (selectedObject == itemObject)
            {
                // 두번째 클릭시
                switch (type)
                {
                case DecorateType.Furniture:
                    if (!selectable)
                    {
                        SetFurniture();
                    }
                    else
                    {
                        Cancel();
                    }
                    break;

                case DecorateType.Door:
                    // 문 열기/닫기
                    isMoving = true;
                    if (!isOpen)
                    {
                        isOpen = true;
                        if (item.parent.name == "SwingDoor(Clone)")
                        {
                            startPos = defaultY;
                            endPos   = defaultY + 90 * dir;
                        }
                    }
                    else
                    {
                        isOpen = false;
                        if (item.parent.name == "SwingDoor(Clone)")
                        {
                            startPos = defaultY + 90 * dir;
                            endPos   = defaultY;
                        }
                    }
                    break;

                default:
                    if (!selectable)
                    {
                        return;
                    }
                    // 다른 경우에는 선택취소
                    Cancel();
                    break;
                }
            }
        }).AddTo(this);
    }
Example #19
0
 public void Start()
 {
     dmcHolder = GameObject.Find ("dmcHolder").transform;
     stlHolder = GameObject.Find ("stlHolder").transform;
     jobHolder = GameObject.Find ("jobHolder").transform;
     gcdHolder = GameObject.Find("gcdHolder").transform;
     var tbSpace = 20;
     var tbWidth = InspectorT.TopToolbarStrings.Length * 120;
     GetComponent<InspectorT>().MainRect = new Rect(2, 0, tbWidth, 80);
     GetComponent<InspectorR>().MainRect = new Rect(Screen.width - 255, tbSpace, 250, 570);
     GetComponent<InspectorL>().MainRect = new Rect(5, tbSpace, 250, 570);
     windowStyle.fontSize = 50;
     MM = GameObject.Find("MESH").GetComponent<MakeMesh>();
     MM.material = stlMat;
     MM.Begin();
 }
Example #20
0
 public static List <List <Vector2> > GetMainLineData(Vector2[] line, float width)
 {
     return(MakeMesh.GetMainLineData(line, width));
 }