Пример #1
0
    private void SetUp()
    {
        var Data   = Entity.GetComponent <KnightData>();
        var Status = Entity.GetComponent <StatusManager_Knight>();

        Status.OffBalance  = false;
        Status.Interrupted = false;

        BackTime  = Data.OffBalanceBackTime;
        StayTime  = Data.OffBalanceStayTime;
        TimeCount = 0;

        Context.AttackCoolDownTimeCount = 0;

        AIUtility.RectifyDirection(Context.Player, Entity);

        if (Status.CurrentTakenAttack.Dir == Direction.Right)
        {
            Entity.GetComponent <SpeedManager>().SelfSpeed.x = Data.OffBalanceBackSpeed;
        }
        else if (Status.CurrentTakenAttack.Dir == Direction.Left)
        {
            Entity.GetComponent <SpeedManager>().SelfSpeed.x = -Data.OffBalanceBackSpeed;
        }
    }
Пример #2
0
 private void CheckTime()
 {
     TimeCount += Time.deltaTime;
     if (TimeCount >= StateTime)
     {
         if (Context.CurrentAttackMode == KnightAttackMode.DoubleFirst)
         {
             AIUtility.RectifyDirection(Context.Player, Entity);
             Context.CurrentAttackMode = KnightAttackMode.DoubleSecond;
             TransitionTo <KnightAttackAnticipation>();
         }
         else
         {
             TransitionTo <KnightEngage>();
         }
     }
 }
Пример #3
0
    private void KeepDis()
    {
        var Data = Entity.GetComponent <KnightData>();

        var PlayerSpeedManager = Context.Player.GetComponent <SpeedManager>();

        var SelfSpeedManager = Entity.GetComponent <SpeedManager>();

        AIUtility.RectifyDirection(Context.Player, Entity);

        float AttackHitDis = (Data.SingleAttackHitBoxSize.x + Data.AttackStepForwardSpeed * Data.AttackTime) * Data.AttackAvailableHitBoxPercentage;

        float AttackHitBoxBorderToTruePos = Data.SingleAttackOffset.x - Data.SingleAttackHitBoxSize.x / 2 - (SelfSpeedManager.GetTruePos().x - Entity.transform.position.x) * Entity.transform.right.x;

        ShortAttackDis    = AttackHitDis + AttackHitBoxBorderToTruePos;
        ChaseAttackMinDis = AttackHitDis + AttackHitBoxBorderToTruePos + Data.MinChaseAttackChaseDistance;
        ChaseAttackMaxDis = AttackHitDis + AttackHitBoxBorderToTruePos + Data.MaxChaseAttackChaseDistance;

        float Dis = Mathf.Abs(AIUtility.GetXDiff(Context.Player, Entity)) - PlayerSpeedManager.BodyWidth / 2;

        if (Dis <= ShortAttackDis)
        {
            Entity.GetComponent <SpeedManager>().SelfSpeed.x = 0;
            if (Context.AttackCoolDownTimeCount <= 0)
            {
                Context.AttackCoolDownTimeCount = Data.AttackCoolDown;
                MakeAttackDecision();
            }
        }
        else if (Dis <= ChaseAttackMinDis)
        {
            Entity.GetComponent <SpeedManager>().SelfSpeed.x = Entity.transform.right.x * Data.NormalMoveSpeed;
        }
        else if (Dis <= ChaseAttackMaxDis)
        {
            Context.AttackCoolDownTimeCount = Data.AttackCoolDown;
            Context.CurrentAttackMode       = KnightAttackMode.Chase;
            TransitionTo <KnightAttackAnticipation>();
        }
        else
        {
            Entity.GetComponent <SpeedManager>().SelfSpeed.x = Entity.transform.right.x * Data.NormalMoveSpeed;
        }
    }
Пример #4
0
    private void KeepDis()
    {
        var Data = Entity.GetComponent <SoulWarriorData>();

        var PlayerSpeedManager = Context.Player.GetComponent <SpeedManager>();

        var SelfSpeedManager = Entity.GetComponent <SpeedManager>();

        AIUtility.RectifyDirection(Context.Player, Entity);

        float XDiff = AIUtility.GetXDiff(Context.Player, Entity);

        float AttackHitDis = (Data.SlashHitBoxSize.x + Data.AttackStepForwardSpeed * Data.SlashStrikeTime) * Data.SlashAvailableHitBoxPercentage;
        float AttackHitBoxBorderToTruePos = Data.SlashOffset.x - Data.SlashHitBoxSize.x / 2 - (SelfSpeedManager.GetTruePos().x - Entity.transform.position.x) * Entity.transform.right.x;

        float AttackDis = AttackHitDis + AttackHitBoxBorderToTruePos;

        if (Mathf.Abs(XDiff) > Data.MagicUseableDis)
        {
            SelfSpeedManager.SelfSpeed.x = Entity.transform.right.x * Data.NormalMoveSpeed;
        }
        else if (Mathf.Abs(XDiff) - PlayerSpeedManager.BodyWidth / 2 > AttackDis)
        {
            SelfSpeedManager.SelfSpeed.x = 0;
            if (Context.AttackCoolDownTimeCount <= 0)
            {
                TransitionTo <SoulWarriorMagicAnticipation>();
            }
        }
        else
        {
            SelfSpeedManager.SelfSpeed.x = 0;
            if (Context.AttackCoolDownTimeCount <= 0)
            {
                TransitionTo <SoulWarriorSlashAnticipation>();
            }
        }
    }