charging implemented

This commit is contained in:
Adam Salah 2025-06-23 21:13:36 -04:00
parent 23ecdd6ab4
commit f28e57eeb7
3 changed files with 138 additions and 27 deletions

View File

@ -939,7 +939,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: c0fbd934c179894458914437255781c4, type: 3} m_Script: {fileID: 11500000, guid: c0fbd934c179894458914437255781c4, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_entity: {fileID: 0} _entity: {fileID: 6519347188559722835}
_projectile: {fileID: 0} _projectile: {fileID: 0}
_projectileSpawn: {fileID: 0} _projectileSpawn: {fileID: 0}
--- !u!1 &2230360378224361585 --- !u!1 &2230360378224361585
@ -1095,6 +1095,7 @@ Transform:
- {fileID: 2230360378000122420} - {fileID: 2230360378000122420}
- {fileID: 2230360378127571587} - {fileID: 2230360378127571587}
- {fileID: 9128510391006626171} - {fileID: 9128510391006626171}
- {fileID: 4282222811149129398}
- {fileID: 7758425403302365699} - {fileID: 7758425403302365699}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_RootOrder: 0 m_RootOrder: 0
@ -1113,12 +1114,15 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_lifeBar: {fileID: 5807970101048976302} _lifeBar: {fileID: 5807970101048976302}
_hp: 30 _hp: 30
_speed: 1 _speed: 2
_attack_damage: 3 _attack_damage: 3
_attack_interval: 2 _attack_interval: 2
_enemy: {fileID: 0} _enemy: {fileID: 0}
_maxChargeHitCount: 2 _detection: {fileID: 9048754633958631738}
_maxChargeDistance: 5 _chargeDetection: {fileID: 4280547952316628076}
_root: {fileID: 2230360378127571586}
_maxChargeHitCount: 3
_maxChargeDistance: 10
--- !u!1839735485 &3032268583489863936 --- !u!1839735485 &3032268583489863936
Tilemap: Tilemap:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1314,6 +1318,78 @@ AudioSource:
m_PreInfinity: 2 m_PreInfinity: 2
m_PostInfinity: 2 m_PostInfinity: 2
m_RotationOrder: 4 m_RotationOrder: 4
--- !u!1 &4280547952316628076
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4282222811149129398}
- component: {fileID: 7206814474656499620}
- component: {fileID: 262912998092095710}
m_Layer: 6
m_Name: detection_charge
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &4282222811149129398
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4280547952316628076}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2230360378425099703}
m_RootOrder: 3
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!61 &7206814474656499620
BoxCollider2D:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4280547952316628076}
m_Enabled: 1
m_Density: 1
m_Material: {fileID: 0}
m_IsTrigger: 1
m_UsedByEffector: 0
m_UsedByComposite: 0
m_Offset: {x: 1.7450686, y: 0}
m_SpriteTilingProperty:
border: {x: 0, y: 0, z: 0, w: 0}
pivot: {x: 0, y: 0}
oldSize: {x: 0, y: 0}
newSize: {x: 0, y: 0}
adaptiveTilingThreshold: 0
drawMode: 0
adaptiveTiling: 0
m_AutoTiling: 0
serializedVersion: 2
m_Size: {x: 0.509863, y: 0.5}
m_EdgeRadius: 0
--- !u!114 &262912998092095710
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 4280547952316628076}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3}
m_Name:
m_EditorClassIdentifier:
_entityLinked: {fileID: 6519347188559722835}
--- !u!1 &4877457871086946352 --- !u!1 &4877457871086946352
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -1430,7 +1506,7 @@ Transform:
m_Children: m_Children:
- {fileID: 430301385815424918} - {fileID: 430301385815424918}
m_Father: {fileID: 2230360378425099703} m_Father: {fileID: 2230360378425099703}
m_RootOrder: 3 m_RootOrder: 4
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &5807970101048976302 --- !u!114 &5807970101048976302
MonoBehaviour: MonoBehaviour:
@ -1520,7 +1596,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3} m_Script: {fileID: 11500000, guid: 531d7966d86bd0c4d83baf58bcb56cd5, type: 3}
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
_entityLinked: {fileID: 0} _entityLinked: {fileID: 6519347188559722835}
--- !u!1 &9102431410695186542 --- !u!1 &9102431410695186542
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0

View File

@ -4,37 +4,65 @@ using UnityEngine;
public class Rider : Ally public class Rider : Ally
{ {
[SerializeField]
private GameObject _detection;
[SerializeField]
private GameObject _chargeDetection;
private Detection _chargeDetectionScript;
[SerializeField]
private GameObject _root;
private Root _rootScript;
private Vector2 _movementVector = Vector2.zero; private Vector2 _movementVector = Vector2.zero;
private bool _isCharging;
[SerializeField] [SerializeField]
private int _maxChargeHitCount; private int _maxChargeHitCount;
private List<Entity> _opponentsHit = new List<Entity>();
[SerializeField] [SerializeField]
private int _maxChargeDistance; private int _maxChargeDistance;
private int _opponentsHit; private Vector3 _originalPos;
private float _originalPosX;
private float _originalPosY;
private bool _isCharging;
public override void Start() public override void Start()
{ {
base.Start(); base.Start();
_originalPosX = transform.position.x; _chargeDetectionScript = _chargeDetection.GetComponent<Detection>();
_originalPosY = transform.position.y; _rootScript = _root.GetComponent<Root>();
_originalPos = transform.position;
_isCharging = true; _isCharging = true;
} }
public override void Update() public override void Update()
{ {
base.Update();
if (_isCharging) if (_isCharging)
{ {
_detection.SetActive(false);
_chargeDetection.SetActive(true);
// movement
_movementVector.x = Time.deltaTime * Speed; _movementVector.x = Time.deltaTime * Speed;
transform.position += (Vector3)_movementVector; transform.position += (Vector3)_movementVector;
if (true)
{
// attack
if (IsEnemyDetected && !_opponentsHit.Contains(Enemy))
{
AttackEnemyRiding();
}
// reset
if (transform.position.x - _originalPos.x >= _maxChargeDistance || _opponentsHit.Count >= _maxChargeHitCount)
{
_isCharging = false;
_movementVector = Vector2.zero;
transform.position = _originalPos;
_opponentsHit.Clear();
IsEnemyDetected = false;
Enemy = null;
_detection.SetActive(true);
_chargeDetection.SetActive(false);
} }
} }
else else
@ -48,16 +76,8 @@ public class Rider : Ally
void AttackEnemyRiding() void AttackEnemyRiding()
{ {
//Attack Cooldown _rootScript.Attack();
if (AttackSpeedWait > AttackInterval) _opponentsHit.Add(Enemy);
{
Animation.PlayAttackAnim();
AttackSpeedWait = 0f;
}
AttackSpeedWait += Time.deltaTime;
} }
void AttackEnemy() void AttackEnemy()

View File

@ -15,12 +15,27 @@ public class Detection : MonoBehaviour
// If it's a projectile damage > 0 // If it's a projectile damage > 0
private int _projectileDamage = 0; private int _projectileDamage = 0;
private bool _hasStartBeenCalled = false;
protected virtual void Start() protected virtual void Start()
{ {
_collider = GetComponent<BoxCollider2D>(); _collider = GetComponent<BoxCollider2D>();
detectionRange = _collider.size; detectionRange = _collider.size;
StartCoroutine(C_DetectCoroutine()); StartCoroutine(C_DetectCoroutine());
_hasStartBeenCalled = true;
}
// Checks if Start ran once already.
// onEnable runs by default before Start so not everything is initialized.
// And I don't want to reinitialize the collider everytime I re-enable a unit's detection.
protected void OnEnable()
{
if (_hasStartBeenCalled)
{
StartCoroutine(C_DetectCoroutine());
}
} }
// Looped detection every 'delay' amount // Looped detection every 'delay' amount