Files
Darklings-FightingGame/Assets/_Project/Scripts/SimulationScripts/StateScripts/StatesScripts/BlockStateScripts/BlockParentState.cs

145 lines
5.7 KiB
C#
Raw Normal View History

2022-12-27 13:12:53 +02:00
using System.Collections;
using System.Collections.Generic;
using Demonics;
2022-12-27 13:12:53 +02:00
using UnityEngine;
2022-12-28 14:10:45 +02:00
public class BlockParentState : State
2022-12-27 13:12:53 +02:00
{
2022-12-28 14:10:45 +02:00
public static bool skipKnockback;
public override void UpdateLogic(PlayerNetwork player)
2022-12-27 13:12:53 +02:00
{
2022-12-28 14:10:45 +02:00
if (!player.enter)
{
2023-10-11 02:25:05 +03:00
CameraShake.Instance.Shake(new CameraShakerNetwork()
2023-12-03 02:36:58 +02:00
{ intensity = player.attackHurtNetwork.cameraShakerNetwork.intensity - 4, timer = player.attackHurtNetwork.cameraShakerNetwork.timer });
2022-12-28 14:10:45 +02:00
OnEnter(player);
return;
2022-12-28 14:10:45 +02:00
}
if (SceneSettings.IsTrainingMode)
player.framedataEnum = FramedataTypesEnum.Block;
2023-01-12 19:12:56 +02:00
if (!player.hitstop)
2022-12-28 14:10:45 +02:00
{
AfterHitstop(player);
}
2023-01-07 23:17:55 +02:00
ToHurtState(player);
2023-01-19 02:51:24 +02:00
ToShadowbreakState(player);
2022-12-27 13:12:53 +02:00
}
2022-12-28 14:10:45 +02:00
protected virtual void OnEnter(PlayerNetwork player)
2022-12-27 13:12:53 +02:00
{
2023-05-28 14:10:29 +03:00
player.otherPlayer.ArcanaGain(ArcanaGainTypes.AttackOnBlock);
player.ArcanaGain(ArcanaGainTypes.DefendOnBlock);
2023-03-11 17:09:51 +02:00
CheckFlip(player);
2023-01-07 23:17:55 +02:00
player.otherPlayer.canChainAttack = true;
2022-12-28 14:10:45 +02:00
player.player.StartShakeContact();
player.enter = true;
2023-01-07 23:17:55 +02:00
GameSimulation.Hitstop = player.attackHurtNetwork.hitstop;
2022-12-28 14:10:45 +02:00
player.sound = "Block";
2023-07-02 23:17:37 +03:00
DemonVector2 hurtEffectPosition = new DemonVector2(player.position.x + (5 * player.flip), player.hurtPosition.y);
2023-01-07 23:17:55 +02:00
if (player.attackHurtNetwork.hardKnockdown)
2022-12-28 14:10:45 +02:00
{
2023-06-27 17:23:24 +03:00
player.SetParticle("Chip", hurtEffectPosition);
2023-01-07 23:17:55 +02:00
player.health -= 200;
player.healthRecoverable -= 200;
2022-12-28 14:10:45 +02:00
player.player.PlayerUI.Damaged();
2023-01-10 18:39:07 +02:00
player.player.PlayerUI.UpdateHealthDamaged(player.healthRecoverable);
2022-12-28 14:10:45 +02:00
}
else
{
2023-06-27 17:23:24 +03:00
player.SetParticle("Block", hurtEffectPosition);
2022-12-28 14:10:45 +02:00
}
player.animationFrames = 0;
player.stunFrames = player.attackHurtNetwork.blockStun;
2023-01-07 23:17:55 +02:00
player.knockback = 0;
player.pushbackStart = player.position;
2023-01-12 19:12:56 +02:00
if (player.attackHurtNetwork.hardKnockdown)
{
2023-01-17 04:12:57 +02:00
player.attackHurtNetwork.knockbackDuration /= 2;
2023-07-02 23:17:37 +03:00
player.pushbackEnd = new DemonVector2((player.position.x + (player.attackHurtNetwork.knockbackForce * -player.flip) / 2), DemonicsPhysics.GROUND_POINT);
2023-01-12 19:12:56 +02:00
}
else
{
2023-07-02 23:17:37 +03:00
player.pushbackEnd = new DemonVector2(player.position.x + (player.attackHurtNetwork.knockbackForce * -player.flip), DemonicsPhysics.GROUND_POINT);
2023-01-12 19:12:56 +02:00
}
2023-07-02 23:17:37 +03:00
player.velocity = DemonVector2.Zero;
2022-12-27 13:12:53 +02:00
}
2022-12-28 14:10:45 +02:00
protected virtual void AfterHitstop(PlayerNetwork player)
{
2023-07-02 23:17:37 +03:00
player.velocity = new DemonVector2(player.velocity.x, player.velocity.y - DemonicsPhysics.GRAVITY);
2023-01-07 23:17:55 +02:00
if (player.attackHurtNetwork.knockbackDuration > 0 && player.knockback <= player.attackHurtNetwork.knockbackDuration)
2022-12-28 14:10:45 +02:00
{
2023-07-02 23:17:37 +03:00
DemonFloat ratio = (DemonFloat)player.knockback / (DemonFloat)player.attackHurtNetwork.knockbackDuration;
DemonFloat nextX = DemonFloat.Lerp(player.pushbackStart.x, player.pushbackEnd.x, ratio);
DemonVector2 nextPosition = DemonVector2.Zero;
nextPosition = new DemonVector2(nextX, player.position.y);
2023-01-07 23:17:55 +02:00
player.position = nextPosition;
2023-01-12 19:12:56 +02:00
if (player.position.x >= DemonicsPhysics.WALL_RIGHT_POINT)
{
2023-07-02 23:17:37 +03:00
player.position = new DemonVector2(DemonicsPhysics.WALL_RIGHT_POINT, player.position.y);
2023-01-12 19:12:56 +02:00
}
else if (player.position.x <= DemonicsPhysics.WALL_LEFT_POINT)
{
2023-07-02 23:17:37 +03:00
player.position = new DemonVector2(DemonicsPhysics.WALL_LEFT_POINT, player.position.y);
2023-01-12 19:12:56 +02:00
}
2023-01-07 23:17:55 +02:00
player.knockback++;
2022-12-28 14:10:45 +02:00
}
player.player.StopShakeCoroutine();
player.stunFrames--;
}
2023-01-07 23:17:55 +02:00
private void ToHurtState(PlayerNetwork player)
2022-12-29 19:32:58 +02:00
{
2023-01-17 04:12:57 +02:00
if (IsColliding(player))
2022-12-29 19:32:58 +02:00
{
2023-01-07 23:17:55 +02:00
player.enter = false;
2023-01-19 02:51:24 +02:00
if (player.attackHurtNetwork.attackType == AttackTypeEnum.Throw)
{
2023-01-23 18:31:58 +02:00
EnterState(player, "Grabbed");
return;
2023-01-19 02:51:24 +02:00
}
if (DemonicsPhysics.IsInCorner(player))
{
player.otherPlayer.knockback = 0;
player.otherPlayer.pushbackStart = player.otherPlayer.position;
2023-07-02 23:17:37 +03:00
player.otherPlayer.pushbackEnd = new DemonVector2(player.otherPlayer.position.x + (player.attackHurtNetwork.knockbackForce * -player.otherPlayer.flip), DemonicsPhysics.GROUND_POINT);
2023-01-19 02:51:24 +02:00
player.otherPlayer.pushbackDuration = player.attackHurtNetwork.knockbackDuration;
}
if (IsBlocking(player, true))
2023-01-07 23:17:55 +02:00
{
2023-07-02 23:17:37 +03:00
if ((DemonFloat)player.position.y <= DemonicsPhysics.GROUND_POINT && (DemonFloat)player.velocity.y <= (DemonFloat)0)
2023-01-07 23:17:55 +02:00
{
if (player.direction.y < 0)
{
2023-01-23 18:31:58 +02:00
EnterState(player, "BlockLow");
2023-01-07 23:17:55 +02:00
}
else
{
2023-01-23 18:31:58 +02:00
EnterState(player, "Block");
2023-01-07 23:17:55 +02:00
}
}
else
{
2023-01-23 18:31:58 +02:00
EnterState(player, "BlockAir");
2023-01-07 23:17:55 +02:00
}
}
else
{
if (player.attackHurtNetwork.hardKnockdown)
{
2023-01-23 18:31:58 +02:00
EnterState(player, "Airborne");
2023-01-07 23:17:55 +02:00
}
else
{
if (player.attackHurtNetwork.knockbackArc == 0 || player.attackHurtNetwork.softKnockdown)
{
2023-01-23 18:31:58 +02:00
EnterState(player, "Hurt");
2023-01-07 23:17:55 +02:00
}
else
{
2023-01-23 18:31:58 +02:00
EnterState(player, "HurtAir");
2023-01-07 23:17:55 +02:00
}
}
}
2022-12-29 19:32:58 +02:00
}
}
2022-12-28 14:10:45 +02:00
}