diff --git a/Assets/OneShotOneKill.txt b/Assets/OneShotOneKill.txt index 53c776c..576296f 100644 --- a/Assets/OneShotOneKill.txt +++ b/Assets/OneShotOneKill.txt @@ -18,5 +18,10 @@ - 지그재그 - 랜덤 +몬스터 실드 구현 + - 갯수 + - 파괴 가능 + - 파괴 불가능 + 고찰 - 에임을 마우스 찍은 곳으로 lookat 하면 안되나? \ No newline at end of file diff --git a/Assets/ResWork/Table/Export/Monster.json b/Assets/ResWork/Table/Export/Monster.json index 89db115..e4aecee 100644 --- a/Assets/ResWork/Table/Export/Monster.json +++ b/Assets/ResWork/Table/Export/Monster.json @@ -1 +1 @@ -[{"n_MonsterTypeID":"2001","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","s_ProjectilePrefabs":"DefaultMeleeProjectile","s_MonsterPrefabPath":"2001","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2002","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","s_ProjectilePrefabs":"DefaultRangeProjectile","s_MonsterPrefabPath":"2002","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2003","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Range","f_AttackRange":"4.5","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","s_ProjectilePrefabs":"DefaultRangeProjectile","s_MonsterPrefabPath":"2003","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"},{"n_MonsterTypeID":"2004","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","s_ProjectilePrefabs":"DefaultMeleeProjectile","s_MonsterPrefabPath":"2004","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2005","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","s_ProjectilePrefabs":"DefaultRangeProjectile","s_MonsterPrefabPath":"2005","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2006","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Range","f_AttackRange":"4.5","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","s_ProjectilePrefabs":"DefaultRangeProjectile","s_MonsterPrefabPath":"2006","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"}] \ No newline at end of file +[{"n_MonsterTypeID":"2001","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","n_ProjectileID":"3101","s_MonsterPrefabPath":"2001","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2002","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","n_ProjectileID":"3102","s_MonsterPrefabPath":"2002","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2003","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Melee","f_AttackRange":"2","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","n_ProjectileID":"3101","s_MonsterPrefabPath":"2003","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"},{"n_MonsterTypeID":"2004","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","n_ProjectileID":"3101","s_MonsterPrefabPath":"2004","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2005","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","n_ProjectileID":"3102","s_MonsterPrefabPath":"2005","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2006","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Range","f_AttackRange":"4.5","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","n_ProjectileID":"3102","s_MonsterPrefabPath":"2006","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Export/Projectile.json b/Assets/ResWork/Table/Export/Projectile.json index ad47dbb..2898ab9 100644 --- a/Assets/ResWork/Table/Export/Projectile.json +++ b/Assets/ResWork/Table/Export/Projectile.json @@ -1 +1 @@ -[] \ No newline at end of file +[{"n_ProjectileID":"3001","s_ProjectilePrefabs":"Projectile_Arrow","s_HitEffect":"","f_ProjectileSpeed":"2.6","f_AttackBounceLimit":"1","f_ProjectileDistance":"-1","n_ProjectileLife":"2","f_KnockbackDistance":"0.1","f_StunTime":"0","f_ExplosionRange":"0.5","f_ExplosionDamage":"0"},{"n_ProjectileID":"3101","s_ProjectilePrefabs":"Projectile_MobMelee","s_HitEffect":"","f_ProjectileSpeed":"3","f_AttackBounceLimit":"0","f_ProjectileDistance":"-1","n_ProjectileLife":"5","f_KnockbackDistance":"0","f_StunTime":"0","f_ExplosionRange":"0.5","f_ExplosionDamage":"0"},{"n_ProjectileID":"3102","s_ProjectilePrefabs":"Projectile_MobRange","s_HitEffect":"","f_ProjectileSpeed":"3","f_AttackBounceLimit":"0","f_ProjectileDistance":"-1","n_ProjectileLife":"5","f_KnockbackDistance":"0","f_StunTime":"0","f_ExplosionRange":"0","f_ExplosionDamage":"0"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Export/Unit.json b/Assets/ResWork/Table/Export/Unit.json index 8dc096b..1158f7b 100644 --- a/Assets/ResWork/Table/Export/Unit.json +++ b/Assets/ResWork/Table/Export/Unit.json @@ -1 +1 @@ -[{"n_UnitID":"1000","f_DefaultAttack":"100","n_DefaultHp":"500","f_AttackSpeed":"1.25","n_DefaultProjectileCount":"1","s_ProjectilePrefabs":"Projectile_Arrow","s_UnitPrefabPath":"DefaultUnit"}] \ No newline at end of file +[{"n_UnitID":"1001","f_DefaultAttack":"100","n_DefaultHp":"500","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/Local.meta b/Assets/ResWork/Table/Local.meta new file mode 100644 index 0000000..7d89783 --- /dev/null +++ b/Assets/ResWork/Table/Local.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3cecf7a04a9b9f342ae4a41e50669494 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/Local/Monster.json b/Assets/ResWork/Table/Local/Monster.json new file mode 100644 index 0000000..e4aecee --- /dev/null +++ b/Assets/ResWork/Table/Local/Monster.json @@ -0,0 +1 @@ +[{"n_MonsterTypeID":"2001","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","n_ProjectileID":"3101","s_MonsterPrefabPath":"2001","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2002","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","n_ProjectileID":"3102","s_MonsterPrefabPath":"2002","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2003","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Melee","f_AttackRange":"2","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","n_ProjectileID":"3101","s_MonsterPrefabPath":"2003","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"},{"n_MonsterTypeID":"2004","e_MonsterType":"Monster","f_DefaultAttack":"10","f_DefaultHp":"40","n_DropExp":"1","e_UnityType":"Melee","f_AttackRange":"1.2","f_AttackDelay":"1.1","f_MoveSpeed":"1","e_MoveType":"Static","n_ProjectileID":"3101","s_MonsterPrefabPath":"2004","f_Scale":"0.15","e_ShieldType":"None","n_NormalShieldCount":"0","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2005","e_MonsterType":"Monster","f_DefaultAttack":"20","f_DefaultHp":"60","n_DropExp":"1","e_UnityType":"Range","f_AttackRange":"5","f_AttackDelay":"2","f_MoveSpeed":"1.2","e_MoveType":"Static","n_ProjectileID":"3102","s_MonsterPrefabPath":"2005","f_Scale":"0.15","e_ShieldType":"Static","n_NormalShieldCount":"1","n_InvinityShieldCount":"0"},{"n_MonsterTypeID":"2006","e_MonsterType":"Boss","f_DefaultAttack":"30","f_DefaultHp":"60","n_DropExp":"3","e_UnityType":"Range","f_AttackRange":"4.5","f_AttackDelay":"1.5","f_MoveSpeed":"1.2","e_MoveType":"Random","n_ProjectileID":"3102","s_MonsterPrefabPath":"2006","f_Scale":"0.3","e_ShieldType":"Rotation","n_NormalShieldCount":"1","n_InvinityShieldCount":"1"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Local/Monster.json.meta b/Assets/ResWork/Table/Local/Monster.json.meta new file mode 100644 index 0000000..abeb2c5 --- /dev/null +++ b/Assets/ResWork/Table/Local/Monster.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8e27583e2d6ce204c8af3336340e62f6 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/Local/Projectile.json b/Assets/ResWork/Table/Local/Projectile.json new file mode 100644 index 0000000..8adcd1a --- /dev/null +++ b/Assets/ResWork/Table/Local/Projectile.json @@ -0,0 +1 @@ +[{"n_ProjectileID":"3001","s_ProjectilePrefabs":"Projectile_Arrow","s_HitEffect":"","s_ProjectileSpeed":"2.6","f_AttackBounceLimit":"1","f_ProjectileDistance":"-1","n_ProjectileLife":"2","f_KnockbackDistance":"0.1","f_StunTime":"0","f_ExplosionRange":"0.5","f_ExplosionDamage":"0"},{"n_ProjectileID":"3101","s_ProjectilePrefabs":"Projectile_MobMelee","s_HitEffect":"","s_ProjectileSpeed":"3","f_AttackBounceLimit":"0","f_ProjectileDistance":"-1","n_ProjectileLife":"5","f_KnockbackDistance":"0","f_StunTime":"0","f_ExplosionRange":"0.5","f_ExplosionDamage":"0"},{"n_ProjectileID":"3102","s_ProjectilePrefabs":"Projectile_MobRange","s_HitEffect":"","s_ProjectileSpeed":"3","f_AttackBounceLimit":"0","f_ProjectileDistance":"-1","n_ProjectileLife":"5","f_KnockbackDistance":"0","f_StunTime":"","f_ExplosionRange":"","f_ExplosionDamage":""}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Local/Projectile.json.meta b/Assets/ResWork/Table/Local/Projectile.json.meta new file mode 100644 index 0000000..ad47423 --- /dev/null +++ b/Assets/ResWork/Table/Local/Projectile.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cbe637f7f3d3c8e449d61d5b3b12b51c +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/Local/StageConfig.json b/Assets/ResWork/Table/Local/StageConfig.json new file mode 100644 index 0000000..cd0a16b --- /dev/null +++ b/Assets/ResWork/Table/Local/StageConfig.json @@ -0,0 +1 @@ +[{"n_StageID":"10001","n_NextStage":"10002","s_StageMapPath":"stage/map1","n_StageName":"90001","n_WavePatternGroupID":"1001","n_MaxWave":"3","s_AppearMeleeMonsterID":"2001^2004","s_AppearRangeMonsterID":"2002^2005","s_AppearBossWave":"3","s_AppearBossMonsterID":"2003","n_DropItemId":"0","s_DropItemRate":"0%","n_StageClearGold":"100","n_StageClearExp":"3","n_DefaultEnemyAttack":"3","n_DefaultEnemyHp":"2","n_DefaultBossAttack":"3","n_DefaultBossHp":"2"},{"n_StageID":"10002","n_NextStage":"10003","s_StageMapPath":"stage/map2","n_StageName":"90002","n_WavePatternGroupID":"1001","n_MaxWave":"3","s_AppearMeleeMonsterID":"2001","s_AppearRangeMonsterID":"2002","s_AppearBossWave":"2^3","s_AppearBossMonsterID":"2003^2006","n_DropItemId":"0","s_DropItemRate":"0%","n_StageClearGold":"200","n_StageClearExp":"7","n_DefaultEnemyAttack":"7","n_DefaultEnemyHp":"6","n_DefaultBossAttack":"7","n_DefaultBossHp":"6"},{"n_StageID":"10003","n_NextStage":"10004","s_StageMapPath":"stage/map3","n_StageName":"90003","n_WavePatternGroupID":"1001","n_MaxWave":"3","s_AppearMeleeMonsterID":"2004","s_AppearRangeMonsterID":"2005","s_AppearBossWave":"3^5","s_AppearBossMonsterID":"2003^2006","n_DropItemId":"0","s_DropItemRate":"0%","n_StageClearGold":"300","n_StageClearExp":"10","n_DefaultEnemyAttack":"10","n_DefaultEnemyHp":"8","n_DefaultBossAttack":"10","n_DefaultBossHp":"8"},{"n_StageID":"10004","n_NextStage":"-1","s_StageMapPath":"stage/map4","n_StageName":"90004","n_WavePatternGroupID":"1002","n_MaxWave":"3","s_AppearMeleeMonsterID":"2001^2004","s_AppearRangeMonsterID":"2002^2005","s_AppearBossWave":"3","s_AppearBossMonsterID":"2006","n_DropItemId":"0","s_DropItemRate":"0%","n_StageClearGold":"400","n_StageClearExp":"15","n_DefaultEnemyAttack":"15","n_DefaultEnemyHp":"10","n_DefaultBossAttack":"15","n_DefaultBossHp":"10"}] \ No newline at end of file diff --git a/Assets/ResWork/Table/Local/StageConfig.json.meta b/Assets/ResWork/Table/Local/StageConfig.json.meta new file mode 100644 index 0000000..5af323a --- /dev/null +++ b/Assets/ResWork/Table/Local/StageConfig.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 392af5bba8d636647b86b8647cf6718a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/Local/Unit.json b/Assets/ResWork/Table/Local/Unit.json new file mode 100644 index 0000000..e40a3a3 --- /dev/null +++ b/Assets/ResWork/Table/Local/Unit.json @@ -0,0 +1 @@ +[{"n_UnitID":"1000","f_DefaultAttack":"100","n_DefaultHp":"500","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/Local/Unit.json.meta b/Assets/ResWork/Table/Local/Unit.json.meta new file mode 100644 index 0000000..ee716d7 --- /dev/null +++ b/Assets/ResWork/Table/Local/Unit.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dd893c78f489e5142aeba8e4c593557a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/Local/WavePattern.json b/Assets/ResWork/Table/Local/WavePattern.json new file mode 100644 index 0000000..67c3c65 --- /dev/null +++ b/Assets/ResWork/Table/Local/WavePattern.json @@ -0,0 +1 @@ +[{"n_PatternID":"1001","n_AppearWave":"1","n_AppearMeleeMonster":"10","n_AppearRangeMonster":"0","f_AppearDelay":"0.5","n_OverlapUnitCount":"1","f_NextWaveDelay":"3.5"},{"n_PatternID":"1001","n_AppearWave":"2","n_AppearMeleeMonster":"27","n_AppearRangeMonster":"4","f_AppearDelay":"0.35","n_OverlapUnitCount":"1","f_NextWaveDelay":"2.5"},{"n_PatternID":"1001","n_AppearWave":"3","n_AppearMeleeMonster":"40","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/Local/WavePattern.json.meta b/Assets/ResWork/Table/Local/WavePattern.json.meta new file mode 100644 index 0000000..12cf9fa --- /dev/null +++ b/Assets/ResWork/Table/Local/WavePattern.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 27e6b28fb65b80d4ebb98ee0ccf396b7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/ResWork/Table/OneShotOneKill.xlsm b/Assets/ResWork/Table/OneShotOneKill.xlsm index 3fc9b09..3150cb7 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 8a30dce..fc9fd19 100644 --- a/Assets/Script/InGame/Actor/AimArrowController.cs +++ b/Assets/Script/InGame/Actor/AimArrowController.cs @@ -33,7 +33,8 @@ public class AimArrowController : MonoBehaviour arrow.enabled = false; isAiming = false; - ProjectileMgr.Ins.Get(arrow.transform).Set(); + var unit = IngameMgr.Ins.Get_CurUnitTData(); + ProjectileMgr.Ins.Get(unit.n_ProjectileID, arrow.transform).Set(unit.n_ProjectileID); } void UpdateArrow(Vector2 currentPos) diff --git a/Assets/Script/InGame/Actor/MobActor.cs b/Assets/Script/InGame/Actor/MobActor.cs index 1483f78..048a806 100644 --- a/Assets/Script/InGame/Actor/MobActor.cs +++ b/Assets/Script/InGame/Actor/MobActor.cs @@ -1,3 +1,4 @@ +using System.Collections; using UnityEngine; public enum eMobState { Move, Attack } @@ -70,12 +71,12 @@ public class MobActor : MonoBehaviour //m_Animator.speed = 2f; m_Animator.SetTrigger("att"); - - // 철책 or 플레이어 공격 - AttackFence(); + StartCoroutine(Co_AttackProjectile()); } - void AttackFence() + IEnumerator Co_AttackProjectile() { + yield return new WaitForSeconds(1f); + ProjectileMgr.Ins.Get(m_Data.n_ProjectileID, transform).Set(m_Data.n_ProjectileID); } } \ No newline at end of file diff --git a/Assets/Script/InGame/IngameMgr.cs b/Assets/Script/InGame/IngameMgr.cs index 17273d5..aff7064 100644 --- a/Assets/Script/InGame/IngameMgr.cs +++ b/Assets/Script/InGame/IngameMgr.cs @@ -3,7 +3,7 @@ using TMPro; using UnityEngine; using UnityEngine.UI; -public class IngameMgr : MonoBehaviour +public class IngameMgr : MonoBehaviourSingletonTemplate { [Header("UI")] public TextMeshProUGUI[] texts_money; // 0 코인, 1 아이템, 2 웨이브 @@ -18,13 +18,14 @@ public class IngameMgr : MonoBehaviour int m_Wave, m_HP, m_Coin, m_Item, m_Lv, m_Exp; StageConfigTableData CurStageData; + UnitTableData CurUnitData; private void OnEnable() { CurStageData = table_stageconfig.Ins.Get_Data(10001); - var unitdata = table_unit.Ins.Get_Data(1000); + CurUnitData = table_unit.Ins.Get_Data(1001); - m_HP = unitdata.n_DefaultHp; + m_HP = CurUnitData.n_DefaultHp; m_Lv = m_Wave = 1; m_Exp = m_Coin = m_Item = 0; @@ -98,4 +99,7 @@ public class IngameMgr : MonoBehaviour Set_Texts(); StartCoroutine(Co_MakeMob()); } + + public StageConfigTableData Get_CurStageTData() { return CurStageData; } + public UnitTableData Get_CurUnitTData() { return CurUnitData; } } \ No newline at end of file diff --git a/Assets/Script/InGame/Projectile/Projectile.cs b/Assets/Script/InGame/Projectile/Projectile.cs index da05160..4565e33 100644 --- a/Assets/Script/InGame/Projectile/Projectile.cs +++ b/Assets/Script/InGame/Projectile/Projectile.cs @@ -1,25 +1,43 @@ +using CodeStage.AntiCheat.ObscuredTypes; using UnityEngine; public class Projectile : MonoBehaviour { public float m_Speed = 12f; - public int m_MaxBounce = 3; public float radius = 0.1f; Vector2 dir; Vector2 prevPos; - int bounceCount; + ObscuredInt m_bounceCount; + + ProjectileTableData m_Data; #region 투사체 매니저 ProjectileMgr owner; - public void SetOwner(ProjectileMgr mgr) { owner = mgr; } - void Kill() { owner.Return(this); } + string prefabKey; + + public void SetOwner(ProjectileMgr mgr, string key) + { + owner = mgr; + prefabKey = key; + } + + public string GetPoolKey() { return prefabKey; } + void Kill() + { + owner.Return(this); + // 이펙트 표시 필요 + } + public ProjectileTableData Get_ProjectileTData() { return m_Data; } #endregion - public void Set() + public void Set(int id) { dir = transform.up.normalized; - bounceCount = m_MaxBounce; + + m_Data = table_projectile.Ins.Get_Data(id); + m_bounceCount = m_Data.n_AttackBounceLimit; + m_bounceCount.RandomizeCryptoKey(); } void Update() @@ -32,7 +50,7 @@ public class Projectile : MonoBehaviour private void OnTriggerEnter2D(Collider2D collision) { - if (bounceCount <= 0) + if (m_bounceCount <= 0) { Kill(); return; @@ -83,7 +101,8 @@ public class Projectile : MonoBehaviour // 반사 dir = Vector2.Reflect(dir, normal).normalized; - bounceCount--; + m_bounceCount--; + m_bounceCount.RandomizeCryptoKey(); // 회전 float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90f; @@ -102,6 +121,5 @@ public class Projectile : MonoBehaviour //ProjectileMgr.Ins.Get(transform.position, Quaternion.Euler(0, 0, Random.Range(-20, 20)) * dir); } } - } } \ No newline at end of file diff --git a/Assets/Script/InGame/Projectile/ProjectileMgr.cs b/Assets/Script/InGame/Projectile/ProjectileMgr.cs index c680817..9adfa41 100644 --- a/Assets/Script/InGame/Projectile/ProjectileMgr.cs +++ b/Assets/Script/InGame/Projectile/ProjectileMgr.cs @@ -5,50 +5,72 @@ public class ProjectileMgr : MonoBehaviourSingletonTemplate { [Header("Pool Setting")] public Transform tf_parent; - public Projectile projectilePrefab; - public int poolSize = 50; + public int defaultPoolSize = 10; - Queue pool = new Queue(); + // prefabPath -> pool + Dictionary> pools = new Dictionary>(); - protected override void Awake() + public void InitPools() { - base.Awake(); - InitPool(); - } + var lst = table_projectile.Ins.Get_DataList(); - void InitPool() - { - for (int i = 0; i < poolSize; i++) + for (int i = 0; i < lst.Count; i++) { - Projectile p = CreateExtra(); - p.gameObject.SetActive(false); - pool.Enqueue(p); + string prefabPath = lst[i].s_ProjectilePrefabs; + + if (pools.ContainsKey(prefabPath)) + continue; + + Queue q = new Queue(); + pools.Add(prefabPath, q); + + for (int j = 0; j < defaultPoolSize; j++) + { + Projectile p = CreateExtra(prefabPath); + p.gameObject.SetActive(false); + q.Enqueue(p); + } } } - public Projectile Get(Transform tf) + public Projectile Get(int projectileid, Transform tf) { - return Get(tf.position, tf.rotation); + var data = table_projectile.Ins.Get_Data(projectileid); + return Get(data.s_ProjectilePrefabs, tf.position, tf.rotation); } - public Projectile Get(Vector3 pos, Quaternion q) + + public Projectile Get(string prefabPath, Vector3 pos, Quaternion rot) { - Projectile p = pool.Count > 0 ? pool.Dequeue() : CreateExtra(); + if (!pools.TryGetValue(prefabPath, out Queue pool)) + { + Debug.LogError($"[ProjectileMgr] Pool not found : {prefabPath}"); + return null; + } + + Projectile p = pool.Count > 0 ? pool.Dequeue() : CreateExtra(prefabPath); p.gameObject.SetActive(true); - p.transform.position = pos; - p.transform.rotation = q; + p.transform.SetPositionAndRotation(pos, rot); return p; } public void Return(Projectile p) { p.gameObject.SetActive(false); + + string key = p.Get_ProjectileTData().s_ProjectilePrefabs; + if (!pools.TryGetValue(key, out Queue pool)) + { + Debug.LogError($"[ProjectileMgr] Return failed. Pool not found : {key}"); + return; + } + pool.Enqueue(p); } - Projectile CreateExtra() + Projectile CreateExtra(string prefabPath) { - Projectile p = Instantiate(projectilePrefab, tf_parent); - p.SetOwner(this); + Projectile p = DSUtil.Get_Clone(prefabPath, tf_parent); + p.SetOwner(this, prefabPath); return p; } } \ No newline at end of file diff --git a/Assets/Script/Table/Tables/table_monster.cs b/Assets/Script/Table/Tables/table_monster.cs index a0a7bb7..c7193dd 100644 --- a/Assets/Script/Table/Tables/table_monster.cs +++ b/Assets/Script/Table/Tables/table_monster.cs @@ -20,7 +20,8 @@ public class MonsterTableData : TableDataBase ObscuredFloat _AttackDelay; public float f_AttackDelay { get { return _AttackDelay; } set { _AttackDelay = value; _AttackDelay.RandomizeCryptoKey(); } } ObscuredFloat _MoveSpeed; public float f_MoveSpeed { get { return _MoveSpeed; } set { _MoveSpeed = value; _MoveSpeed.RandomizeCryptoKey(); } } public eMoveType e_MoveType; - public string s_ProjectilePrefabs, s_MonsterPrefabPath; + ObscuredInt _ProjectileID; public int n_ProjectileID { get { return _ProjectileID; } set { _ProjectileID = value; _ProjectileID.RandomizeCryptoKey(); } } + public string s_MonsterPrefabPath; public float f_Scale; public eShieldType e_ShieldType; ObscuredInt _NormalShieldCount; public int n_NormalShieldCount { get { return _NormalShieldCount; } set { _NormalShieldCount = value; _NormalShieldCount.RandomizeCryptoKey(); } } diff --git a/Assets/Script/Table/Tables/table_projectile.cs b/Assets/Script/Table/Tables/table_projectile.cs index e33b08d..54a4e22 100644 --- a/Assets/Script/Table/Tables/table_projectile.cs +++ b/Assets/Script/Table/Tables/table_projectile.cs @@ -4,10 +4,12 @@ using System.Collections.Generic; public class ProjectileTableData : TableDataBase { - public string s_ProjectilePrefabs, s_HitEffect, s_ProjectileSpeed, s_ProjectileLife; + public string s_ProjectilePrefabs, s_HitEffect; ObscuredInt _ProjectileID; public int n_ProjectileID { get { return _ProjectileID; } set { _ProjectileID = value; _ProjectileID.RandomizeCryptoKey(); } } - ObscuredFloat _AttackBounceLimit; public float f_AttackBounceLimit { get { return _AttackBounceLimit; } set { _AttackBounceLimit = value; _AttackBounceLimit.RandomizeCryptoKey(); } } + ObscuredInt _AttackBounceLimit; public int n_AttackBounceLimit { get { return _AttackBounceLimit; } set { _AttackBounceLimit = value; _AttackBounceLimit.RandomizeCryptoKey(); } } ObscuredFloat _ProjectileDistance; public float f_ProjectileDistance { get { return _ProjectileDistance; } set { _ProjectileDistance = value; _ProjectileDistance.RandomizeCryptoKey(); } } + ObscuredFloat _ProjectileSpeed; public float f_ProjectileSpeed { get { return _ProjectileSpeed; } set { _ProjectileSpeed = value; _ProjectileSpeed.RandomizeCryptoKey(); } } + ObscuredInt _ProjectileLife; public int n_ProjectileLife { get { return _ProjectileLife; } set { _ProjectileLife = value; _ProjectileLife.RandomizeCryptoKey(); } } ObscuredFloat _KnockbackDistance; public float f_KnockbackDistance { get { return _KnockbackDistance; } set { _KnockbackDistance = value; _KnockbackDistance.RandomizeCryptoKey(); } } ObscuredFloat _StunTime; public float f_StunTime { get { return _StunTime; } set { _StunTime = value; _StunTime.RandomizeCryptoKey(); } } ObscuredFloat _ExplosionRange; public float f_ExplosionRange { get { return _ExplosionRange; } set { _ExplosionRange = value; _ExplosionRange.RandomizeCryptoKey(); } } @@ -29,6 +31,11 @@ public class table_projectile : table_base protected override void Start() { tableDatas = JsonConvert.DeserializeObject>(json_last); + for (int i = 0; i < tableDatas.Count; i++) + { + var temp = tableDatas[i]; + temp.s_ProjectilePrefabs = $"Projectile/{temp.s_ProjectilePrefabs}"; + } base.Start(); } diff --git a/Assets/Script/Table/Tables/table_unit.cs b/Assets/Script/Table/Tables/table_unit.cs index 90c4357..3275b8e 100644 --- a/Assets/Script/Table/Tables/table_unit.cs +++ b/Assets/Script/Table/Tables/table_unit.cs @@ -11,9 +11,9 @@ public class UnitTableData : TableDataBase ObscuredInt _DefaultHp; public int n_DefaultHp { get { return _DefaultHp; } set { _DefaultHp = value; _DefaultHp.RandomizeCryptoKey(); } } ObscuredFloat _AttackSpeed; public float f_AttackSpeed { get { return _AttackSpeed; } set { _AttackSpeed = value; _AttackSpeed.RandomizeCryptoKey(); } } - ObscuredInt _DefaultProjectileCount; public int n_DefaultProjectileCount { get { return _DefaultProjectileCount; } set { _DefaultProjectileCount = value; _DefaultProjectileCount.RandomizeCryptoKey(); } } - public string s_ProjectilePrefabs, s_UnitPrefabPath; + ObscuredInt _ProjectileID; public int n_ProjectileID { get { return _ProjectileID; } set { _ProjectileID = value; _ProjectileID.RandomizeCryptoKey(); } } + public string s_UnitPrefabPath; } public class table_unit : table_base diff --git a/Assets/Script/UGUI/Title/TitleLoadingUI.cs b/Assets/Script/UGUI/Title/TitleLoadingUI.cs index 5e11423..c90c53e 100644 --- a/Assets/Script/UGUI/Title/TitleLoadingUI.cs +++ b/Assets/Script/UGUI/Title/TitleLoadingUI.cs @@ -44,7 +44,9 @@ public class TitleLoadingUI : MonoBehaviour slider_proc.value = 0f; // 테이블 로딩 기다리기 while (!TableChecker.Ins.CheckAllLoad()) yield return null; - //Add_ProcValue(0.7f); // 테이블 로딩 70% + //Add_ProcValue(0.6f); // 테이블 로딩 60% + ProjectileMgr.Ins.InitPools(); + //Add_ProcValue(0.1f); // 투사체 로딩 10% //yield return StartCoroutine(Title_Mgr.Ins.Co_Check(Add_ProcValue));