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(); } }
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); }
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(); }