public static IEnumerator TestBank() { TestHarness.OnSOF(() => { var mokou = BehaviorEntity.GetExecForID("mokou"); var red = BM.TPool("strip-red/w"); var green = BM.TPool("strip-green/w"); var blue = BM.TPool("strip-purple/w"); TestHarness.RunBehaviorScript("Bank", "mokou"); //Position command is dispatched synchronously, before frame 0 VecEq(mokou.rBPI.loc, Vector2.zero, "Location is zero"); //Sync bullet commands are also dispatched synchronously AreEqual(blue.Count, 2); VecEq(red[0].bpi.loc, 2 * Vector2.right); VecEq(red[1].bpi.loc, M.PolarToXY(2, 10)); //Bank <1;:> off <1,:90> VecEq(green[0].bpi.loc, 2 * Vector2.up); VecEq(green[1].bpi.loc, Vector2.up + M.PolarToXY(1, 100)); //Bank0 <1;:> off <1,:90> VecEq(blue[0].bpi.loc, new Vector2(1f, 1f)); VecEq(blue[1].bpi.loc, Vector2.up + M.PolarToXY(1, 10)); }); while (TestHarness.Running) { yield return(null); } }
public TrackingContext(BehaviorEntity exec, ChallengeManager cm, Action <InstanceRecord> onSuccess) { this.exec = exec; this.cm = cm; this.onSuccess = onSuccess; this.t = 0; }
public static IEnumerator TestPracticeSelector1() { bool cb = false; //Running Static Analysis 1 new InstanceRequest(() => cb = true, FixedDfc(FixedDifficulty.Lunatic), boss: new BossPracticeRequest(AllPBosses[0], new SMAnalysis.Phase(null !, PhaseType.NONSPELL, 3, new LocalizedString("_")))).Run(); IsFalse(cb); yield return(WaitForLoad()); for (int ii = 0; ii < 10; ++ii) { yield return(null); } var m = BehaviorEntity.GetExecForID("mokou"); AreEqual(0, PublicDataHoisting.GetF("v1", 1)); AreEqual(0, PublicDataHoisting.GetF("v1", 2)); //Go to third phase and then callback AreEqual(7, PublicDataHoisting.GetF("v1", 3)); AreEqual(0, PublicDataHoisting.GetF("v1", 4)); AreEqual(0, m.NumRunningSMs); IsFalse(cb); //2 second delay for (int ii = 0; ii < ETime.ENGINEFPS * InstanceRequest.WaitBeforeReturn; ++ii) { yield return(null); } IsTrue(cb); AreEqual("TestPractice", SceneManager.GetActiveScene().name); }
public static void LocalReset() { //AudioTrackService.ClearAllAudio(); SFXService.ClearConstructed(); Events.Event0.DestroyAll(); ETime.Slowdown.RevokeAll(MultiOp.Priority.CLEAR_SCENE); ETime.Timer.DestroyAll(); BehaviorEntity.DestroyAllSummons(); PublicDataHoisting.DestroyAll(); FiringCtx.ClearNames(); ReflWrap.ClearWrappers(); StateMachineManager.ClearCachedSMs(); BulletManager.ClearPoolControls(); BulletManager.ClearEmpty(); BulletManager.ClearAllBullets(); BulletManager.DestroyCopiedPools(); InstanceData.CampaignDataUpdated.Proc(); #if UNITY_EDITOR || ALLOW_RELOAD Events.LocalReset.Proc(); #endif //Ordered last so cancellations from HardCancel will occur under old data Instance = new InstanceData(InstanceMode.NULL); Debug.Log($"Reloading level: {Difficulty.Describe()} is the current difficulty"); UIManager.UpdateTags(); }
public static IEnumerator TestBasicFiring() { TestHarness.OnSOF(() => { var mokou = BehaviorEntity.GetExecForID("mokou"); var red = BM.TPool("strip-red/w"); var green = BM.TPool("strip-green/w"); TestHarness.RunBehaviorScript("Regular Fire", "mokou"); TAssert.VecEq(mokou.rBPI.loc, Vector2.zero, "Location is zero"); TestHarness.Check(0, () => { //Bullet commands are dispatched during IEnum, which occurs sometime during frame 0 Assert.AreEqual(red.Count, 2); TAssert.VecEq(red[0].bpi.loc, new Vector2(1, 0)); TAssert.VecEq(red[1].bpi.loc, new Vector2(-1, 0)); TAssert.PoolEq(red, green); }); TestHarness.Check(4, () => { Assert.AreEqual(red.Count, 6); TAssert.VecEq(red[0].bpi.loc, M.PolarToXY(1 + 4f / 120, 0)); TAssert.VecEq(red[2].bpi.loc, M.PolarToXY(1 + 2f / 120, 15)); Assert.AreEqual(red[5].bpi.index, 2); TAssert.VecEq(red[5].bpi.loc, M.PolarToXY(1, 210)); TAssert.PoolEq(red, green); }); }); while (TestHarness.Running) { yield return(null); } }
private static void CheckGCXPSequential() { var m = BehaviorEntity.GetExecForID("mokou"); var p11 = BM.TPool("sakura-pink/w"); var p12 = BM.TPool("fireball-pink/w"); var p21 = BM.TPool("sakura-red/w"); var p22 = BM.TPool("fireball-red/w"); TestHarness.Check(0, () => { VecEq(Vector2.zero, m.rBPI.loc); AreEqual(p11.Count, 1); AreEqual(p12.Count, 0); }); TestHarness.Check(1, () => { AreEqual(p11.Count, 2); AreEqual(p12.Count, 1); }); TestHarness.Check(2, () => { AreEqual(p11.Count, 2); AreEqual(p12.Count, 2); }); //Note: This didn't use to work for GTR, because the first GTR iteration went like this: // - call child 1 // - start waiter // > child 1 finishes, calls child 2 // so the waiter ended up running after the child. This was fixed with RunTryPrepend for Async and Move commands. TestHarness.Check(4, () => { AreEqual(p11.Count, 3); AreEqual(p12.Count, 2); }); TestHarness.Check(5, () => { AreEqual(p11.Count, 4); AreEqual(p12.Count, 3); AreEqual(p21.Count, 0); }); TestHarness.Check(6, () => { AreEqual(p11.Count, 4); AreEqual(p12.Count, 4); AreEqual(p21.Count, 1); AreEqual(p22.Count, 0); }); TestHarness.Check(7, () => { AreEqual(p21.Count, 2); AreEqual(p22.Count, 1); }); TestHarness.Check(8, () => { AreEqual(p21.Count, 3); AreEqual(p22.Count, 2); }); TestHarness.Check(9, () => { AreEqual(p21.Count, 4); AreEqual(p22.Count, 3); }); TestHarness.Check(10, () => { AreEqual(p21.Count, 4); AreEqual(p22.Count, 4); VecEq(V2(2, 0), m.rBPI.loc); }); }
public BottomTracker Initialize(BehaviorEntity beh, string sname, ICancellee canceller) { source = beh; source.TryAsEnemy(out enemy); text.text = sname; cT = canceller; return(this); }
public override void ResetV(BehaviorEntity parent) { base.ResetV(parent); for (int ii = 0; ii < all.Length; ++ii) { all[ii].ResetV(parent); } }
public void Attach(BehaviorEntity new_beh) { if (found) { throw new Exception("Cannot attach BEHPointer twice"); } beh = new_beh; found = true; }
public void LinkBoss(BehaviorEntity exec) { if (tracking == null) { throw new Exception("Cannot link BEH when no challenge is tracked"); } Log.Unity($"Linked boss {exec.ID} to challenge {tracking.Description}"); tracking.Start(Exec = exec); }
public PhaseCompletion(PhaseProperties props, PhaseClearMethod clear, BehaviorEntity exec, CampaignSnapshot snap, float timeout) { this.props = props; this.clear = clear; this.exec = exec; this.timeout = timeout; this.hits = GameManagement.Instance.HitsTaken - snap.hitsTaken; this.noMeter = GameManagement.Instance.MeterFrames == snap.meterFrames; this.elapsedFrames = ETime.FrameNumber - snap.frame; }
/// <summary> /// While most controls are bounded by ICancellee, some aren't, so they need to be destroyed. /// </summary> public static void ClearPoolControls(bool clearPlayer = true) { foreach (var pool in simpleBulletPools.Values) { if (clearPlayer || !pool.IsPlayer) { pool.ClearControls(); pool.ResetPoolMetadata(); } } BehaviorEntity.ClearPoolControls(clearPlayer); CurvedTileRenderLaser.ClearPoolControls(clearPlayer); }
public static void OrphanAll() { ClearPoolControls(); foreach (var pool in simpleBulletPools.Values) { pool.Reset(); pool.Deactivate(); } DestroyCopiedPools(); activeNpc.Clear(); activePlayer.Clear(); Bullet.OrphanAll(); BehaviorEntity.DeInitializePools(); CurvedTileRenderLaser.DeInitializePools(); }
public static void ClearForScene() { AudioTrackService.ClearAllAudio(false); SFXService.ClearConstructed(); BulletManager.ClearPoolControls(); Events.Event0.DestroyAll(); ETime.Slowdown.RevokeAll(MultiOp.Priority.CLEAR_SCENE); ETime.Timer.DestroyAll(); BulletManager.OrphanAll(); PublicDataHoisting.DestroyAll(); FiringCtx.ClearNames(); //SMs may have links to data hoisting, so we destroy both of them on phase end. ReflWrap.ClearWrappers(); StateMachineManager.ClearCachedSMs(); BehaviorEntity.ClearPointers(); AyaPhoto.ClearTextures(); }
/// <summary> /// Task style-- will throw if cancelled. This checks cT.IsCancelled before returning, /// so you do not need to check it after awaiting this. /// </summary> /// <returns></returns> public static async Task WaitFor(BehaviorEntity Exec, ICancellee cT, float time, bool zeroToInfinity) { cT.ThrowIfCancelled(); if (zeroToInfinity && time < float.Epsilon) { time = float.MaxValue; } if (time < float.Epsilon) { return; } Exec.RunRIEnumerator(WaitFor(time, cT, GetAwaiter(out Task t))); await t; //I do want this throw here, which is why I don't 'return t' cT.ThrowIfCancelled(); }
public static IEnumerator TestGTR3() { TestHarness.OnSOF(() => { TestHarness.RunBehaviorScript("GTR3", "mokou"); var m = BehaviorEntity.GetExecForID("mokou"); TestHarness.Check(0, () => VecEq(V2(0, 1), m.rBPI.loc)); TestHarness.Check(1, () => VecEq(V2(0, 1), m.rBPI.loc)); TestHarness.Check(2, () => VecEq(V2(1, 1), m.rBPI.loc)); TestHarness.Check(3, () => VecEq(V2(1, 1), m.rBPI.loc)); TestHarness.Check(4, () => VecEq(V2(2, 1), m.rBPI.loc)); TestHarness.Check(5, () => VecEq(V2(2, 1), m.rBPI.loc)); TestHarness.Check(6, () => VecEq(V2(2, 1), m.rBPI.loc)); }); while (TestHarness.Running) { yield return(null); } }
public override Task Start(SMHandoff smh) { var behs = BehaviorEntity.GetExecsForIDs(targets); if (behs.Length == 0) { Log.Unity($"Retarget operation with targets {string.Join(", ", targets)} found no BEH", level: Log.Level.WARNING); return(Task.CompletedTask); } else if (behs.Length == 1) { return(behs[0].RunExternalSM(SMRunner.Run(states[0], smh.cT, smh.GCX), false)); } else { return(Task.WhenAll(behs.Select(x => x.RunExternalSM(SMRunner.Run(states[0], smh.cT, smh.GCX), false)))); } }
private IEnumerator RunTutorial(Action cb) { IEnumerator wait(Func <bool> cond) { while (!cond()) { yield return(null); } } IEnumerator confirm() { yield return(null); yield return(wait(() => UIConfirm.Active && !EngineStateManager.IsPaused)); } DependencyInjection.Find <IUIManager>() .SetSpellname("Reduced Tutorial (For Players Too Smart for the Normal Tutorial)"); var mov = new Movement(new Vector2(-2, 2.5f), 0); BulletManager.RequestSimple("lcircle-red/", _ => 4f, null, mov, new ParametricInfo(in mov)); var nrx = new RealizedLaserOptions(new LaserOptions(), GenCtx.New(this, V2RV2.Zero), FiringCtx.New(), new Vector2(3, 5), V2RV2.Angle(-90), Cancellable.Null); "sync _ <> relrect greenrect level <-2;2.5:1.4;1.4:0> witha 0.7 green".Into <StateMachine>() .Start(new SMHandoff(this, Cancellable.Null)); Message(text10, mtcirc1(UIConfirm.Desc)); yield return(confirm()); BulletManager.ClearAllBullets(); BehaviorEntity.GetExecForID("greenrect").InvokeCull(); mov = new Movement(new Vector2(-3, 5), -90); BulletManager.RequestLaser(null, "mulaser-blue/b", mov, new ParametricInfo(in mov), 999, 0, ref nrx); mov = new Movement(new Vector2(-2, 5), -90); BulletManager.RequestLaser(null, "zonelaser-green/b", mov, new ParametricInfo(in mov), 999, 0, ref nrx); Message(text10, mtsafe2(UIConfirm.Desc)); yield return(confirm()); cb(); }
public static IEnumerator TestGIR1() { TestHarness.OnSOF(() => { TestHarness.RunBehaviorScript("IRepeat1", "mokou"); var red = BM.TPool("strip-red/w"); var green = BM.TPool("strip-green/w"); var mokou = BehaviorEntity.GetExecForID("mokou"); TestHarness.Check(0, () => { AreEqual(1, red.Count); AreEqual(1, green.Count); AreEqual(5, mokou.NumRunningCoroutines); //1 for phase timeout, 2 for each irepeat }); TestHarness.Check(1, () => { AreEqual(2, red.Count); AreEqual(3, green.Count); SBPos(ref red[1], V2(-1, 0)); SBPos(ref green[1], V2(-1, 0)); SBPos(ref green[2], V2(0, 1)); AreEqual(3, mokou.NumRunningCoroutines); //phase, red GIR waiting, final green GCR (GIR hoists itself into a callback for last GCR) }); TestHarness.Check(2, () => { AreEqual(3, red.Count); AreEqual(4, green.Count); SBPos(ref red[2], V2(0, 1)); SBPos(ref green[3], V2(0, -1)); AreEqual(2, mokou.NumRunningCoroutines); //phase, final red GCR }); TestHarness.Check(3, () => { AreEqual(4, red.Count); AreEqual(4, green.Count); SBPos(ref red[3], V2(0, -1)); AreEqual(1, mokou.NumRunningCoroutines); //The phase timeout coroutine is zombieing, but that's fine AreEqual(0, mokou.NumRunningSMs); }); TestHarness.Check(4, () => { AreEqual(0, mokou.NumRunningCoroutines); }); }); while (TestHarness.Running) { yield return(null); } }
public static IEnumerator TestStaticAnalysis1_1() { TestHarness.OnSOF(() => { var m = BehaviorEntity.GetExecForID("mokou"); TestHarness.RunBehaviorScript("Static Analysis 1", "mokou"); //Case 1: setup goes to phase 2, which goes to 3 and then 4. TestHarness.Check(2, () => { AreEqual(0, PublicDataHoisting.GetF("v1", 1)); AreEqual(6, PublicDataHoisting.GetF("v1", 2)); AreEqual(7, PublicDataHoisting.GetF("v1", 3)); AreEqual(8, PublicDataHoisting.GetF("v1", 4)); AreEqual(0, m.NumRunningSMs); }); }); while (TestHarness.Running) { yield return(null); } }
public static IEnumerator TestStaticAnalysis1_3() { TestHarness.OnSOF(() => { var m = BehaviorEntity.GetExecForID("mokou"); m.phaseController.Override(3, null, false); TestHarness.RunBehaviorScript("Static Analysis 1", "mokou"); //Case 3: setup is overriden, phase 3 is run; without a callback, goes to phase 4. TestHarness.Check(2, () => { AreEqual(0, PublicDataHoisting.GetF("v1", 1)); AreEqual(0, PublicDataHoisting.GetF("v1", 2)); AreEqual(7, PublicDataHoisting.GetF("v1", 3)); AreEqual(8, PublicDataHoisting.GetF("v1", 4)); AreEqual(0, m.NumRunningSMs); }); }); while (TestHarness.Running) { yield return(null); } }
public static IEnumerator TestGTR1() { TestHarness.OnSOF(() => { TestHarness.RunBehaviorScript("GTR1", "mokou"); var red = BM.TPool("strip-red/w"); var mokou = BehaviorEntity.GetExecForID("mokou"); TestHarness.Check(0, () => { VecEq(mokou.rBPI.loc, V2(1, 0)); AreEqual(1, red.Count); }); TestHarness.Check(1, () => { VecEq(mokou.rBPI.loc, V2(1, 0)); AreEqual(2, red.Count); }); TestHarness.Check(2, () => { //gtr wait frame VecEq(mokou.rBPI.loc, V2(1, 0)); AreEqual(2, red.Count); }); TestHarness.Check(3, () => { VecEq(mokou.rBPI.loc, V2(2, 0)); AreEqual(3, red.Count); }); TestHarness.Check(4, () => { VecEq(mokou.rBPI.loc, V2(2, 0)); AreEqual(4, red.Count); }); TestHarness.Check(5, () => { VecEq(mokou.rBPI.loc, V2(2, 0)); AreEqual(5, red.Count); }); TestHarness.Check(6, () => { VecEq(mokou.rBPI.loc, V2(2, 0)); AreEqual(5, red.Count); }); }); while (TestHarness.Running) { yield return(null); } }
public static IEnumerator TestCancel() { TestHarness.OnSOF(() => { TestHarness.RunBehaviorScript("Cancel", "mokou"); var mokou = BehaviorEntity.GetExecForID("mokou"); var red = BM.TPool("gem-red/w"); var green = BM.TPool("gem-green/w"); var blue = BM.TPool("gem-blue/w"); var orange = BM.TPool("gem-orange/w"); var rc = 0; TestHarness.Check(0, () => { AreEqual(1, red.Count); AreEqual(1, green.Count); AreEqual(0, blue.Count); AreEqual(4, orange.Count); rc = mokou.NumRunningCoroutines; }); TestHarness.Check(1, () => { AreEqual(2, red.Count); AreEqual(1, green.Count); AreEqual(0, blue.Count); AreEqual(4, orange.Count); // Only green is finished. red and blue will finish in next preloop AreEqual(rc - 1, mokou.NumRunningCoroutines); }); TestHarness.Check(2, () => { AreEqual(2, red.Count); AreEqual(1, green.Count); AreEqual(0, blue.Count); AreEqual(1, mokou.NumRunningCoroutines); //The phase timeout coroutine is zombieing, but that's fine AreEqual(0, mokou.NumRunningSMs); }); }); while (TestHarness.Running) { yield return(null); } }
public static IEnumerator TestStaticAnalysis1_2() { TestHarness.OnSOF(() => { var m = BehaviorEntity.GetExecForID("mokou"); bool cb = false; m.phaseController.Override(3, () => cb = true, false); TestHarness.RunBehaviorScript("Static Analysis 1", "mokou"); //Case 2: setup is overriden, phase 3 is run. TestHarness.Check(0, () => IsTrue(!cb)); TestHarness.Check(2, () => { AreEqual(0, PublicDataHoisting.GetF("v1", 1)); AreEqual(0, PublicDataHoisting.GetF("v1", 2)); AreEqual(7, PublicDataHoisting.GetF("v1", 3)); AreEqual(0, PublicDataHoisting.GetF("v1", 4)); IsTrue(cb); AreEqual(0, m.NumRunningSMs); }); }); while (TestHarness.Running) { yield return(null); } }
public void Start(BehaviorEntity exec) { exec.phaseController.Override(cr.phase.phase.index, () => { }); exec.RunSMFromScript(cr.Boss.stateMachine); }
public static void ClearPhaseAutocull(SoftcullProperties props) { ClearPhase(); BulletManager.Autocull(props); BehaviorEntity.Autocull(props); }
public override void ResetV(BehaviorEntity parent) { base.ResetV(parent); animate.Initialize(SetSprite, SetFlip); }
private IEnumerator RunTutorial(int skips) { while (SceneIntermediary.LOADING) { yield return(null); } bool canSkip() => skips-- > 0; IEnumerator wait(Func <bool> cond) { if (!canSkip()) { while (!cond()) { yield return(null); } } } IEnumerator waitlf(Func <bool> cond) => wait(() => ETime.FirstUpdateForScreen && cond()); IEnumerator waiti(IInputHandler ih) { yield return(null); yield return(waitlf(() => ih.Active)); } IEnumerator waitir(IInputHandler ih) { yield return(null); yield return(waitlf(() => !ih.Active)); } IEnumerator confirm() => waiti(UIConfirm); DependencyInjection.Find <IUIManager>().SetSpellname("Tutorial"); Message(text10, welcome1(UIConfirm.Desc)); yield return(confirm()); Prompt(text10, blue2(Pause.Desc)); yield return(waitlf(() => EngineStateManager.IsPaused)); UIManager.PauseMenu !.GoToOption(0); const float menuLeft = -4.8f; Message(text00, pause3, x: menuLeft); yield return(confirm()); Message(text00, shaders4, x: menuLeft); yield return(confirm()); Prompt(text00, shaders5, 1.2f, x: menuLeft); var sd = SaveData.s.Shaders; yield return(waitlf(() => SaveData.s.Shaders != sd)); Prompt(text00, res6, 0.85f, x: menuLeft); var r = SaveData.s.Resolution; yield return(waitlf(() => SaveData.s.Resolution != r)); Message(text00, refresh7, 0.5f, x: menuLeft); yield return(confirm()); Message(text00, fullscreen8, 0.15f, x: menuLeft); yield return(confirm()); Message(text00, vsync9, -0.25f, x: menuLeft); yield return(confirm()); Message(text00, inputsmooth10, -0.7f, x: menuLeft); yield return(confirm()); Prompt(text00, unpause11(Pause.Desc), x: menuLeft); yield return(waitlf(() => !EngineStateManager.IsLoadingOrPaused)); var mov = new Movement(new Vector2(-2, 2.5f), 0); BulletManager.RequestSimple("lcircle-red/", _ => 4f, null, mov, new ParametricInfo(in mov)); var nrx = new RealizedLaserOptions(new LaserOptions(), GenCtx.New(this, V2RV2.Zero), FiringCtx.New(), new Vector2(3, 5), V2RV2.Angle(-90), Cancellable.Null); mov = new Movement(new Vector2(2, 5), -90); BulletManager.RequestLaser(null, "mulaser-blue/b", mov, new ParametricInfo(in mov), 999, 0, ref nrx); mov = new Movement(new Vector2(3, 5), -90); BulletManager.RequestLaser(null, "zonelaser-green/b", mov, new ParametricInfo(in mov), 999, 0, ref nrx); "sync _ <> relrect greenrect level <-2;2.5:1.4;1.4:0> witha 0.7 green".Into <StateMachine>() .Start(new SMHandoff(this)); Message(text10, redcircle12); yield return(confirm()); Message(text10, legacy13); yield return(confirm()); Message(text10, safelaser14); yield return(confirm()); BulletManager.ClearAllBullets(); BehaviorEntity.GetExecForID("greenrect").InvokeCull(); Prompt(text10, fire15(ShootHold.Desc)); yield return(waitir(ShootHold)); yield return(waiti(ShootHold)); Prompt(text10, move16); yield return(waitlf(() => Math.Abs(HorizontalSpeed01) > 0.1 || Math.Abs(VerticalSpeed01) > 0.1)); Prompt(text10, focus17(FocusHold.Desc)); yield return(waiti(FocusHold)); var bcs = new Cancellable(); var boss = GameObject.Instantiate(tutorialBoss).GetComponent <BehaviorEntity>(); boss.Initialize(SMRunner.CullRoot(StateMachine.CreateFromDump(bossSM.text), bcs)); IEnumerator phase() { while (boss.PhaseShifter == null) { yield return(null); } var pct = boss.PhaseShifter; if (canSkip()) { boss.ShiftPhase(); } else { yield return(wait(() => pct.Cancelled)); } for (int ii = 0; ii < 244; ++ii) { yield return(null); //phase delay if (EngineStateManager.IsRunning) { ++ii; } } } IEnumerator shift() { boss.ShiftPhase(); for (int ii = 0; ii < 4; ++ii) { yield return(null); //phase delay } } for (int ii = 0; ii < 8; ++ii) { yield return(null); //start delay } Message(text10, boss18); yield return(confirm()); Message(text10, hpbar19); yield return(confirm()); yield return(shift()); Prompt(text10, ns20); yield return(phase()); Prompt(text10, nss21); yield return(phase()); Prompt(text10, spell22); yield return(phase()); Prompt(text10, survival23); yield return(phase()); Message(text10, items24); yield return(confirm()); Message(text10, bullets25); yield return(confirm()); yield return(shift()); Prompt(text10, shoot26); yield return(phase()); Message(text10, lives27, 0.3f); yield return(confirm()); Instance.SetLives(10); Message(text10, dots28); yield return(confirm()); Instance.SetLives(15); Message(text10, dots29); yield return(confirm()); Instance.SetLives(1); Message(text10, dots30); yield return(confirm()); Message(text10, nobombs31); yield return(confirm()); yield return(shift()); Prompt(text10, pleasedie32); yield return(waitlf(() => EngineStateManager.IsDeath)); Prompt(text00, deathscreen33, x: menuLeft); yield return(waitlf(() => !EngineStateManager.IsDeath)); yield return(shift()); Message(text10, lifeitems34, -0.3f); yield return(confirm()); yield return(shift()); Prompt(text10, lifeitems35); int currLives = Instance.Lives; yield return(waitlf(() => Instance.Lives > currLives)); yield return(shift()); Message(text10, valueitems36(InstanceData.valueItemPoints)); yield return(confirm()); yield return(shift()); Prompt(text10, points37); yield return(waitlf(() => Instance.Score > 75000)); yield return(shift()); Message(text00, scoremult38); yield return(confirm()); Message(text00, faith39(InstanceData.pivFallStep)); yield return(confirm()); Message(text00, faithblue40); yield return(confirm()); Message(text10, graze41); yield return(confirm()); yield return(shift()); Prompt(text10, scoremult42); yield return(waitlf(() => Instance.PIV >= 1.11)); yield return(shift()); yield return(waitlf(() => Instance.PIV <= 1.0)); Message(text10, scoreext43); yield return(confirm()); yield return(shift()); Prompt(text10, scoreext44); yield return(waitlf(() => Instance.Score > 2000000)); yield return(shift()); Message(text10, ability45); yield return(confirm()); yield return(shift()); Prompt(text10, ability46(Meter.Desc)); GameManagement.Instance.AddGems(100); yield return(waitlf(() => InputManager.IsMeter)); yield return(shift()); Message(text10, ability47); yield return(confirm()); Message(text10, meter48); yield return(confirm()); yield return(shift()); Message(text10, hitbox49); yield return(confirm()); yield return(shift()); Message(text10, hitbox50); yield return(confirm()); yield return(shift()); Message(text10, safelaser51); yield return(confirm()); yield return(shift()); Prompt(text10, end52); SaveData.r.CompleteTutorial(); }
protected virtual void Awake() { beh = GetComponent <BehaviorEntity>(); }
public void Trigger(BehaviorEntity Exec, GenCtx gcx, ICancellee cT) { _ = Exec.GetINode("finish-triggered", null).RunExternalSM(SMRunner.Cull(this.states[0], cT, gcx)); }