コード例 #1
0
    //パネルを踏んだら点灯し、再度踏んだら消灯する機能
    public static void PanelChange(GameObject ObjectM, bool flg)
    {
        switch (PanelStrage.ThisMode)
        {
//-----------------------[普通]--------------------------------------------------------------------
        case PanelManager.PanelMode.Normal:

            //パネルが点灯していない場合
            if (flg)
            {
                SEMaster.SESound(SEMaster.SoundType.PanelOn);

                //踏んだパネルの情報を与える
                PanelInfomation.InputObject.Add(ObjectM);

                //Materialを変更する
                ObjectM.GetComponent <MeshRenderer>().material = PanelResources.M_Blue;

                //解答を保存する
                AnswerSystem.AnswerPanel(flg);

                //パネルを踏んだ判定をする
                ObjectM.GetComponent <Panel>().Button = true;
            }
            else
            {
                SEMaster.SESound(SEMaster.SoundType.PanelOff);

                //パネルの情報を削除する
                PanelInfomation.InputObject.Remove(ObjectM);

                //Materialを変更する
                ObjectM.GetComponent <MeshRenderer>().material = PanelResources.M_Invalied;

                //解答を保存する
                AnswerSystem.AnswerPanel(flg);

                //パネルを踏んでいない判定をする
                ObjectM.GetComponent <Panel>().Button = false;
            }
            break;

//>--------------------------------[一筆書き]-------------------------------------------<
        case PanelManager.PanelMode.One_Stroke:

            //パネルが点灯してなく、開始地点のパネルの場合
            if (!StartFlg && flg && PanelInfomation.StartPoint == ObjectM)
            {
                SEMaster.SESound(SEMaster.SoundType.PanelOn);

                //踏んだパネルの情報を与える
                PanelInfomation.InputObject.Add(ObjectM);

                //踏んだパネルの座標を取得
                ThisPosition = ObjectM.transform.localPosition;

                //解答を保存する
                AnswerSystem.AnswerPanel(flg);

                //開始地点を踏んだとみなす
                StartFlg = true;

                //パネルを踏んだ判定をする
                ObjectM.GetComponent <Panel>().Button = true;

                //周りのパネルの色を変更する
                ChangeAreaPanelColor();
            }
            //開始地点を踏むまでは機能しない
            else if (StartFlg)
            {
                //パネルが点灯してなく、開始地点以外で、左右上下のパネルの場合
                if (flg && ObjectM != PanelInfomation.StartPoint && (ObjectM.transform.localPosition == Right || ObjectM.transform.localPosition == Left || ObjectM.transform.localPosition == Up || ObjectM.transform.localPosition == Down))
                {
                    SEMaster.SESound(SEMaster.SoundType.PanelOn);

                    //踏んだパネルの情報を与える
                    PanelInfomation.InputObject.Add(ObjectM);

                    //踏んだパネルの座標を取得
                    ThisPosition = ObjectM.transform.localPosition;

                    //解答を保存する
                    AnswerSystem.AnswerPanel(flg);

                    //パネルを踏んだ判定をする
                    ObjectM.GetComponent <Panel>().Button = true;

                    //周りのパネルの色を変更する
                    ChangeAreaPanelColor();
                }
                //踏んだパネルが前に踏んだパネルの場合(開始地点は領域変更しないため、最低1つはパネルが点灯している)
                else if (PanelInfomation.InputObject.Count != 1)
                {
                    SEMaster.SESound(SEMaster.SoundType.PanelOff);

                    //領域変更がされるかどうかのフラグ
                    bool AreaChangeFlg = false;

                    //踏んでいたパネル内を検索
                    for (int i = 0; i < PanelInfomation.InputObject.Count; i++)
                    {
                        //前に踏んだパネルの場合
                        if (ObjectM == PanelInfomation.InputObject[i])
                        {
                            //領域変更フラグを立てる
                            AreaChangeFlg = true;

                            Debug.Log("前に踏んだよ");
                            break;
                        }
                    }

                    //前に踏んだパネルの場合は、領域を変更する
                    if (AreaChangeFlg)
                    {
                        //パネルを消すまでの場所を計算する
                        int count = PanelInfomation.InputObject.IndexOf(ObjectM) + 1;

                        Debug.Log("消すまでの場所[" + count + "] : 全体の大きさ[" + PanelInfomation.InputObject.Count + "]");

                        //前に踏んだパネルの分、パネルを消す
                        while (count < PanelInfomation.InputObject.Count)
                        {
                            //前に踏んだパネルの踏んでいた判定をFalseにする
                            PanelInfomation.InputObject[PanelInfomation.InputObject.Count - 1].GetComponent <Panel>().Button = false;

                            //Listから前に踏んだパネルの情報を削除する
                            PanelInfomation.InputObject.RemoveAt(PanelInfomation.InputObject.Count - 1);

                            //正答数を減少させる
                            PanelStrage.Answer--;

                            //パネルを消すまでの場所に到達した場合
                            if (count > PanelInfomation.InputObject.Count)
                            {
                                Debug.Log("全体の大きさ[" + PanelInfomation.InputObject.Count + "]");

                                break;
                            }
                        }

                        //現在踏んでいる場所を更新する
                        ThisPosition = ObjectM.transform.localPosition;

                        //領域のパネルのMaterialを変更する
                        ChangeAreaPanelColor();
                    }
                    else
                    {
                        //パネルを踏んでいない判定をする
                        ObjectM.GetComponent <Panel>().Button = false;
                    }
                }
            }
            else
            {
                //Debug.Log("パネル踏めない");

                //パネルを踏んでいない判定をする
                ObjectM.GetComponent <Panel>().Button = false;
            }

            break;
        }
    }