protected override void StateChanged() { switch ((EntityState)prevState) { case EntityState.Normal: mEffinStuff.holder.gameObject.SetActive(false); StopCoroutine(attackRoutine); ToPhase(Phase.None); break; } base.StateChanged(); switch ((EntityState)state) { case EntityState.Normal: wpAnimDat.Play("default"); mEffinStuff.holder.gameObject.SetActive(true); anim.Play(clipNormal); mCurStuffState = StuffState.Start; ToPhase(Phase.StuffContract); StartCoroutine(attackRoutine); break; case EntityState.Dead: anim.Play(clipDefeat); mAnimDat.Play(takeDefeat); ToPhase(Phase.Dead); break; case EntityState.Invalid: ToPhase(Phase.None); break; } }
IEnumerator DoStuff() { yield return(new WaitForSeconds(stuffDelay)); //mEffinStuff.Shuffle(); WaitForFixedUpdate wait = new WaitForFixedUpdate(); for (int i = 0, max = mEffinStuff.data.Length; i < max; i += 2) { float lastT = Time.fixedTime; EnemyBossEffinStuff.Data dat = mEffinStuff.data[i]; EnemyBossEffinStuff.Data dat2 = mEffinStuff.data[i + 1]; float ofsY = dat.mover.offset.y, ofsY2 = dat2.mover.offset.y; float endY = 0, endY2 = 0; switch (mCurPhase) { case Phase.StuffContract: endY = dat.originOfsY; endY2 = dat2.originOfsY; break; case Phase.StuffExpand: endY = dat.expandOfsY; endY2 = dat2.expandOfsY; break; case Phase.StuffExpandStart: endY = dat.startOfsY; endY2 = dat2.startOfsY; break; } bool done = false, done2 = false; while (!(done || done2)) { if (!done) { done = _DoStuffMoveOfsY(dat.mover, ofsY, endY, Time.fixedTime - lastT); } if (!done2) { done2 = _DoStuffMoveOfsY(dat2.mover, ofsY2, endY2, Time.fixedTime - lastT); } yield return(wait); } } switch (mCurPhase) { case Phase.StuffContract: mCurStuffState = StuffState.Contracted; break; case Phase.StuffExpand: mCurStuffState = StuffState.Expanded; break; case Phase.StuffExpandStart: mCurStuffState = StuffState.Start; break; } mLastEffinStuffTime = Time.fixedTime; ToPhase(Phase.MoveToWP); }