private void StartModelRunwayWalk(FashionModel fashionModel) { IScheduler scheduler = GameFacade.Instance.RetrieveMediator <SchedulerMediator>().Scheduler; fashionModel.UnityGameObject.SetActiveRecursively(true); fashionModel.UnityGameObject.transform.position = mLoadingPosition.position; fashionModel.UnityGameObject.transform.rotation = mLoadingPosition.rotation; fashionModel.Nametag.Showing = true; Animation animationComponent = fashionModel.UnityGameObject.GetComponentInChildren(typeof(Animation)) as Animation; SkinnedMeshRenderer skinnedMeshRenderer = fashionModel.UnityGameObject.GetComponentInChildren(typeof(SkinnedMeshRenderer)) as SkinnedMeshRenderer; skinnedMeshRenderer.updateWhenOffscreen = true; if (animationComponent != null) { animationComponent.AddClip(mRunwayWalkClip, mRunwayWalkClip.name); animationComponent.Play(mRunwayWalkClip.name); } FashionModel model = fashionModel; ITask activeFashionModelTask = scheduler.StartCoroutine(CleanUpModelAfterRunwayWalk(model)); if (mFashionModels.Count > 1) { activeFashionModelTask.AddOnExitAction(delegate() { CleanUpModel(model.UnityGameObject); fashionModel.Nametag.Showing = false; }); } mActiveModelTasks.Add(activeFashionModelTask); }
private IEnumerator <IYieldInstruction> CleanUpModelAfterRunwayWalk(FashionModel fashionModel) { yield return(new YieldForSeconds(mRunwayWalkClip.length)); }
private IEnumerator <IYieldInstruction> RunwayLoop() { FashionModel[] fashionModelArray = new FashionModel[mFashionModels.Count]; mFashionModels.CopyTo(fashionModelArray, 0); float modelSpawnRate = mRunwayWalkClip.length / 2; if (mFashionModels.Count == 1) { modelSpawnRate = mRunwayWalkClip.length; } int modelIndex = 0; StartModelRunwayWalk(fashionModelArray[modelIndex]); mActiveCameraTarget = fashionModelArray[modelIndex].UnityGameObject.transform; GameObject head = GameObjectUtility.GetNamedChildRecursive("Head", mActiveCameraTarget.gameObject); SetCameraTargets(head.transform); float time = 0.0f; float nextCameraChangeTimer = 0.0f; int cameraIndex = 0; if (mSwitchViewsTask != null) { mSwitchViewsTask.Exit(); } mSwitchViewsTask = GameFacade.Instance.RetrieveMediator <SchedulerMediator>().Scheduler.StartCoroutine(SwitchView(mCameraViews[cameraIndex].Key)); nextCameraChangeTimer += mCameraViews[cameraIndex].Value; while (true) { if (time >= (modelIndex + 1) * modelSpawnRate) { ++modelIndex; if (modelIndex >= fashionModelArray.Length) { if (modelIndex % 4 == 0 && modelIndex != 0) { nextCameraChangeTimer = time; } } StartModelRunwayWalk(fashionModelArray[modelIndex % fashionModelArray.Length]); mActiveCameraTarget = fashionModelArray[modelIndex % fashionModelArray.Length].UnityGameObject.transform; } if (time >= nextCameraChangeTimer) { ++cameraIndex; if (mSwitchViewsTask != null) { mSwitchViewsTask.Exit(); } mSwitchViewsTask = GameFacade.Instance.RetrieveMediator <SchedulerMediator>().Scheduler.StartCoroutine(SwitchView(mCameraViews[cameraIndex % mCameraViews.Count].Key)); nextCameraChangeTimer += (mCameraViews[cameraIndex % mCameraViews.Count].Value); } time += Time.deltaTime; yield return(new YieldUntilNextFrame()); } }