diff --git a/Assets/Prefabs/Characters/Beasiculus/Bascileus_BaseModel.prefab b/Assets/Prefabs/Characters/Beasiculus/Bascileus_BaseModel.prefab index 406750d95..fa810b350 100644 --- a/Assets/Prefabs/Characters/Beasiculus/Bascileus_BaseModel.prefab +++ b/Assets/Prefabs/Characters/Beasiculus/Bascileus_BaseModel.prefab @@ -105633,13 +105633,13 @@ MonoBehaviour: triggerDieBehaviour: 0 m_ignoreTriggers: 1 useAnimationBasedRotation: 0 - strafeRollInputThreshold: 0.3 strafeRollForwardAnim: Roll_Forward strafeRollBackwardAnim: Roll_Backward strafeRollLeftAnim: Roll_Left strafeRollRightAnim: Roll_Right strafeRollLeftCorrectionAngle: 70.6 strafeRollRightCorrectionAngle: 70 + strafeRollBackwardCorrectionAngle: 0 --- !u!114 &9202663235077955828 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Prefabs/Characters/Player/Animator/Invector@MeleeCombat Player PRO2.controller b/Assets/Prefabs/Characters/Player/Animator/Invector@MeleeCombat Player PRO2.controller index 1ab9c2fa7..21791480e 100644 --- a/Assets/Prefabs/Characters/Player/Animator/Invector@MeleeCombat Player PRO2.controller +++ b/Assets/Prefabs/Characters/Player/Animator/Invector@MeleeCombat Player PRO2.controller @@ -772,8 +772,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 1 - resetTriggerBeforeTime: 0.5 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.5 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 @@ -781,8 +780,8 @@ MonoBehaviour: stoppingDistance: 1.2 useComboTimingWindow: 1 comboWindowStartTime: 0.7 - comboWindowDuration: 0.4 - comboWindowTimeScale: 0.2 + comboWindowDuration: 0.3 + comboWindowTimeScale: 0.4 useAttackTimeScale: 0 maxTargetDistance: 3 lowHealthTh: 10 @@ -791,7 +790,7 @@ MonoBehaviour: attackTimeScaleEnd: 0.37 rotatePlayerTowardsTarget: 1 degreeThreshold: 100 - debug: 0 + debug: 1 --- !u!1101 &-8051095333111886674 AnimatorStateTransition: m_ObjectHideFlags: 1 @@ -2749,8 +2748,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.3 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 @@ -2758,8 +2756,8 @@ MonoBehaviour: stoppingDistance: 1.2 useComboTimingWindow: 1 comboWindowStartTime: 0.6 - comboWindowDuration: 0.4 - comboWindowTimeScale: 0.2 + comboWindowDuration: 0.3 + comboWindowTimeScale: 0.4 useAttackTimeScale: 1 maxTargetDistance: 3 lowHealthTh: 30 @@ -4567,6 +4565,7 @@ MonoBehaviour: tags: - IsRolling - IgnoreIK + - LockRotation --- !u!206 &-2581317115762456654 BlendTree: m_ObjectHideFlags: 1 @@ -5216,8 +5215,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.3 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 @@ -5225,8 +5223,8 @@ MonoBehaviour: stoppingDistance: 1.2 useComboTimingWindow: 1 comboWindowStartTime: 0.6 - comboWindowDuration: 0.4 - comboWindowTimeScale: 0.2 + comboWindowDuration: 0.3 + comboWindowTimeScale: 0.4 useAttackTimeScale: 1 maxTargetDistance: 3 lowHealthTh: 10 @@ -5738,8 +5736,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.5 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 0 maxLerpDistance: 3.5 @@ -26561,15 +26558,14 @@ MonoBehaviour: ignoreDefense: 1 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.6 + blockInputBeforeTime: 1 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 positionLerpSpeed: 2 stoppingDistance: 1.2 useComboTimingWindow: 0 - comboWindowStartTime: 0.9 + comboWindowStartTime: 1 comboWindowDuration: 0.5 comboWindowTimeScale: 0.3 useAttackTimeScale: 0 @@ -26580,7 +26576,7 @@ MonoBehaviour: attackTimeScaleEnd: 0.58 rotatePlayerTowardsTarget: 1 degreeThreshold: 100 - debug: 0 + debug: 1 --- !u!1101 &542493047717198179 AnimatorStateTransition: m_ObjectHideFlags: 1 @@ -47984,8 +47980,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.5 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 0 maxLerpDistance: 3.5 @@ -48139,8 +48134,7 @@ MonoBehaviour: ignoreDefense: 0 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 1 - resetTriggerBeforeTime: 0.5 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 0 maxLerpDistance: 3.5 @@ -48542,8 +48536,7 @@ MonoBehaviour: ignoreDefense: 1 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.6 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 @@ -49431,8 +49424,7 @@ MonoBehaviour: ignoreDefense: 1 activeRagdoll: 0 senselessTime: 0 - resetAttackTrigger: 0 - resetTriggerBeforeTime: 0.6 + blockInputBeforeTime: 0.5 unlockRotationTime: 0.7 lerpPositionTowardsTarget: 1 maxLerpDistance: 3.5 diff --git a/Assets/Prefabs/Items/Powers/bBlueFireball.prefab b/Assets/Prefabs/Items/Powers/bBlueFireball.prefab index f22c9fece..59ca1886c 100644 --- a/Assets/Prefabs/Items/Powers/bBlueFireball.prefab +++ b/Assets/Prefabs/Items/Powers/bBlueFireball.prefab @@ -9838,7 +9838,6 @@ GameObject: - component: {fileID: 7898212980114005163} - component: {fileID: 8020189233111417037} - component: {fileID: 8020706684658151899} - - component: {fileID: 7789765392435096873} m_Layer: 0 m_Name: Particles m_TagString: Untagged @@ -14484,21 +14483,6 @@ ParticleSystemRenderer: m_MeshWeighting2: 1 m_MeshWeighting3: 1 m_MaskInteraction: 0 ---- !u!114 &7789765392435096873 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 7893307381764779335} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: dded6759b4b430e4283cf015251490b7, type: 3} - m_Name: - m_EditorClassIdentifier: - target: {fileID: 0} - Force: 1 - DistanceRelative: 0 --- !u!1 &7893317824759632779 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/Fight_Arena/Fight_Arena.unity b/Assets/Scenes/Fight_Arena/Fight_Arena.unity index 833176fe3..ba47de92f 100644 --- a/Assets/Scenes/Fight_Arena/Fight_Arena.unity +++ b/Assets/Scenes/Fight_Arena/Fight_Arena.unity @@ -16396,6 +16396,11 @@ PrefabInstance: propertyPath: m_Layer value: 5 objectReference: {fileID: 0} + - target: {fileID: 1385765897516864307, guid: 851e8e61247888340bdec90fc8aa37f5, + type: 3} + propertyPath: openCloseWindow + value: 0 + objectReference: {fileID: 0} - target: {fileID: 1494204689157949844, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} propertyPath: m_Layer @@ -17420,7 +17425,17 @@ PrefabInstance: - target: {fileID: 4704300330561169846, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} propertyPath: strafeRollLeftCorrectionAngle - value: 70.6 + value: -20 + objectReference: {fileID: 0} + - target: {fileID: 4704300330561169846, guid: 851e8e61247888340bdec90fc8aa37f5, + type: 3} + propertyPath: strafeRollRightCorrectionAngle + value: -10 + objectReference: {fileID: 0} + - target: {fileID: 4704300330561169846, guid: 851e8e61247888340bdec90fc8aa37f5, + type: 3} + propertyPath: strafeRollBackwardCorrectionAngle + value: 180 objectReference: {fileID: 0} - target: {fileID: 4704300330561169846, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} @@ -18565,12 +18580,12 @@ PrefabInstance: - target: {fileID: 5657452459766331955, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} propertyPath: m_AnchorMax.x - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5657452459766331955, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} propertyPath: m_AnchorMax.y - value: 1 + value: 0 objectReference: {fileID: 0} - target: {fileID: 5671630659928648966, guid: 851e8e61247888340bdec90fc8aa37f5, type: 3} diff --git a/Assets/Scripts/Characters/Player.cs b/Assets/Scripts/Characters/Player.cs index d5c64b6d5..639186c56 100644 --- a/Assets/Scripts/Characters/Player.cs +++ b/Assets/Scripts/Characters/Player.cs @@ -81,8 +81,11 @@ namespace Beyond private PlayerAttribute brightnessAttribute; private PlayerAttribute maturityAttribute; private MagicAttacks m_magicAttacks; + private bMeleeCombatInput m_meleeCombatInput; public MagicAttacks Magic => m_magicAttacks; + public bMeleeCombatInput MeleeCombatInput => m_meleeCombatInput; + public PlayerAttribute MaturityAttribute { get @@ -186,6 +189,7 @@ namespace Beyond m_meleeManager = GetComponent(); m_magicAttacks = GetComponent(); m_autoTargetting = GetComponent(); + m_meleeCombatInput = GetComponent(); } @@ -867,10 +871,10 @@ namespace Beyond public void PlaySingleSound(AudioClip clipToPlay, bool destroyAfterPlaying = true) { - // Opcjonalne opóźnienie na starcie poziomu, aby uniknąć "spamowania" dźwiękami + // Opcjonalne opďż˝nienie na starcie poziomu, aby unikn�� "spamowania" dďż˝wiďż˝kami if (Time.timeSinceLevelLoad < 0.5f && clipToPlay != null) { - // Możesz chcieć to odkomentować, jeśli dźwięki na starcie są problemem + // Moďż˝esz chcieďż˝ to odkomentowaďż˝, jeďż˝li dďż˝wiďż˝ki na starcie sďż˝ problemem // return; } @@ -885,28 +889,28 @@ namespace Beyond return; } - // Instancjonowanie prefabu dźwiękowego - // Upewnij się, że prefab 'audioSource' ma komponent AudioSource + // Instancjonowanie prefabu dďż˝wiďż˝kowego + // Upewnij siďż˝, ďż˝e prefab 'audioSource' ma komponent AudioSource GameObject audioObjectInstance = Instantiate(this.audioSource, transform.position, transform.rotation); AudioSource sourceComponent = audioObjectInstance.GetComponent(); if (sourceComponent != null) { - // PlayOneShot jest dobre dla efektów, nie przerywa innych dźwięków na tym samym source, - // jeśli są one odtwarzane przez .Play() i nie używają tego samego kanału. + // PlayOneShot jest dobre dla efektďż˝w, nie przerywa innych dďż˝wiďż˝kďż˝w na tym samym source, + // jeďż˝li sďż˝ one odtwarzane przez .Play() i nie uďż˝ywajďż˝ tego samego kanaďż˝u. sourceComponent.PlayOneShot(clipToPlay); if (destroyAfterPlaying) { - // Niszczymy obiekt GameObject zawierający AudioSource po zakończeniu odtwarzania klipu. - // Dodajemy mały bufor czasowy, aby upewnić się, że dźwięk zdąży się odtworzyć w całości. + // Niszczymy obiekt GameObject zawierajďż˝cy AudioSource po zakoďż˝czeniu odtwarzania klipu. + // Dodajemy maďż˝y bufor czasowy, aby upewniďż˝ siďż˝, ďż˝e dďż˝wiďż˝k zd��y siďż˝ odtworzyďż˝ w caďż˝oďż˝ci. Destroy(audioObjectInstance, clipToPlay.length + 0.1f); } } else { Debug.LogWarning("The instantiated 'audioSource' prefab (from Player.cs) does not have an AudioSource component. Destroying instance."); - Destroy(audioObjectInstance); // Posprzątaj, jeśli coś poszło nie tak + Destroy(audioObjectInstance); // Posprzďż˝taj, jeďż˝li coďż˝ poszďż˝o nie tak } } diff --git a/Assets/Scripts/InvectorDerivatives/bMeleeAttackControl.cs b/Assets/Scripts/InvectorDerivatives/bMeleeAttackControl.cs index 5b985eebb..c5e5621e3 100644 --- a/Assets/Scripts/InvectorDerivatives/bMeleeAttackControl.cs +++ b/Assets/Scripts/InvectorDerivatives/bMeleeAttackControl.cs @@ -13,6 +13,11 @@ namespace Invector.vMelee public class bMeleeAttackControl : StateMachineBehaviour { + // --- MODIFICATION: Static variable to track the currently active attack state --- + private static int activeAttackInstanceId = 0; + private int myAttackInstanceId; + // --- END MODIFICATION --- + [Header("Damage Window")] [Tooltip("NormalizedTime of Active Damage")] public float startDamage = 0.05f; @@ -37,10 +42,8 @@ namespace Invector.vMelee public float senselessTime; [Header("Attack Flow")] - [Tooltip("Check true in the last attack of your combo to reset the FSM attack triggers.")] - public bool resetAttackTrigger; - [Tooltip("Normalized time point to reset attack triggers. (Used only if Combo Timing Window is disabled)")] - public float resetTriggerBeforeTime = 0.5f; + [Tooltip("Normalized time point to start allowing the next attack input.")] + public float blockInputBeforeTime = 0.5f; [Header("Combo & Movement")] [Tooltip("Normalized time to unlock rotation, allowing the player to aim the next attack in a combo. Set to 1 to disable.")] @@ -62,7 +65,6 @@ namespace Invector.vMelee [Tooltip("How close the character should get to the target.")] public float stoppingDistance = 1.2f; - // --- MODIFIED: Switched to a real-time duration model --- [Header("Combo Timing Window")] [Tooltip("Enable a special timing window at the end of the attack to chain the next combo hit.")] public bool useComboTimingWindow = false; @@ -76,7 +78,6 @@ namespace Invector.vMelee [Tooltip("The time scale to use during the combo window for a slow-motion effect.")] public float comboWindowTimeScale = 0.1f; - // --- END MODIFICATION --- [Header("Slow Motion Settings")] [Tooltip("Enable slow motion effect during this attack based on conditions below.")] @@ -104,25 +105,30 @@ namespace Invector.vMelee private bThirdPersonController _characterController; private bool _isRotationLockedByThis; - private bool _comboWindowEffectTriggered; // --- NEW ---: Tracks if the slow-mo effect has been fired. + private bool _comboWindowEffectTriggered; private Animator _animator; + override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { - if (_animator == null) _animator = animator; + if (_animator == null) _animator = animator; + + // --- MODIFICATION: Assign a unique ID to this state instance --- + myAttackInstanceId = ++activeAttackInstanceId; + // --- END MODIFICATION --- mFighter = animator.GetComponent(); _characterController = animator.GetComponent(); if (Player.Instance != null) _autoTargettingInstance = Player.Instance.AutoTarget; - + if (_autoTargettingInstance == null && debug) Debug.LogWarning($"({damageType}) AutoTargetting instance not found. Rotation/Target features limited."); isAttacking = true; isActive = false; m_hasScaledTime = false; - _comboWindowEffectTriggered = false; // --- NEW ---: Reset the flag on enter. + _comboWindowEffectTriggered = false; if (_characterController != null) { @@ -134,26 +140,54 @@ namespace Invector.vMelee mFighter.OnEnableAttack(); if (debug) - Debug.Log($"({damageType}) OnStateEnter. The trigger that started this state has been consumed by the Animator."); + Debug.Log($"({damageType}, ID: {myAttackInstanceId}) OnStateEnter. Now the authoritative state."); + + // --- MODIFICATION: Immediately block input on enter --- + // This ensures the new state takes control right away. + BlockAttack(true); + // --- END MODIFICATION --- if (attackTimeScaleStart < 0f) attackTimeScaleStart = startDamage; if (attackTimeScaleEnd < 0f) attackTimeScaleEnd = endDamage; } + + void BlockAttack(bool block) + { + // --- MODIFICATION: Only allow the authoritative state to change the lock --- + if (myAttackInstanceId != activeAttackInstanceId) + { + if(debug) Debug.Log($"({damageType}, ID: {myAttackInstanceId}) Tried to change block but I am not the active instance ({activeAttackInstanceId}). Ignoring."); + return; + } + // --- END MODIFICATION --- + + if (Player.Instance != null) + { + var meleeInput = Player.Instance.MeleeCombatInput; + if (meleeInput != null) + { + if (meleeInput.BlockAttack != block) // Only log/change if there is a change + { + if(debug) Debug.Log($"({damageType}, ID: {myAttackInstanceId}) Setting BlockAttack to: {block}"); + meleeInput.BlockAttack = block; + } + } + } + } override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { if (Player.Instance.ActiveWeaponTrail) Player.Instance.ActiveWeaponTrail.m_colorMultiplier = Color.white + Color.red * damageMultiplier; - + float currentNormalizedTime = stateInfo.normalizedTime % 1; if (currentNormalizedTime == 0 && stateInfo.normalizedTime > 0.5f) currentNormalizedTime = 1f; - - // --- NEW: Centralized combo logic management --- + ManageComboLogic(currentNormalizedTime); - + if (_characterController != null && _characterController.lockRotation) - AttemptRotationTowardsAutoTarget(animator); - + AttemptRotationTowardsAutoTarget(animator); + AttemptPositionLerp(animator); UpdateRotationLock(currentNormalizedTime); @@ -173,16 +207,16 @@ namespace Invector.vMelee ActiveDamage(animator, false); } - if (isAttacking && currentNormalizedTime > endDamage) + if (isAttacking && currentNormalizedTime > endDamage) { if (mFighter != null) mFighter.OnDisableAttack(); - isAttacking = false; + isAttacking = false; } } override public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { - if (debug) Debug.Log($"({damageType}) OnStateExit."); + if (debug) Debug.Log($"({damageType}, ID: {myAttackInstanceId}) OnStateExit."); if (isActive) { @@ -195,68 +229,53 @@ namespace Invector.vMelee isAttacking = false; m_hasScaledTime = false; - - // The TimeController now reliably handles resetting the time scale via its own coroutine. - // A manual reset here is no longer necessary and could cause conflicts. - /* - if (mFighter != null && resetAttackTrigger) - { - mFighter.ResetAttackTriggers(); - if (debug) Debug.Log($"({damageType}) Final trigger reset on exit due to 'Reset Attack Trigger' flag."); - } - */ + if (_comboWindowEffectTriggered && TimeController.Instance != null) { _comboWindowEffectTriggered = false; - TimeController.Instance.Reset(); + TimeController.Instance.Reset(); } + if (_characterController != null && _isRotationLockedByThis) { _characterController.lockRotation = false; _isRotationLockedByThis = false; } + + // --- MODIFICATION: When exiting, ensure the attack is unblocked. --- + // This is a safety net. If this was the last attack in a combo, + // we need to make sure the input is unlocked for future actions. + BlockAttack(false); + // --- END MODIFICATION --- } - /// - /// Manages the combo logic, including input window and time scale effects. - /// private void ManageComboLogic(float currentNormalizedTime) { - if (!useComboTimingWindow) + if (blockInputBeforeTime > 0f) { - // Fallback to old logic if new system is disabled for this state - if (resetAttackTrigger && currentNormalizedTime >= resetTriggerBeforeTime) + if (currentNormalizedTime >= blockInputBeforeTime) { - if (mFighter != null) - mFighter.ResetAttackTriggers(); + BlockAttack(false); // Unlock input + } + else + { + BlockAttack(true); // Block input } - return; } + + if (!useComboTimingWindow) return; - // --- FIX 2: Corrected window logic --- bool isInsideWindow = currentNormalizedTime >= comboWindowStartTime; if (isInsideWindow) { - // --- We are INSIDE the combo window --- - // We STOP resetting the trigger to allow the player's input to register. - if (!_comboWindowEffectTriggered && TimeController.Instance != null) { _comboWindowEffectTriggered = true; - TimeController.Instance.SetTimeScaleForRealTimeSec(comboWindowTimeScale, comboWindowDuration, false); - - if (debug) Debug.Log($"({damageType}) COMBO WINDOW OPEN. Accepting input. Animator mode set to UnscaledTime."); + if (debug) Debug.Log($"({damageType}) COMBO WINDOW OPEN. Accepting input."); } } - else - { - // --- We are OUTSIDE the combo window --- - // We continuously reset the trigger to consume any premature/late input. - if (mFighter != null) - mFighter.ResetAttackTriggers(); - } } // --- Other methods remain unchanged --- diff --git a/Assets/Scripts/InvectorDerivatives/bMeleeCombatInput.cs b/Assets/Scripts/InvectorDerivatives/bMeleeCombatInput.cs index fc3e26549..9d2b21a6c 100644 --- a/Assets/Scripts/InvectorDerivatives/bMeleeCombatInput.cs +++ b/Assets/Scripts/InvectorDerivatives/bMeleeCombatInput.cs @@ -4,6 +4,7 @@ using Invector.vEventSystems; using Invector.vMelee; using UnityEngine; using System.Collections; +using UnityEngine.Android; namespace Beyond { @@ -23,6 +24,8 @@ namespace Beyond internal vMeleeManager meleeManager; protected bool _isAttacking; + public bool BlockAttack { get; set; } + public bool isAttacking { get => _isAttacking || (cc != null && cc.IsAnimatorTag("Attack")); @@ -87,16 +90,17 @@ namespace Beyond autoTargeting = GetComponent(); if (autoTargeting == null && Player.Instance != null && Player.Instance.gameObject == this.gameObject) { - autoTargeting = Player.Instance.GetComponent(); + autoTargeting = Player.Instance.GetComponent(); } if (autoTargeting == null && cc != null && cc.transform.root != null) { - autoTargeting = cc.transform.root.GetComponentInChildren(true); + autoTargeting = cc.transform.root.GetComponentInChildren(true); } if (autoTargeting == null) { Debug.LogWarning("bMeleeCombatInput: AutoTargetting component not found. Dash towards target will require manual aiming."); } + BlockAttack = false; } protected override void LateUpdate() @@ -241,7 +245,7 @@ namespace Beyond public virtual bool MeleeAttackConditions() { if (meleeManager == null) meleeManager = GetComponent(); - return meleeManager != null && cc != null && cc.isGrounded && !cc.customAction && !cc.IsAnimatorTag("special") && + return !BlockAttack && meleeManager != null && cc != null && cc.isGrounded && !cc.customAction && !cc.IsAnimatorTag("special") && !cc.isJumping && !cc.isCrouching && !cc.isRolling && !isEquipping && (cc.animator != null && !cc.animator.IsInTransition(cc.baseLayer)) && !isRotatingAndDashing; } diff --git a/Assets/Scripts/InvectorDerivatives/bThirdPersonController.cs b/Assets/Scripts/InvectorDerivatives/bThirdPersonController.cs index 5c198910c..74259e5e3 100644 --- a/Assets/Scripts/InvectorDerivatives/bThirdPersonController.cs +++ b/Assets/Scripts/InvectorDerivatives/bThirdPersonController.cs @@ -18,10 +18,6 @@ namespace Beyond public bool useAnimationBasedRotation = false; [Header("Beyond's Strafe Combat Settings")] - [Tooltip("The minimum horizontal input value to trigger a side roll instead of a forward/backward one.")] - [Range(0.1f, 1.0f)] - public float strafeRollInputThreshold = 0.3f; - [Tooltip("The name of the animation state to play when rolling forward while strafing. (This is now disabled)")] public string strafeRollForwardAnim = "Roll_Forward"; // Kept for reference, but won't be used [Tooltip("The name of the animation state to play when rolling backward while strafing.")] @@ -31,15 +27,19 @@ namespace Beyond [Tooltip("The name of the animation state to play when rolling right while strafing.")] public string strafeRollRightAnim = "Roll_Right"; - // --- UPDATED FIELDS FOR INDEPENDENT CONTROL --- + // --- UPDATED FIELDS FOR FINER CONTROL --- [Header("Beyond's Strafe Roll Correction")] - [Tooltip("The fixed angle to rotate the character before a LEFT strafe roll.")] - [Range(0f, 90f)] - public float strafeRollLeftCorrectionAngle = 45f; + [Tooltip("An additional angle to apply for a LEFT strafe roll.")] + [Range(-90f, 90f)] + public float strafeRollLeftCorrectionAngle = -45f; - [Tooltip("The fixed angle to rotate the character before a RIGHT strafe roll.")] - [Range(0f, 90f)] - public float strafeRollRightCorrectionAngle = 70f; + [Tooltip("An additional angle to apply for a RIGHT strafe roll.")] + [Range(-90f, 90f)] + public float strafeRollRightCorrectionAngle = 45f; + + [Tooltip("An additional angle to apply for a BACKWARD strafe roll. Use 0 for a standard 180-degree roll.")] + [Range(-180f, 180f)] + public float strafeRollBackwardCorrectionAngle = 0f; // --- END OF UPDATED FIELDS --- public bool GodMode @@ -64,27 +64,21 @@ namespace Beyond protected override void RollBehavior() { - // If we are not strafing, use the default Invector roll behavior. if (!isStrafing) { base.RollBehavior(); return; } - - // Custom Strafe Roll with Root Motion (no rotation logic needed here anymore) if (!isRolling) { return; } - Vector3 deltaPosition = new Vector3(animator.deltaPosition.x, 0f, animator.deltaPosition.z); Vector3 v = (deltaPosition / Time.deltaTime) * (1f - stopMoveWeight); - if (rollUseGravity && animator.GetNormalizedTime(baseLayer) >= rollUseGravityTime) { v.y = _rigidbody.linearVelocity.y; } - _rigidbody.linearVelocity = v; } @@ -120,7 +114,12 @@ namespace Beyond } } - // --- MODIFIED METHOD WITH TWO-ANGLE LOGIC --- + // --- FINAL ROBUST METHOD --- + // This logic now handles all specified cases: + // 1. Sets a base rotation facing the camera to ensure consistency. + // 2. Defaults to a backward roll if input is near-zero (fixing the lingering roll issue). + // 3. Never uses the forward roll; it triggers a backward roll instead. + // 4. Applies a unique correction angle for backward rolls as well as side rolls. private void TriggerStrafeRoll(string forwardAnim, string backwardAnim, string leftAnim, string rightAnim) { OnRoll.Invoke(); @@ -129,42 +128,59 @@ namespace Beyond currentStaminaRecoveryDelay = 2f; string animToPlay; + float correctionAngle = 0f; - // Prioritize side rolls based on horizontal input. - if (Mathf.Abs(horizontalSpeed) > strafeRollInputThreshold) + // Determine the base "forward" direction from the camera, ignoring vertical tilt. + Vector3 baseForward = Vector3.Scale(Camera.main.transform.forward, new Vector3(1, 0, 1)).normalized; + if (baseForward == Vector3.zero) baseForward = transform.forward; // Fallback + + // Set the character's rotation to this base direction. This provides a clean slate. + transform.rotation = Quaternion.LookRotation(baseForward); + + // Check if input is negligible (joystick is centered). + // input.sqrMagnitude is more efficient than input.magnitude. 0.1*0.1=0.01. + if (input.sqrMagnitude < 0.01f) { - float correction = 0f; - - // Check if rolling right (positive horizontal speed) - if (horizontalSpeed > 0) - { - animToPlay = rightAnim; - // For a right roll, we apply a negative rotation (turn left) to angle the trajectory forward. - correction = -strafeRollRightCorrectionAngle; - } - // Otherwise, rolling left - else - { - animToPlay = leftAnim; - // For a left roll, we apply a positive rotation (turn right) to angle the trajectory forward. - correction = strafeRollLeftCorrectionAngle; - } - - // Apply the calculated rotation instantly around the Y-axis. - if (correction != 0) - { - transform.Rotate(0, correction, 0); - } + // If no input, always perform a backward roll. + animToPlay = backwardAnim; + correctionAngle = strafeRollBackwardCorrectionAngle; } - // If horizontal input is not met, default to the backward roll. else { - animToPlay = backwardAnim; + // If there IS input, determine the dominant direction. + if (Mathf.Abs(verticalSpeed) >= Mathf.Abs(horizontalSpeed)) + { + // Vertical input is dominant. + // ALWAYS use the backward roll, regardless of forward or backward input. + animToPlay = backwardAnim; + correctionAngle = strafeRollBackwardCorrectionAngle; + } + else + { + // Horizontal input is dominant. + if (horizontalSpeed > 0) + { + animToPlay = rightAnim; + correctionAngle = strafeRollRightCorrectionAngle; + } + else + { + animToPlay = leftAnim; + correctionAngle = strafeRollLeftCorrectionAngle; + } + } } - + + // Apply the chosen correction angle if it's not zero. + if (correctionAngle != 0f) + { + transform.Rotate(0, correctionAngle, 0); + } + + // Play the selected animation. animator.CrossFadeInFixedTime(animToPlay, rollTransition, baseLayer); } - // --- END OF MODIFIED METHOD --- + // --- END OF FINAL METHOD --- public void OnEvadeStart() { if (!m_GodMode) isImmortal = true; } public void OnEvadeEnd() { if (!m_GodMode) isImmortal = false; } diff --git a/Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx.meta b/Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx.meta index 60ca88868..41988d1c7 100644 --- a/Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx.meta +++ b/Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx.meta @@ -1,326 +1,934 @@ fileFormatVersion: 2 guid: c5937c944a220444aa33be3fe1480174 -timeCreated: 1490889342 -licenseType: Store +AssetOrigin: + serializedVersion: 1 + productId: 92239 + packageName: Longsword Animset Pro + packageVersion: 1.0 + assetPath: Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx + uploadId: 340990 ModelImporter: - serializedVersion: 21 - fileIDToRecycleName: - 100000: DummyMESH - 100002: Head - 100004: Hips - 100006: LeftArm - 100008: LeftArmRoll - 100010: LeftFoot - 100012: LeftForeArm - 100014: LeftForeArmRoll - 100016: LeftHand - 100018: LeftHandIndex1 - 100020: LeftHandIndex2 - 100022: LeftHandIndex3 - 100024: LeftHandIndex4 - 100026: LeftHandMiddle1 - 100028: LeftHandMiddle2 - 100030: LeftHandMiddle3 - 100032: LeftHandMiddle4 - 100034: LeftHandPinky1 - 100036: LeftHandPinky2 - 100038: LeftHandPinky3 - 100040: LeftHandPinky4 - 100042: LeftHandProp - 100044: LeftHandRing1 - 100046: LeftHandRing2 - 100048: LeftHandRing3 - 100050: LeftHandRing4 - 100052: LeftHandThumb1 - 100054: LeftHandThumb2 - 100056: LeftHandThumb3 - 100058: LeftHandThumb4 - 100060: LeftLeg - 100062: LeftLegRoll - 100064: LeftShoulder - 100066: LeftToeBase - 100068: LeftToeBase_END - 100070: LeftUpLeg - 100072: LeftUpLegRoll - 100074: //RootNode - 100076: Neck - 100078: RightArm - 100080: RightArmRoll - 100082: RightFoot - 100084: RightForeArm - 100086: RightForeArmRoll - 100088: RightHand - 100090: RightHandIndex1 - 100092: RightHandIndex2 - 100094: RightHandIndex3 - 100096: RightHandIndex4 - 100098: RightHandMiddle1 - 100100: RightHandMiddle2 - 100102: RightHandMiddle3 - 100104: RightHandMiddle4 - 100106: RightHandPinky1 - 100108: RightHandPinky2 - 100110: RightHandPinky3 - 100112: RightHandPinky4 - 100114: RightHandProp - 100116: RightHandRing1 - 100118: RightHandRing2 - 100120: RightHandRing3 - 100122: RightHandRing4 - 100124: RightHandThumb1 - 100126: RightHandThumb2 - 100128: RightHandThumb3 - 100130: RightHandThumb4 - 100132: RightLeg - 100134: RightLegRoll - 100136: RightShoulder - 100138: RightToeBase - 100140: RightToeBase_END - 100142: RightUpLeg - 100144: RightUpLegRoll - 100146: Root - 100148: Spine - 100150: Spine1 - 100152: Jaw - 100154: Jaw_END - 100156: LeftBrow1 - 100158: LeftBrow2 - 100160: LeftBrow3 - 100162: LeftCheek - 100164: LeftCheek1 - 100166: LeftCheekMouth - 100168: LeftCheekUp - 100170: LeftCheekUp1 - 100172: LeftChin - 100174: LeftEye - 100176: LeftEyeLidDown - 100178: LeftEyeLidUp - 100180: LeftFrontSkirt1 - 100182: LeftFrontSkirt2 - 100184: LeftNostril - 100186: LeftPauldron - 100188: MouthCenterDown - 100190: MouthCenterUp - 100192: MouthLeftCorner - 100194: MouthLeftDown - 100196: MouthLeftDown1 - 100198: MouthLeftUp - 100200: MouthLeftUp1 - 100202: MouthRightCorner - 100204: MouthRightDown - 100206: MouthRightDown1 - 100208: MouthRightUp - 100210: MouthRightUp1 - 100212: RightBrow1 - 100214: RightBrow2 - 100216: RightBrow3 - 100218: RightCheek - 100220: RightCheek1 - 100222: RightCheekMouth - 100224: RightCheekUp - 100226: RightCheekUp1 - 100228: RightChin - 100230: RightEye - 100232: RightEyeLidDown - 100234: RightEyeLidUp - 100236: RightFrontSkirt1 - 100238: RightFrontSkirt2 - 100240: RightNostril - 100242: RightPauldron - 100244: Tongue - 100246: Tongue1 - 100248: Tongue2 - 100250: VampArmsLegsMESH_LOD0 - 100252: VampCapeMESH - 100254: VampHeadMESH_LOD0 - 100256: VampTeethMESH_LOD0 - 100258: VampTorsoMESH_LOD0 - 400000: DummyMESH - 400002: Head - 400004: Hips - 400006: LeftArm - 400008: LeftArmRoll - 400010: LeftFoot - 400012: LeftForeArm - 400014: LeftForeArmRoll - 400016: LeftHand - 400018: LeftHandIndex1 - 400020: LeftHandIndex2 - 400022: LeftHandIndex3 - 400024: LeftHandIndex4 - 400026: LeftHandMiddle1 - 400028: LeftHandMiddle2 - 400030: LeftHandMiddle3 - 400032: LeftHandMiddle4 - 400034: LeftHandPinky1 - 400036: LeftHandPinky2 - 400038: LeftHandPinky3 - 400040: LeftHandPinky4 - 400042: LeftHandProp - 400044: LeftHandRing1 - 400046: LeftHandRing2 - 400048: LeftHandRing3 - 400050: LeftHandRing4 - 400052: LeftHandThumb1 - 400054: LeftHandThumb2 - 400056: LeftHandThumb3 - 400058: LeftHandThumb4 - 400060: LeftLeg - 400062: LeftLegRoll - 400064: LeftShoulder - 400066: LeftToeBase - 400068: LeftToeBase_END - 400070: LeftUpLeg - 400072: LeftUpLegRoll - 400074: //RootNode - 400076: Neck - 400078: RightArm - 400080: RightArmRoll - 400082: RightFoot - 400084: RightForeArm - 400086: RightForeArmRoll - 400088: RightHand - 400090: RightHandIndex1 - 400092: RightHandIndex2 - 400094: RightHandIndex3 - 400096: RightHandIndex4 - 400098: RightHandMiddle1 - 400100: RightHandMiddle2 - 400102: RightHandMiddle3 - 400104: RightHandMiddle4 - 400106: RightHandPinky1 - 400108: RightHandPinky2 - 400110: RightHandPinky3 - 400112: RightHandPinky4 - 400114: RightHandProp - 400116: RightHandRing1 - 400118: RightHandRing2 - 400120: RightHandRing3 - 400122: RightHandRing4 - 400124: RightHandThumb1 - 400126: RightHandThumb2 - 400128: RightHandThumb3 - 400130: RightHandThumb4 - 400132: RightLeg - 400134: RightLegRoll - 400136: RightShoulder - 400138: RightToeBase - 400140: RightToeBase_END - 400142: RightUpLeg - 400144: RightUpLegRoll - 400146: Root - 400148: Spine - 400150: Spine1 - 400152: Jaw - 400154: Jaw_END - 400156: LeftBrow1 - 400158: LeftBrow2 - 400160: LeftBrow3 - 400162: LeftCheek - 400164: LeftCheek1 - 400166: LeftCheekMouth - 400168: LeftCheekUp - 400170: LeftCheekUp1 - 400172: LeftChin - 400174: LeftEye - 400176: LeftEyeLidDown - 400178: LeftEyeLidUp - 400180: LeftFrontSkirt1 - 400182: LeftFrontSkirt2 - 400184: LeftNostril - 400186: LeftPauldron - 400188: MouthCenterDown - 400190: MouthCenterUp - 400192: MouthLeftCorner - 400194: MouthLeftDown - 400196: MouthLeftDown1 - 400198: MouthLeftUp - 400200: MouthLeftUp1 - 400202: MouthRightCorner - 400204: MouthRightDown - 400206: MouthRightDown1 - 400208: MouthRightUp - 400210: MouthRightUp1 - 400212: RightBrow1 - 400214: RightBrow2 - 400216: RightBrow3 - 400218: RightCheek - 400220: RightCheek1 - 400222: RightCheekMouth - 400224: RightCheekUp - 400226: RightCheekUp1 - 400228: RightChin - 400230: RightEye - 400232: RightEyeLidDown - 400234: RightEyeLidUp - 400236: RightFrontSkirt1 - 400238: RightFrontSkirt2 - 400240: RightNostril - 400242: RightPauldron - 400244: Tongue - 400246: Tongue1 - 400248: Tongue2 - 400250: VampArmsLegsMESH_LOD0 - 400252: VampCapeMESH - 400254: VampHeadMESH_LOD0 - 400256: VampTeethMESH_LOD0 - 400258: VampTorsoMESH_LOD0 - 4300000: DummyMESH - 4300002: VampTeethMESH_LOD0 - 4300004: VampTorsoMESH_LOD0 - 4300006: VampCapeMESH - 4300008: VampArmsLegsMESH_LOD0 - 4300010: VampHeadMESH_LOD0 - 7400000: Longs_GetUpBack - 7400002: Longs_KO_1 - 7400004: Longs_KO_2 - 7400006: Longs_KO_Air - 7400008: Longs_KO_AirStrong - 7400010: Longs_KO_Fall_Start - 7400012: Longs_KO_Fall_End - 7400014: Longs_SprintLoop - 7400016: Longs_SprintStart - 7400018: Longs_SprintStop_LU - 7400020: Longs_SprintStop_RU - 7400022: Longs_RollFwd - 7400024: Longs_RollBwd - 7400026: Longs_RollLeft - 7400028: Longs_RollRight - 7400030: Longs_OnGround_Hit - 7400032: Longs_JumpAttack_R - 7400034: Longs_JumpAttack_RD - 7400036: Longs_JumpAttack_LD - 7400038: Longs_BlockStart - 7400040: Longs_BlockLoop - 7400042: Longs_BlockImpact - 7400044: Longs_BlockEnd - 7400046: Longs_BlockAdd - 7400048: Longs_CrouchLoop - 7400050: Longs_CrouchStart - 7400052: Longs_CrouchEnd - 9500000: //RootNode - 13700000: DummyMESH - 13700002: VampArmsLegsMESH_LOD0 - 13700004: VampCapeMESH - 13700006: VampHeadMESH_LOD0 - 13700008: VampTeethMESH_LOD0 - 13700010: VampTorsoMESH_LOD0 + serializedVersion: 22200 + internalIDToNameTable: + - first: + 1: 100000 + second: DummyMESH + - first: + 1: 100002 + second: Head + - first: + 1: 100004 + second: Hips + - first: + 1: 100006 + second: LeftArm + - first: + 1: 100008 + second: LeftArmRoll + - first: + 1: 100010 + second: LeftFoot + - first: + 1: 100012 + second: LeftForeArm + - first: + 1: 100014 + second: LeftForeArmRoll + - first: + 1: 100016 + second: LeftHand + - first: + 1: 100018 + second: LeftHandIndex1 + - first: + 1: 100020 + second: LeftHandIndex2 + - first: + 1: 100022 + second: LeftHandIndex3 + - first: + 1: 100024 + second: LeftHandIndex4 + - first: + 1: 100026 + second: LeftHandMiddle1 + - first: + 1: 100028 + second: LeftHandMiddle2 + - first: + 1: 100030 + second: LeftHandMiddle3 + - first: + 1: 100032 + second: LeftHandMiddle4 + - first: + 1: 100034 + second: LeftHandPinky1 + - first: + 1: 100036 + second: LeftHandPinky2 + - first: + 1: 100038 + second: LeftHandPinky3 + - first: + 1: 100040 + second: LeftHandPinky4 + - first: + 1: 100042 + second: LeftHandProp + - first: + 1: 100044 + second: LeftHandRing1 + - first: + 1: 100046 + second: LeftHandRing2 + - first: + 1: 100048 + second: LeftHandRing3 + - first: + 1: 100050 + second: LeftHandRing4 + - first: + 1: 100052 + second: LeftHandThumb1 + - first: + 1: 100054 + second: LeftHandThumb2 + - first: + 1: 100056 + second: LeftHandThumb3 + - first: + 1: 100058 + second: LeftHandThumb4 + - first: + 1: 100060 + second: LeftLeg + - first: + 1: 100062 + second: LeftLegRoll + - first: + 1: 100064 + second: LeftShoulder + - first: + 1: 100066 + second: LeftToeBase + - first: + 1: 100068 + second: LeftToeBase_END + - first: + 1: 100070 + second: LeftUpLeg + - first: + 1: 100072 + second: LeftUpLegRoll + - first: + 1: 100074 + second: //RootNode + - first: + 1: 100076 + second: Neck + - first: + 1: 100078 + second: RightArm + - first: + 1: 100080 + second: RightArmRoll + - first: + 1: 100082 + second: RightFoot + - first: + 1: 100084 + second: RightForeArm + - first: + 1: 100086 + second: RightForeArmRoll + - first: + 1: 100088 + second: RightHand + - first: + 1: 100090 + second: RightHandIndex1 + - first: + 1: 100092 + second: RightHandIndex2 + - first: + 1: 100094 + second: RightHandIndex3 + - first: + 1: 100096 + second: RightHandIndex4 + - first: + 1: 100098 + second: RightHandMiddle1 + - first: + 1: 100100 + second: RightHandMiddle2 + - first: + 1: 100102 + second: RightHandMiddle3 + - first: + 1: 100104 + second: RightHandMiddle4 + - first: + 1: 100106 + second: RightHandPinky1 + - first: + 1: 100108 + second: RightHandPinky2 + - first: + 1: 100110 + second: RightHandPinky3 + - first: + 1: 100112 + second: RightHandPinky4 + - first: + 1: 100114 + second: RightHandProp + - first: + 1: 100116 + second: RightHandRing1 + - first: + 1: 100118 + second: RightHandRing2 + - first: + 1: 100120 + second: RightHandRing3 + - first: + 1: 100122 + second: RightHandRing4 + - first: + 1: 100124 + second: RightHandThumb1 + - first: + 1: 100126 + second: RightHandThumb2 + - first: + 1: 100128 + second: RightHandThumb3 + - first: + 1: 100130 + second: RightHandThumb4 + - first: + 1: 100132 + second: RightLeg + - first: + 1: 100134 + second: RightLegRoll + - first: + 1: 100136 + second: RightShoulder + - first: + 1: 100138 + second: RightToeBase + - first: + 1: 100140 + second: RightToeBase_END + - first: + 1: 100142 + second: RightUpLeg + - first: + 1: 100144 + second: RightUpLegRoll + - first: + 1: 100146 + second: Root + - first: + 1: 100148 + second: Spine + - first: + 1: 100150 + second: Spine1 + - first: + 1: 100152 + second: Jaw + - first: + 1: 100154 + second: Jaw_END + - first: + 1: 100156 + second: LeftBrow1 + - first: + 1: 100158 + second: LeftBrow2 + - first: + 1: 100160 + second: LeftBrow3 + - first: + 1: 100162 + second: LeftCheek + - first: + 1: 100164 + second: LeftCheek1 + - first: + 1: 100166 + second: LeftCheekMouth + - first: + 1: 100168 + second: LeftCheekUp + - first: + 1: 100170 + second: LeftCheekUp1 + - first: + 1: 100172 + second: LeftChin + - first: + 1: 100174 + second: LeftEye + - first: + 1: 100176 + second: LeftEyeLidDown + - first: + 1: 100178 + second: LeftEyeLidUp + - first: + 1: 100180 + second: LeftFrontSkirt1 + - first: + 1: 100182 + second: LeftFrontSkirt2 + - first: + 1: 100184 + second: LeftNostril + - first: + 1: 100186 + second: LeftPauldron + - first: + 1: 100188 + second: MouthCenterDown + - first: + 1: 100190 + second: MouthCenterUp + - first: + 1: 100192 + second: MouthLeftCorner + - first: + 1: 100194 + second: MouthLeftDown + - first: + 1: 100196 + second: MouthLeftDown1 + - first: + 1: 100198 + second: MouthLeftUp + - first: + 1: 100200 + second: MouthLeftUp1 + - first: + 1: 100202 + second: MouthRightCorner + - first: + 1: 100204 + second: MouthRightDown + - first: + 1: 100206 + second: MouthRightDown1 + - first: + 1: 100208 + second: MouthRightUp + - first: + 1: 100210 + second: MouthRightUp1 + - first: + 1: 100212 + second: RightBrow1 + - first: + 1: 100214 + second: RightBrow2 + - first: + 1: 100216 + second: RightBrow3 + - first: + 1: 100218 + second: RightCheek + - first: + 1: 100220 + second: RightCheek1 + - first: + 1: 100222 + second: RightCheekMouth + - first: + 1: 100224 + second: RightCheekUp + - first: + 1: 100226 + second: RightCheekUp1 + - first: + 1: 100228 + second: RightChin + - first: + 1: 100230 + second: RightEye + - first: + 1: 100232 + second: RightEyeLidDown + - first: + 1: 100234 + second: RightEyeLidUp + - first: + 1: 100236 + second: RightFrontSkirt1 + - first: + 1: 100238 + second: RightFrontSkirt2 + - first: + 1: 100240 + second: RightNostril + - first: + 1: 100242 + second: RightPauldron + - first: + 1: 100244 + second: Tongue + - first: + 1: 100246 + second: Tongue1 + - first: + 1: 100248 + second: Tongue2 + - first: + 1: 100250 + second: VampArmsLegsMESH_LOD0 + - first: + 1: 100252 + second: VampCapeMESH + - first: + 1: 100254 + second: VampHeadMESH_LOD0 + - first: + 1: 100256 + second: VampTeethMESH_LOD0 + - first: + 1: 100258 + second: VampTorsoMESH_LOD0 + - first: + 4: 400000 + second: DummyMESH + - first: + 4: 400002 + second: Head + - first: + 4: 400004 + second: Hips + - first: + 4: 400006 + second: LeftArm + - first: + 4: 400008 + second: LeftArmRoll + - first: + 4: 400010 + second: LeftFoot + - first: + 4: 400012 + second: LeftForeArm + - first: + 4: 400014 + second: LeftForeArmRoll + - first: + 4: 400016 + second: LeftHand + - first: + 4: 400018 + second: LeftHandIndex1 + - first: + 4: 400020 + second: LeftHandIndex2 + - first: + 4: 400022 + second: LeftHandIndex3 + - first: + 4: 400024 + second: LeftHandIndex4 + - first: + 4: 400026 + second: LeftHandMiddle1 + - first: + 4: 400028 + second: LeftHandMiddle2 + - first: + 4: 400030 + second: LeftHandMiddle3 + - first: + 4: 400032 + second: LeftHandMiddle4 + - first: + 4: 400034 + second: LeftHandPinky1 + - first: + 4: 400036 + second: LeftHandPinky2 + - first: + 4: 400038 + second: LeftHandPinky3 + - first: + 4: 400040 + second: LeftHandPinky4 + - first: + 4: 400042 + second: LeftHandProp + - first: + 4: 400044 + second: LeftHandRing1 + - first: + 4: 400046 + second: LeftHandRing2 + - first: + 4: 400048 + second: LeftHandRing3 + - first: + 4: 400050 + second: LeftHandRing4 + - first: + 4: 400052 + second: LeftHandThumb1 + - first: + 4: 400054 + second: LeftHandThumb2 + - first: + 4: 400056 + second: LeftHandThumb3 + - first: + 4: 400058 + second: LeftHandThumb4 + - first: + 4: 400060 + second: LeftLeg + - first: + 4: 400062 + second: LeftLegRoll + - first: + 4: 400064 + second: LeftShoulder + - first: + 4: 400066 + second: LeftToeBase + - first: + 4: 400068 + second: LeftToeBase_END + - first: + 4: 400070 + second: LeftUpLeg + - first: + 4: 400072 + second: LeftUpLegRoll + - first: + 4: 400074 + second: //RootNode + - first: + 4: 400076 + second: Neck + - first: + 4: 400078 + second: RightArm + - first: + 4: 400080 + second: RightArmRoll + - first: + 4: 400082 + second: RightFoot + - first: + 4: 400084 + second: RightForeArm + - first: + 4: 400086 + second: RightForeArmRoll + - first: + 4: 400088 + second: RightHand + - first: + 4: 400090 + second: RightHandIndex1 + - first: + 4: 400092 + second: RightHandIndex2 + - first: + 4: 400094 + second: RightHandIndex3 + - first: + 4: 400096 + second: RightHandIndex4 + - first: + 4: 400098 + second: RightHandMiddle1 + - first: + 4: 400100 + second: RightHandMiddle2 + - first: + 4: 400102 + second: RightHandMiddle3 + - first: + 4: 400104 + second: RightHandMiddle4 + - first: + 4: 400106 + second: RightHandPinky1 + - first: + 4: 400108 + second: RightHandPinky2 + - first: + 4: 400110 + second: RightHandPinky3 + - first: + 4: 400112 + second: RightHandPinky4 + - first: + 4: 400114 + second: RightHandProp + - first: + 4: 400116 + second: RightHandRing1 + - first: + 4: 400118 + second: RightHandRing2 + - first: + 4: 400120 + second: RightHandRing3 + - first: + 4: 400122 + second: RightHandRing4 + - first: + 4: 400124 + second: RightHandThumb1 + - first: + 4: 400126 + second: RightHandThumb2 + - first: + 4: 400128 + second: RightHandThumb3 + - first: + 4: 400130 + second: RightHandThumb4 + - first: + 4: 400132 + second: RightLeg + - first: + 4: 400134 + second: RightLegRoll + - first: + 4: 400136 + second: RightShoulder + - first: + 4: 400138 + second: RightToeBase + - first: + 4: 400140 + second: RightToeBase_END + - first: + 4: 400142 + second: RightUpLeg + - first: + 4: 400144 + second: RightUpLegRoll + - first: + 4: 400146 + second: Root + - first: + 4: 400148 + second: Spine + - first: + 4: 400150 + second: Spine1 + - first: + 4: 400152 + second: Jaw + - first: + 4: 400154 + second: Jaw_END + - first: + 4: 400156 + second: LeftBrow1 + - first: + 4: 400158 + second: LeftBrow2 + - first: + 4: 400160 + second: LeftBrow3 + - first: + 4: 400162 + second: LeftCheek + - first: + 4: 400164 + second: LeftCheek1 + - first: + 4: 400166 + second: LeftCheekMouth + - first: + 4: 400168 + second: LeftCheekUp + - first: + 4: 400170 + second: LeftCheekUp1 + - first: + 4: 400172 + second: LeftChin + - first: + 4: 400174 + second: LeftEye + - first: + 4: 400176 + second: LeftEyeLidDown + - first: + 4: 400178 + second: LeftEyeLidUp + - first: + 4: 400180 + second: LeftFrontSkirt1 + - first: + 4: 400182 + second: LeftFrontSkirt2 + - first: + 4: 400184 + second: LeftNostril + - first: + 4: 400186 + second: LeftPauldron + - first: + 4: 400188 + second: MouthCenterDown + - first: + 4: 400190 + second: MouthCenterUp + - first: + 4: 400192 + second: MouthLeftCorner + - first: + 4: 400194 + second: MouthLeftDown + - first: + 4: 400196 + second: MouthLeftDown1 + - first: + 4: 400198 + second: MouthLeftUp + - first: + 4: 400200 + second: MouthLeftUp1 + - first: + 4: 400202 + second: MouthRightCorner + - first: + 4: 400204 + second: MouthRightDown + - first: + 4: 400206 + second: MouthRightDown1 + - first: + 4: 400208 + second: MouthRightUp + - first: + 4: 400210 + second: MouthRightUp1 + - first: + 4: 400212 + second: RightBrow1 + - first: + 4: 400214 + second: RightBrow2 + - first: + 4: 400216 + second: RightBrow3 + - first: + 4: 400218 + second: RightCheek + - first: + 4: 400220 + second: RightCheek1 + - first: + 4: 400222 + second: RightCheekMouth + - first: + 4: 400224 + second: RightCheekUp + - first: + 4: 400226 + second: RightCheekUp1 + - first: + 4: 400228 + second: RightChin + - first: + 4: 400230 + second: RightEye + - first: + 4: 400232 + second: RightEyeLidDown + - first: + 4: 400234 + second: RightEyeLidUp + - first: + 4: 400236 + second: RightFrontSkirt1 + - first: + 4: 400238 + second: RightFrontSkirt2 + - first: + 4: 400240 + second: RightNostril + - first: + 4: 400242 + second: RightPauldron + - first: + 4: 400244 + second: Tongue + - first: + 4: 400246 + second: Tongue1 + - first: + 4: 400248 + second: Tongue2 + - first: + 4: 400250 + second: VampArmsLegsMESH_LOD0 + - first: + 4: 400252 + second: VampCapeMESH + - first: + 4: 400254 + second: VampHeadMESH_LOD0 + - first: + 4: 400256 + second: VampTeethMESH_LOD0 + - first: + 4: 400258 + second: VampTorsoMESH_LOD0 + - first: + 43: 4300000 + second: DummyMESH + - first: + 43: 4300002 + second: VampTeethMESH_LOD0 + - first: + 43: 4300004 + second: VampTorsoMESH_LOD0 + - first: + 43: 4300006 + second: VampCapeMESH + - first: + 43: 4300008 + second: VampArmsLegsMESH_LOD0 + - first: + 43: 4300010 + second: VampHeadMESH_LOD0 + - first: + 74: 7400000 + second: Longs_GetUpBack + - first: + 74: 7400002 + second: Longs_KO_1 + - first: + 74: 7400004 + second: Longs_KO_2 + - first: + 74: 7400006 + second: Longs_KO_Air + - first: + 74: 7400008 + second: Longs_KO_AirStrong + - first: + 74: 7400010 + second: Longs_KO_Fall_Start + - first: + 74: 7400012 + second: Longs_KO_Fall_End + - first: + 74: 7400014 + second: Longs_SprintLoop + - first: + 74: 7400016 + second: Longs_SprintStart + - first: + 74: 7400018 + second: Longs_SprintStop_LU + - first: + 74: 7400020 + second: Longs_SprintStop_RU + - first: + 74: 7400022 + second: Longs_RollFwd + - first: + 74: 7400024 + second: Longs_RollBwd + - first: + 74: 7400026 + second: Longs_RollLeft + - first: + 74: 7400028 + second: Longs_RollRight + - first: + 74: 7400030 + second: Longs_OnGround_Hit + - first: + 74: 7400032 + second: Longs_JumpAttack_R + - first: + 74: 7400034 + second: Longs_JumpAttack_RD + - first: + 74: 7400036 + second: Longs_JumpAttack_LD + - first: + 74: 7400038 + second: Longs_BlockStart + - first: + 74: 7400040 + second: Longs_BlockLoop + - first: + 74: 7400042 + second: Longs_BlockImpact + - first: + 74: 7400044 + second: Longs_BlockEnd + - first: + 74: 7400046 + second: Longs_BlockAdd + - first: + 74: 7400048 + second: Longs_CrouchLoop + - first: + 74: 7400050 + second: Longs_CrouchStart + - first: + 74: 7400052 + second: Longs_CrouchEnd + - first: + 95: 9500000 + second: //RootNode + - first: + 137: 13700000 + second: DummyMESH + - first: + 137: 13700002 + second: VampArmsLegsMESH_LOD0 + - first: + 137: 13700004 + second: VampCapeMESH + - first: + 137: 13700006 + second: VampHeadMESH_LOD0 + - first: + 137: 13700008 + second: VampTeethMESH_LOD0 + - first: + 137: 13700010 + second: VampTorsoMESH_LOD0 + externalObjects: {} materials: - importMaterials: 0 + materialImportMode: 0 materialName: 0 materialSearch: 1 + materialLocation: 0 animations: legacyGenerateAnimations: 4 bakeSimulation: 0 resampleCurves: 1 optimizeGameObjects: 0 + removeConstantScaleCurves: 0 motionNodeName: Root - rigImportErrors: - rigImportWarnings: animationImportErrors: animationImportWarnings: animationRetargetingWarnings: animationDoRetargetingWarnings: 0 + importAnimatedCustomProperties: 0 + importConstraints: 0 animationCompression: 1 animationRotationError: 0.2 animationPositionError: 0.2 @@ -332,6 +940,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_GetUpBack takeName: Longs_GetUpBack + internalID: 0 firstFrame: 0 lastFrame: 100 wrapMode: 0 @@ -356,30 +965,42 @@ ModelImporter: curve: serializedVersion: 2 curve: - - serializedVersion: 2 + - serializedVersion: 3 time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 0.66630864 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 0.6751964 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 1 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 preInfinity: 3 postInfinity: 3 rotationOrder: 0 @@ -387,30 +1008,42 @@ ModelImporter: curve: serializedVersion: 2 curve: - - serializedVersion: 2 + - serializedVersion: 3 time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 0.60530937 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 0.6311676 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 1 value: 0 inSlope: 0 outSlope: 0 tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 preInfinity: 3 postInfinity: 3 rotationOrder: 0 @@ -574,6 +1207,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_1 takeName: Longs_KO_1 + internalID: 0 firstFrame: 0 lastFrame: 117 wrapMode: 0 @@ -754,6 +1388,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_2 takeName: Longs_KO_2 + internalID: 0 firstFrame: 0 lastFrame: 195 wrapMode: 0 @@ -941,6 +1576,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_Air takeName: Longs_KO_Air + internalID: 0 firstFrame: 0 lastFrame: 108 wrapMode: 0 @@ -965,18 +1601,24 @@ ModelImporter: curve: serializedVersion: 2 curve: - - serializedVersion: 2 + - serializedVersion: 3 time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 1 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 preInfinity: 3 postInfinity: 3 rotationOrder: 0 @@ -984,18 +1626,24 @@ ModelImporter: curve: serializedVersion: 2 curve: - - serializedVersion: 2 + - serializedVersion: 3 time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 1 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 preInfinity: 3 postInfinity: 3 rotationOrder: 0 @@ -1159,6 +1807,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_AirStrong takeName: Longs_KO_AirStrong + internalID: 0 firstFrame: 0 lastFrame: 108 wrapMode: 0 @@ -1339,6 +1988,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_Fall_Start takeName: Longs_KO_Fall_Start + internalID: 0 firstFrame: 5 lastFrame: 150 wrapMode: 0 @@ -1519,6 +2169,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_KO_Fall_End takeName: Longs_KO_Fall_End + internalID: 0 firstFrame: 35 lastFrame: 108 wrapMode: 0 @@ -1699,6 +2350,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_SprintLoop takeName: Longs_SprintLoop + internalID: 0 firstFrame: 0 lastFrame: 38 wrapMode: 0 @@ -1879,6 +2531,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_SprintStart takeName: Longs_SprintStart + internalID: 0 firstFrame: 0 lastFrame: 26 wrapMode: 0 @@ -2066,6 +2719,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_SprintStop_LU takeName: Longs_SprintStop_LU + internalID: 0 firstFrame: 0 lastFrame: 66 wrapMode: 0 @@ -2246,6 +2900,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_SprintStop_RU takeName: Longs_SprintStop_RU + internalID: 0 firstFrame: 0 lastFrame: 60 wrapMode: 0 @@ -2426,6 +3081,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_RollFwd takeName: Longs_RollFwd + internalID: 0 firstFrame: 0 lastFrame: 102 wrapMode: 0 @@ -2606,6 +3262,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_RollBwd takeName: Longs_RollBwd + internalID: 0 firstFrame: 0 lastFrame: 117 wrapMode: 0 @@ -2786,6 +3443,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_RollLeft takeName: Longs_RollLeft + internalID: 0 firstFrame: 0 lastFrame: 104 wrapMode: 0 @@ -2966,6 +3624,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_RollRight takeName: Longs_RollRight + internalID: 0 firstFrame: 0 lastFrame: 102 wrapMode: 0 @@ -3146,6 +3805,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_OnGround_Hit takeName: Longs_OnGround_Hit + internalID: 0 firstFrame: 23 lastFrame: 108 wrapMode: 0 @@ -3170,18 +3830,24 @@ ModelImporter: curve: serializedVersion: 2 curve: - - serializedVersion: 2 + - serializedVersion: 3 time: 0 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 - - serializedVersion: 2 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 time: 1 value: 1 inSlope: 0 outSlope: 0 tangentMode: 0 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 preInfinity: 3 postInfinity: 3 rotationOrder: 0 @@ -3345,6 +4011,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_JumpAttack_R takeName: Longs_JumpAttack_R + internalID: 0 firstFrame: 0 lastFrame: 104 wrapMode: 0 @@ -3525,6 +4192,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_JumpAttack_RD takeName: Longs_JumpAttack_RD + internalID: 0 firstFrame: 0 lastFrame: 130 wrapMode: 0 @@ -3705,6 +4373,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_JumpAttack_LD takeName: Longs_JumpAttack_LD + internalID: 0 firstFrame: 0 lastFrame: 84 wrapMode: 0 @@ -3892,6 +4561,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_BlockStart takeName: Longs_BlockStart + internalID: 0 firstFrame: 0 lastFrame: 20 wrapMode: 0 @@ -4072,6 +4742,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_BlockLoop takeName: Longs_BlockLoop + internalID: 0 firstFrame: 240 lastFrame: 360 wrapMode: 0 @@ -4252,6 +4923,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_BlockImpact takeName: Longs_BlockImpact + internalID: 0 firstFrame: 0 lastFrame: 33 wrapMode: 0 @@ -4432,6 +5104,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_BlockEnd takeName: Longs_BlockEnd + internalID: 0 firstFrame: 0 lastFrame: 30 wrapMode: 0 @@ -4612,6 +5285,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_BlockAdd takeName: Longs_BlockAdd + internalID: 0 firstFrame: 0 lastFrame: 60 wrapMode: 0 @@ -4792,6 +5466,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_CrouchLoop takeName: Longs_CrouchLoop + internalID: 0 firstFrame: 0 lastFrame: 92 wrapMode: 0 @@ -4972,6 +5647,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_CrouchStart takeName: Longs_CrouchStart + internalID: 0 firstFrame: 0 lastFrame: 30 wrapMode: 0 @@ -5152,6 +5828,7 @@ ModelImporter: - serializedVersion: 16 name: Longs_CrouchEnd takeName: Longs_CrouchEnd + internalID: 0 firstFrame: 0 lastFrame: 20 wrapMode: 0 @@ -5335,30 +6012,49 @@ ModelImporter: globalScale: 1 meshCompression: 0 addColliders: 0 + useSRGBMaterialColor: 1 + sortHierarchyByName: 1 + importPhysicalCameras: 0 importVisibility: 0 importBlendShapes: 1 importCameras: 0 importLights: 0 + nodeNameCollisionStrategy: 0 + fileIdsGeneration: 1 swapUVChannels: 0 generateSecondaryUV: 0 useFileUnits: 1 - optimizeMeshForGPU: 1 keepQuads: 0 weldVertices: 1 + bakeAxisConversion: 0 + preserveHierarchy: 0 + skinWeightsMode: 0 + maxBonesPerVertex: 4 + minBoneWeight: 0.001 + optimizeBones: 1 + meshOptimizationFlags: -1 + indexFormat: 1 secondaryUVAngleDistortion: 8 secondaryUVAreaDistortion: 15.000001 secondaryUVHardAngle: 88 + secondaryUVMarginMethod: 0 + secondaryUVMinLightmapResolution: 40 + secondaryUVMinObjectScale: 1 secondaryUVPackMargin: 4 useFileScale: 1 + strictVertexDataChecks: 0 tangentSpace: normalSmoothAngle: 60 normalImportMode: 0 tangentImportMode: 3 normalCalculationMode: 0 + legacyComputeAllNormalsFromSmoothingGroupsWhenMeshHasBlendShapes: 1 + blendShapeNormalImportMode: 1 + normalSmoothingSource: 0 + referencedClips: [] importAnimation: 1 - copyAvatar: 1 humanDescription: - serializedVersion: 2 + serializedVersion: 3 human: - boneName: Hips humanName: Hips @@ -6436,23 +7132,21 @@ ModelImporter: armStretch: 0.05 legStretch: 0.05 feetSpacing: 0 + globalScale: 1 rootMotionBoneName: Root - rootMotionBoneRotation: {x: 0, y: 0, z: 0, w: 1} hasTranslationDoF: 0 hasExtraRoot: 1 skeletonHasParents: 0 lastHumanDescriptionAvatarSource: {fileID: 9000000, guid: 3aaf38176678e1d4994b710ba08065f2, type: 3} + autoGenerateAvatarMappingIfUnspecified: 1 animationType: 3 humanoidOversampling: 1 + avatarSetup: 2 + addHumanoidExtraRootOnlyWhenUsingAvatar: 0 + importBlendShapeDeformPercent: 0 + remapMaterialsIfMaterialImportModeIsNone: 1 additionalBone: 0 userData: assetBundleName: assetBundleVariant: -AssetOrigin: - serializedVersion: 1 - productId: 92239 - packageName: Longsword Animset Pro - packageVersion: 1.0 - assetPath: Assets/ThirdParty/ANIMATIONS/LongswordAnimsetPro/Animations/Longsword_Animset_pt4.fbx - uploadId: 340990