public override void OnFixedUpdate(float timeMult) { base.OnFixedUpdate(timeMult); if (frozenTimeLeft > 0) { return; } switch (state) { case StateIdle: { if (currentTransitionState == AnimState.Idle) { // InhaleStart SetTransition((AnimState)1, true, delegate { // Inhale SetTransition((AnimState)2, true, delegate { // ExhaleStart SetTransition((AnimState)3, true, delegate { state = StateAttacking; smokesLeft = MathF.Rnd.Next(6, 12); }); }); }); } break; } case StateAttacking: { if (attackTime <= 0f) { attackTime = 60f; SetAnimation((AnimState)5); SetTransition((AnimState)4, true, delegate { Vector3 pos = Transform.Pos; Smoke smoke = new Smoke(); smoke.OnActivated(new ActorActivationDetails { LevelHandler = levelHandler, Pos = new Vector3(pos.X - 26f, pos.Y - 18f, pos.Z - 20f) }); levelHandler.AddActor(smoke); smokesLeft--; if (smokesLeft <= 0) { state = StateIdle; SetAnimation(AnimState.Idle); } }); } else { attackTime -= timeMult; } break; } } }