Exemplo n.º 1
0
    //effects


    public AnimAttackData(string animName, GameObject trail, float moveDistance, float hitTime, float attackEndTime, float hitDamage, float hitAngle, float hitMomentum,
                          E_CriticalHitType criticalType, bool areaKnockDown)
    {
        AnimName = animName;
        Trail    = trail;

        if (Trail)
        {
            Parent = Trail.transform.parent;

            if (Trail.transform.Find("dust"))
            {
                Dust          = Trail.transform.Find("dust").gameObject;
                AnimationDust = Dust.GetComponent <Animation>();
                MaterialDust  = Dust.GetComponent <Renderer>().material;
            }

            Animation = Trail.transform.parent.GetComponent <Animation>();
            if (Trail.GetComponentInChildren(typeof(Renderer)))
            {
                Material = (Trail.GetComponentInChildren(typeof(Renderer)) as Renderer).material;
            }
            else if (Trail.GetComponentInChildren(typeof(SkinnedMeshRenderer)))
            {
                Material = (Trail.GetComponentInChildren(typeof(SkinnedMeshRenderer)) as Renderer).material;
            }
            else
            {
                Material = null;
            }

            if (Material == null)
            {
                Debug.LogError("Trail - no Material");
            }
        }
        else
        {
            Animation = null;
            Material  = null;
        }

        MoveDistance = moveDistance;

        AttackEndTime       = attackEndTime;
        AttackMoveStartTime = 0;
        AttackMoveEndTime   = AttackEndTime * 0.7f;

        HitTime             = hitTime;
        HitDamage           = hitDamage;
        HitAngle            = hitAngle;
        HitMomentum         = hitMomentum;
        HitCriticalType     = criticalType;
        HitAreaKnockdown    = areaKnockDown;
        BreakBlock          = false;
        UseImpuls           = false;
        CriticalModificator = 1;
    }
Exemplo n.º 2
0
    /// <summary>
    /// Receives the critical hit.
    /// 重击,一击必杀,出现碎尸效果
    /// </summary>
    /// <param name="attacker">Attacker.</param>
    /// <param name="type">Type.</param>
    /// <param name="effectOnly">If set to <c>true</c> effect only.</param>
    public void ReceiveCriticalHit(Agent attacker, E_CriticalHitType type, bool effectOnly = false)
    {
        //     Legs = 0,   Beheaded,    HalfBody,    SliceFrontBack,    SliceLeftRight,

        if (attacker.IsPlayer)
        {
            Game.Instance.Hits += 1;

            Game.Instance.Score += Experience;
            Player.Instance.AddExperience(Experience, 1.5f + Game.Instance.Hits * 0.1f);
            Game.Instance.NumberOfCriticals++;
        }

        BlackBoard.Stop   = true;
        BlackBoard.Health = 0;

        if (type == E_CriticalHitType.Horizontal)
        {
            int r = Random.Range(0, 100);
            if (r < 33)
            {
                MissionZone.Instance.GetDead(this, E_DeadBodyType.Legs);
            }
            else if (r < 66)
            {
                MissionZone.Instance.GetDead(this, E_DeadBodyType.Beheaded);
            }
            else
            {
                MissionZone.Instance.GetDead(this, E_DeadBodyType.HalfBody);
            }
        }
        else
        {
            float dot = Vector3.Dot(Forward, attacker.Forward);

            if (dot < 0.5 && dot > -0.5f)
            {
                MissionZone.Instance.GetDead(this, E_DeadBodyType.SliceLeftRight);
            }
            else
            {
                MissionZone.Instance.GetDead(this, E_DeadBodyType.SliceFrontBack);
            }
        }

        CombatEffectsManager.Instance.PlayCriticalEffect(Transform.position, -attacker.Forward);

        MissionZone.Instance.ReturnHuman(GameObject);
    }