Esempio n. 1
0
    // Start is called before the first frame update

    public void CreateRulette(GameObject data)
    {
        float totalRange = 0;

        for (int i = 0; i < data.transform.childCount; i++)
        {
            moveParameter = data.transform.GetChild(i).GetComponent <MoveParameter>();

            // ネットワークオブジェクトにしてみた
            // GameObject netObj = PhotonNetwork.Instantiate(ROULETTE_IMAGE, transform.position, Quaternion.identity, 0);

            //親子関係とサイズの変更はPrefabのStartでやる
            // netObj.transform.parent = imageParentTransform;
            //netObj.transform.localScale = new Vector3(1, 1, 1);
            //Debug.Log("ネットワークオブジェクトにしてみた");

            //Image obj = netObj.GetComponent<Image>();


            var obj = Instantiate(rouletteImage, imageParentTransform);
            obj.fillAmount = moveParameter.GetMoveRange() / 96f;

            // ピースの回転
            Vector3    axis  = new Vector3(0f, 0f, -1f);
            float      angle = CONVERT_CONSTANT * totalRange;
            Quaternion q     = Quaternion.AngleAxis(angle, axis);
            obj.transform.rotation = q * obj.transform.rotation;

            // ルーレットの色を決定
            if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.White)
            {
                obj.color = Color.white;
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Blue)
            {
                obj.color = new Color(0, 154, 255, 255);
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Purple)
            {
                obj.color = Color.magenta;
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Gold)
            {
                obj.color = Color.yellow;
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Red)
            {
                obj.color = Color.red;
            }


            // ワザの名前を入力
            Text[] texts = obj.GetComponentsInChildren <Text>();
            texts[0].text = moveParameter.GetMoveName();
            if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.White ||
                moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Gold)
            {
                texts[1].text = moveParameter.GetMovePower().ToString();
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Purple)
            {
                string star = "";
                for (int j = 0; j < moveParameter.GetMoveNumberOfStar(); j++)
                {
                    star += "☆";
                }
                texts[1].text = star;
            }
            else if (moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Blue ||
                     moveParameter.GetMoveColorName() == MoveParameter.MoveOfColorName.Red)
            {
                texts[1].text = "";
            }

            obj.transform.GetChild(0).transform.rotation = Quaternion.Euler(0, 0, -(moveParameter.GetMoveRange() / 2 + totalRange) * CONVERT_CONSTANT);
            totalRange += moveParameter.GetMoveRange();

            // Debug.Log(moveParameter.GetMoveName());
        }
    }
Esempio n. 2
0
    // 引数はGameMasterから渡されるワザのデータ)
    public IEnumerator Spin(GameObject data)
    {
        yield return(new WaitForSeconds(0.1f));



        // 初期位置から目標点までの回転角度

        BoardController boardController = GameObject.Find("BoardMaster").GetComponent <BoardController>();
        int             myPlayerId      = boardController.GetMyPlayerId();
        int             whichTurn       = boardController.GetWhichTurn();

        // バトルを仕掛けた側がgoalAngleを生成し相手プレイヤーに送る
        if (myPlayerId == whichTurn)
        {
            goalAngle = 360 * N + Random.Range(0, 360);
            boardController.SetGoalAngleCustomProperty(rouletteParentParameter.GetPlayerId(), goalAngle);
        }

        // 仕掛けた側から送られてgoalAngleを受け取って回る
        else
        {
            while (receiveFlag == false)
            {
                yield return(null);
            }
            receiveFlag = false;
        }

        loopCount = 0;

        // スローになるまでの角速度立式
        omega      = 2 * goalAngle / (totalTime + normalTime);
        deltaOmega = omega * clock / (totalTime - normalTime + clock);
        omegaSlow  = omega;

        while (loopCount < totalTime / clock)
        {
            // スローになるまで
            if (loopCount < normalTime / clock)
            {
                // 等角速度運動
                transform.Rotate(new Vector3(0, 0, omega * clock));
            }

            else if (loopCount < totalTime / clock)
            {
                // 速度をループ回数に対して階段状に小さくする
                omegaSlow = omegaSlow - deltaOmega;

                transform.Rotate(new Vector3(0, 0, omegaSlow * clock));
            }

            loopCount++;

            // clock秒ごとにwhile文を呼び出す
            yield return(new WaitForSeconds(clock));
        }
        // 回転終了
        Debug.Log("ゴールは" + goalAngle % 360);

        // ピース幅を順番に見て、goalAngle %360がどの範囲にあるかを調べる
        float totalRange = 0;

        for (int i = 0; i < data.transform.childCount; i++)
        {
            // 各ワザのパラメータ取得
            moveParameter = data.transform.GetChild(i).GetComponent <MoveParameter>();

            // 不等式の両端
            float leftAngle  = totalRange * 3.75f;
            float rightAngle = leftAngle + moveParameter.GetMoveRange() * 3.75f;

            // Debug.Log(leftAngle + "から" + rightAngle);
            if (leftAngle <= (goalAngle + offsetAngle) % 360 &&
                (goalAngle + offsetAngle) % 360 < rightAngle)
            {
                // goalAngleに該当するワザ
                Debug.Log("getMoveName = " + moveParameter.GetMoveName());
                Debug.Log("getMoveColor = " + moveParameter.GetMoveColorName());
                // moveParameter.ExecMoveEffect(phaseState);
                yield return(moveParameter);
            }
            totalRange += moveParameter.GetMoveRange();
        }
        // 次のスピンのためにオフセットを準備
        offsetAngle += goalAngle % 360;

        // ここでmoveParameterから両者の技を参照して色判定を行う
        // この実装だとfor文でcurrent側のmoveParameterが捨てられているので書き方を変える
        // 勝敗結果と技の効果はSpinControllerに返した上、さらにboardControllerに渡したほうがいいよね~
        goalAngle = -1;
    }