diff --git a/Assets/OneShotOneKill.txt b/Assets/OneShotOneKill.txt index 28e5cbf..9f0986c 100644 --- a/Assets/OneShotOneKill.txt +++ b/Assets/OneShotOneKill.txt @@ -15,6 +15,7 @@ ArrowLeftRight 투사체에 적이 명중할 경우 좌/우 방향으로 투 ImpactArrow 투사체가 적의 방어막에 막혀도 +1의 피해를 고정으로 입힙니다. //AttackSpeedUp 공격 속도가 0.1초 감소합니다. +반사와 관통이 동시에 있을 경우, 관통 후 반사 몬스터 이동방식 구현 // - 직진 diff --git a/Assets/ResWork/Table/Export/Unit.json b/Assets/ResWork/Table/Export/Unit.json index f4fc8d7..09ab099 100644 --- a/Assets/ResWork/Table/Export/Unit.json +++ b/Assets/ResWork/Table/Export/Unit.json @@ -1 +1 @@ -[{"n_UnitID":"1001","n_DefaultAttack":"25","n_DefaultHp":"500","f_AttackSpeed":"1.25","n_DefaultProjectileCount":"1","n_ProjectileID":"3001","s_UnitPrefabPath":"DefaultUnit"}] \ No newline at end of file +[{"n_UnitID":"1001","n_DefaultAttack":"25","n_DefaultHp":"2000","f_AttackSpeed":"1.25","n_DefaultProjectileCount":"1","n_ProjectileID":"3001","s_UnitPrefabPath":"DefaultUnit"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Export/WavePattern.json b/Assets/ResWork/Table/Export/WavePattern.json index 3eee281..40dc0e1 100644 --- a/Assets/ResWork/Table/Export/WavePattern.json +++ b/Assets/ResWork/Table/Export/WavePattern.json @@ -1 +1 @@ -[{"n_PatternID":"1001","n_AppearWave":"1","n_AppearMeleeMonster":"2","n_AppearRangeMonster":"2","f_AppearDelay":"0.5","n_OverlapUnitCount":"1","f_NextWaveDelay":"3.5"},{"n_PatternID":"1001","n_AppearWave":"2","n_AppearMeleeMonster":"2","n_AppearRangeMonster":"2","f_AppearDelay":"0.35","n_OverlapUnitCount":"1","f_NextWaveDelay":"2.5"},{"n_PatternID":"1001","n_AppearWave":"3","n_AppearMeleeMonster":"2","n_AppearRangeMonster":"2","f_AppearDelay":"0.2","n_OverlapUnitCount":"2","f_NextWaveDelay":"2.5"},{"n_PatternID":"1002","n_AppearWave":"1","n_AppearMeleeMonster":"10","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1002","n_AppearWave":"2","n_AppearMeleeMonster":"27","n_AppearRangeMonster":"4","f_AppearDelay":"0.35","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1002","n_AppearWave":"3","n_AppearMeleeMonster":"40","n_AppearRangeMonster":"10","f_AppearDelay":"0.2","n_OverlapUnitCount":"3","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"1","n_AppearMeleeMonster":"10","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"2","n_AppearMeleeMonster":"27","n_AppearRangeMonster":"4","f_AppearDelay":"0.35","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"3","n_AppearMeleeMonster":"40","n_AppearRangeMonster":"10","f_AppearDelay":"0.2","n_OverlapUnitCount":"3","f_NextWaveDelay":"3"}] \ No newline at end of file +[{"n_PatternID":"1001","n_AppearWave":"1","n_AppearMeleeMonster":"14","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"1","f_NextWaveDelay":"3.5"},{"n_PatternID":"1001","n_AppearWave":"2","n_AppearMeleeMonster":"20","n_AppearRangeMonster":"5","f_AppearDelay":"0.35","n_OverlapUnitCount":"1","f_NextWaveDelay":"2.5"},{"n_PatternID":"1001","n_AppearWave":"3","n_AppearMeleeMonster":"30","n_AppearRangeMonster":"10","f_AppearDelay":"0.2","n_OverlapUnitCount":"2","f_NextWaveDelay":"2.5"},{"n_PatternID":"1002","n_AppearWave":"1","n_AppearMeleeMonster":"10","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1002","n_AppearWave":"2","n_AppearMeleeMonster":"27","n_AppearRangeMonster":"4","f_AppearDelay":"0.35","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1002","n_AppearWave":"3","n_AppearMeleeMonster":"40","n_AppearRangeMonster":"10","f_AppearDelay":"0.2","n_OverlapUnitCount":"3","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"1","n_AppearMeleeMonster":"10","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"2","n_AppearMeleeMonster":"27","n_AppearRangeMonster":"4","f_AppearDelay":"0.35","n_OverlapUnitCount":"2","f_NextWaveDelay":"3"},{"n_PatternID":"1003","n_AppearWave":"3","n_AppearMeleeMonster":"40","n_AppearRangeMonster":"10","f_AppearDelay":"0.2","n_OverlapUnitCount":"3","f_NextWaveDelay":"3"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/OneShotOneKill.xlsm b/Assets/ResWork/Table/OneShotOneKill.xlsm index d68a81e..c6bfbd5 100644 Binary files a/Assets/ResWork/Table/OneShotOneKill.xlsm and b/Assets/ResWork/Table/OneShotOneKill.xlsm differ diff --git a/Assets/Script/InGame/Actor/AimArrowController.cs b/Assets/Script/InGame/Actor/AimArrowController.cs index 0fb8361..6139fbe 100644 --- a/Assets/Script/InGame/Actor/AimArrowController.cs +++ b/Assets/Script/InGame/Actor/AimArrowController.cs @@ -46,6 +46,14 @@ public class AimArrowController : MonoBehaviour } void Shoot() + { + if (IngameMgr.Ins.Get_SkillValue(eSkillType.PreviousArrow) > 0) + Shoot_PreviousArrow(); + else + Shoot_Normal(); + } + + void Shoot_Normal() { var unit = IngameMgr.Ins.Get_CurUnitTData(); var attack = unit.n_DefaultAttack + IngameMgr.Ins.Get_SkillValue(eSkillType.AttackUp); @@ -54,10 +62,34 @@ public class AimArrowController : MonoBehaviour IsPC = true, m_Data = table_projectile.Ins.Get_Data(unit.n_ProjectileID), tf_Start = arrow.transform, + PreviousArrow = 0, Dmg = (int)attack }); } + void Shoot_PreviousArrow() + { + var unit = IngameMgr.Ins.Get_CurUnitTData(); + var attack = unit.n_DefaultAttack + IngameMgr.Ins.Get_SkillValue(eSkillType.AttackUp); + + int prev = (int)IngameMgr.Ins.Get_SkillValue(eSkillType.PreviousArrow); + int total = prev + 1; + + for (int i = 0; i < total; i++) + { + ProjectileMgr.Ins.Shoot_Projectile(new ProjectileData + { + IsPC = true, + PreviousArrow = prev, + ArrowIndex = i, + m_Data = table_projectile.Ins.Get_Data(unit.n_ProjectileID), + tf_Start = arrow.transform, + Dmg = (int)attack + }); + } + } + + void UpdateArrow(Vector2 currentPos) { Vector2 dir = currentPos - (Vector2)arrow.transform.position; diff --git a/Assets/Script/InGame/Projectile/Projectile.cs b/Assets/Script/InGame/Projectile/Projectile.cs index 24c0515..9176830 100644 --- a/Assets/Script/InGame/Projectile/Projectile.cs +++ b/Assets/Script/InGame/Projectile/Projectile.cs @@ -34,8 +34,28 @@ public class Projectile : MonoBehaviour public void Set(ProjectileData pd) { m_ProjectileData = pd; + Transform startTf = m_ProjectileData.tf_Start; + + if (m_ProjectileData.PreviousArrow > 0) + { + int total = m_ProjectileData.PreviousArrow + 1; + int index = m_ProjectileData.ArrowIndex; + + // 투사체 간격 (데이터 or Sprite 기준) + float spacing = 0.5f; + + // 중앙 기준 오프셋 + float startOffset = -(total - 1) * 0.5f * spacing; + float offset = startOffset + index * spacing; + + Vector3 right = startTf.right; + Vector3 pos = startTf.position + right * offset; + + transform.SetPositionAndRotation(pos, startTf.rotation); + } + else + transform.SetPositionAndRotation(startTf.position, startTf.rotation); - transform.SetPositionAndRotation(m_ProjectileData.tf_Start.position, m_ProjectileData.tf_Start.rotation); if (!m_ProjectileData.IsPC) transform.eulerAngles = new Vector3(0f, 0f, 180f); @@ -142,23 +162,14 @@ public class Projectile : MonoBehaviour } } } - - void Projectile_Split(bool hitEnemy) - { - if (hitEnemy) - { - for (int i = 0; i < 2; i++) - { - //ProjectileMgr.Ins.Get(transform.position, Quaternion.Euler(0, 0, Random.Range(-20, 20)) * dir); - } - } - } } public class ProjectileData { public ProjectileTableData m_Data; public Transform tf_Start; + public int PreviousArrow; // 0 이면 아님 + public int ArrowIndex; ObscuredBool _IsPC; public bool IsPC { get { return _IsPC; } set { _IsPC = value; _IsPC.RandomizeCryptoKey(); } } ObscuredInt _Lv; public int Lv { get { return _Lv; } set { _Lv = value; _Lv.RandomizeCryptoKey(); } } ObscuredInt _Dmg; public int Dmg { get { return _Dmg; } set { _Dmg = value; _Dmg.RandomizeCryptoKey(); } }