2.9 KiB
Code Review Findings
Fixed
1. Camera and PlayerController input conflict
Files: scripts/camera_controller.gd, nodes/player_controller.gd
Both scripts used _unhandled_input with left mouse button. The camera used left click for dragging and never called set_input_as_handled(), so every left click also triggered unit selection/movement. Fixed with a drag threshold and click-on-release pattern.
Outstanding
2. Unit lookup is fragile
File: nodes/player_controller.gd:75
_get_unit_at() iterates get_parent().get_children() to find units. This couples the controller to a specific scene tree layout and will degrade as the scene grows.
Fix: Use a group ("units") or a dedicated unit registry so lookup doesn't depend on parent structure.
3. No pathfinding — movement can skip walls diagonally
File: nodes/player_controller.gd:45-60
Step-by-step movement picks one axis per frame. If the goal is diagonally past an L-shaped wall, the unit can path around it depending on approach angle since only the next immediate tile is checked.
Fix: Implement BFS/A* on the grid, or at minimum validate the full path before starting movement.
4. CombatMap extends CanvasItem instead of Node2D (fixed)
File: nodes/combat_map.gd:2
Changed to extend Node2D.
5. Inconsistent naming convention (fixed)
File: nodes/combat_map.gd:16
Renamed tileCoords to tile_coords.
6. unit_template is a string path, not a PackedScene (fixed)
File: scripts/test_map_generator.gd:7
Changed to @export var unit_template: PackedScene and removed the load() call. Note: The scene must be assigned in the Godot inspector on the TestMapGenerator node.
7. No current_hp on units (fixed)
File: nodes/unit.gd
Added current_hp variable, initialized to max_hp in _ready().
8. Debug print left in production code (fixed)
File: scripts/test_map_generator.gd
Removed the debug print() call.
9. tile_highlight.gd runs every frame unconditionally
File: scripts/tile_highlight.gd:12-17
_process updates position and alpha every frame even when the highlight is hidden. Could skip processing when invisible via set_process(false) on hide.
10. GridOverlay is wired but unused
Files: scripts/grid_overlay.gd, nodes/combat_map.gd:6
highlight_map reference exists but is never called from any game logic. Dead code at the moment.
Priority
| Priority | Issue |
|---|---|
| High | #3 Wall-skipping movement |
| Medium | #2 Fragile unit lookup |
| Low | #9, #10 |