Esempio n. 1
0
        public void DoTakeItem(ItemInst item)
        {
            ScriptAniJob job = AniCatalog?.ItemHandling.TakeItem;

            if (job != null && ModelInst.TryGetAniFromJob(job, out ScriptAni ani))
            {
                if (!ani.TryGetSpecialFrame(SpecialFrame.ItemHandle, out float frame))
                {
                    frame = float.MaxValue;
                }

                var pair = new FrameActionPair(frame, () => TakeItem(item));
                ModelInst.StartAniJob(job, 0.8f, 0, pair);
                return;
            }

            TakeItem(item);
        }
Esempio n. 2
0
        private void DoAttack(ScriptAniJob job, FightMoves move, int fwdCombo = 0)
        {
            if (job == null)
            {
                return;
            }

            if (!ModelInst.TryGetAniFromJob(job, out ScriptAni ani))
            {
                return;
            }

            // combo window
            if (!ani.TryGetSpecialFrame(SpecialFrame.Combo, out float comboFrame))
            {
                comboFrame = ani.EndFrame;
            }

            var comboPair = new FrameActionPair(comboFrame, () => OpenCombo());

            // hit frame
            if (!ani.TryGetSpecialFrame(SpecialFrame.Hit, out float hitFrame))
            {
                hitFrame = comboFrame;
            }

            if (hitFrame > comboFrame)
            {
                hitFrame = comboFrame;
            }

            var hitPair = new FrameActionPair(hitFrame, () => CalcHit());

            // end of animation
            var endPair = FrameActionPair.OnEnd(() => EndFightAni());

            // start ani first, because the OnEnd-Callback from the former attack resets the fight stance
            FightAnimation   = ModelInst.StartAniJob(job, comboPair, hitPair, endPair);
            CurrentFightMove = move;
            CanCombo         = false;
            ComboNum         = fwdCombo;
        }
Esempio n. 3
0
        private void DoDodge(ScriptAniJob job)
        {
            if (job == null)
            {
                return;
            }

            if (!ModelInst.TryGetAniFromJob(job, out ScriptAni ani))
            {
                return;
            }

            // end of animation
            var endPair = FrameActionPair.OnEnd(() => EndFightAni());

            FightAnimation   = ModelInst.StartAniJob(job, endPair);
            CurrentFightMove = FightMoves.Dodge;
            CanCombo         = false;
            ComboNum         = 0;
        }
Esempio n. 4
0
        public void DoDropItem(ItemInst item, int amount, Vec3f position, Angles angles)
        {
            item = item.Split(amount);

            ScriptAniJob job = AniCatalog?.ItemHandling.DropItem;

            if (job != null && ModelInst.TryGetAniFromJob(job, out ScriptAni ani))
            {
                if (!ani.TryGetSpecialFrame(SpecialFrame.ItemHandle, out float frame))
                {
                    frame = float.MaxValue;
                }

                var pair = new FrameActionPair(frame, () => DropItem(item, position, angles));
                ModelInst.StartAniJob(job, 0.8f, 0, pair);
                return;
            }

            DropItem(item, position, angles);
        }
Esempio n. 5
0
        public void UseItem(ItemInst item)
        {
            if (item.ItemType != ItemTypes.Drinkable)
            {
                return;
            }

            ScriptAniJob job = AniCatalog?.ItemHandling.DrinkPotion;

            if (job != null && ModelInst.TryGetAniFromJob(job, out ScriptAni ani))
            {
                if (!ani.TryGetSpecialFrame(SpecialFrame.ItemHandle, out float frame))
                {
                    frame = float.MaxValue;
                }

                EquipItem(NPCSlots.RightHand, item);
                var pair = new FrameActionPair(frame, () => ChugPotion(item));
                ModelInst.StartAniJob(job, pair);
                return;
            }

            ChugPotion(item);
        }
Esempio n. 6
0
 public ActiveAni StartAniJob(ScriptAniJob aniJob, Action onEnd)
 {
     return(StartAniJob(aniJob, 1, 0, FrameActionPair.OnEnd(onEnd)));
 }