Exemplo n.º 1
0
    /// <summary>
    /// 折った状態紙を開く「基に戻る」
    /// </summary>
    /// <param name="center"></param>
    /// <returns></returns>
    IEnumerator Unfolding(float center)
    {
        //Debug.Log("CenterPoint " + centerPoint);
        //Debug.Log("Paper Width " + paperWidth);
        //Debug.Log("Paper Height " + paperHeight);
        //Debug.Log("Dir" + dir);
        //Debug.Log("Degree = " + degree);
        objectGenerator.GenerateDuplicate(centerPoint, dir, paperHeight, paperWidth);

        // 音が鳴らせる
        bool soundDebug = playSystem.GetComponent <PlaySystem>().GetSoundDebug();

        if (!soundDebug)
        {
            SoundManager.Instance.Play_FoldSE();
        }

        switch (dir)
        {
        case Side.LEFT:
            while (degree <= 0)
            {
                for (int id = 0; id < vertices.Length; id++)
                {
                    if (vertices[id].z == 0)
                    {
                        continue;
                    }

                    vertices[id].x = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Cos(degree * Mathf.Deg2Rad) + center;
                    vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Sin(degree * Mathf.Deg2Rad) + 0;
                    mesh.vertices  = vertices;
                }
                degree += 36;

                // ゲームがポーズされたら
                while (playSystem.GetMenuPauseFlag())
                {
                    yield return(null);
                }

                yield return(new WaitForSeconds(.1f));
            }
            break;

        case Side.RIGHT:
            while (degree >= 0)
            {
                for (int id = 0; id < vertices.Length; id++)
                {
                    if (vertices[id].z == 0)
                    {
                        continue;
                    }

                    vertices[id].x = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Cos(degree * Mathf.Deg2Rad) + center;
                    vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].x - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Sin(degree * Mathf.Deg2Rad) + 0;

                    mesh.vertices = vertices;
                }
                degree -= 36;

                // ゲームがポーズされたら
                while (playSystem.GetMenuPauseFlag())
                {
                    yield return(null);
                }

                yield return(new WaitForSeconds(0.1f));
            }
            break;

        case Side.BOTTOM:
            while (degree >= 0)
            {
                for (int id = 0; id < vertices.Length; id++)
                {
                    if (vertices[id].z == 0)
                    {
                        continue;
                    }

                    vertices[id].y = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Cos(degree * Mathf.Deg2Rad) + center;
                    vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * -Mathf.Sin(degree * Mathf.Deg2Rad) + 0;

                    mesh.vertices = vertices;
                }
                degree -= 36;

                // ゲームがポーズされたら
                while (playSystem.GetMenuPauseFlag())
                {
                    yield return(null);
                }

                yield return(new WaitForSeconds(0.1f));
            }
            break;

        case Side.UP:
            while (degree <= 0)
            {
                for (int id = 0; id < vertices.Length; id++)
                {
                    if (vertices[id].z == 0)
                    {
                        continue;
                    }

                    vertices[id].y = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Cos(degree * Mathf.Deg2Rad) + center;
                    vertices[id].z = Mathf.Sqrt(Mathf.Pow((originalVert[id].y - center), 2) + (Mathf.Pow(originalVert[id].z, 2))) * Mathf.Sin(degree * Mathf.Deg2Rad) + 0;

                    mesh.vertices = vertices;
                }
                degree += 36;

                // ゲームがポーズされたら
                while (playSystem.GetMenuPauseFlag())
                {
                    yield return(null);
                }

                yield return(new WaitForSeconds(.1f));
            }
            break;
        }

        // 折りサイドを最初の状態に戻す。
        isFolding   = false;
        dir         = Side.NONE;
        centerPoint = -1;
        degree      = 0;

        if (objectGenerator.GetDupList().Count > 0)
        {
            foreach (GameObject x in objectGenerator.GetDupList())
            {
                x.GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Dynamic;
            }
        }
        objectGenerator.ClearDuplicatedObjList();
    }
Exemplo n.º 2
0
    void Update()
    {
        GameProgress progress      = manager.GetComponent <PlaySystem>().GetProgress();
        bool         drawMode      = manager.GetComponent <PlaySystem>().IsDrawMode();
        bool         menuPauseFlag = manager.GetComponent <PlaySystem>().GetMenuPauseFlag();

        //if (progress == GameProgress.Pause || !drawMode) return;

        //if (isHeroStop || !isDrawMode) return;
        if (!menuPauseFlag && drawMode)
        {
            if (Input.GetMouseButton(0) && !fillChaeck)
            {
                Ray        ray = mainCamera.GetComponent <ImageProjection>().GetRay();
                RaycastHit hit = mainCamera.GetComponent <ImageProjection>().GetHit();

                if (Physics.Raycast(ray, out hit))
                {
                    //エラー対策(maker)がオブジェクトに触れてなければリターン
                    if (hit.collider.name == "Canvas" || hit.transform.gameObject != gameObject)
                    {
                        touching = false;
                        return;
                    }

                    var drawPoint = new Vector2(hit.textureCoord.x * drawTexture.width, hit.textureCoord.y * drawTexture.height);

                    //線を引いている最中なら
                    if (touching)
                    {
                        DrawLine(prevPoint, drawPoint);
                    }
                    //線の引き始め
                    else
                    {
                        Draw(drawPoint);
                    }
                    prevPoint = drawPoint;
                    touching  = true;

                    //Drawで変更したbuffer情報をdrawTextureにセットしmainTeexture、spriteに反映
                    drawTexture.SetPixels(buffer);
                    drawTexture.Apply();

                    hit.transform.gameObject.GetComponent <Renderer>().material.mainTexture = drawTexture;
                    parent.GetComponent <SpriteRenderer>().sprite = Sprite.Create(drawTexture, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
                }
                else
                {
                    touching = false;
                }
            }
            else
            {
                touching = false;
            }
        }

        //色を戻す
        if (fillChaeck)
        {
            Draw(new Vector2(drawTexture.width / 2, 64), 1);
            //Draw(new Vector2(drawTexture.width / 2, drawTexture.height / 2), 1);

            drawTexture.SetPixels(buffer);
            drawTexture.Apply();

            GetComponent <Renderer>().material.mainTexture = drawTexture;
            parent.GetComponent <SpriteRenderer>().sprite  = Sprite.Create(drawTexture, new Rect(0, 0, 64, 64), new Vector2(0.5f, 0.5f));
        }

        //塗りつぶし処理
        //if (parent.GetComponent<ColorChange>().GetAddChaeck() == true
        //    && !fillChaeck)
        if (objectGenerator.GetDupList().Count > 0)
        {
            FillBlack();
            //Debug.Log("        通過");
        }
    }