2.5d test
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using BumpCombat.Constants;
|
||||
using BumpCombat.Defense;
|
||||
using BumpCombat.Player;
|
||||
using UnityEngine;
|
||||
|
||||
@@ -25,6 +26,8 @@ namespace BumpCombat.Enemies
|
||||
private float necrofireRayLength;
|
||||
private bool meleeAttackActive;
|
||||
private bool meleeHitConfirmed;
|
||||
private bool defenseSummonHitConfirmed;
|
||||
private bool checkingDefenseSummonGeometry;
|
||||
private StageEnemyEffectVisual necrofireRayVisual;
|
||||
private readonly List<StageEnemyEffectVisual> stageAoeVisuals = new();
|
||||
private readonly List<AttackWarningVisual> stageMultiWarnings = new();
|
||||
@@ -202,6 +205,7 @@ namespace BumpCombat.Enemies
|
||||
attackOrigin = transform.position;
|
||||
meleeAttackActive = false;
|
||||
meleeHitConfirmed = false;
|
||||
defenseSummonHitConfirmed = false;
|
||||
if (IsLancerAttack)
|
||||
{
|
||||
EnsureLancerVisual();
|
||||
@@ -440,6 +444,7 @@ namespace BumpCombat.Enemies
|
||||
|
||||
public void TickActive(float activeElapsed)
|
||||
{
|
||||
TryApplyDefenseSummonHit(activeElapsed);
|
||||
if (necrofireRayActive)
|
||||
{
|
||||
TickNecrofireRay();
|
||||
@@ -495,6 +500,7 @@ namespace BumpCombat.Enemies
|
||||
necrofireRayHitConfirmed = false;
|
||||
meleeAttackActive = false;
|
||||
meleeHitConfirmed = false;
|
||||
defenseSummonHitConfirmed = false;
|
||||
if (necrofireRayVisual != null)
|
||||
{
|
||||
Destroy(necrofireRayVisual.gameObject);
|
||||
@@ -796,6 +802,28 @@ namespace BumpCombat.Enemies
|
||||
|| controller.AttackShape == EnemyAttackShape.Cone;
|
||||
}
|
||||
|
||||
private void TryApplyDefenseSummonHit(float activeElapsed)
|
||||
{
|
||||
if (defenseSummonHitConfirmed || !controller.CurrentAttackPattern.IsContactWindowActive(activeElapsed, controller.ActiveDuration)) return;
|
||||
DefenseSummonUnit target = controller.DefenseCombatTarget;
|
||||
if (target == null || target.BodyCollider == null) return;
|
||||
bool hit;
|
||||
if (controller.AttackShape == EnemyAttackShape.Body)
|
||||
{
|
||||
ColliderDistance2D distance = controller.BodyCollider.Distance(target.BodyCollider);
|
||||
hit = distance.isOverlapped || distance.distance <= 0.03f;
|
||||
}
|
||||
else
|
||||
{
|
||||
checkingDefenseSummonGeometry = true;
|
||||
hit = ContainsPoint(target.BodyCollider.bounds.center);
|
||||
checkingDefenseSummonGeometry = false;
|
||||
}
|
||||
if (!hit) return;
|
||||
Vector2 direction = (Vector2)target.transform.position - (Vector2)transform.position;
|
||||
if (direction.sqrMagnitude <= 0.0001f) direction = lockedDirection;
|
||||
defenseSummonHitConfirmed = target.TryTakeDamage(controller.AttackDamage, direction.normalized);
|
||||
}
|
||||
private void TryApplyMeleeHit(float activeElapsed)
|
||||
{
|
||||
if (!meleeAttackActive || meleeHitConfirmed)
|
||||
@@ -943,31 +971,26 @@ namespace BumpCombat.Enemies
|
||||
|
||||
private bool ContainsPlayerCollider(Collider2D[] hits)
|
||||
{
|
||||
Collider2D playerCollider = GetPlayerCollider();
|
||||
if (playerCollider == null || hits == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Collider2D targetCollider = GetPlayerCollider();
|
||||
if (targetCollider == null || hits == null) return false;
|
||||
for (int i = 0; i < hits.Length; i++)
|
||||
{
|
||||
if (hits[i] == playerCollider
|
||||
|| hits[i].GetComponentInParent<PlayerHealth>() == playerHealth)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
if (hits[i] == targetCollider) return true;
|
||||
if (!checkingDefenseSummonGeometry
|
||||
&& hits[i].GetComponentInParent<PlayerHealth>() == playerHealth) return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private Collider2D GetPlayerCollider()
|
||||
{
|
||||
return playerHealth != null
|
||||
? playerHealth.GetComponent<Collider2D>()
|
||||
: null;
|
||||
if (checkingDefenseSummonGeometry)
|
||||
{
|
||||
DefenseSummonUnit target = controller != null ? controller.DefenseCombatTarget : null;
|
||||
return target != null ? target.BodyCollider : null;
|
||||
}
|
||||
return playerHealth != null ? playerHealth.GetComponent<Collider2D>() : null;
|
||||
}
|
||||
|
||||
private void TickNecrofireRay()
|
||||
{
|
||||
if (!necrofireRayActive || necrofireRayHitConfirmed)
|
||||
|
||||
Reference in New Issue
Block a user