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); } } }
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(); } }
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); } } } }
internal virtual Vector2 GetRecoilFor(PlayerUnitController player) => RecoilHelpers.GetRecoilFromTo(player.transform, transform, recoilForce);
public override Vector2 GetCollisionRecoil(PlayerUnitController player) => RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, collisionForce);
public override Vector2 GetGuardedRecoil(PlayerUnitController player) => RecoilHelpers.GetRecoilFromTo(player.transform, controller.transform, shielRecoilForce);
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);
private void SetHitState(PlayerUnitController player) { controller.fsm.hit.Direction = RecoilHelpers.GetRecoilFromTo(controller.transform, player.transform, 1); controller.fsm.PlayHit(); }