Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
 private IEnumerator <IYieldInstruction> CleanUpModelAfterRunwayWalk(FashionModel fashionModel)
 {
     yield return(new YieldForSeconds(mRunwayWalkClip.length));
 }
Exemplo n.º 3
0
        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());
            }
        }