예제 #1
0
        private float GetAnimationTime(string clipName, float customSpeedScale = 1f)
        {
            if (customSpeedScale != 1)
            {
                animationSpeedMulti = customSpeedScale;
            }
            float attackSpeed       = base.characterBody.attackSpeed;
            float scaledAttackSpeed = ((attackSpeed - 1f) * 0.5f) + 1f;

            scaledAttackSpeed = Mathf.Min(scaledAttackSpeed, maxAttackSpeed);
            base.characterDirection.modelAnimator.SetFloat("speedScale", scaledAttackSpeed);
            netFloatContainer           = new ClientAnimatorFloatContainer();
            netFloatContainer.animFloat = scaledAttackSpeed;
            netFloatContainer.animName  = "speedScale";
            NetServerRequestAnimFloat.Invoke(netFloatContainer, thisUser);
            float unScaledDuration = base.characterDirection.modelAnimator.runtimeAnimatorController.animationClips.Where(x => x.name.ToLower().Equals(clipName.ToLower())).First().length;

            return(unScaledDuration / animationSpeedMulti / scaledAttackSpeed);
        }
예제 #2
0
        public override void Update()
        {
            base.Update();

            // TEST TODO ERASE
            if (Input.GetMouseButtonDown(1))
            {
                base.characterBody.inventory.GiveItem(ItemIndex.Hoof);
                base.characterBody.inventory.GiveItem(ItemIndex.Syringe);
            }
            #region networking animation
            // handle animation shit
            if (characterMotor.isGrounded && characterMotor.velocity.magnitude > 0.01f)
            {
                isMovingContainer.animBool = true;
                if (Time.time > netMsgTimer)
                {
                    NetServerRequestAnimBool.Invoke(isMovingContainer, thisUser);
                }
                characterDirection.modelAnimator.SetBool("isMoving", true);
            }
            else
            {
                isMovingContainer.animBool = false;
                if (Time.time > netMsgTimer)
                {
                    NetServerRequestAnimBool.Invoke(isMovingContainer, thisUser);
                }
                characterDirection.modelAnimator.SetBool("isMoving", false);
            }
            // handle velocity net / client
            characterDirection.modelAnimator.SetFloat("yVelocity", characterMotor.velocity.y);
            yVelocityContainer.animFloat = characterMotor.velocity.y;
            if (Time.time > netMsgTimer)
            {
                NetServerRequestAnimFloat.Invoke(yVelocityContainer, thisUser);
            }

            // handle grounded net / client
            characterDirection.modelAnimator.SetBool("isGrounded", characterMotor.isGrounded);
            isGroundedContainer.animBool = characterMotor.isGrounded;
            if (Time.time > netMsgTimer)
            {
                NetServerRequestAnimBool.Invoke(isGroundedContainer, thisUser);
            }

            // handle scaling movement speed
            speedScale = base.characterBody.moveSpeed / base.characterBody.baseMoveSpeed;
            speedScale = (speedScale - 1f) * 0.5f + 1f;
            characterDirection.modelAnimator.SetFloat("moveSpeedScale", speedScale);
            moveSpeedScaleContainer.animFloat = speedScale;
            if (Time.time > netMsgTimer)
            {
                NetServerRequestAnimFloat.Invoke(moveSpeedScaleContainer, thisUser);
            }

            // HANDLE TIMER RESET
            if (Time.time > netMsgTimer)
            {
                netMsgTimer = Time.time + netMsgCooldown;
            }
            netMsgTimer += Time.deltaTime;
            #endregion
        }