Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
L
ldefense
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Packages
Packages
Container Registry
Analytics
CI / CD Analytics
Repository Analytics
Value Stream Analytics
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Gavin An
ldefense
Commits
65e74a22
Commit
65e74a22
authored
Jun 19, 2026
by
Gavin An
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hud.gd -> gamemanager.gd 로 변경
parent
371ec1d7
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
95 additions
and
79 deletions
+95
-79
docs/agents_docs/todo.md
docs/agents_docs/todo.md
+2
-0
project.godot
project.godot
+1
-0
src/autoload/data_manager.gd
src/autoload/data_manager.gd
+84
-0
src/autoload/data_manager.gd.uid
src/autoload/data_manager.gd.uid
+1
-0
src/core/stage_manager.gd
src/core/stage_manager.gd
+2
-11
src/ui/hud.gd
src/ui/hud.gd
+3
-68
todo.md
todo.md
+2
-0
No files found.
docs/agents_docs/todo.md
View file @
65e74a22
...
...
@@ -66,6 +66,8 @@
-
[
x
]
`hud.gd`
스크립트를 수정하여 기존의 중복된 유닛 ID 버그를 해결(Striker 외형으로만 고정 스폰되던 현상 픽스)하고, Guardian 유닛 소환 시 전용
`guardian_unit.tscn`
이 스폰되도록 연동 완료
-
[
x
]
사용자가 직접
`striker_unit.tscn`
에서 모델 Y축 회전 보정(180도)을 조치한 내용을 인지하고,
`base_unit.gd`
스크립트 상에서 불필요해진 수동 회전 보정 코드부를 완전히 삭제하여 씬 지향적 설정을 완수
-
[
x
]
Striker 유닛의 뼈대 스켈레톤의 오른손 본(
`RightHand`
)에
`BoneAttachment3D`
노드를 런타임 동적 배치하고,
`azure_blade.fbx`
검 무기를 텍스처 오버라이드 매핑(
`azure_blade_0.png`
)과 방향/크기 보정을 더해 안정적으로 쥐어주는 런타임 무기 장착 시스템 구현 완료
-
[
x
]
데이터와 UI/제어 로직의 느슨한 결합(Loose Coupling)을 위해 데이터 매니저 싱글톤
`DataManager`
(
`res://src/autoload/data_manager.gd`
)을 신설하고 오토로드에 등록
-
[
x
]
`hud.gd`
에 하드코딩되어 있던 5종 유닛 최초 세팅 데이터와
`stage_manager.gd`
에 정의되어 있던 몬스터 스폰 스펙(HP 스케일링 공식 및 골드 리워드 테이블)을 모두
`DataManager`
싱글톤으로 온전히 이전 및 리팩토링 완료
---
...
...
project.godot
View file @
65e74a22
...
...
@@ -18,6 +18,7 @@ config/icon="res://icon.svg"
[autoload]
GameManager="*res://src/autoload/game_manager.gd"
DataManager="*res://src/autoload/data_manager.gd"
[physics]
...
...
src/autoload/data_manager.gd
0 → 100644
View file @
65e74a22
extends
Node
## 게임 내 유닛 및 몬스터 스펙 데이터를 총괄하는 데이터 매니저 싱글톤
# 유닛 리소스 템플릿 목록
var
unit_templates
:
Array
[
UnitData
]
=
[]
func
_ready
()
->
void
:
_initialize_unit_templates
()
## 5종의 유닛 능력치 데이터 초기 셋업
func
_initialize_unit_templates
()
->
void
:
# 1. Striker (연사형 근접 유닛)
var
striker
:
UnitData
=
UnitData
.
new
()
striker
.
unit_id
=
"Unit_Striker"
striker
.
unit_name
=
"Striker"
striker
.
damage
=
12.0
striker
.
cooldown
=
0.5
striker
.
move_speed
=
6.0
striker
.
attack_range
=
1.5
striker
.
is_ranged
=
false
striker
.
unit_color
=
Color
(
0.12
,
0.45
,
0.85
,
1.0
)
# 청색
unit_templates
.
append
(
striker
)
# 2. Guardian (밸런스형 근접 유닛)
var
guardian
:
UnitData
=
UnitData
.
new
()
guardian
.
unit_id
=
"Unit_Guardian"
guardian
.
unit_name
=
"Guardian"
guardian
.
damage
=
25.0
guardian
.
cooldown
=
1.0
guardian
.
move_speed
=
4.0
guardian
.
attack_range
=
1.5
guardian
.
is_ranged
=
false
guardian
.
unit_color
=
Color
(
0.85
,
0.65
,
0.12
,
1.0
)
# 황금색
unit_templates
.
append
(
guardian
)
# 3. Ranger (원거리 유닛)
var
ranger
:
UnitData
=
UnitData
.
new
()
ranger
.
unit_id
=
"Unit_Ranger"
ranger
.
unit_name
=
"Ranger"
ranger
.
damage
=
18.0
ranger
.
cooldown
=
0.8
ranger
.
move_speed
=
4.5
ranger
.
attack_range
=
10.0
ranger
.
is_ranged
=
true
ranger
.
unit_color
=
Color
(
0.12
,
0.75
,
0.25
,
1.0
)
# 녹색
unit_templates
.
append
(
ranger
)
# 4. Slayer (고화력 대형 유닛)
var
slayer
:
UnitData
=
UnitData
.
new
()
slayer
.
unit_id
=
"Unit_Slayer"
slayer
.
unit_name
=
"Slayer"
slayer
.
damage
=
55.0
slayer
.
cooldown
=
1.8
slayer
.
move_speed
=
3.5
slayer
.
attack_range
=
1.6
slayer
.
is_ranged
=
false
slayer
.
unit_color
=
Color
(
0.85
,
0.12
,
0.12
,
1.0
)
# 진적색
unit_templates
.
append
(
slayer
)
# 5. Archmage (극단적 극딜 마법 유닛)
var
archmage
:
UnitData
=
UnitData
.
new
()
archmage
.
unit_id
=
"Unit_Archmage"
archmage
.
unit_name
=
"Archmage"
archmage
.
damage
=
110.0
archmage
.
cooldown
=
3.0
archmage
.
move_speed
=
3.0
archmage
.
attack_range
=
12.0
archmage
.
is_ranged
=
true
archmage
.
unit_color
=
Color
(
0.55
,
0.12
,
0.85
,
1.0
)
# 보라색
unit_templates
.
append
(
archmage
)
## 특정 스테이지에 따른 몬스터 체력(HP) 반환
func
get_monster_hp
(
stage
:
int
)
->
float
:
return
100.0
+
(
stage
-
1
)
*
50.0
## 특정 스테이지에 따른 몬스터 처치 보상 골드 반환
func
get_monster_gold_reward
(
stage
:
int
)
->
int
:
if
stage
>=
20
:
return
100
elif
stage
>=
15
:
return
60
+
(
stage
-
15
)
*
8
elif
stage
>=
10
:
return
40
+
(
stage
-
10
)
*
4
elif
stage
>=
5
:
return
25
+
(
stage
-
5
)
*
3
elif
stage
>=
2
:
return
18
+
(
stage
-
2
)
*
2
else
:
return
15
src/autoload/data_manager.gd.uid
0 → 100644
View file @
65e74a22
uid://cscj883oshy61
src/core/stage_manager.gd
View file @
65e74a22
...
...
@@ -86,8 +86,8 @@ func _on_spawn_timer_timeout() -> void:
# 몬스터 초기화 (HP, 보상 골드 설정)
var
stage
:
int
=
GameManager
.
current_stage
var
monster_hp
:
float
=
100.0
+
(
stage
-
1
)
*
50.0
var
monster_gold
:
int
=
_
get_monster_gold_reward
(
stage
)
var
monster_hp
:
float
=
DataManager
.
get_monster_hp
(
stage
)
var
monster_gold
:
int
=
DataManager
.
get_monster_gold_reward
(
stage
)
if
monster_instance
.
has_method
(
"initialize_monster"
):
monster_instance
.
call
(
"initialize_monster"
,
monster_hp
,
monster_gold
)
...
...
@@ -118,12 +118,3 @@ func _on_active_monster_count_changed(count: int) -> void:
# 다음 스테이지로 상태 전이
GameManager
.
current_stage
+=
1
_start_next_stage_cooldown
(
5.0
)
## 스테이지별 몬스터 처치 보상 골드 테이블 (game_design.md 참고)
func
_get_monster_gold_reward
(
stage
:
int
)
->
int
:
if
stage
>=
20
:
return
100
elif
stage
>=
15
:
return
60
+
(
stage
-
15
)
*
8
elif
stage
>=
10
:
return
40
+
(
stage
-
10
)
*
4
elif
stage
>=
5
:
return
25
+
(
stage
-
5
)
*
3
elif
stage
>=
2
:
return
18
+
(
stage
-
2
)
*
2
else
:
return
15
src/ui/hud.gd
View file @
65e74a22
...
...
@@ -15,12 +15,9 @@ extends Control
@
onready
var
result_title
:
Label
=
$
ResultPopup
/
ResultTitle
@
onready
var
restart_button
:
Button
=
$
ResultPopup
/
RestartButton
# 5가지 유닛 능력치 리소스 템플릿 배열
var
_unit_templates
:
Array
[
UnitData
]
=
[]
func
_ready
()
->
void
:
# 5종 유닛 리소스 템플릿 빌드
_initialize_unit_templates
()
# GameManager 시그널 핸들러 등록
GameManager
.
gold_changed
.
connect
(
_on_gold_changed
)
...
...
@@ -39,68 +36,6 @@ func _ready() -> void:
_on_stage_changed
(
GameManager
.
current_stage
)
_on_monster_changed
(
GameManager
.
active_monster_count
)
## 5종의 유닛 능력치 데이터 초기 셋업
func
_initialize_unit_templates
()
->
void
:
# 1. Striker (연사형 근접 유닛)
var
striker
:
UnitData
=
UnitData
.
new
()
striker
.
unit_id
=
"Unit_Striker"
striker
.
unit_name
=
"Striker"
striker
.
damage
=
12.0
striker
.
cooldown
=
0.5
striker
.
move_speed
=
10.0
striker
.
attack_range
=
1.5
striker
.
is_ranged
=
false
striker
.
unit_color
=
Color
(
0.12
,
0.45
,
0.85
,
1.0
)
# 청색
_unit_templates
.
append
(
striker
)
# 2. Guardian (밸런스형 근접 유닛)
#var guardian: UnitData = UnitData.new()
#guardian.unit_id = "Unit_Guardian"
#guardian.unit_name = "Guardian"
#guardian.damage = 25.0
#guardian.cooldown = 1.0
#guardian.move_speed = 4.0
#guardian.attack_range = 1.5
#guardian.is_ranged = false
#guardian.unit_color = Color(0.85, 0.65, 0.12, 1.0) # 황금색
#_unit_templates.append(guardian)
# 3. Ranger (원거리 유닛)
#var ranger: UnitData = UnitData.new()
#ranger.unit_id = "Unit_Ranger"
#ranger.unit_name = "Ranger"
#ranger.damage = 18.0
#ranger.cooldown = 0.8
#ranger.move_speed = 4.5
#ranger.attack_range = 10.0
#ranger.is_ranged = true
#ranger.unit_color = Color(0.12, 0.75, 0.25, 1.0) # 녹색
#_unit_templates.append(ranger)
#
## 4. Slayer (고화력 대형 유닛)
#var slayer: UnitData = UnitData.new()
#slayer.unit_id = "Unit_Slayer"
#slayer.unit_name = "Slayer"
#slayer.damage = 55.0
#slayer.cooldown = 1.8
#slayer.move_speed = 3.5
#slayer.attack_range = 1.6
#slayer.is_ranged = false
#slayer.unit_color = Color(0.85, 0.12, 0.12, 1.0) # 진적색
#_unit_templates.append(slayer)
#
## 5. Archmage (극단적 극딜 마법 유닛)
#var archmage: UnitData = UnitData.new()
#archmage.unit_id = "Unit_Archmage"
#archmage.unit_name = "Archmage"
#archmage.damage = 110.0
#archmage.cooldown = 3.0
#archmage.move_speed = 3.0
#archmage.attack_range = 12.0
#archmage.is_ranged = true
#archmage.unit_color = Color(0.55, 0.12, 0.85, 1.0) # 보라색
#_unit_templates.append(archmage)
# 골드 UI 갱신 및 소환 한도 검증
func
_on_gold_changed
(
gold
:
int
)
->
void
:
gold_label
.
text
=
"GOLD: "
+
str
(
gold
)
+
" G"
...
...
@@ -133,8 +68,8 @@ func _on_spawn_pressed() -> void:
# 골드 비용 소모 시도
if
GameManager
.
spend_gold
(
GameManager
.
unit_spawn_cost
):
# 20% 동일 확률로 5종 유닛 중 무작위 1개 선정
var
random_index
:
int
=
randi
()
%
_
unit_templates
.
size
()
var
chosen_template
:
UnitData
=
_
unit_templates
[
random_index
]
var
random_index
:
int
=
randi
()
%
DataManager
.
unit_templates
.
size
()
var
chosen_template
:
UnitData
=
DataManager
.
unit_templates
[
random_index
]
# 유닛 객체 스폰 (Striker 및 Guardian 전용 씬 분기 분할)
var
target_scene
:
PackedScene
=
base_unit_scene
...
...
todo.md
View file @
65e74a22
...
...
@@ -54,3 +54,5 @@
-
[
x
]
`hud.gd`
에 중복되어 존재하던 유닛 ID 버그를 일괄 픽스하고, 가디언 유닛 소환 시
`guardian_unit.tscn`
이 씬 분기로 올바르게 로드되도록 연동 완료
-
[
x
]
사용자가 직접
`striker_unit.tscn`
에서 모델 회전 보정을 적용한 상태를 인지하고, 스크립트(
`base_unit.gd`
)의 수동 Y축 회전 코드를 완벽히 제거
-
[
x
]
Striker 유닛 오른손 본(
`RightHand`
)에
`BoneAttachment3D`
노드를 런타임 동적 배치하고
`azure_blade.fbx`
검 무기를 장착 및 텍스처를 씌우는 기능 구현 완료
-
[
x
]
`DataManager`
싱글톤 신설 및 오토로드 등록을 완료하여 유닛 데이터(5종 스펙)와 몬스터 데이터(HP 스케일링, 보상 테이블)를 통합 분리
-
[
x
]
`hud.gd`
및
`stage_manager.gd`
에서 하드코딩되었던 데이터 조작 로직들을 걷어내고
`DataManager`
를 참조하도록 리팩토링 완수
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment