示例#1
0
    private void AttackPlayer(PlayerUnitController player)
    {
        PlayerVulnerability vulnerability = player.di.vulnerability;
        Vector2             lookVector    = new Vector2(physics.flip.Direction.ToFloat(), 1);

        if (vulnerability.IsGuardingInOpposingDirection(physics.flip.Direction))
        {
            float recoilTileForce;
            if (IsFullAssembly(player))
            {
                stateMachine.attack.StartStagger();
                recoilTileForce = data.guardFullAssemblyRecoilTileForce;
                // TODO: short stagger?
            }
            else
            {
                recoilTileForce = data.guardPartialAssemblyRecoilTileForce;
                Vector2 playerRecoil = RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, recoilTileForce);
                player.di.stateMachine.SetRecoilState(playerRecoil);
            }
        }
        else if (vulnerability.IsVulnerable())
        {
            PlayerDamageModule damage          = player.di.damage;
            Vector2            collisionRecoil = RecoilHelpers.GetRecoilNormalFromTo(player.transform, controller.transform);
            if (IsFullAssembly(player))
            {
                damage.TakeDamage(data.attackDamage, TileHelpers.TileToWorld(data.attackFullAssemblyRecoilTileForce) * collisionRecoil);
            }
            else
            {
                damage.TakeDamage(data.attackDamage, TileHelpers.TileToWorld(data.attackPartialAssemblyRecoilTileForce) * collisionRecoil);
            }
        }
    }
示例#2
0
 public override void TakeDamageFrom(BoxCollider2D damageCollider, PlayerUnitController player)
 {
     if (animator.IsState(PigmanAnimatorState.Stagger))
     {
         hasAfterParryRecoil = false;
         currentHp--;
         if (currentHp == 0)
         {
             Die();
         }
         else
         {
             TakeHit();
         }
     }
     else if (animator.IsState(PigmanAnimatorState.Hit))
     {
         // do nothing
     }
     else
     {
         hasAfterParryRecoil = true;
         float tileForce = player.di.stats.IsFullAssembly
     ? data.parryFullAssemblyRecoilTileForce
     : data.parryPartialAssemblyRecoilTileForce;
         afterParryRecoil = RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, tileForce);
         stateMachine.attack.StartParry();
     }
 }
示例#3
0
    public override Vector2 GetGuardedRecoil(PlayerUnitController player)
    {
        float tileForce = player.di.stats.IsFullAssembly
      ? data.guardFullAssemblyRecoilTileForce
      : data.guardPartialAssemblyRecoilTileForce;

        return(RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, tileForce));
    }
 public override Vector2 GetGuardedRecoil(PlayerUnitController player)
 {
     SetHitState(player);
     //controller.DestroyWithPoof();
     if (shieldRecoilForce == 0)
     {
         return(Vector2.zero);
     }
     return(RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, shieldRecoilForce));
 }
    private void OnTriggerEnter2D(Collider2D collision)
    {
        bool isFalling = physics.velocity.Y < 0;

        if (isFalling)
        {
            EnemyDamagable damagable = InteractiveHelpers.GetEnemy(collision);
            if (damagable)
            {
                damagable.TakeDamageFrom(boxCollider, controller);
                if (damagable.HasRecoilAfterDamage())
                {
                    controller.di.stateMachine.SetRecoilState(damagable.GetRecoilAfterDamage());
                }
                else
                {
                    Vector2 playerRecoil = RecoilHelpers.GetRecoilFromTo(controller.transform, controller.transform, tileRecoilOnHit);
                    Debug.Log(playerRecoil);
                    physics.velocity.Value = playerRecoil;
                    //controller.StateMachine.SetRecoilState(playerRecoil);
                }
            }
        }
    }
示例#6
0
 internal virtual Vector2 GetRecoilFor(PlayerUnitController player) =>
 RecoilHelpers.GetRecoilFromTo(player.transform, transform, recoilForce);
示例#7
0
 public override Vector2 GetCollisionRecoil(PlayerUnitController player) =>
 RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, collisionForce);
示例#8
0
 public override Vector2 GetGuardedRecoil(PlayerUnitController player) =>
 RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, shielRecoilForce);
示例#9
0
 protected override void OnGuarded(PlayerUnitController player)
 {
     controller.fsm.hit.Direction = RecoilHelpers.GetRecoilNormalFromTo(controller.transform, player.transform);
     controller.fsm.PlayHit();
 }
 public Vector2 GetRecoilFor(PlayerUnitController controller) =>
 RecoilHelpers.GetRecoilFromTo(controller.transform, transform, recoilForce);
示例#11
0
 private void SetHitState(PlayerUnitController player)
 {
     controller.fsm.hit.Direction = RecoilHelpers.GetRecoilFromTo(controller.transform, player.transform, 1);
     controller.fsm.PlayHit();
 }