Beispiel #1
0
        public override (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handedness)
        {
            if (!ShowHands)
            {
                return(HandsHidden, -1f);
            }

            switch (newState)
            {
            case ViewModelState.Idle:
                return(string.IsNullOrEmpty(HandAnimations.IdleAnim) ? ("Idle", -1) : (HandAnimations.IdleAnim, -1));

            case ViewModelState.Raise:
                return(HandAnimations.RaiseAnim, HandAnimations.RaiseAnimDuration);

            case ViewModelState.Lower:
                return(HandAnimations.LowerAnim, HandAnimations.LowerAnimDuration);

            case ViewModelState.Block:
                throw new NotImplementedException();

            case ViewModelState.Charge:
                throw new NotImplementedException();

            case ViewModelState.Fire:
                return(HandAnimations.AttackAnim, HandAnimations.AttackAnimDuration);

            default:
                Debug.LogWarning($"Tried to get hand state {newState} from {name} which is not supported for {nameof(MeleeWeaponViewModelScript)}");
                return("Idle", -1);
            }
        }
Beispiel #2
0
 public override void SetState(ViewModelState newState, ViewModelHandednessState handedness, float timeScale)
 {
     if (newState == ViewModelState.Fire)
     {
         FireSound.Ref()?.Play();
     }
 }
Beispiel #3
0
        /// <summary>
        /// Gets the default animations for a state
        /// </summary>
        private string GetAnimForState(ViewModelState state, ViewModelHandednessState handednessState)
        {
            //TODO handle this properly

            //return state.ToString(); //for now

            return(WeaponViewModelScript.HandsHidden); //if we have no ViewModel, we should not have hands either
        }
Beispiel #4
0
        public override void SetState(ViewModelState newState, ViewModelHandednessState handedness, float timeScale)
        {
            if (Mode == MeleeWeaponViewModelMode.ExplicitAnimation || Mode == MeleeWeaponViewModelMode.GlueAndAnimate)
            {
                ModelAnimator.speed = 1f / timeScale;

                switch (newState)
                {
                case ViewModelState.Idle:
                    ModelAnimator.Play("Idle");
                    break;

                case ViewModelState.Raise:
                    ModelAnimator.Play("Raise");
                    break;

                case ViewModelState.Lower:
                    ModelAnimator.Play("Lower");
                    break;

                case ViewModelState.Block:
                    //TODO
                    break;

                case ViewModelState.Charge:
                    //TODO
                    break;

                case ViewModelState.Fire:
                    ModelAnimator.Play("Attack");
                    break;

                default:
                    Debug.LogWarning($"Tried to put {name} into state {newState} which is not supported for {nameof(MeleeWeaponViewModelScript)}");
                    ModelAnimator.Play("Idle");
                    break;
                }
            }

            //we don't animate in other modes but we still play sounds
            switch (newState)
            {
            case ViewModelState.Raise:     //TODO will probably have to rethink raise and lower sounds
                RaiseSound.Ref()?.Play();
                break;

            case ViewModelState.Lower:
                LowerSound.Ref()?.Play();
                break;

            case ViewModelState.Fire:
                AttackSound.Ref()?.Play();
                break;
            }
        }
        public override (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handednessState)
        {
            RangedWeaponViewModelAnimations animSet; //TODO handle 2hand, 1hand, ADS

            switch (handednessState)
            {
            case ViewModelHandednessState.OneHanded:
                animSet = OneHandAnimations;
                break;

            case ViewModelHandednessState.TwoHanded:
                animSet = TwoHandAnimations;
                break;

            case ViewModelHandednessState.ADS:
                animSet = ADSAnimations;
                break;

            default:
                Debug.LogWarning($"Tried to get animation for \"{handednessState}\" handedness from {name} which is not supported for {nameof(RangedWeaponViewModelScript)}");
                return("Idle", -1);
            }

            switch (newState)
            {
            case ViewModelState.Idle:
                return(string.IsNullOrEmpty(animSet.IdleAnim) ? ("Idle", -1) : (animSet.IdleAnim, -1));

            case ViewModelState.Raise:
                return(animSet.RaiseAnim, animSet.RaiseAnimDuration);

            case ViewModelState.Lower:
                return(animSet.LowerAnim, animSet.LowerAnimDuration);

            case ViewModelState.Reload:
                return(animSet.ReloadAnim, animSet.ReloadAnimDuration);

            case ViewModelState.Charge:
                return(animSet.ChargeAnim, animSet.ChargeAnimDuration);

            case ViewModelState.Fire:
                return(animSet.FireAnim, animSet.FireAnimDuration);

            case ViewModelState.Recock:
                return(animSet.RecockAnim, animSet.RecockAnimDuration);

            default:
                Debug.LogWarning($"Tried to get hand state {newState} from {name} which is not supported for {nameof(RangedWeaponViewModelScript)}");
                return("Idle", -1);
            }
        }
Beispiel #6
0
        public override (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handednessState)
        {
            /*
             * switch (newState)
             * {
             *  case ViewModelState.Reload:
             *      return ("LegacyReload", -1);
             *  case ViewModelState.Fire:
             *      return ("LegacyFire", -1);
             *  default:
             *      return ("LegacyIdle", -1);
             * }
             */

            return("Hidden", -1);
        }
Beispiel #7
0
        public override (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handedness)
        {
            switch (newState)
            {
            case ViewModelState.Idle:
                return(IdleAnimation, IdleDuration);

            case ViewModelState.Raise:
                return(RaiseAnimation, RaiseDuration);

            case ViewModelState.Lower:
                return(LowerAnimation, LowerDuration);

            case ViewModelState.Fire:
                return(FireAnimation, FireDuration);

            default:
                Debug.LogWarning($"Tried to get hand state {newState} from {name} which is not supported for {nameof(PlaceholderWeaponViewModelScript)}");
                return("Idle", -1);
            }
        }
Beispiel #8
0
        public void SetState(ViewModelState newState, WeaponViewModelScript weapon, ViewModelHandednessState handednessState, float timeScale) //TODO extend this for 2hand/1hand/ADS
        {
            string stateName     = null;
            float  stateDuration = -1; //sentinel value for "use animation value"

            if (weapon != null)
            {
                (stateName, stateDuration) = weapon.GetHandAnimation(newState, handednessState); //grab anim params from model if possible
            }
            else
            {
                stateName = GetAnimForState(newState, handednessState);
            }

            HandsAnimator.Play(stateName);
            if (stateDuration > 0)
            {
                HandsAnimator.speed = (1f / stateDuration) * (1f / timeScale); //we assume animations have a duration of 1 second... TODO make it actually scale considering animation length
            }
            else
            {
                HandsAnimator.speed = 1 * (1f / timeScale);
            }
        }
        public override void SetState(ViewModelState newState, ViewModelHandednessState handedness, float timeScale)
        {
            if (handedness == ViewModelHandednessState.ADS && AllowADS)
            {
                switch (newState)
                {
                case ViewModelState.Idle:
                    CurrentFrameSet = ADSIdle;
                    break;

                case ViewModelState.Raise:
                    CurrentFrameSet = ADSRaise;
                    ADSRaiseSound.Ref()?.Play();
                    break;

                case ViewModelState.Lower:
                    CurrentFrameSet = ADSLower;
                    ADSLowerSound.Ref()?.Play();
                    break;

                case ViewModelState.Fire:
                    CurrentFrameSet = ADSFire;
                    FireSound.Ref()?.Play();
                    break;

                default:
                    Debug.LogWarning($"Tried to put {name} into state {newState} which is not supported for {nameof(SpriteWeaponViewModelScript)}");
                    break;
                }
            }
            else
            {
                if (handedness == ViewModelHandednessState.ADS)
                {
                    Debug.LogWarning($"Tried to set {nameof(SpriteWeaponViewModelScript)} to ADS frames which is disabled on {name}");
                }

                switch (newState)
                {
                case ViewModelState.Idle:
                    CurrentFrameSet = Idle;
                    break;

                case ViewModelState.Raise:
                    CurrentFrameSet = Raise;
                    RaiseSound.Ref()?.Play();
                    break;

                case ViewModelState.Lower:
                    CurrentFrameSet = Lower;
                    LowerSound.Ref()?.Play();
                    break;

                case ViewModelState.Reload:
                    CurrentFrameSet = Reload;
                    ReloadSound.Ref()?.Play();
                    break;

                case ViewModelState.Fire:
                    CurrentFrameSet = Fire;
                    FireSound.Ref()?.Play();
                    break;

                default:
                    Debug.LogWarning($"Tried to put {name} into state {newState} which is not supported for {nameof(SpriteWeaponViewModelScript)}");
                    break;
                }
            }

            CurrentFrameIndex = 0;
            Timescale         = AllowTimescale ? timeScale : 1;
            TimeInFrame       = 0;

            SetImage(CurrentFrameSet, CurrentFrameIndex);
        }
 public override (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handedness)
 {
     return("Hidden", -1);  //always hide hands
 }
Beispiel #11
0
        public override void SetState(ViewModelState newState, ViewModelHandednessState handednessState, float timeScale)
        {
            if (State == newState)
            {
                return;
            }

            switch (newState)
            {
            case ViewModelState.Fire:
                //spawn effect if exists
                if (EffectPrefab != null)
                {
                    EffectObject = Instantiate <GameObject>(EffectPrefab, EffectPoint);
                }

                //play fire animation if exists
                if (AnimController != null)
                {
                    if (!string.IsNullOrEmpty(FiringState))
                    {
                        AnimController.Play(FiringState);
                    }
                }

                //play sound if exists
                if (FireSound != null)
                {
                    FireSound.Play();
                }
                break;

            case ViewModelState.Reload:
                //play reload animation if exists
                if (AnimController != null)
                {
                    if (!string.IsNullOrEmpty(ReloadingState))
                    {
                        AnimController.Play(ReloadingState);
                    }
                }
                //play sound if exists
                if (ReloadSound != null)
                {
                    ReloadSound.Play();
                }

                break;

            default:
                if (AnimController != null)
                {
                    if (UseMoveStateTransitions)
                    {
                        AnimController.SetBool("IsMoving", false);
                    }
                    else
                    {
                        //enter Fixed state, set anim accordingly
                        if (!string.IsNullOrEmpty(FixedState))
                        {
                            AnimController.Play(FixedState);
                        }
                        //stop anim if we don't have an actual fixed one
                        else
                        {
                            AnimController.StopPlayback();
                        }
                    }
                }
                break;
            }

            State = newState;
        }
Beispiel #12
0
 public abstract (string, float) GetHandAnimation(ViewModelState newState, ViewModelHandednessState handedness);
Beispiel #13
0
 public abstract void SetState(ViewModelState newState, ViewModelHandednessState handedness, float timeScale);
Beispiel #14
0
        /// <summary>
        /// Gets the default animations for a state
        /// </summary>
        private string GetAnimForState(ViewModelState state, ViewModelHandednessState handednessState)
        {
            //TODO handle this properly

            return(state.ToString()); //for now
        }
        public override void SetState(ViewModelState newState, ViewModelHandednessState handednessState, float timeScale)
        {
            if (ModelAnimator == null)
            {
                Debug.LogWarning($"{nameof(RangedWeaponViewModelScript)} on {name} has no {nameof(ModelAnimator)} attached!");
                return;
            }

            //TODO moving the model when entering and exiting ADS

            bool wasInADS = InADS;

            string prefix;

            switch (handednessState)
            {
            case ViewModelHandednessState.TwoHanded:
                prefix = "";     //no prefix
                InADS  = false;
                break;

            case ViewModelHandednessState.OneHanded:
                prefix = "OneHand";
                InADS  = false;
                break;

            case ViewModelHandednessState.ADS:
                prefix = "ADS";
                InADS  = true;
                break;

            default:
                Debug.LogWarning($"Tried to put {name} into animation with handedness \"{handednessState}\" which is not supported for {nameof(RangedWeaponViewModelScript)}");
                ModelAnimator.Play("Idle");
                return;
            }

            //ADS<->non-ADS transitions; no support for animations yet
            if (CenterModelInAds)
            {
                if (wasInADS && !InADS)
                {
                    //move from ADS to not ADS

                    InterpolateADSTransition(ModelDefaultPosition, ModelDefaultRotation);
                }
                else if (!wasInADS && InADS)
                {
                    //move from not ADS to ADS
                    Vector3 posTargetWorld    = WeaponComponent.CenterViewModelPoint.position;
                    Vector3 vecOffsetToOrigin = ModelTransform.localPosition - ADSOffsetPoint.localPosition;
                    ModelTransform.position = posTargetWorld + WeaponComponent.CenterViewModelPoint.TransformVector(ADSOffsetPoint.localPosition);
                    Vector3 targetPosition = ModelTransform.localPosition;
                    ModelTransform.localPosition = ModelDefaultPosition;

                    ModelTransform.rotation = WeaponComponent.CenterViewModelPoint.rotation;
                    Quaternion rotCenterPlusOffset = ModelTransform.localRotation * ADSOffsetPoint.localRotation;
                    ModelTransform.localRotation = rotCenterPlusOffset;
                    Quaternion targetRotation = ModelTransform.localRotation;
                    ModelTransform.localRotation = ModelDefaultRotation;

                    InterpolateADSTransition(targetPosition, targetRotation);
                }
            }

            ModelAnimator.speed = 1f / timeScale;

            switch (newState)
            {
            case ViewModelState.Idle:
                ModelAnimator.Play(prefix + "Idle");
                break;

            case ViewModelState.Raise:
                ModelAnimator.Play(prefix + "Raise");
                RaiseSound.Ref()?.Play();
                break;

            case ViewModelState.Lower:
                ModelAnimator.Play(prefix + "Lower");
                LowerSound.Ref()?.Play();
                break;

            case ViewModelState.Reload:
                ModelAnimator.Play(prefix + "Reload");
                if (ReloadSound != null)
                {
                    ReloadSound.pitch = 1f / timeScale;
                    ReloadSound.Play();
                }
                break;

            case ViewModelState.Charge:
                ModelAnimator.Play(prefix + "Charge");
                break;

            case ViewModelState.Fire:
                ModelAnimator.Play(prefix + "Fire");
                FireSound.Ref()?.Play();
                FireParticleSystem.Ref()?.Play();
                FlashFireLight();
                EjectShell();
                break;

            case ViewModelState.Recock:
                ModelAnimator.Play(prefix + "Recock");
                break;

            default:
                Debug.LogWarning($"Tried to put {name} into state {newState} which is not supported for {nameof(RangedWeaponViewModelScript)}");
                ModelAnimator.Play("Idle");
                break;
            }
        }