/// <summary> /// Call after ModifyShiny to add cost. /// </summary> public static void AddYNDialogueToShiny(PlayMakerFSM shinyFsm, Cost cost, IEnumerable <AbstractItem> items) { FsmState charm = shinyFsm.GetState("Charm?"); FsmState yesState = shinyFsm.GetState(charm.Transitions[0].ToState); FsmState noState = new FsmState(shinyFsm.GetState("Idle")) { Name = "YN No" }; FsmState giveControl = new FsmState(shinyFsm.GetState("Idle")) { Name = "Give Control" }; FsmStateAction closeYNDialogue = new RandomizerExecuteLambda(() => CloseYNDialogue()); noState.ClearTransitions(); noState.RemoveActionsOfType <FsmStateAction>(); noState.AddTransition("FINISHED", "Give Control"); Tk2dPlayAnimationWithEvents heroUp = new Tk2dPlayAnimationWithEvents { gameObject = new FsmOwnerDefault { OwnerOption = OwnerDefaultOption.SpecifyGameObject, GameObject = SereCore.Ref.Hero.gameObject }, clipName = "Collect Normal 3", animationTriggerEvent = null, animationCompleteEvent = FsmEvent.GetFsmEvent("FINISHED") }; noState.AddAction(closeYNDialogue); noState.AddAction(heroUp); giveControl.ClearTransitions(); giveControl.RemoveActionsOfType <FsmStateAction>(); giveControl.AddTransition("FINISHED", "Idle"); giveControl.AddAction(new RandomizerExecuteLambda(() => PlayMakerFSM.BroadcastEvent("END INSPECT"))); shinyFsm.AddState(noState); shinyFsm.AddState(giveControl); charm.ClearTransitions(); charm.AddTransition("HERO DAMAGED", noState.Name); charm.AddTransition("NO", noState.Name); charm.AddTransition("YES", yesState.Name); yesState.AddFirstAction(new RandomizerExecuteLambda(() => cost.Pay())); yesState.AddFirstAction(closeYNDialogue); charm.AddFirstAction(new RandomizerExecuteLambda(() => OpenYNDialogue(shinyFsm.gameObject, items, cost))); }
public static void AddToShiny(PlayMakerFSM fsm, string text, Func <bool> canBuy) { FsmState noState = new FsmState(fsm.GetState("Idle")) { Name = "YN No" }; noState.ClearTransitions(); noState.RemoveActionsOfType <FsmStateAction>(); noState.AddTransition("FINISHED", "Give Control"); Tk2dPlayAnimationWithEvents heroUp = new Tk2dPlayAnimationWithEvents { gameObject = new FsmOwnerDefault { OwnerOption = OwnerDefaultOption.SpecifyGameObject, GameObject = HeroController.instance.gameObject }, clipName = "Collect Normal 3", animationTriggerEvent = null, animationCompleteEvent = FsmEvent.GetFsmEvent("FINISHED") }; noState.AddAction(new ExecuteLambda(CloseYNDialogue)); noState.AddAction(heroUp); FsmState giveControl = new FsmState(fsm.GetState("Idle")) { Name = "Give Control" }; giveControl.ClearTransitions(); giveControl.RemoveActionsOfType <FsmStateAction>(); giveControl.AddTransition("FINISHED", "Idle"); giveControl.AddAction(new ExecuteLambda(() => PlayMakerFSM.BroadcastEvent("END INSPECT"))); fsm.AddState(noState); fsm.AddState(giveControl); FsmState charm = fsm.GetState("Charm?"); string yesState = charm.Transitions[0].ToState; charm.ClearTransitions(); charm.AddTransition("HERO DAMAGED", noState.Name); charm.AddTransition("NO", noState.Name); charm.AddTransition("YES", yesState); fsm.GetState(yesState).AddAction(new ExecuteLambda(CloseYNDialogue)); charm.AddFirstAction(new ExecuteLambda(() => OpenYNDialogue(fsm.gameObject, text, canBuy))); }
public static void RemoveAnim(PlayMakerFSM fsm, string stateName, int index) { Tk2dPlayAnimationWithEvents anim = fsm.GetAction <Tk2dPlayAnimationWithEvents>(stateName, index); FsmEvent @event = new FsmEvent(anim.animationCompleteEvent ?? anim.animationTriggerEvent); fsm.RemoveAction(stateName, index); fsm.InsertAction(stateName, new NextFrameEvent { sendEvent = @event, Active = true, Enabled = true }, index); }
public override void Process(string scene, Object changeObj) { if (scene != _sceneName || !(changeObj is PlayMakerFSM fsm) || fsm.FsmName != _fsmName || fsm.gameObject.name != _objectName) { return; } FsmState noState = new FsmState(fsm.GetState("Idle")) { Name = "YN No" }; noState.ClearTransitions(); noState.RemoveActionsOfType <FsmStateAction>(); noState.AddTransition("FINISHED", "Give Control"); Tk2dPlayAnimationWithEvents heroUp = new Tk2dPlayAnimationWithEvents { gameObject = new FsmOwnerDefault { OwnerOption = OwnerDefaultOption.SpecifyGameObject, GameObject = Ref.Hero.gameObject }, clipName = "Collect Normal 3", animationTriggerEvent = null, animationCompleteEvent = FsmEvent.GetFsmEvent("FINISHED") }; noState.AddAction(new RandomizerCallStaticMethod(GetType(), nameof(CloseYNDialogue))); noState.AddAction(heroUp); // For some reason playing the animation doesn't work if we come here from being damaged, locking us in the // YN No state. I think just having a separate state to come from if we were damaged is the simplest fix. FsmState damageState = new FsmState(fsm.GetState("Idle")) { Name = "YN Damaged" }; damageState.ClearTransitions(); damageState.RemoveActionsOfType <FsmStateAction>(); damageState.AddTransition("FINISHED", "Give Control"); damageState.AddAction(new RandomizerCallStaticMethod(GetType(), nameof(CloseYNDialogue))); FsmState giveControl = new FsmState(fsm.GetState("Idle")) { Name = "Give Control" }; giveControl.ClearTransitions(); giveControl.RemoveActionsOfType <FsmStateAction>(); giveControl.AddTransition("FINISHED", "Idle"); giveControl.AddAction(new RandomizerExecuteLambda(() => PlayMakerFSM.BroadcastEvent("END INSPECT"))); fsm.AddState(noState); fsm.AddState(damageState); fsm.AddState(giveControl); FsmState charm = fsm.GetState("Charm?"); string yesState = charm.Transitions[0].ToState; charm.ClearTransitions(); charm.AddTransition("HERO DAMAGED", damageState.Name); charm.AddTransition("NO", noState.Name); charm.AddTransition("YES", yesState); // Here is a good place to remove the spent simple key if (_type == CostType.Simple) { fsm.GetState(yesState).AddFirstAction(new RandomizerExecuteLambda(() => PlayerData.instance.DecrementInt("simpleKeys"))); } fsm.GetState(yesState).AddAction(new RandomizerCallStaticMethod(GetType(), nameof(CloseYNDialogue))); charm.AddFirstAction(new RandomizerCallStaticMethod(GetType(), nameof(OpenYNDialogue), fsm.gameObject, _itemName, _cost, _type)); }
public override void Process(string scene, Object changeObj) { if (scene != _sceneName || !(changeObj is PlayMakerFSM fsm) || fsm.FsmName != _fsmName || fsm.gameObject.name != _objectName) { return; } FsmState noState = new FsmState(fsm.GetState("Idle")) { Name = "YN No" }; noState.ClearTransitions(); noState.RemoveActionsOfType <FsmStateAction>(); noState.AddTransition("FINISHED", "Give Control"); Tk2dPlayAnimationWithEvents heroUp = new Tk2dPlayAnimationWithEvents { gameObject = new FsmOwnerDefault { OwnerOption = OwnerDefaultOption.SpecifyGameObject, GameObject = Ref.Hero.gameObject }, clipName = "Collect Normal 3", animationTriggerEvent = null, animationCompleteEvent = FsmEvent.GetFsmEvent("FINISHED") }; noState.AddAction(new RandomizerCallStaticMethod(GetType(), nameof(CloseYNDialogue))); noState.AddAction(heroUp); FsmState giveControl = new FsmState(fsm.GetState("Idle")) { Name = "Give Control" }; giveControl.ClearTransitions(); giveControl.RemoveActionsOfType <FsmStateAction>(); giveControl.AddTransition("FINISHED", "Idle"); giveControl.AddAction(new RandomizerExecuteLambda(() => PlayMakerFSM.BroadcastEvent("END INSPECT"))); fsm.AddState(noState); fsm.AddState(giveControl); FsmState charm = fsm.GetState("Charm?"); string yesState = charm.Transitions[0].ToState; charm.ClearTransitions(); charm.AddTransition("HERO DAMAGED", noState.Name); charm.AddTransition("NO", noState.Name); charm.AddTransition("YES", yesState); fsm.GetState(yesState).AddAction(new RandomizerCallStaticMethod(GetType(), nameof(CloseYNDialogue))); charm.AddFirstAction(new RandomizerCallStaticMethod(GetType(), nameof(OpenYNDialogue), fsm.gameObject, _itemName, _cost, _type)); }