private static string GetNameForAnimation(ActorAnimState state) //TODO non-stupid standard names
        {
            //TODO allow overrides?

            switch (state)
            {
                case ActorAnimState.Idle:
                    return "idle";
                case ActorAnimState.Dead:
                    return "dead";
                case ActorAnimState.Dying:
                    return "dying";
                case ActorAnimState.Hurting:
                    return "pain";
                case ActorAnimState.Walking:
                    return "walk";
                case ActorAnimState.Talking:
                    return "talk";
                case ActorAnimState.Running:
                    return "run";
                case ActorAnimState.Shooting:
                    return "shoot";
                case ActorAnimState.Punching:
                    return "punch";
                default:
                    return string.Empty;
            }
        }
        public void SetAnimation(ActorAnimState state)
        {
            if (LockAnimState)
                return;

            CurrentAnimState = state;

            SetAnimationForced(state);

        }
        public override void SetAnimation(ActorAnimState state)
        {
            if (LockAnimState)
            {
                return;
            }

            CurrentAnimState = state;

            SetAnimationForced(state);
        }
Beispiel #4
0
        public virtual void SetAnimation(ActorAnimState state, object args)
        {
            if (LockAnimState)
            {
                return;
            }

            CurrentAnimState = state;

            SetAnimationForced(state, args);
        }
        public void SetAnimationForced(ActorAnimState state)
        {
            if (AnimController != null)
            {
                string stateName = GetNameForAnimation(state);

                if (!string.IsNullOrEmpty(AttackAnimationOverride) && (state == ActorAnimState.Punching || state == ActorAnimState.Shooting))
                    stateName = AttackAnimationOverride;

                AnimController.Play(stateName);

                //TODO sounds, eventually
            }
        }
        public override void SetAnimationForced(ActorAnimState state)
        {
            if (AnimController != null)
            {
                string stateName = GetNameForAnimation(state);

                if (!string.IsNullOrEmpty(AttackAnimationOverride) && (state == ActorAnimState.Punching || state == ActorAnimState.Shooting))
                {
                    stateName = AttackAnimationOverride;
                }

                AnimController.Play(stateName);
            }
        }
        public override void SetAnimationForced(ActorAnimState state)
        {
            switch (state)
            {
            case ActorAnimState.Idle:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Idle);
                break;

            case ActorAnimState.Dead:
                LoopCurrentFrameSet = false;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Dead);
                break;

            case ActorAnimState.Dying:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Dead;
                NextAnimState       = ActorAnimState.Dead;
                StartAnimationSequence(Dying);
                break;

            case ActorAnimState.Walking:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Walking);
                break;

            case ActorAnimState.Running:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Running);
                break;

            case ActorAnimState.Hurting:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Hurting);
                break;

            case ActorAnimState.Talking:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Talking);
                break;

            case ActorAnimState.Shooting:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Shooting);
                break;

            case ActorAnimState.Punching:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Punching);
                break;

            default:
                LoopCurrentFrameSet = false;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(null);
                Debug.LogWarning($"Failed to set animation sequence {state} on {name} because it is not supported by {GetType().Name}!");
                break;
            }

            if (CurrentFrameSet == null || CurrentFrameSet.Length == 0)
            {
                Debug.LogWarning($"{GetType().Name} on {name} has no frames for state \"{state}\"!");
            }
        }
Beispiel #8
0
 public abstract void SetAnimationForced(ActorAnimState state, object args);
Beispiel #9
0
 public void SetAnimationForced(ActorAnimState state) => SetAnimationForced(state, null);
Beispiel #10
0
 public void SetAnimation(ActorAnimState state) => SetAnimation(state, null);
 public abstract void SetAnimationForced(ActorAnimState state);
Beispiel #12
0
        public override void SetAnimationForced(ActorAnimState state, object args)
        {
            switch (state)
            {
            case ActorAnimState.Idle:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Idle);
                break;

            case ActorAnimState.Dead:
            {
                LoopCurrentFrameSet = false;
                SpriteFrame[] nextFrames = NextFrameSet ?? Dead;
                NextFrameSet  = null;
                NextAnimState = null;
                StartAnimationSequence(nextFrames);
            }
            break;

            case ActorAnimState.Dying:
            {
                LoopCurrentFrameSet = false;
                NextAnimState       = ActorAnimState.Dead;
                if (args is DeathStateActorAnimationArgs dArgs)
                {
                    var dSequence = GetSpecificDeathAnimation(dArgs);
                    if (dSequence.HasValue)
                    {
                        if (!string.IsNullOrEmpty(dSequence.Value.DyingEffect))
                        {
                            SpawnEffect(dSequence.Value.DyingEffect);
                        }
                        NextFrameSet = dSequence.Value.DeadFrames;
                        StartAnimationSequence(dSequence.Value.DyingFrames);
                        break;
                    }
                }

                NextFrameSet = Dead;
                StartAnimationSequence(Dying);
            }
            break;

            case ActorAnimState.Walking:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Walking);
                break;

            case ActorAnimState.Running:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence((Running != null && Running.Length > 0) ? Running : Walking);
                break;

            case ActorAnimState.Hurting:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Hurting);
                break;

            case ActorAnimState.Talking:
                LoopCurrentFrameSet = true;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(Talking);
                break;

            case ActorAnimState.Shooting:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Shooting);
                break;

            case ActorAnimState.Punching:
                LoopCurrentFrameSet = false;
                NextFrameSet        = Idle;
                NextAnimState       = ActorAnimState.Idle;
                StartAnimationSequence(Punching);
                break;

            default:
                LoopCurrentFrameSet = false;
                NextFrameSet        = null;
                NextAnimState       = null;
                StartAnimationSequence(null);
                Debug.LogWarning($"Failed to set animation sequence {state} on {name} because it is not supported by {GetType().Name}!");
                break;
            }

            if (CurrentFrameSet == null || CurrentFrameSet.Length == 0)
            {
                Debug.LogWarning($"{GetType().Name} on {name} has no frames for state \"{state}\"!");
            }
        }