fix: revert // to / in deck.gd (GDScript 4 does not support // operator)

The INTEGER_DIVISION warning in deck.gd:19 is a false positive - both
operands are int, so / performs integer division correctly in GDScript 4.
Using // caused a parse error (Expected expression after '/' operator),
which cascaded to GameController/TrainingController resolution failure.
This commit is contained in:
xiaji
2026-05-30 08:01:07 +08:00
parent f4a2686810
commit bad46b0109
37 changed files with 422 additions and 1 deletions

1
.godot/.gdignore Normal file
View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,73 @@
[docks]
dock_3_selected_tab_idx=0
dock_4_selected_tab_idx=0
dock_5_selected_tab_idx=0
dock_floating={}
dock_closed=[]
dock_split_2=0
dock_split_3=0
dock_hsplit_1=0
dock_hsplit_2=280
dock_hsplit_3=-280
dock_hsplit_4=0
dock_9_selected_tab_idx=1
dock_3="Scene,Import"
dock_4="FileSystem,History"
dock_5="Inspector,Signals,Groups"
dock_9="Output,Debugger,Audio,Animation,Shader Editor,Search Results,AnimationTree,ResourcePreloader,ShaderFile,SpriteFrames,Theme,Polygon,TileSet,TileMap,Replication,GridMap"
[docks/FileSystem]
h_split_offset=240
v_split_offset=0
display_mode=0
file_sort=0
file_list_display_mode=1
selected_paths=PackedStringArray("res://")
uncollapsed_paths=PackedStringArray("Favorites", "res://")
[docks/History]
include_scene=true
include_global=true
[EditorNode]
open_scenes=PackedStringArray("res://src/ui/scenes/main_menu.tscn")
current_scene="res://src/ui/scenes/main_menu.tscn"
bottom_panel_offsets={
"Audio": -450,
"Debugger": 0,
"Output": 0
}
selected_default_debugger_tab_idx=0
selected_main_editor_idx=2
[EditorWindow]
screen=0
mode="windowed"
position=Vector2i(1331, 150)
size=Vector2i(1152, 648)
[ScriptEditor]
open_scripts=["res://src/game/training_controller.gd"]
selected_script="res://src/game/training_controller.gd"
open_help=[]
script_split_offset=200
list_split_offset=0
zoom_factor=1.0
[GameView]
floating_window_rect=Rect2i(634, 142, 1292, 740)
floating_window_screen=0
[ShaderEditor]
open_shaders=[]
split_offset=200
selected_shader=""
text_shader_zoom_factor=1.0

View File

@@ -0,0 +1,59 @@
63f7b34db8d8cdea90c76aacccf841ec
::res://::1780099064
check_errors.txt::TextFile::-1::1780067435::0::1::::<><><>0<>0<><>::
check_output.txt::TextFile::-1::1780067436::0::1::::<><><>0<>0<><>::
README.md::TextFile::-1::1780058809::0::1::::<><><>0<>0<><>::
run_errors.txt::TextFile::-1::1780099036::0::1::::<><><>0<>0<><>::
run_output.txt::TextFile::-1::1780099036::0::1::::<><><>0<>0<><>::
::res://addons/::1780019826
::res://docs/::1779979748
::res://docs/superpowers/::1780013039
::res://docs/superpowers/plans/::1780013236
2026-05-28-guandan-training-mode.md::TextFile::-1::1780013236::0::1::::<><><>0<>0<><>::
::res://docs/superpowers/specs/::1779979781
2026-05-28-guandan-card-game-design.md::TextFile::-1::1779982163::0::1::::<><><>0<>0<><>::
::res://src/::1780017254
::res://src/ai/::1780066437
base_ai.gd::GDScript::393918515999702918::1780020075::0::1::::BaseAI<>RefCounted<><>0<>0<><>::
l1_basic_ai.gd::GDScript::3824293036085027691::1780020020::0::1::::L1BasicAI<>BaseAI<><>0<>0<><>::
l2_rule_ai.gd::GDScript::2394058896228022033::1780066437::0::1::::L2RuleAI<>BaseAI<><>0<>0<><>::
::res://src/autoload/::1780097357
audio_manager.gd::GDScript::358732800655427921::1780097357::0::1::::<>Node<><>0<>0<><>::
config.gd::GDScript::2812499630245000571::1780017185::0::1::::<>Node<><>0<>0<><>::
event_bus.gd::GDScript::5265213255942945415::1780097205::0::1::::<>Node<><>0<>0<><>::
::res://src/core/::1780098678
actions.gd::GDScript::5385093260602373151::1780017019::0::1::::Actions<>RefCounted<><>0<>0<><>::
card.gd::GDScript::5722482673676396107::1780098655::0::1::::Card<>RefCounted<><>0<>0<><>::
constants.gd::GDScript::1018983800197122308::1780016790::0::1::::<>RefCounted<><>0<>0<><>::
deck.gd::GDScript::7625729605329324812::1780098687::0::1::::Deck<>RefCounted<><>0<>0<><>::
game_state.gd::GDScript::1313773448155235731::1780017031::0::1::::GameState<>RefCounted<><>0<>0<><>::
hand_evaluator.gd::GDScript::2941013735155443621::1780019993::0::1::::HandEvaluator<>RefCounted<><>0<>0<><>::
move_generator.gd::GDScript::4717501802299714497::1780067204::0::1::::MoveGenerator<>RefCounted<><>0<>0<><>::
round.gd::GDScript::4048136154956438979::1780017022::0::1::::Round<>RefCounted<><>0<>0<><>::
rule_config.gd::GDScript::5834083765288513466::1780016802::0::1::::RuleConfig<>RefCounted<><>0<>0<><>::
rule_engine.gd::GDScript::1125035198888330416::1780017015::0::1::::RuleEngine<>RefCounted<><>0<>0<><>::
::res://src/game/::1780098917
game_controller.gd::GDScript::7404956464888235868::1780065068::0::1::::GameController<>Node<><>0<>0<><>::
replay_recorder.gd::GDScript::2551932574825654942::1780017203::0::1::::<>Node<><>0<>0<><>::
training_controller.gd::GDScript::1120733736618609603::1780098917::0::1::::TrainingController<>GameController<><>0<>0<><>::
::res://src/ui/::1780017254
::res://src/ui/components/::1780066437
card_node.gd::GDScript::1700562391934990522::1780066437::0::1::::CardNode<>Control<><>0<>0<><>::
card_node.tscn::PackedScene::-1::1780017273::0::1::::<><><>0<>0<><>::res://src/ui/components/card_node.gd
hand_area.gd::GDScript::8635681064847839428::1780059588::0::1::::HandArea<>HBoxContainer<><>0<>0<><>::
hand_area.tscn::PackedScene::-1::1780017274::0::1::::<><><>0<>0<><>::res://src/ui/components/hand_area.gd
::res://src/ui/scenes/::1780066437
main_menu.gd::GDScript::8687373002954932151::1780061851::0::1::::<>Control<><>0<>0<><>::
main_menu.tscn::PackedScene::-1::1780017280::0::1::::<><><>0<>0<><>::res://src/ui/scenes/main_menu.gd
training_room.gd::GDScript::1431432233075994614::1780066437::0::1::::<>Control<><>0<>0<><>::
training_room.tscn::PackedScene::-1::1780060957::0::1::::<><><>0<>0<><>::res://src/ui/scenes/training_room.gd<>res://src/ui/components/hand_area.gd
::res://tests/::1780059239
hello.gd::GDScript::801214535407504309::1780020576::0::1::::<>Node<><>0<>0<><>::
quick_test.gd::GDScript::8419040576856027441::1780020535::0::1::::<>Node<><>0<>0<><>::
run_validation.gd::GDScript::5977040163953791705::1780019872::0::1::::<>Node<><>0<>0<><>::
test_cards.gd::GDScript::3474674096739086510::1780017322::0::1::::<>GutTest<><>0<>0<><>::
test_deck.gd::GDScript::5372822746484118668::1780017327::0::1::::<>GutTest<><>0<>0<><>::
test_game_state.gd::GDScript::5310760542796422668::1780017346::0::1::::<>GutTest<><>0<>0<><>::
test_hand_evaluator.gd::GDScript::5064547684838000492::1780017338::0::1::::<>GutTest<><>0<>0<><>::
test_rule_engine.gd::GDScript::1242756042438170058::1780017356::0::1::::<>GutTest<><>0<>0<><>::
validate_project.gd::GDScript::2810346865604840601::1780019501::0::1::::<>RefCounted<><>0<>0<><>::

View File

@@ -0,0 +1,5 @@
[folding]
node_unfolds=[NodePath("."), PackedStringArray("Layout"), NodePath("VBoxContainer"), PackedStringArray("Layout"), NodePath("VBoxContainer/StartButton"), PackedStringArray("Layout"), NodePath("VBoxContainer/QuitButton"), PackedStringArray("Layout")]
resource_unfolds=[]
nodes_folded=[]

View File

@@ -0,0 +1,13 @@
[res://src/game/training_controller.gd]
state={
"bookmarks": PackedInt32Array(),
"breakpoints": PackedInt32Array(),
"column": 0,
"folded_lines": PackedInt32Array(),
"h_scroll_position": 0,
"row": 1,
"scroll_position": 1.0,
"selection": false,
"syntax_highlighter": "GDScript"
}

View File

@@ -0,0 +1,129 @@
list=[{
"base": &"RefCounted",
"class": &"Actions",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/actions.gd"
}, {
"base": &"RefCounted",
"class": &"BaseAI",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/ai/base_ai.gd"
}, {
"base": &"RefCounted",
"class": &"Card",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/card.gd"
}, {
"base": &"Control",
"class": &"CardNode",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/ui/components/card_node.gd"
}, {
"base": &"RefCounted",
"class": &"Deck",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/deck.gd"
}, {
"base": &"Node",
"class": &"GameController",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/game/game_controller.gd"
}, {
"base": &"RefCounted",
"class": &"GameState",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/game_state.gd"
}, {
"base": &"HBoxContainer",
"class": &"HandArea",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/ui/components/hand_area.gd"
}, {
"base": &"RefCounted",
"class": &"HandEvaluator",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/hand_evaluator.gd"
}, {
"base": &"BaseAI",
"class": &"L1BasicAI",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/ai/l1_basic_ai.gd"
}, {
"base": &"BaseAI",
"class": &"L2RuleAI",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/ai/l2_rule_ai.gd"
}, {
"base": &"RefCounted",
"class": &"MoveGenerator",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/move_generator.gd"
}, {
"base": &"RefCounted",
"class": &"Round",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/round.gd"
}, {
"base": &"RefCounted",
"class": &"RuleConfig",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/rule_config.gd"
}, {
"base": &"RefCounted",
"class": &"RuleEngine",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/core/rule_engine.gd"
}, {
"base": &"GameController",
"class": &"TrainingController",
"icon": "",
"is_abstract": false,
"is_tool": false,
"language": &"GDScript",
"path": "res://src/game/training_controller.gd"
}]

View File

BIN
.godot/uid_cache.bin Normal file

Binary file not shown.