Decompose move.go; traps become a handler table (refactor step 7)
The be_trapped switch becomes gameData.trapHandlers with one trap* method per trap kind (mystery messages split in two); moveHero splits into moveTarget/moveResolve/moveEnter/moveOnto/offMap; passageTurn gains per-axis passageTurnVertical/Horizontal. move.go is complexity-clean. Behavior and RNG call order unchanged.
This commit is contained in:
@@ -147,6 +147,10 @@ type gameData struct {
|
||||
// cases of the big command.c switch. Keys that re-dispatch (runs,
|
||||
// fight, repeat, move-on) and wizard keys stay in dispatchKey.
|
||||
commandHandlers map[byte]func(g *RogueGame)
|
||||
|
||||
// trapHandlers dispatches each sprung trap to its effect method:
|
||||
// the cases of the move.c be_trapped switch.
|
||||
trapHandlers [NumTrapTypes]func(g *RogueGame, tc Coord)
|
||||
}
|
||||
|
||||
// ripWall is the repeated blank wall line of the tombstone art.
|
||||
@@ -811,6 +815,17 @@ func newGameData() *gameData {
|
||||
g.After = false
|
||||
},
|
||||
},
|
||||
|
||||
trapHandlers: [NumTrapTypes]func(*RogueGame, Coord){
|
||||
TrapDoor: (*RogueGame).trapFall,
|
||||
TrapArrow: (*RogueGame).trapArrow,
|
||||
TrapSleep: (*RogueGame).trapSleep,
|
||||
TrapBear: (*RogueGame).trapBear,
|
||||
TrapTeleport: (*RogueGame).trapTeleport,
|
||||
TrapDart: (*RogueGame).trapDart,
|
||||
TrapRust: (*RogueGame).trapRust,
|
||||
TrapMystery: (*RogueGame).trapMystery,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user