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); }
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 }