Exemple #1
0
        public void ProcessAnimationAction(AnimationEventTemplate aeTemplate, ActionTemplate action, string animEvent)
        {
            var character = aeTemplate.Entity.FindTemplate <CharacterTemplate>();
            var ae        = new ActionEvent(character, character, aeTemplate.AnimEvent.Position,
                                            aeTemplate.AnimEvent.Rotation, AnimationEvents.ToStateEvent(animEvent));

            if (ae.State == ActionState.Activate)
            {
                Debug.DrawLine(
                    aeTemplate.AnimEvent.Position, aeTemplate.AnimEvent.Rotation.GetPosition(aeTemplate.AnimEvent.Position, 2.5f),
                    Color.red, 5f);
            }
            var animationList = action.Config.GetEventHandler(animEvent);

            if (animationList != null)
            {
                for (int i = 0; i < animationList.Count; i++)
                {
                    animationList[i].Trigger(ae, animEvent);
                }
            }
            if (ae.State != ActionState.None)
            {
                aeTemplate.Entity.Post(ae);
                action.Entity.PostNoGlobal(ae);
            }
            if (ae.State == ActionState.Start)
            {
                for (int i = 0; i < action.Config.Costs.Count; i++)
                {
                    action.Config.Costs[i].ProcessCost(ae.Origin, action.Entity);
                }
            }
        }
        private void FindEventPositionRotation(AnimationEventTemplate aet, ActionTemplate action)
        {
            var target = aet.Target;

            if (action != null)
            {
                if (action.Weapon?.Loaded != null)
                {
                    aet.AnimEvent.Position = action.Weapon.Loaded.Spawn.position;
                    aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? action.Weapon.Loaded.Spawn.rotation;
                    return;
                }
                if (action.SpawnPivot != null)
                {
                    aet.AnimEvent.Position = action.SpawnPivot.position;
                    aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? action.SpawnPivot.rotation;
                    return;
                }
            }
            if (aet.SpriteAnimator?.CurrentFrame != null)
            {
                if (aet.SpriteRenderer != null)
                {
                    aet.AnimEvent.Position = aet.SpriteRenderer.GetEventPosition(aet.SpriteAnimator.CurrentFrame);
                    aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? aet.SpriteRenderer.BaseTr.rotation;
                }
                else
                {
                    aet.AnimEvent.Position = aet.SimpleSpriteRenderer.GetEventPosition(aet.SpriteAnimator.CurrentFrame, action?.Config.EquippedSlot ?? 0);
                    aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? aet.SimpleSpriteRenderer.Rotation;
                }
                return;
            }
            if (aet.SpawnPivot != null)
            {
                aet.AnimEvent.Position = aet.SpawnPivot.position;
                aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? aet.SpawnPivot.rotation;
            }
            else
            {
                aet.AnimEvent.Position = aet.Tr.position;
                aet.AnimEvent.Rotation = target?.GetLookAtTarget(aet.AnimEvent.Position) ?? aet.Tr.rotation;
            }
        }