Пример #1
0
    public void InstantiateObjects(int step, Action <bool> onTouch)
    {
        _state = State.StartStep;
        _shuffleElapsedTime = 0.0f;
        _hideElapsedTime    = 0.0f;

        // 現在のステップの正解id.
        MasterItemStep stepMaster = MasterStepHolder.Instance().GetOneOrFail(LevelManager.Instance.Level, step);
        int            answerId   = stepMaster.AnswerId;

        // タッチ時コールバック
        Action <Fukidashi> onTouchCallBack = (fukidashi) => {
            if (fukidashi.HasTouched)
            {
                return;
            }

            // 正否を判定.
            bool isSuccess = (fukidashi.AnswerId == answerId);

            // 正否に応じた吹き出しアニメーションetcを実行.
            if (isSuccess)
            {
                fukidashi.Success();
            }
            else
            {
                fukidashi.Fail();
            }

            // 現在のステップの吹き出しは削除.
            ClearObjects(fukidashi);

            // 呼び出し先のコールバックを実行.
            onTouch(isSuccess);
        };

        // 吹き出しを生成.
        List <MasterItemFukidashi> masterList = MasterFukidashiHolder.Instance().GetList(
            (item) => { return(item.Stage == LevelManager.Instance.Level && item.Step == step); }
            );

        foreach (var master in masterList)
        {
            Fukidashi fukidashi = InstantiateObject(master, onTouchCallBack);
            _fukidashiList.Add(fukidashi);
        }

        // 吹き出しの座標を、ランダム生成版で上書く.
        if (_useRandomPoint)
        {
            foreach (var fukidashi in _fukidashiList)
            {
                fukidashi.GetComponent <RectTransform>().anchoredPosition = _randomPointsGenerator.PickPointRandomly();
            }
            _randomPointsGenerator.Reset();
        }
    }
Пример #2
0
    private Fukidashi InstantiateObject(MasterItemFukidashi master, Action <Fukidashi> onTouch)
    {
        GameObject fukidashiGameObj = Instantiate(_fukidashiPrefab, _canvas.transform);
        Fukidashi  fukidashi        = fukidashiGameObj.GetComponent <Fukidashi>();

        Debug.Assert(fukidashi != null);

        fukidashi.SetMasterData(master);
        fukidashi.TouchCallback = onTouch;

        return(fukidashi);
    }
Пример #3
0
    public void ClearObjects(Fukidashi touchedOne = null)
    {
        _state = State.EndStep;

        foreach (Fukidashi fukidashi in _fukidashiList)
        {
            if (touchedOne && touchedOne.AnswerId == fukidashi.AnswerId)
            {
                // ※タッチした吹き出しは削除しない(各種アニメーションなどさせるため).
                continue;
            }
            Destroy(fukidashi.gameObject);
        }
        _fukidashiList.Clear();
    }