Пример #1
0
        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);
        }
Пример #2
0
    public static RPGActionQueue Create(IEnumerable <RPGAction> newQueueActions)
    {
        var newQueue = new RPGActionQueue();

        newQueue.Actions.AddRange(newQueueActions);
        return(newQueue);
    }
Пример #3
0
    public static RPGActionQueue Create(RPGAction action)
    {
        var newQueue = new RPGActionQueue();

        newQueue.Actions.Add(action);
        return(newQueue);
    }
Пример #4
0
    public static RPGActionQueue Create(RPGActionType actionType, Dictionary <string, object> parameters)
    {
        var newQueue = new RPGActionQueue();

        newQueue.Actions.Add(new RPGAction(actionType, parameters));
        return(newQueue);
    }
Пример #5
0
        public static RPGAction RepeatQueue(RPGActionQueue queue)
        {
            var parameters = new Dictionary <string, object>()
            {
                { "Queue", queue }
            };

            return(new RPGAction(RPGActionType.RepeatQueue, parameters));
        }
Пример #6
0
        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();
        }