public override IEnumerator Routine(NodeChain nodeChain) { var gameObject = (GameObject)ValueOf("GameObject"); var targetPos = (RPGVector3)ValueOf("Target Position"); var moveSpeed = (float)ValueOf("Move Speed"); var waitToFinish = (bool)ValueOf("Wait to finish?"); var runInsteadOfWalk = (bool)ValueOf("Run Instead of Walk?"); var control = gameObject.GetComponent <RPGController>(); var queue = new RPGActionQueue(); var originalAiSetting = control.ControlledByAI; var moveAnim = runInsteadOfWalk ? control.Character.LegacyAnimations.RunAnim : control.Character.LegacyAnimations.WalkAnim; queue.Add(RPGActionFactory.MoveToPosition(targetPos, 1, moveSpeed).WithAnimation(moveAnim)); queue.Add(RPGActionFactory.WaitForSeconds(0.1f)); queue.Add(RPGActionFactory.PlayAnimation(control.Character.LegacyAnimations.IdleAnim)); queue.Add(RPGActionFactory.BasicJump(0)); control.ForceStopHandlingActions(); control.BeginActionQueue(queue); if (waitToFinish) { while (Vector3.Distance(control.transform.position, targetPos) > 2.5f) { yield return(null); } } yield return(null); }
public static RPGActionQueue Create(IEnumerable <RPGAction> newQueueActions) { var newQueue = new RPGActionQueue(); newQueue.Actions.AddRange(newQueueActions); return(newQueue); }
public static RPGActionQueue Create(RPGAction action) { var newQueue = new RPGActionQueue(); newQueue.Actions.Add(action); return(newQueue); }
public static RPGActionQueue Create(RPGActionType actionType, Dictionary <string, object> parameters) { var newQueue = new RPGActionQueue(); newQueue.Actions.Add(new RPGAction(actionType, parameters)); return(newQueue); }
public static RPGAction RepeatQueue(RPGActionQueue queue) { var parameters = new Dictionary <string, object>() { { "Queue", queue } }; return(new RPGAction(RPGActionType.RepeatQueue, parameters)); }
IEnumerator Harvest() { if (GetObject.PlayerController.Character.AnimationType == RPGAnimationType.Mecanim) { GetObject.PlayerController.Animator.SetBool("isHarvesting", true); } while (Harvesting) { if (MaterialsRemaining == 0) { Harvesting = false; if (!Harvestable.RegensResources) { Destroy(gameObject, 3.0f); } } if (Harvesting) { var playerController = GetObject.PlayerController; var animDefinition = Harvestable.ClassHarvestingAnims.First(a => a.ClassID == GetObject.PlayerCharacter.PlayerCharacterID); //playerController.RPGAnimation.CrossfadeAnimation(animName); var queue = RPGActionQueue.Create(); if (playerController.Character.AnimationType == RPGAnimationType.Legacy) { var animName = animDefinition.LegacyAnim; queue.Add(RPGActionFactory.PlayAnimation(animName)); } else { var animName = animDefinition.LegacyAnim; queue.Add(RPGActionFactory.PlayAnimation(new AnimationDefinition() { Name = "HarvestAnimation", MecanimAnimationNumber = animDefinition.AnimNumber, RPGAnimationSet = RPGAnimationSet.Harvesting })); } queue.Add(RPGActionFactory.WaitForSeconds(HarvestTime)); playerController.BeginActionQueue(queue); AudioPlayer.Instance.Play(Harvestable.HarvestSound, AudioType.SoundFX, transform.position); yield return(new WaitForSeconds(HarvestTime)); var harvestedItem = GeneralMethods.CopyObject(HarvestedItem); var quantityGained = Random.Range(Harvestable.MinAmountGained, Harvestable.MaxAmountGained + 1); quantityGained = Mathf.Min(quantityGained, MaterialsRemaining); var stack = harvestedItem as IStackable; if (stack != null) { stack.CurrentStacks = quantityGained; } if (Rm_RPGHandler.Instance.Interactables.AddHarvestItemsToInventory) { GetObject.PlayerCharacter.Inventory.AddItem(harvestedItem); } else { var itemspawner = GetObject.LootSpawner; itemspawner.SpawnItem(transform.position + transform.forward * 1.8f, harvestedItem); } MaterialsRemaining -= quantityGained; GetObject.PlayerCharacter.AddProgression(Harvestable.ProgressionGain); } yield return(null); if (MaterialsRemaining < 1) { if (!Harvestable.RegensResources) { Destroy(gameObject, 3.0f); } break; } } StopHarvesting(); }