Пример #1
0
        public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
        {
            if (characterControl == null)
            {
                CharacterControl control = animator.transform.root.GetComponent <CharacterControl>();

                control.CacheCharacterControl(animator);
            }

            foreach (StateData d in ListAbilityData)
            {
                d.OnEnter(this, animator, stateInfo);
            }
        }
Пример #2
0
        private void TakeDamage(AttackInfo info)
        {
            control.CacheCharacterControl(control.SkinnedMeshAnimator);
            control.RIGID_BODY.velocity = Vector3.zero;
            float dam = info.AttackAbility.damage;
            float w   = control.weight;
            float s   = info.AttackAbility.scaler;
            float b   = info.AttackAbility.baseMultiplier;

            if (control.FaceLeft)
            {
                control.RIGID_BODY.AddForce(Vector3.forward * (((((7 * (dam + 2) * (hp)) / (w + 100)) + 9) * (2 * s)) + b));
            }
            if (control.FaceRight)
            {
                control.RIGID_BODY.AddForce(-Vector3.forward * (((((7 * (dam + 2) * (hp)) / (w + 100)) + 9) * (2 * s)) + b));
            }

            if (info.CurrentHits != info.MaxHits)
            {
                if (info.MustCollide)
                {
                    hp += info.AttackAbility.damage;
                    info.CurrentHits++;
                }
            }

            if (IsDead())
            {
                Respawn();
            }

            else
            {
                control.SkinnedMeshAnimator.runtimeAnimatorController = null;
                control.SkinnedMeshAnimator.runtimeAnimatorController = HitReactionList[0];
            }



            Debug.Log(info.Attacker.gameObject.name + " hits: " + this.gameObject.name);
            Debug.Log(this.gameObject.name + " hit in " + DamagedPart.ToString());

            //control.SkinnedMeshAnimator.runtimeAnimatorController = info.AttackAbility.GetDeathAnimator();
        }
Пример #3
0
        private void TakeDamage(AttackInfo info)
        {
            if (IsDead())
            {
                return;
            }



            float d = info.getDamage();
            float h = GetHP();
            float s = info.scaler;
            float b = info.baseMultiplier;

            float partA     = (d + 2);
            float partB     = (d + h);
            float partC     = (info.Attacker.GetWeight() + 100);
            float numerator = (partA * partB * 7);
            float fraction  = numerator / partC;
            float inner     = fraction + 9;
            float innerTwo  = 2 * s;

            inner *= innerTwo;
            inner += b;

            float knockback = inner;



            if (info.Attacker.FaceLeft)
            {
                control.RIGID_BODY.AddForce(-(new Vector3(info.knockAngle.x, -info.knockAngle.y, info.knockAngle.z)) * knockback * 10);
            }

            else
            {
                control.RIGID_BODY.AddForce(info.knockAngle * knockback * 10);
            }



            control.CacheCharacterControl(control.SkinnedMeshAnimator);
            info.CurrentHits++;

            HP += info.AttackAbility.damage;
            if (info.AttackAbility.throwable)
            {
                bruh();
                Destroy(GameObject.Find(info.objectName));
            }

            if (IsDead())
            {
                control.SkinnedMeshAnimator.runtimeAnimatorController = DeathAnimationManager.Instance.GetAnimator(DamagedPart);
            }
            else
            {
                //Debug.Log("Player is not dead");
                //reaction
            }

            AttackManager.Instance.ForceDeregister(control);
        }